@antelopejs/dms-database 0.0.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.
Files changed (164) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +53 -0
  3. package/dist/automation/index.d.ts +2 -0
  4. package/dist/automation/index.js +13 -0
  5. package/dist/automation/index.js.map +1 -0
  6. package/dist/automation/tableWatch.d.ts +17 -0
  7. package/dist/automation/tableWatch.js +189 -0
  8. package/dist/automation/tableWatch.js.map +1 -0
  9. package/dist/config.d.ts +7 -0
  10. package/dist/config.js +12 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/db/index.d.ts +2 -0
  13. package/dist/db/index.js +19 -0
  14. package/dist/db/index.js.map +1 -0
  15. package/dist/db/models/diagram_layouts.model.d.ts +25 -0
  16. package/dist/db/models/diagram_layouts.model.js +29 -0
  17. package/dist/db/models/diagram_layouts.model.js.map +1 -0
  18. package/dist/db/models/diagram_notes.model.d.ts +23 -0
  19. package/dist/db/models/diagram_notes.model.js +15 -0
  20. package/dist/db/models/diagram_notes.model.js.map +1 -0
  21. package/dist/db/models/index.d.ts +4 -0
  22. package/dist/db/models/index.js +21 -0
  23. package/dist/db/models/index.js.map +1 -0
  24. package/dist/db/models/query_history.model.d.ts +25 -0
  25. package/dist/db/models/query_history.model.js +33 -0
  26. package/dist/db/models/query_history.model.js.map +1 -0
  27. package/dist/db/models/saved_queries.model.d.ts +24 -0
  28. package/dist/db/models/saved_queries.model.js +21 -0
  29. package/dist/db/models/saved_queries.model.js.map +1 -0
  30. package/dist/db/tables/diagram_layouts.table.d.ts +7 -0
  31. package/dist/db/tables/diagram_layouts.table.js +35 -0
  32. package/dist/db/tables/diagram_layouts.table.js.map +1 -0
  33. package/dist/db/tables/diagram_notes.table.d.ts +13 -0
  34. package/dist/db/tables/diagram_notes.table.js +59 -0
  35. package/dist/db/tables/diagram_notes.table.js.map +1 -0
  36. package/dist/db/tables/index.d.ts +4 -0
  37. package/dist/db/tables/index.js +21 -0
  38. package/dist/db/tables/index.js.map +1 -0
  39. package/dist/db/tables/query_history.table.d.ts +11 -0
  40. package/dist/db/tables/query_history.table.js +54 -0
  41. package/dist/db/tables/query_history.table.js.map +1 -0
  42. package/dist/db/tables/saved_queries.table.d.ts +12 -0
  43. package/dist/db/tables/saved_queries.table.js +58 -0
  44. package/dist/db/tables/saved_queries.table.js.map +1 -0
  45. package/dist/index.d.ts +8 -0
  46. package/dist/index.js +56 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/pages/data.d.ts +9 -0
  49. package/dist/pages/data.js +29 -0
  50. package/dist/pages/data.js.map +1 -0
  51. package/dist/pages/index.d.ts +4 -0
  52. package/dist/pages/index.js +21 -0
  53. package/dist/pages/index.js.map +1 -0
  54. package/dist/pages/overview.d.ts +9 -0
  55. package/dist/pages/overview.js +29 -0
  56. package/dist/pages/overview.js.map +1 -0
  57. package/dist/pages/query.d.ts +9 -0
  58. package/dist/pages/query.js +29 -0
  59. package/dist/pages/query.js.map +1 -0
  60. package/dist/pages/schemas.d.ts +9 -0
  61. package/dist/pages/schemas.js +29 -0
  62. package/dist/pages/schemas.js.map +1 -0
  63. package/dist/routes/data.d.ts +25 -0
  64. package/dist/routes/data.js +324 -0
  65. package/dist/routes/data.js.map +1 -0
  66. package/dist/routes/diagram.d.ts +47 -0
  67. package/dist/routes/diagram.js +200 -0
  68. package/dist/routes/diagram.js.map +1 -0
  69. package/dist/routes/health.d.ts +6 -0
  70. package/dist/routes/health.js +35 -0
  71. package/dist/routes/health.js.map +1 -0
  72. package/dist/routes/index.d.ts +6 -0
  73. package/dist/routes/index.js +23 -0
  74. package/dist/routes/index.js.map +1 -0
  75. package/dist/routes/query.d.ts +26 -0
  76. package/dist/routes/query.js +245 -0
  77. package/dist/routes/query.js.map +1 -0
  78. package/dist/routes/schemas.d.ts +8 -0
  79. package/dist/routes/schemas.js +35 -0
  80. package/dist/routes/schemas.js.map +1 -0
  81. package/dist/routes/tables.d.ts +23 -0
  82. package/dist/routes/tables.js +94 -0
  83. package/dist/routes/tables.js.map +1 -0
  84. package/dist/service/fieldDescriptor.d.ts +66 -0
  85. package/dist/service/fieldDescriptor.js +156 -0
  86. package/dist/service/fieldDescriptor.js.map +1 -0
  87. package/dist/service/health.d.ts +20 -0
  88. package/dist/service/health.js +58 -0
  89. package/dist/service/health.js.map +1 -0
  90. package/dist/service/introspect.d.ts +6 -0
  91. package/dist/service/introspect.js +312 -0
  92. package/dist/service/introspect.js.map +1 -0
  93. package/dist/service/schemaLabels.d.ts +7 -0
  94. package/dist/service/schemaLabels.js +39 -0
  95. package/dist/service/schemaLabels.js.map +1 -0
  96. package/dist/service/schemaRegistry.d.ts +2 -0
  97. package/dist/service/schemaRegistry.js +8 -0
  98. package/dist/service/schemaRegistry.js.map +1 -0
  99. package/dist/service/stagedSerialization.d.ts +6 -0
  100. package/dist/service/stagedSerialization.js +54 -0
  101. package/dist/service/stagedSerialization.js.map +1 -0
  102. package/dist/service/types.d.ts +67 -0
  103. package/dist/service/types.js +3 -0
  104. package/dist/service/types.js.map +1 -0
  105. package/dist/types/constants.d.ts +3 -0
  106. package/dist/types/constants.js +7 -0
  107. package/dist/types/constants.js.map +1 -0
  108. package/dist/types/responses.d.ts +14 -0
  109. package/dist/types/responses.js +3 -0
  110. package/dist/types/responses.js.map +1 -0
  111. package/dist/utils/query.d.ts +17 -0
  112. package/dist/utils/query.js +116 -0
  113. package/dist/utils/query.js.map +1 -0
  114. package/dist/utils/requestValidation.d.ts +2 -0
  115. package/dist/utils/requestValidation.js +14 -0
  116. package/dist/utils/requestValidation.js.map +1 -0
  117. package/frontend-vue/.editorconfig +12 -0
  118. package/frontend-vue/.prettierrc +11 -0
  119. package/frontend-vue/app/components/DataBrowserSidebar.vue +254 -0
  120. package/frontend-vue/app/components/DataBrowserTabBar.vue +166 -0
  121. package/frontend-vue/app/components/DataGrid.vue +735 -0
  122. package/frontend-vue/app/components/DataGridCell.vue +147 -0
  123. package/frontend-vue/app/components/DataGridHeaderCell.vue +175 -0
  124. package/frontend-vue/app/components/DiagramNoteNode.vue +100 -0
  125. package/frontend-vue/app/components/DiagramRelationEdge.vue +62 -0
  126. package/frontend-vue/app/components/DiagramStubNode.vue +37 -0
  127. package/frontend-vue/app/components/DiagramTableNode.vue +94 -0
  128. package/frontend-vue/app/components/JsonCellPanel.vue +93 -0
  129. package/frontend-vue/app/components/QueryBuilderPanel.vue +501 -0
  130. package/frontend-vue/app/components/QueryFavoritesPanel.vue +127 -0
  131. package/frontend-vue/app/components/QueryHistoryPanel.vue +134 -0
  132. package/frontend-vue/app/components/QueryResultPanel.vue +204 -0
  133. package/frontend-vue/app/components/SchemaDiagram.vue +1150 -0
  134. package/frontend-vue/app/components/SchemaTableInspector.vue +278 -0
  135. package/frontend-vue/app/composables/useDataBrowserGrid.ts +162 -0
  136. package/frontend-vue/app/composables/useDataBrowserTabs.ts +255 -0
  137. package/frontend-vue/app/composables/useDatabaseHealth.ts +50 -0
  138. package/frontend-vue/app/composables/useDatabaseSchemas.ts +92 -0
  139. package/frontend-vue/app/composables/useDiagramPersistence.ts +99 -0
  140. package/frontend-vue/app/composables/useQueryRuntime.ts +118 -0
  141. package/frontend-vue/app/composables/useQueryStore.ts +117 -0
  142. package/frontend-vue/app/composables/useTableViewRowClick.ts +22 -0
  143. package/frontend-vue/app/custom-pages/database/data.vue +42 -0
  144. package/frontend-vue/app/custom-pages/database/overview.vue +367 -0
  145. package/frontend-vue/app/custom-pages/database/query.vue +432 -0
  146. package/frontend-vue/app/custom-pages/database/schemas.vue +216 -0
  147. package/frontend-vue/app/utils/databaseFieldModifiers.ts +33 -0
  148. package/frontend-vue/app/utils/databaseFieldTypeIcons.ts +224 -0
  149. package/frontend-vue/app/utils/dmsTableView.ts +83 -0
  150. package/frontend-vue/app/utils/relativeTime.ts +15 -0
  151. package/frontend-vue/app/utils/stagedSerialization.ts +91 -0
  152. package/frontend-vue/dms.frontend.ts +38 -0
  153. package/frontend-vue/eslint.config.mjs +16 -0
  154. package/frontend-vue/i18n/locales/database-en-GB.json +239 -0
  155. package/frontend-vue/i18n/locales/database-fr-FR.json +239 -0
  156. package/frontend-vue/package.json +42 -0
  157. package/frontend-vue/pnpm-lock.yaml +5819 -0
  158. package/frontend-vue/pnpm-workspace.yaml +2 -0
  159. package/frontend-vue/tests/persistence.test.ts +70 -0
  160. package/frontend-vue/tests/queryRuntime.test.ts +53 -0
  161. package/frontend-vue/tests/registration.test.ts +33 -0
  162. package/frontend-vue/tsconfig.json +13 -0
  163. package/frontend-vue/vitest.config.ts +5 -0
  164. package/package.json +78 -0
