sqlite-hub 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/README.md +15 -10
  2. package/docs/MCP.md +36 -4
  3. package/docs/changelog.md +11 -0
  4. package/docs/guidelines/DESIGN.md +64 -0
  5. package/frontend/assets/mockups/backups_1_1920.webp +0 -0
  6. package/frontend/assets/mockups/backups_2_compare_drawer_1920.webp +0 -0
  7. package/frontend/assets/mockups/backups_3_create_backup_modal_1920.webp +0 -0
  8. package/frontend/assets/mockups/backups_4_edit_backup_modal_1920.webp +0 -0
  9. package/frontend/assets/mockups/backups_5_restore_backup_modal_1920.webp +0 -0
  10. package/frontend/assets/mockups/backups_6_delete_backup_modal_1920.webp +0 -0
  11. package/frontend/assets/mockups/charts_1_1920.webp +0 -0
  12. package/frontend/assets/mockups/charts_2_query_detail_1920.webp +0 -0
  13. package/frontend/assets/mockups/charts_3_create_query_chart_modal_1920.webp +0 -0
  14. package/frontend/assets/mockups/charts_4_edit_query_chart_modal_1920.webp +0 -0
  15. package/frontend/assets/mockups/charts_5_delete_query_chart_modal_1920.webp +0 -0
  16. package/frontend/assets/mockups/charts_6_copy_column_modal_1920.webp +0 -0
  17. package/frontend/assets/mockups/connections_1_1920.webp +0 -0
  18. package/frontend/assets/mockups/connections_2_create_connection_modal_1920.webp +0 -0
  19. package/frontend/assets/mockups/connections_3_open_connection_modal_1920.webp +0 -0
  20. package/frontend/assets/mockups/data_1_1920.webp +0 -0
  21. package/frontend/assets/mockups/data_2_roweditor_1920.webp +0 -0
  22. package/frontend/assets/mockups/data_3_generate_data_modal_1920.webp +0 -0
  23. package/frontend/assets/mockups/data_4_data_export_modal_1920.webp +0 -0
  24. package/frontend/assets/mockups/documents_1_1920.webp +0 -0
  25. package/frontend/assets/mockups/documents_2_document_insert_table_modal_1920.webp +0 -0
  26. package/frontend/assets/mockups/documents_3_document_insert_note_modal_1920.webp +0 -0
  27. package/frontend/assets/mockups/logs_1_1920.webp +0 -0
  28. package/frontend/assets/mockups/media_tagging_queue_1_1920.webp +0 -0
  29. package/frontend/assets/mockups/media_tagging_setup_1_1920.webp +0 -0
  30. package/frontend/assets/mockups/media_tagging_setup_2_create_media_tagging_tag_table_modal_1920.webp +0 -0
  31. package/frontend/assets/mockups/media_tagging_setup_3_create_media_tagging_mapping_table_modal_1920.webp +0 -0
  32. package/frontend/assets/mockups/overview_1_1920.webp +0 -0
  33. package/frontend/assets/mockups/settings_1_1920.webp +0 -0
  34. package/frontend/assets/mockups/sql_editor_1_1920.webp +0 -0
  35. package/frontend/assets/mockups/sql_editor_2_query_detail_1920.webp +0 -0
  36. package/frontend/assets/mockups/sql_editor_3_query_export_modal_1920.webp +0 -0
  37. package/frontend/assets/mockups/structure_1_1920.webp +0 -0
  38. package/frontend/assets/mockups/structure_2_generate_types_modal_1920.webp +0 -0
  39. package/frontend/assets/mockups/structure_3_generate_types_modal_1920.webp +0 -0
  40. package/frontend/assets/mockups/table_designer_1_1920.webp +0 -0
  41. package/frontend/assets/mockups/table_designer_2_table_designer_constraints_modal_1920.webp +0 -0
  42. package/frontend/js/api.js +11 -0
  43. package/frontend/js/app.js +238 -8
  44. package/frontend/js/components/badges.js +16 -0
  45. package/frontend/js/components/connectionCard.js +35 -0
  46. package/frontend/js/components/modal.js +116 -245
  47. package/frontend/js/components/queryHistoryDetail.js +25 -45
  48. package/frontend/js/components/rowEditorPanel.js +7 -60
  49. package/frontend/js/components/structureGraph.js +292 -13
  50. package/frontend/js/components/tableDesignerConstraintsDrawer.js +400 -0
  51. package/frontend/js/components/tableDesignerEditor.js +51 -16
  52. package/frontend/js/components/tableDesignerSidebar.js +9 -5
  53. package/frontend/js/store.js +551 -7
  54. package/frontend/js/utils/connectionRegistry.js +76 -0
  55. package/frontend/js/utils/tableDesigner.js +431 -62
  56. package/frontend/js/views/backups.js +2 -5
  57. package/frontend/js/views/charts.js +20 -10
  58. package/frontend/js/views/connections.js +103 -3
  59. package/frontend/js/views/data.js +19 -5
  60. package/frontend/js/views/settings.js +2 -2
  61. package/frontend/js/views/structure.js +28 -5
  62. package/frontend/js/views/tableAdvisor.js +14 -6
  63. package/frontend/js/views/tableDesigner.js +44 -9
  64. package/frontend/styles/components.css +676 -79
  65. package/frontend/styles/structure-graph.css +49 -0
  66. package/frontend/styles/tailwind.generated.css +1 -1
  67. package/package.json +1 -1
  68. package/server/mcp/httpRouter.js +95 -0
  69. package/server/routes/connections.js +12 -0
  70. package/server/routes/data.js +1 -1
  71. package/server/routes/settings.js +29 -7
  72. package/server/routes/tableDesigner.js +15 -1
  73. package/server/server.js +15 -0
  74. package/server/services/mcpToolService.js +28 -0
  75. package/server/services/sqlite/connectionManager.js +23 -2
  76. package/server/services/sqlite/dataBrowserService.js +21 -0
  77. package/server/services/sqlite/introspection.js +39 -1
  78. package/server/services/sqlite/structureService.js +66 -11
  79. package/server/services/sqlite/tableAdvisor.js +6 -0
  80. package/server/services/sqlite/tableDesigner/schemaMapping.js +7 -1
  81. package/server/services/sqlite/tableDesigner/sql.js +31 -2
  82. package/server/services/sqlite/tableDesigner/validation.js +69 -9
  83. package/server/services/sqlite/tableDesignerService.js +110 -5
  84. package/server/services/storage/appStateStore.js +303 -4
  85. package/frontend/assets/mockups/backups_2_create_backup_modal_1920.webp +0 -0
  86. package/frontend/assets/mockups/backups_3_edit_backup_modal_1920.webp +0 -0
  87. package/frontend/assets/mockups/backups_4_restore_backup_modal_1920.webp +0 -0
  88. package/frontend/assets/mockups/backups_5_delete_backup_modal_1920.webp +0 -0
  89. package/frontend/assets/mockups/data_3_data_export_modal_1920.webp +0 -0
@@ -0,0 +1,76 @@
1
+ export const MAX_CONNECTION_TAG_NAME_LENGTH = 40;
2
+
3
+ export function normalizeConnectionSearchQuery(query) {
4
+ return String(query ?? '').trim().toLowerCase();
5
+ }
6
+
7
+ export function normalizeConnectionTagName(value) {
8
+ const name = String(value ?? '')
9
+ .replace(/[\u0000-\u001f\u007f]/g, ' ')
10
+ .trim();
11
+
12
+ if (!name || name.length > MAX_CONNECTION_TAG_NAME_LENGTH) {
13
+ return '';
14
+ }
15
+
16
+ return name;
17
+ }
18
+
19
+ export function normalizeConnectionTagKey(value) {
20
+ return String(value ?? '').trim().toLowerCase();
21
+ }
22
+
23
+ function getConnectionFilename(connection = {}) {
24
+ const segments = String(connection.path ?? '').split(/[\\/]/);
25
+ return segments[segments.length - 1] ?? '';
26
+ }
27
+
28
+ function getConnectionSearchText(connection = {}) {
29
+ const tagNames = Array.isArray(connection.tags)
30
+ ? connection.tags.map(tag => tag?.name ?? '').join(' ')
31
+ : '';
32
+
33
+ return [
34
+ connection.label,
35
+ getConnectionFilename(connection),
36
+ connection.path,
37
+ tagNames,
38
+ ]
39
+ .map(value => String(value ?? '').toLowerCase())
40
+ .join(' ');
41
+ }
42
+
43
+ export function filterConnections(connections = [], { searchQuery = '', selectedTagIds = [] } = {}) {
44
+ const query = normalizeConnectionSearchQuery(searchQuery);
45
+ const selectedTagSet = new Set(
46
+ selectedTagIds
47
+ .map(tagId => String(tagId ?? '').trim())
48
+ .filter(Boolean),
49
+ );
50
+
51
+ return [...connections].filter(connection => {
52
+ if (query && !getConnectionSearchText(connection).includes(query)) {
53
+ return false;
54
+ }
55
+
56
+ if (!selectedTagSet.size) {
57
+ return true;
58
+ }
59
+
60
+ return (connection.tags ?? []).some(tag => selectedTagSet.has(String(tag.id)));
61
+ });
62
+ }
63
+
64
+ export function getConnectionTagCounts(connections = []) {
65
+ const counts = new Map();
66
+
67
+ for (const connection of connections) {
68
+ const tagIds = new Set((connection.tags ?? []).map(tag => String(tag.id)));
69
+
70
+ for (const tagId of tagIds) {
71
+ counts.set(tagId, (counts.get(tagId) ?? 0) + 1);
72
+ }
73
+ }
74
+
75
+ return counts;
76
+ }