@@ -0,0 +1,312 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listSchemaSummaries = listSchemaSummaries;
4
+ exports.getTableElementCount = getTableElementCount;
5
+ exports.listSchemaSummariesWithStats = listSchemaSummariesWithStats;
6
+ exports.getTablePrimaryKey = getTablePrimaryKey;
7
+ const logging_1 = require("@antelopejs/interface-core/logging");
8
+ const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
9
+ const config_1 = require("../config");
10
+ const fieldDescriptor_1 = require("./fieldDescriptor");
11
+ const schemaLabels_1 = require("./schemaLabels");
12
+ const schemaRegistry_1 = require("./schemaRegistry");
13
+ const STATS_TTL_MS = 30_000;
14
+ const FIELDS_TTL_MS = 30_000;
15
+ const FIELD_INFERENCE_SAMPLE_SIZE = 5;
16
+ const UNKNOWN_DESCRIPTOR = { kind: "unknown" };
17
+ const warnedRelations = new Set();
18
+ function warnOnce(key, message) {
19
+ if (warnedRelations.has(key))
20
+ return;
21
+ warnedRelations.add(key);
22
+ logging_1.Logging.Warn(`[dms-database] ${message}`);
23
+ }
24
+ function resolveRelations(schemaId, tableName, TableClass) {
25
+ const meta = (0, interface_database_decorators_1.getMetadata)(TableClass, interface_database_decorators_1.RelationStaticMetadata, true);
26
+ const out = [];
27
+ for (const [fromField, options] of Object.entries(meta.relations)) {
28
+ const warnKey = `${schemaId}::${tableName}::${fromField}`;
29
+ let TargetClass;
30
+ try {
31
+ TargetClass = options.to();
32
+ }
33
+ catch (err) {
34
+ warnOnce(warnKey, `relation ${warnKey} target thunk threw: ${err.message}`);
35
+ continue;
36
+ }
37
+ if (typeof TargetClass !== "function") {
38
+ warnOnce(warnKey, `relation ${warnKey} target is not a class`);
39
+ continue;
40
+ }
41
+ const targetMeta = (0, interface_database_decorators_1.getMetadata)(TargetClass, interface_database_decorators_1.DatumStaticMetadata, true);
42
+ if (!targetMeta.schemaName || !targetMeta.tableName) {
43
+ warnOnce(warnKey, `relation ${warnKey} target lacks @RegisterTable`);
44
+ continue;
45
+ }
46
+ out.push({
47
+ fromField,
48
+ toSchema: targetMeta.schemaName,
49
+ toTable: targetMeta.tableName,
50
+ toField: options.toField ?? targetMeta.primary,
51
+ many: !!options.many,
52
+ });
53
+ }
54
+ return out;
55
+ }
56
+ function resolveModifiers(TableClass) {
57
+ if (!TableClass)
58
+ return {};
59
+ const meta = (0, interface_database_decorators_1.getMetadata)(TableClass, interface_database_decorators_1.ModifiersStaticMetadata, true);
60
+ const out = {};
61
+ for (const [fieldName, mods] of Object.entries(meta.fields ?? {})) {
62
+ if (!mods || mods.length === 0)
63
+ continue;
64
+ out[fieldName] = mods.map((m) => m.id);
65
+ }
66
+ return out;
67
+ }
68
+ const fieldsCache = new Map();
69
+ function inferFieldType(value) {
70
+ if (value === null || value === undefined)
71
+ return undefined;
72
+ if (value instanceof Date)
73
+ return { kind: "date" };
74
+ if (Array.isArray(value))
75
+ return { kind: "array" };
76
+ if (typeof value === "object")
77
+ return { kind: "object", fields: {} };
78
+ if (typeof value === "string")
79
+ return { kind: "string" };
80
+ if (typeof value === "number")
81
+ return { kind: "number" };
82
+ if (typeof value === "boolean")
83
+ return { kind: "boolean" };
84
+ return undefined;
85
+ }
86
+ async function inferTableFields(schemaId, schema, tableName) {
87
+ const cacheKey = `${schemaId}::${tableName}`;
88
+ const cached = fieldsCache.get(cacheKey);
89
+ const now = Date.now();
90
+ if (cached && cached.expiresAt > now)
91
+ return cached.value;
92
+ const inferred = {};
93
+ try {
94
+ const sample = await schema
95
+ .instance()
96
+ .table(tableName)
97
+ .slice(0, FIELD_INFERENCE_SAMPLE_SIZE);
98
+ for (const row of sample) {
99
+ if (!row || typeof row !== "object")
100
+ continue;
101
+ for (const [key, value] of Object.entries(row)) {
102
+ if (key in inferred)
103
+ continue;
104
+ const type = inferFieldType(value);
105
+ if (type !== undefined)
106
+ inferred[key] = type;
107
+ }
108
+ }
109
+ }
110
+ catch {
111
+ }
112
+ fieldsCache.set(cacheKey, {
113
+ value: inferred,
114
+ expiresAt: now + FIELDS_TTL_MS,
115
+ });
116
+ return inferred;
117
+ }
118
+ function mapDesignType(ctor) {
119
+ if (ctor === String)
120
+ return { kind: "string" };
121
+ if (ctor === Number)
122
+ return { kind: "number" };
123
+ if (ctor === Boolean)
124
+ return { kind: "boolean" };
125
+ if (ctor === Date)
126
+ return { kind: "date" };
127
+ if (ctor === Array)
128
+ return { kind: "array" };
129
+ return undefined;
130
+ }
131
+ function collectDecoratedFields(TableClass) {
132
+ const ordered = [];
133
+ const seen = new Set();
134
+ const push = (name) => {
135
+ if (!name || seen.has(name))
136
+ return;
137
+ seen.add(name);
138
+ ordered.push(name);
139
+ };
140
+ try {
141
+ const instance = new TableClass();
142
+ for (const name of Object.keys(instance))
143
+ push(name);
144
+ }
145
+ catch {
146
+ }
147
+ const datumMeta = (0, interface_database_decorators_1.getMetadata)(TableClass, interface_database_decorators_1.DatumStaticMetadata, true);
148
+ if (datumMeta.primary && !seen.has(datumMeta.primary)) {
149
+ seen.add(datumMeta.primary);
150
+ ordered.unshift(datumMeta.primary);
151
+ }
152
+ for (const fields of Object.values(datumMeta.indexes)) {
153
+ for (const name of fields)
154
+ push(name);
155
+ }
156
+ const relationMeta = (0, interface_database_decorators_1.getMetadata)(TableClass, interface_database_decorators_1.RelationStaticMetadata, true);
157
+ for (const name of Object.keys(relationMeta.relations))
158
+ push(name);
159
+ const modifierMeta = (0, interface_database_decorators_1.getMetadata)(TableClass, interface_database_decorators_1.ModifiersStaticMetadata, true);
160
+ for (const name of Object.keys(modifierMeta.fields ?? {}))
161
+ push(name);
162
+ const types = {};
163
+ for (const name of ordered) {
164
+ const ctor = Reflect.getMetadata("design:type", TableClass.prototype, name);
165
+ const mapped = mapDesignType(ctor);
166
+ if (mapped !== undefined)
167
+ types[name] = mapped;
168
+ }
169
+ return { ordered, types };
170
+ }
171
+ async function summarizeTable(id, schema, tableName, def, tableClasses) {
172
+ const TableClass = tableClasses?.[tableName];
173
+ const relations = TableClass
174
+ ? resolveRelations(id, tableName, TableClass)
175
+ : [];
176
+ const declared = TableClass
177
+ ? collectDecoratedFields(TableClass)
178
+ : { ordered: [], types: {} };
179
+ const sampled = await inferTableFields(id, schema, tableName);
180
+ const modifiers = resolveModifiers(TableClass);
181
+ const definitionFields = (def.fields ?? {});
182
+ const fromDefinition = {};
183
+ for (const [name, value] of Object.entries(definitionFields)) {
184
+ fromDefinition[name] = (0, fieldDescriptor_1.toFieldDescriptor)(value);
185
+ }
186
+ const fields = {};
187
+ for (const name of declared.ordered) {
188
+ fields[name] =
189
+ fromDefinition[name] ??
190
+ declared.types[name] ??
191
+ sampled[name] ??
192
+ UNKNOWN_DESCRIPTOR;
193
+ }
194
+ for (const [name, descriptor] of Object.entries(fromDefinition)) {
195
+ if (!(name in fields))
196
+ fields[name] = descriptor;
197
+ }
198
+ for (const [name, descriptor] of Object.entries(sampled)) {
199
+ if (!(name in fields))
200
+ fields[name] = descriptor;
201
+ }
202
+ for (const name of Object.keys(modifiers)) {
203
+ if (!(name in fields))
204
+ fields[name] = UNKNOWN_DESCRIPTOR;
205
+ }
206
+ return {
207
+ name: tableName,
208
+ fields,
209
+ indexes: def.indexes,
210
+ relations,
211
+ modifiers,
212
+ };
213
+ }
214
+ async function summarizeSchema(id, schema) {
215
+ const tableClasses = (0, interface_database_decorators_1.getTablesForSchema)(id);
216
+ const tables = await Promise.all(Object.entries(schema.definition).map(([tableName, def]) => summarizeTable(id, schema, tableName, def, tableClasses)));
217
+ return { id, options: {}, tables };
218
+ }
219
+ async function listSchemaSummaries() {
220
+ const entries = Array.from((0, schemaRegistry_1.getRegistry)().entries());
221
+ return Promise.all(entries.map(([id, schema]) => summarizeSchema(id, schema)));
222
+ }
223
+ const tableCountCache = new Map();
224
+ function tableCountKey(schemaId, tableName, instance) {
225
+ return `${schemaId}::${String(instance ?? "")}::${tableName}`;
226
+ }
227
+ async function countTableRows(schema, tableName, instance) {
228
+ try {
229
+ const table = schema.instance(instance).table(tableName);
230
+ const total = await table.count();
231
+ return typeof total === "number" && Number.isFinite(total) ? total : 0;
232
+ }
233
+ catch {
234
+ return 0;
235
+ }
236
+ }
237
+ async function listSchemaInstances(schema) {
238
+ try {
239
+ const named = await schema.listInstances().run();
240
+ if (!Array.isArray(named))
241
+ return [];
242
+ return named.filter((v) => typeof v === "string");
243
+ }
244
+ catch {
245
+ return [];
246
+ }
247
+ }
248
+ async function getTableElementCount(schemaId, tableName, instance) {
249
+ const key = tableCountKey(schemaId, tableName, instance);
250
+ const cached = tableCountCache.get(key);
251
+ const now = Date.now();
252
+ if (cached && cached.expiresAt > now)
253
+ return cached.value;
254
+ const schema = (0, schemaRegistry_1.getRegistry)().get(schemaId);
255
+ if (!schema)
256
+ return 0;
257
+ const value = await countTableRows(schema, tableName, instance);
258
+ tableCountCache.set(key, { value, expiresAt: now + STATS_TTL_MS });
259
+ return value;
260
+ }
261
+ async function computeInsights(id, schema) {
262
+ const tableNames = Object.keys(schema.definition);
263
+ const [counts, instances] = await Promise.all([
264
+ Promise.all(tableNames.map((name) => getTableElementCount(id, name))),
265
+ listSchemaInstances(schema),
266
+ ]);
267
+ return {
268
+ stats: {
269
+ tableCount: tableNames.length,
270
+ elementCount: counts.reduce((sum, n) => sum + n, 0),
271
+ instanceCount: 1 + instances.length,
272
+ },
273
+ instances,
274
+ };
275
+ }
276
+ const insightsCache = new Map();
277
+ async function getInsights(id, schema) {
278
+ const cached = insightsCache.get(id);
279
+ const now = Date.now();
280
+ if (cached && cached.expiresAt > now)
281
+ return cached.value;
282
+ const insights = await computeInsights(id, schema);
283
+ insightsCache.set(id, { value: insights, expiresAt: now + STATS_TTL_MS });
284
+ return insights;
285
+ }
286
+ async function listSchemaSummariesWithStats() {
287
+ const overrides = (0, config_1.getModuleConfig)().schemaLabels;
288
+ const entries = Array.from((0, schemaRegistry_1.getRegistry)().entries());
289
+ const summaries = await Promise.all(entries.map(async ([id, schema]) => {
290
+ const [base, insights] = await Promise.all([
291
+ summarizeSchema(id, schema),
292
+ getInsights(id, schema),
293
+ ]);
294
+ const label = (0, schemaLabels_1.resolveSchemaLabel)(id, overrides);
295
+ return {
296
+ ...base,
297
+ label,
298
+ stats: insights.stats,
299
+ instances: insights.instances,
300
+ };
301
+ }));
302
+ return summaries;
303
+ }
304
+ function getTablePrimaryKey(schemaId, tableName) {
305
+ const tableClasses = (0, interface_database_decorators_1.getTablesForSchema)(schemaId);
306
+ const TableClass = tableClasses?.[tableName];
307
+ if (!TableClass)
308
+ return undefined;
309
+ const meta = (0, interface_database_decorators_1.getMetadata)(TableClass, interface_database_decorators_1.DatumStaticMetadata, true);
310
+ return meta.primary || undefined;
311
+ }
312
+ //# sourceMappingURL=introspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"introspect.js","sourceRoot":"","sources":["../../src/service/introspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { SchemaLabel, SchemaLabelColor } from "./types";
2
+ export interface SchemaLabelOverride {
3
+ label: string;
4
+ color?: SchemaLabelColor;
5
+ }
6
+ export type SchemaLabelOverrides = Record<string, SchemaLabelOverride>;
7
+ export declare function resolveSchemaLabel(id: string, overrides?: SchemaLabelOverrides): SchemaLabel | undefined;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveSchemaLabel = resolveSchemaLabel;
4
+ const DEFAULT_PATTERNS = [
5
+ [/^app(lication)?([_-]|$)/i, { text: "Application", color: "info" }],
6
+ [/^core([_-]|$)/i, { text: "Core", color: "primary" }],
7
+ [/^global([_-]|$)/i, { text: "Global", color: "neutral" }],
8
+ [/^staging([_-]|$)/i, { text: "Staging", color: "warning" }],
9
+ [/^reviews?([_-]|$)/i, { text: "Reviews", color: "secondary" }],
10
+ [/^prod(uction)?([_-]|$)/i, { text: "Production", color: "success" }],
11
+ ];
12
+ function patternToRegex(pattern) {
13
+ const escaped = pattern
14
+ .replace(/[.+?^${}()|[\]\\]/g, "\\$&")
15
+ .replace(/\*/g, ".*");
16
+ return new RegExp(`^${escaped}$`);
17
+ }
18
+ function resolveSchemaLabel(id, overrides) {
19
+ if (overrides) {
20
+ const exact = overrides[id];
21
+ if (exact)
22
+ return { text: exact.label, color: exact.color };
23
+ for (const [pattern, override] of Object.entries(overrides)) {
24
+ if (pattern === id)
25
+ continue;
26
+ if (!pattern.includes("*"))
27
+ continue;
28
+ if (patternToRegex(pattern).test(id)) {
29
+ return { text: override.label, color: override.color };
30
+ }
31
+ }
32
+ }
33
+ for (const [regex, label] of DEFAULT_PATTERNS) {
34
+ if (regex.test(id))
35
+ return label;
36
+ }
37
+ return undefined;
38
+ }
39
+ //# sourceMappingURL=schemaLabels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaLabels.js","sourceRoot":"","sources":["../../src/service/schemaLabels.ts"],"names":[],"mappings":";;AAyBA,gDAsBC;AAtCD,MAAM,gBAAgB,GAAkD;IACtE,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACpE,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACtD,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC1D,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC5D,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAC/D,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;CACtE,CAAC;AAEF,SAAS,cAAc,CAAC,OAAe;IACrC,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC;SACrC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACxB,OAAO,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,kBAAkB,CAChC,EAAU,EACV,SAAgC;IAEhC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,KAAK;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAE5D,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,IAAI,OAAO,KAAK,EAAE;gBAAE,SAAS;YAC7B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,SAAS;YACrC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBACrC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,gBAAgB,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;IACnC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Schema } from "@antelopejs/interface-database";
2
+ export declare function getRegistry(): Map<string, Schema>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRegistry = getRegistry;
4
+ const interface_database_1 = require("@antelopejs/interface-database");
5
+ function getRegistry() {
6
+ return interface_database_1.Schema.registry;
7
+ }
8
+ //# sourceMappingURL=schemaRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaRegistry.js","sourceRoot":"","sources":["../../src/service/schemaRegistry.ts"],"names":[],"mappings":";;AASA,kCAMC;AAfD,uEAAwD;AASxD,SAAgB,WAAW;IAKzB,OAAQ,2BAAoC,CAAC,QAAQ,CAAC;AACxD,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface QueryStage {
2
+ stage: string;
3
+ options?: unknown;
4
+ args: unknown[];
5
+ }
6
+ export declare function decodeStaged(value: unknown): unknown;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decodeStaged = decodeStaged;
4
+ const interface_database_1 = require("@antelopejs/interface-database");
5
+ const STAGED_CLASSES = {
6
+ Schema: interface_database_1.Schema,
7
+ SchemaInstance: interface_database_1.SchemaInstance,
8
+ Table: interface_database_1.Table,
9
+ Selection: interface_database_1.Selection,
10
+ SingleSelection: interface_database_1.SingleSelection,
11
+ Stream: interface_database_1.Stream,
12
+ Datum: interface_database_1.Datum,
13
+ Query: interface_database_1.Query,
14
+ ValueProxy: interface_database_1.ValueProxy,
15
+ };
16
+ function isSerializedStaged(value) {
17
+ return (typeof value === "object" &&
18
+ value !== null &&
19
+ typeof value.__cls === "string" &&
20
+ Array.isArray(value.stages) &&
21
+ typeof STAGED_CLASSES[value.__cls] === "function");
22
+ }
23
+ function decodeStaged(value) {
24
+ if (value === null || value === undefined)
25
+ return value;
26
+ if (Array.isArray(value))
27
+ return value.map(decodeStaged);
28
+ if (typeof value !== "object")
29
+ return value;
30
+ if (isSerializedStaged(value)) {
31
+ const ctor = STAGED_CLASSES[value.__cls];
32
+ const instance = Object.create(ctor.prototype);
33
+ instance.stages = value.stages.map(decodeStage);
34
+ return instance;
35
+ }
36
+ const out = {};
37
+ for (const [key, v] of Object.entries(value)) {
38
+ out[key] = decodeStaged(v);
39
+ }
40
+ return out;
41
+ }
42
+ function decodeStage(stage) {
43
+ if (!stage || typeof stage !== "object")
44
+ return stage;
45
+ const { stage: name, options, args } = stage;
46
+ const decoded = {
47
+ stage: typeof name === "string" ? name : "",
48
+ args: Array.isArray(args) ? args.map(decodeStaged) : [],
49
+ };
50
+ if (options !== undefined)
51
+ decoded.options = decodeStaged(options);
52
+ return decoded;
53
+ }
54
+ //# sourceMappingURL=stagedSerialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stagedSerialization.js","sourceRoot":"","sources":["../../src/service/stagedSerialization.ts"],"names":[],"mappings":";;AA+CA,oCAiBC;AAhED,uEAUwC;AAUxC,MAAM,cAAc,GAA+B;IACjD,MAAM,EAAN,2BAAM;IACN,cAAc,EAAd,mCAAc;IACd,KAAK,EAAL,0BAAK;IACL,SAAS,EAAT,8BAAS;IACT,eAAe,EAAf,oCAAe;IACf,MAAM,EAAN,2BAAM;IACN,KAAK,EAAL,0BAAK;IACL,KAAK,EAAL,0BAAK;IACL,UAAU,EAAV,+BAAU;CACX,CAAC;AAOF,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAQ,KAA6B,CAAC,KAAK,KAAK,QAAQ;QACxD,KAAK,CAAC,OAAO,CAAE,KAA8B,CAAC,MAAM,CAAC;QACrD,OAAO,cAAc,CAAE,KAA0B,CAAC,KAAK,CAAC,KAAK,UAAU,CACxE,CAAC;AACJ,CAAC;AAED,SAAgB,YAAY,CAAC,KAAc;IACzC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5C,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAA0B,CAAC;QACxE,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAChD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAA4B,CAAC;IACpE,MAAM,OAAO,GAAe;QAC1B,KAAK,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QAC3C,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;KACxD,CAAC;IACF,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACnE,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,67 @@
1
+ import type { FieldDescriptor } from "./fieldDescriptor";
2
+ export type { FieldDescriptor };
3
+ export interface RelationDeclaration {
4
+ fromField: string;
5
+ toSchema: string;
6
+ toTable: string;
7
+ toField: string;
8
+ many: boolean;
9
+ }
10
+ export interface IndexDefinition {
11
+ fields?: string[];
12
+ multi?: boolean;
13
+ }
14
+ export interface TableSummary {
15
+ name: string;
16
+ fields: Record<string, FieldDescriptor>;
17
+ indexes: Record<string, IndexDefinition>;
18
+ relations: RelationDeclaration[];
19
+ modifiers: Record<string, string[]>;
20
+ }
21
+ export interface SchemaSummary {
22
+ id: string;
23
+ options: Record<string, never>;
24
+ tables: TableSummary[];
25
+ }
26
+ export type SchemaLabelColor = "primary" | "secondary" | "success" | "info" | "warning" | "error" | "neutral";
27
+ export interface SchemaLabel {
28
+ text: string;
29
+ color?: SchemaLabelColor;
30
+ }
31
+ export interface SchemaStats {
32
+ tableCount: number;
33
+ elementCount: number;
34
+ instanceCount: number;
35
+ }
36
+ export interface SchemaSummaryWithStats extends SchemaSummary {
37
+ label?: SchemaLabel;
38
+ stats: SchemaStats;
39
+ instances: string[];
40
+ }
41
+ export type QueryLanguage = "aql";
42
+ export interface SavedQuery {
43
+ id: string;
44
+ userId: string;
45
+ name: string;
46
+ description: string;
47
+ query: Record<string, unknown>;
48
+ source: string;
49
+ language: QueryLanguage;
50
+ shared: boolean;
51
+ createdAt: string;
52
+ }
53
+ export interface HistoryEntry {
54
+ id: string;
55
+ userId: string;
56
+ query: Record<string, unknown>;
57
+ source: string;
58
+ language: QueryLanguage;
59
+ executedAt: string;
60
+ durationMs: number;
61
+ rowCount: number;
62
+ }
63
+ export interface ExecuteResult {
64
+ rows: Record<string, unknown>[];
65
+ executedAt: string;
66
+ durationMs: number;
67
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/service/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export declare const SCHEMA_NAME = "dms-database";
2
+ export declare const MAX_HISTORY_PER_USER = 500;
3
+ export declare const CROSS_INSTANCE_SENTINEL = "__CROSS_INSTANCE__";
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CROSS_INSTANCE_SENTINEL = exports.MAX_HISTORY_PER_USER = exports.SCHEMA_NAME = void 0;
4
+ exports.SCHEMA_NAME = "dms-database";
5
+ exports.MAX_HISTORY_PER_USER = 500;
6
+ exports.CROSS_INSTANCE_SENTINEL = "__CROSS_INSTANCE__";
7
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/types/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG,cAAc,CAAC;AAE7B,QAAA,oBAAoB,GAAG,GAAG,CAAC;AAE3B,QAAA,uBAAuB,GAAG,oBAAoB,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface Position {
2
+ x: number;
3
+ y: number;
4
+ }
5
+ export interface SuccessResponse {
6
+ success: boolean;
7
+ }
8
+ export interface ListResult<T> {
9
+ items: T[];
10
+ }
11
+ export interface PaginatedResult<T> {
12
+ items: T[];
13
+ total: number;
14
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responses.js","sourceRoot":"","sources":["../../src/types/responses.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { type InstanceId } from "@antelopejs/interface-database";
2
+ export interface ParsedFilter {
3
+ mode: string;
4
+ value: string;
5
+ }
6
+ export declare function asNonEmptyString(value: unknown): string | undefined;
7
+ export declare function parseInteger(value: unknown, fallback: number): number;
8
+ export declare function clamp(value: number, min: number, max: number): number;
9
+ export declare function parseFilter(raw: unknown): ParsedFilter | undefined;
10
+ export declare function unwrapIsFilter(raw: unknown): string | undefined;
11
+ export declare function decodeInstanceFilter(raw: unknown): InstanceId | undefined;
12
+ export declare function applyFilterToList<T>(rows: T[], field: keyof T, rawFilter: unknown): T[];
13
+ export declare function applySearchToList<T>(rows: T[], field: keyof T, search: unknown): T[];
14
+ export declare function cellToText(value: unknown): string;
15
+ export declare function applySortToList<T>(rows: T[], sortKey: unknown, sortDirection: unknown): T[];
16
+ export type SortDirection = "asc" | "desc";
17
+ export declare function normalizeSortDirection(value: unknown): SortDirection;