clawsql 0.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.
- package/.env.example +97 -0
- package/README.md +372 -0
- package/dist/__tests__/config/settings.test.d.ts +5 -0
- package/dist/__tests__/config/settings.test.d.ts.map +1 -0
- package/dist/__tests__/config/settings.test.js +154 -0
- package/dist/__tests__/config/settings.test.js.map +1 -0
- package/dist/__tests__/core/discovery/topology.test.d.ts +5 -0
- package/dist/__tests__/core/discovery/topology.test.d.ts.map +1 -0
- package/dist/__tests__/core/discovery/topology.test.js +191 -0
- package/dist/__tests__/core/discovery/topology.test.js.map +1 -0
- package/dist/__tests__/core/failover/executor.test.d.ts +5 -0
- package/dist/__tests__/core/failover/executor.test.d.ts.map +1 -0
- package/dist/__tests__/core/failover/executor.test.js +256 -0
- package/dist/__tests__/core/failover/executor.test.js.map +1 -0
- package/dist/__tests__/core/monitoring/collector.test.d.ts +5 -0
- package/dist/__tests__/core/monitoring/collector.test.d.ts.map +1 -0
- package/dist/__tests__/core/monitoring/collector.test.js +131 -0
- package/dist/__tests__/core/monitoring/collector.test.js.map +1 -0
- package/dist/__tests__/core/monitoring/exporters.test.d.ts +5 -0
- package/dist/__tests__/core/monitoring/exporters.test.d.ts.map +1 -0
- package/dist/__tests__/core/monitoring/exporters.test.js +90 -0
- package/dist/__tests__/core/monitoring/exporters.test.js.map +1 -0
- package/dist/__tests__/core/routing/proxysql-manager.test.d.ts +5 -0
- package/dist/__tests__/core/routing/proxysql-manager.test.d.ts.map +1 -0
- package/dist/__tests__/core/routing/proxysql-manager.test.js +155 -0
- package/dist/__tests__/core/routing/proxysql-manager.test.js.map +1 -0
- package/dist/__tests__/types/index.test.d.ts +5 -0
- package/dist/__tests__/types/index.test.d.ts.map +1 -0
- package/dist/__tests__/types/index.test.js +290 -0
- package/dist/__tests__/types/index.test.js.map +1 -0
- package/dist/__tests__/utils/exceptions.test.d.ts +5 -0
- package/dist/__tests__/utils/exceptions.test.d.ts.map +1 -0
- package/dist/__tests__/utils/exceptions.test.js +142 -0
- package/dist/__tests__/utils/exceptions.test.js.map +1 -0
- package/dist/api/routes/clusters.d.ts +7 -0
- package/dist/api/routes/clusters.d.ts.map +1 -0
- package/dist/api/routes/clusters.js +123 -0
- package/dist/api/routes/clusters.js.map +1 -0
- package/dist/api/routes/config.d.ts +7 -0
- package/dist/api/routes/config.d.ts.map +1 -0
- package/dist/api/routes/config.js +65 -0
- package/dist/api/routes/config.js.map +1 -0
- package/dist/api/routes/failover.d.ts +7 -0
- package/dist/api/routes/failover.d.ts.map +1 -0
- package/dist/api/routes/failover.js +100 -0
- package/dist/api/routes/failover.js.map +1 -0
- package/dist/api/routes/instances.d.ts +11 -0
- package/dist/api/routes/instances.d.ts.map +1 -0
- package/dist/api/routes/instances.js +315 -0
- package/dist/api/routes/instances.js.map +1 -0
- package/dist/api/routes/monitoring.d.ts +7 -0
- package/dist/api/routes/monitoring.d.ts.map +1 -0
- package/dist/api/routes/monitoring.js +72 -0
- package/dist/api/routes/monitoring.js.map +1 -0
- package/dist/api/routes/webhooks.d.ts +12 -0
- package/dist/api/routes/webhooks.d.ts.map +1 -0
- package/dist/api/routes/webhooks.js +232 -0
- package/dist/api/routes/webhooks.js.map +1 -0
- package/dist/api/schemas/index.d.ts +965 -0
- package/dist/api/schemas/index.d.ts.map +1 -0
- package/dist/api/schemas/index.js +171 -0
- package/dist/api/schemas/index.js.map +1 -0
- package/dist/app.d.ts +13 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +197 -0
- package/dist/app.js.map +1 -0
- package/dist/bin/clawsql.d.ts +12 -0
- package/dist/bin/clawsql.d.ts.map +1 -0
- package/dist/bin/clawsql.js +43 -0
- package/dist/bin/clawsql.js.map +1 -0
- package/dist/cli/agent/handler.d.ts +73 -0
- package/dist/cli/agent/handler.d.ts.map +1 -0
- package/dist/cli/agent/handler.js +258 -0
- package/dist/cli/agent/handler.js.map +1 -0
- package/dist/cli/agent/index.d.ts +14 -0
- package/dist/cli/agent/index.d.ts.map +1 -0
- package/dist/cli/agent/index.js +30 -0
- package/dist/cli/agent/index.js.map +1 -0
- package/dist/cli/agent/openclaw-integration.d.ts +81 -0
- package/dist/cli/agent/openclaw-integration.d.ts.map +1 -0
- package/dist/cli/agent/openclaw-integration.js +341 -0
- package/dist/cli/agent/openclaw-integration.js.map +1 -0
- package/dist/cli/agent/providers/anthropic.d.ts +27 -0
- package/dist/cli/agent/providers/anthropic.d.ts.map +1 -0
- package/dist/cli/agent/providers/anthropic.js +106 -0
- package/dist/cli/agent/providers/anthropic.js.map +1 -0
- package/dist/cli/agent/providers/base.d.ts +91 -0
- package/dist/cli/agent/providers/base.d.ts.map +1 -0
- package/dist/cli/agent/providers/base.js +24 -0
- package/dist/cli/agent/providers/base.js.map +1 -0
- package/dist/cli/agent/providers/openai.d.ts +27 -0
- package/dist/cli/agent/providers/openai.d.ts.map +1 -0
- package/dist/cli/agent/providers/openai.js +98 -0
- package/dist/cli/agent/providers/openai.js.map +1 -0
- package/dist/cli/agent/tools/index.d.ts +32 -0
- package/dist/cli/agent/tools/index.d.ts.map +1 -0
- package/dist/cli/agent/tools/index.js +263 -0
- package/dist/cli/agent/tools/index.js.map +1 -0
- package/dist/cli/commands/cleanup.d.ts +12 -0
- package/dist/cli/commands/cleanup.d.ts.map +1 -0
- package/dist/cli/commands/cleanup.js +205 -0
- package/dist/cli/commands/cleanup.js.map +1 -0
- package/dist/cli/commands/clusters.d.ts +12 -0
- package/dist/cli/commands/clusters.d.ts.map +1 -0
- package/dist/cli/commands/clusters.js +468 -0
- package/dist/cli/commands/clusters.js.map +1 -0
- package/dist/cli/commands/config.d.ts +12 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +406 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/cron.d.ts +12 -0
- package/dist/cli/commands/cron.d.ts.map +1 -0
- package/dist/cli/commands/cron.js +215 -0
- package/dist/cli/commands/cron.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +13 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +687 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/failover.d.ts +16 -0
- package/dist/cli/commands/failover.d.ts.map +1 -0
- package/dist/cli/commands/failover.js +333 -0
- package/dist/cli/commands/failover.js.map +1 -0
- package/dist/cli/commands/health.d.ts +12 -0
- package/dist/cli/commands/health.d.ts.map +1 -0
- package/dist/cli/commands/health.js +125 -0
- package/dist/cli/commands/health.js.map +1 -0
- package/dist/cli/commands/help.d.ts +12 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +52 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/instances.d.ts +12 -0
- package/dist/cli/commands/instances.d.ts.map +1 -0
- package/dist/cli/commands/instances.js +801 -0
- package/dist/cli/commands/instances.js.map +1 -0
- package/dist/cli/commands/notify.d.ts +12 -0
- package/dist/cli/commands/notify.d.ts.map +1 -0
- package/dist/cli/commands/notify.js +43 -0
- package/dist/cli/commands/notify.js.map +1 -0
- package/dist/cli/commands/sql.d.ts +12 -0
- package/dist/cli/commands/sql.d.ts.map +1 -0
- package/dist/cli/commands/sql.js +90 -0
- package/dist/cli/commands/sql.js.map +1 -0
- package/dist/cli/commands/start.d.ts +12 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +174 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +12 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +218 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +12 -0
- package/dist/cli/commands/stop.d.ts.map +1 -0
- package/dist/cli/commands/stop.js +128 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/commands/topology.d.ts +12 -0
- package/dist/cli/commands/topology.d.ts.map +1 -0
- package/dist/cli/commands/topology.js +106 -0
- package/dist/cli/commands/topology.js.map +1 -0
- package/dist/cli/completer.d.ts +47 -0
- package/dist/cli/completer.d.ts.map +1 -0
- package/dist/cli/completer.js +332 -0
- package/dist/cli/completer.js.map +1 -0
- package/dist/cli/formatter.d.ts +165 -0
- package/dist/cli/formatter.d.ts.map +1 -0
- package/dist/cli/formatter.js +408 -0
- package/dist/cli/formatter.js.map +1 -0
- package/dist/cli/index.d.ts +21 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +79 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/raw-input.d.ts +97 -0
- package/dist/cli/raw-input.d.ts.map +1 -0
- package/dist/cli/raw-input.js +493 -0
- package/dist/cli/raw-input.js.map +1 -0
- package/dist/cli/registry.d.ts +103 -0
- package/dist/cli/registry.d.ts.map +1 -0
- package/dist/cli/registry.js +205 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/cli/repl.d.ts +83 -0
- package/dist/cli/repl.d.ts.map +1 -0
- package/dist/cli/repl.js +447 -0
- package/dist/cli/repl.js.map +1 -0
- package/dist/cli/ui/components.d.ts +144 -0
- package/dist/cli/ui/components.d.ts.map +1 -0
- package/dist/cli/ui/components.js +331 -0
- package/dist/cli/ui/components.js.map +1 -0
- package/dist/cli/ui/index.d.ts +7 -0
- package/dist/cli/ui/index.d.ts.map +1 -0
- package/dist/cli/ui/index.js +23 -0
- package/dist/cli/ui/index.js.map +1 -0
- package/dist/cli/utils/docker-files.d.ts +39 -0
- package/dist/cli/utils/docker-files.d.ts.map +1 -0
- package/dist/cli/utils/docker-files.js +223 -0
- package/dist/cli/utils/docker-files.js.map +1 -0
- package/dist/cli/utils/docker-prereq.d.ts +48 -0
- package/dist/cli/utils/docker-prereq.d.ts.map +1 -0
- package/dist/cli/utils/docker-prereq.js +203 -0
- package/dist/cli/utils/docker-prereq.js.map +1 -0
- package/dist/config/settings.d.ts +594 -0
- package/dist/config/settings.d.ts.map +1 -0
- package/dist/config/settings.js +250 -0
- package/dist/config/settings.js.map +1 -0
- package/dist/core/discovery/cluster-view.d.ts +50 -0
- package/dist/core/discovery/cluster-view.d.ts.map +1 -0
- package/dist/core/discovery/cluster-view.js +235 -0
- package/dist/core/discovery/cluster-view.js.map +1 -0
- package/dist/core/discovery/scanner.d.ts +70 -0
- package/dist/core/discovery/scanner.d.ts.map +1 -0
- package/dist/core/discovery/scanner.js +197 -0
- package/dist/core/discovery/scanner.js.map +1 -0
- package/dist/core/discovery/topology.d.ts +118 -0
- package/dist/core/discovery/topology.d.ts.map +1 -0
- package/dist/core/discovery/topology.js +550 -0
- package/dist/core/discovery/topology.js.map +1 -0
- package/dist/core/failover/candidate-selector.d.ts +46 -0
- package/dist/core/failover/candidate-selector.d.ts.map +1 -0
- package/dist/core/failover/candidate-selector.js +70 -0
- package/dist/core/failover/candidate-selector.js.map +1 -0
- package/dist/core/failover/executor.d.ts +104 -0
- package/dist/core/failover/executor.d.ts.map +1 -0
- package/dist/core/failover/executor.js +248 -0
- package/dist/core/failover/executor.js.map +1 -0
- package/dist/core/failover/operation-builder.d.ts +71 -0
- package/dist/core/failover/operation-builder.d.ts.map +1 -0
- package/dist/core/failover/operation-builder.js +157 -0
- package/dist/core/failover/operation-builder.js.map +1 -0
- package/dist/core/failover/operation-runner.d.ts +75 -0
- package/dist/core/failover/operation-runner.d.ts.map +1 -0
- package/dist/core/failover/operation-runner.js +191 -0
- package/dist/core/failover/operation-runner.js.map +1 -0
- package/dist/core/failover/promoter.d.ts +33 -0
- package/dist/core/failover/promoter.d.ts.map +1 -0
- package/dist/core/failover/promoter.js +97 -0
- package/dist/core/failover/promoter.js.map +1 -0
- package/dist/core/failover/recovery-manager.d.ts +47 -0
- package/dist/core/failover/recovery-manager.d.ts.map +1 -0
- package/dist/core/failover/recovery-manager.js +145 -0
- package/dist/core/failover/recovery-manager.js.map +1 -0
- package/dist/core/failover/types.d.ts +54 -0
- package/dist/core/failover/types.d.ts.map +1 -0
- package/dist/core/failover/types.js +8 -0
- package/dist/core/failover/types.js.map +1 -0
- package/dist/core/monitoring/collector.d.ts +25 -0
- package/dist/core/monitoring/collector.d.ts.map +1 -0
- package/dist/core/monitoring/collector.js +115 -0
- package/dist/core/monitoring/collector.js.map +1 -0
- package/dist/core/monitoring/exporters.d.ts +49 -0
- package/dist/core/monitoring/exporters.d.ts.map +1 -0
- package/dist/core/monitoring/exporters.js +126 -0
- package/dist/core/monitoring/exporters.js.map +1 -0
- package/dist/core/routing/proxysql-manager.d.ts +213 -0
- package/dist/core/routing/proxysql-manager.d.ts.map +1 -0
- package/dist/core/routing/proxysql-manager.js +632 -0
- package/dist/core/routing/proxysql-manager.js.map +1 -0
- package/dist/core/sync/replica-recovery.d.ts +40 -0
- package/dist/core/sync/replica-recovery.d.ts.map +1 -0
- package/dist/core/sync/replica-recovery.js +134 -0
- package/dist/core/sync/replica-recovery.js.map +1 -0
- package/dist/core/sync/sync-coordinator.d.ts +83 -0
- package/dist/core/sync/sync-coordinator.d.ts.map +1 -0
- package/dist/core/sync/sync-coordinator.js +254 -0
- package/dist/core/sync/sync-coordinator.js.map +1 -0
- package/dist/core/sync/topology-watcher.d.ts +76 -0
- package/dist/core/sync/topology-watcher.d.ts.map +1 -0
- package/dist/core/sync/topology-watcher.js +222 -0
- package/dist/core/sync/topology-watcher.js.map +1 -0
- package/dist/core/sync/types.d.ts +85 -0
- package/dist/core/sync/types.d.ts.map +1 -0
- package/dist/core/sync/types.js +8 -0
- package/dist/core/sync/types.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +212 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +153 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/database.d.ts +62 -0
- package/dist/utils/database.d.ts.map +1 -0
- package/dist/utils/database.js +257 -0
- package/dist/utils/database.js.map +1 -0
- package/dist/utils/exceptions.d.ts +69 -0
- package/dist/utils/exceptions.d.ts.map +1 -0
- package/dist/utils/exceptions.js +121 -0
- package/dist/utils/exceptions.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +90 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/mysql-client.d.ts +43 -0
- package/dist/utils/mysql-client.d.ts.map +1 -0
- package/dist/utils/mysql-client.js +125 -0
- package/dist/utils/mysql-client.js.map +1 -0
- package/docker/Dockerfile +61 -0
- package/docker/Dockerfile.node +41 -0
- package/docker/grafana/dashboards/clawsql.json +212 -0
- package/docker/grafana/provisioning/dashboards/dashboards.yml +13 -0
- package/docker/grafana/provisioning/datasources/datasources.yml +12 -0
- package/docker/init/primary.sql +26 -0
- package/docker/init/replica.sql +16 -0
- package/docker/orchestrator/orchestrator.conf.json +98 -0
- package/docker/prometheus/prometheus.yml +45 -0
- package/docker/proxysql/entrypoint.sh +8 -0
- package/docker/proxysql/init.sql.demo +30 -0
- package/docker/proxysql/proxysql.cnf +38 -0
- package/docker-compose.demo.yml +115 -0
- package/docker-compose.yml +217 -0
- package/init/primary.sql +19 -0
- package/init/replica.sql +13 -0
- package/package.json +84 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ClawSQL CLI - UI Components
|
|
4
|
+
*
|
|
5
|
+
* Professional UI components for the interactive CLI.
|
|
6
|
+
* Inspired by Claude Code's clean, minimal style.
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.indicators = exports.theme = exports.nord = void 0;
|
|
13
|
+
exports.createBanner = createBanner;
|
|
14
|
+
exports.createPrompt = createPrompt;
|
|
15
|
+
exports.createSuggestionBox = createSuggestionBox;
|
|
16
|
+
exports.createDidYouMean = createDidYouMean;
|
|
17
|
+
exports.createStatusBar = createStatusBar;
|
|
18
|
+
exports.createKeybindingsHelp = createKeybindingsHelp;
|
|
19
|
+
exports.clearScreen = clearScreen;
|
|
20
|
+
exports.createSpinner = createSpinner;
|
|
21
|
+
exports.formatCommandHint = formatCommandHint;
|
|
22
|
+
exports.divider = divider;
|
|
23
|
+
exports.formatWelcomeMessage = formatWelcomeMessage;
|
|
24
|
+
exports.formatSuggestionsDropdown = formatSuggestionsDropdown;
|
|
25
|
+
exports.clearSuggestionsDropdown = clearSuggestionsDropdown;
|
|
26
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
27
|
+
const ora_1 = __importDefault(require("ora"));
|
|
28
|
+
/**
|
|
29
|
+
* Nord Theme Colors (https://www.nordtheme.com)
|
|
30
|
+
* Single source of truth for all CLI colors
|
|
31
|
+
*/
|
|
32
|
+
exports.nord = {
|
|
33
|
+
polarNight: {
|
|
34
|
+
nord0: '#2E3440',
|
|
35
|
+
nord1: '#3B4252',
|
|
36
|
+
nord2: '#434C5E',
|
|
37
|
+
nord3: '#4C566A',
|
|
38
|
+
},
|
|
39
|
+
snowStorm: {
|
|
40
|
+
nord4: '#D8DEE9',
|
|
41
|
+
nord5: '#E5E9F0',
|
|
42
|
+
nord6: '#ECEFF4',
|
|
43
|
+
},
|
|
44
|
+
frost: {
|
|
45
|
+
nord7: '#8FBCBB',
|
|
46
|
+
nord8: '#88C0D0',
|
|
47
|
+
nord9: '#81A1C1',
|
|
48
|
+
nord10: '#5E81AC',
|
|
49
|
+
},
|
|
50
|
+
aurora: {
|
|
51
|
+
nord11: '#BF616A',
|
|
52
|
+
nord12: '#D08770',
|
|
53
|
+
nord13: '#EBCB8B',
|
|
54
|
+
nord14: '#A3BE8C',
|
|
55
|
+
nord15: '#B48EAD',
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Chalk-based theme for CLI output
|
|
60
|
+
* Use these functions for consistent colors across the CLI
|
|
61
|
+
*/
|
|
62
|
+
exports.theme = {
|
|
63
|
+
primary: chalk_1.default.hex(exports.nord.frost.nord8), // Cyan
|
|
64
|
+
secondary: chalk_1.default.hex(exports.nord.frost.nord9), // Blue
|
|
65
|
+
success: chalk_1.default.hex(exports.nord.aurora.nord14), // Green
|
|
66
|
+
warning: chalk_1.default.hex(exports.nord.aurora.nord13), // Yellow
|
|
67
|
+
error: chalk_1.default.hex(exports.nord.aurora.nord11), // Red
|
|
68
|
+
info: chalk_1.default.hex(exports.nord.frost.nord7), // Teal
|
|
69
|
+
muted: chalk_1.default.hex(exports.nord.polarNight.nord3), // Muted gray
|
|
70
|
+
highlight: chalk_1.default.hex(exports.nord.snowStorm.nord4), // Bright
|
|
71
|
+
accent: chalk_1.default.hex(exports.nord.aurora.nord15), // Purple
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Clean status indicators (no emojis)
|
|
75
|
+
* Use these for consistent icons across the CLI
|
|
76
|
+
*/
|
|
77
|
+
exports.indicators = {
|
|
78
|
+
success: '●',
|
|
79
|
+
error: '○',
|
|
80
|
+
warning: '◆',
|
|
81
|
+
info: '○',
|
|
82
|
+
arrow: '→',
|
|
83
|
+
bullet: '●',
|
|
84
|
+
circle: '○',
|
|
85
|
+
check: '✓',
|
|
86
|
+
cross: '✗',
|
|
87
|
+
prompt: '›',
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Strip ANSI escape codes and get visible string length
|
|
91
|
+
*/
|
|
92
|
+
function visibleLength(str) {
|
|
93
|
+
// eslint-disable-next-line no-control-regex
|
|
94
|
+
return str.replace(/\x1B\[[0-9;]*m/g, '').length;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Create a professional banner with VSCode-inspired styling
|
|
98
|
+
*/
|
|
99
|
+
function createBanner(options) {
|
|
100
|
+
const lines = [];
|
|
101
|
+
const width = 52;
|
|
102
|
+
// Top border
|
|
103
|
+
lines.push(exports.theme.primary('┌' + '─'.repeat(width - 2) + '┐'));
|
|
104
|
+
// Title line
|
|
105
|
+
const title = `ClawSQL v${options.version}`;
|
|
106
|
+
const titlePadding = Math.floor((width - title.length - 2) / 2);
|
|
107
|
+
lines.push(exports.theme.primary('│') +
|
|
108
|
+
' '.repeat(titlePadding) +
|
|
109
|
+
exports.theme.highlight.bold(title) +
|
|
110
|
+
' '.repeat(width - title.length - titlePadding - 2) +
|
|
111
|
+
exports.theme.primary('│'));
|
|
112
|
+
// Subtitle
|
|
113
|
+
const subtitle = 'MySQL Cluster Management';
|
|
114
|
+
const subtitlePadding = Math.floor((width - subtitle.length - 2) / 2);
|
|
115
|
+
lines.push(exports.theme.primary('│') +
|
|
116
|
+
' '.repeat(subtitlePadding) +
|
|
117
|
+
exports.theme.secondary(subtitle) +
|
|
118
|
+
' '.repeat(width - subtitle.length - subtitlePadding - 2) +
|
|
119
|
+
exports.theme.primary('│'));
|
|
120
|
+
// Status line
|
|
121
|
+
const statusParts = [];
|
|
122
|
+
if (options.aiStatus) {
|
|
123
|
+
const icon = options.aiStatus.enabled ? exports.indicators.success : exports.indicators.circle;
|
|
124
|
+
const label = `${icon} AI: ${options.aiStatus.provider || (options.aiStatus.enabled ? 'on' : 'off')}`;
|
|
125
|
+
statusParts.push(options.aiStatus.enabled ? exports.theme.accent(label) : exports.theme.muted(label));
|
|
126
|
+
}
|
|
127
|
+
if (options.orchestratorStatus) {
|
|
128
|
+
const icon = options.orchestratorStatus === 'connected'
|
|
129
|
+
? exports.indicators.success
|
|
130
|
+
: options.orchestratorStatus === 'disconnected'
|
|
131
|
+
? exports.indicators.error
|
|
132
|
+
: exports.indicators.circle;
|
|
133
|
+
const label = `${icon} Orchestrator`;
|
|
134
|
+
statusParts.push(options.orchestratorStatus === 'connected'
|
|
135
|
+
? exports.theme.success(label)
|
|
136
|
+
: options.orchestratorStatus === 'disconnected'
|
|
137
|
+
? exports.theme.error(label)
|
|
138
|
+
: exports.theme.muted(label));
|
|
139
|
+
}
|
|
140
|
+
if (statusParts.length > 0) {
|
|
141
|
+
const statusText = statusParts.join(' ');
|
|
142
|
+
const visibleLen = visibleLength(statusText);
|
|
143
|
+
const statusPadding = Math.floor((width - visibleLen - 2) / 2);
|
|
144
|
+
lines.push(exports.theme.primary('│') +
|
|
145
|
+
' '.repeat(Math.max(1, statusPadding)) +
|
|
146
|
+
statusText +
|
|
147
|
+
' '.repeat(Math.max(1, width - visibleLen - statusPadding - 2)) +
|
|
148
|
+
exports.theme.primary('│'));
|
|
149
|
+
}
|
|
150
|
+
// Bottom border
|
|
151
|
+
lines.push(exports.theme.primary('└' + '─'.repeat(width - 2) + '┘'));
|
|
152
|
+
return lines.join('\n');
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Create a contextual prompt string
|
|
156
|
+
*/
|
|
157
|
+
function createPrompt(options) {
|
|
158
|
+
const { context, status = 'normal' } = options;
|
|
159
|
+
const statusColor = status === 'error'
|
|
160
|
+
? exports.theme.error
|
|
161
|
+
: status === 'warning'
|
|
162
|
+
? exports.theme.warning
|
|
163
|
+
: exports.theme.primary;
|
|
164
|
+
let prompt = statusColor('clawsql');
|
|
165
|
+
if (context) {
|
|
166
|
+
prompt += exports.theme.muted(` (${context})`);
|
|
167
|
+
}
|
|
168
|
+
prompt += ' ' + statusColor(exports.indicators.prompt) + ' ';
|
|
169
|
+
return prompt;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Create a suggestion box for command completions
|
|
173
|
+
*/
|
|
174
|
+
function createSuggestionBox(suggestions, hint) {
|
|
175
|
+
if (suggestions.length === 0)
|
|
176
|
+
return '';
|
|
177
|
+
const lines = [];
|
|
178
|
+
lines.push(exports.theme.muted(' Suggestions:'));
|
|
179
|
+
for (const suggestion of suggestions.slice(0, 5)) {
|
|
180
|
+
lines.push(exports.theme.info(` ${exports.indicators.arrow} ${suggestion}`));
|
|
181
|
+
}
|
|
182
|
+
if (suggestions.length > 5) {
|
|
183
|
+
lines.push(exports.theme.muted(` ... and ${suggestions.length - 5} more`));
|
|
184
|
+
}
|
|
185
|
+
if (hint) {
|
|
186
|
+
lines.push(exports.theme.secondary(' ' + hint));
|
|
187
|
+
}
|
|
188
|
+
return lines.join('\n');
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Create a "did you mean?" suggestion
|
|
192
|
+
*/
|
|
193
|
+
function createDidYouMean(typed, suggestions) {
|
|
194
|
+
if (suggestions.length === 0)
|
|
195
|
+
return '';
|
|
196
|
+
if (suggestions.length === 1) {
|
|
197
|
+
return exports.theme.error(`Unknown: ${typed}`) + ' ' + exports.theme.info(`Did you mean: /${suggestions[0]}?`);
|
|
198
|
+
}
|
|
199
|
+
const lines = [exports.theme.error(`Unknown: ${typed}`), exports.theme.info('Did you mean one of these?')];
|
|
200
|
+
for (const suggestion of suggestions) {
|
|
201
|
+
lines.push(exports.theme.muted(` /${suggestion}`));
|
|
202
|
+
}
|
|
203
|
+
return lines.join('\n');
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Create a status bar
|
|
207
|
+
*/
|
|
208
|
+
function createStatusBar(options) {
|
|
209
|
+
const parts = [];
|
|
210
|
+
if (options.clusters !== undefined) {
|
|
211
|
+
parts.push(`${exports.theme.info(exports.indicators.bullet)} Clusters: ${options.clusters}`);
|
|
212
|
+
}
|
|
213
|
+
if (options.instances !== undefined) {
|
|
214
|
+
parts.push(`${exports.theme.success(exports.indicators.bullet)} Instances: ${options.instances}`);
|
|
215
|
+
}
|
|
216
|
+
if (options.alerts !== undefined) {
|
|
217
|
+
const alertColor = options.alerts > 0 ? exports.theme.warning : exports.theme.success;
|
|
218
|
+
parts.push(`${alertColor(exports.indicators.bullet)} Alerts: ${options.alerts}`);
|
|
219
|
+
}
|
|
220
|
+
return parts.join(' ');
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Create a keybindings help box
|
|
224
|
+
*/
|
|
225
|
+
function createKeybindingsHelp() {
|
|
226
|
+
const lines = [
|
|
227
|
+
exports.theme.muted('─'.repeat(40)),
|
|
228
|
+
exports.theme.secondary(' Keyboard Shortcuts:'),
|
|
229
|
+
exports.theme.muted(' Tab ') + 'Auto-complete',
|
|
230
|
+
exports.theme.muted(' Ctrl+L ') + 'Clear screen',
|
|
231
|
+
exports.theme.muted(' Ctrl+C ') + 'Cancel input',
|
|
232
|
+
exports.theme.muted(' Ctrl+D ') + 'Exit',
|
|
233
|
+
exports.theme.muted(' Up/Down ') + 'History navigation',
|
|
234
|
+
exports.theme.muted('─'.repeat(40)),
|
|
235
|
+
];
|
|
236
|
+
return lines.join('\n');
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Clear the terminal screen
|
|
240
|
+
*/
|
|
241
|
+
function clearScreen() {
|
|
242
|
+
process.stdout.write('\x1B[2J\x1B[0f');
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Create a spinner for async operations
|
|
246
|
+
*/
|
|
247
|
+
function createSpinner(text) {
|
|
248
|
+
return (0, ora_1.default)({
|
|
249
|
+
text,
|
|
250
|
+
spinner: 'dots',
|
|
251
|
+
color: 'cyan',
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Format a command hint
|
|
256
|
+
*/
|
|
257
|
+
function formatCommandHint(command, description, usage) {
|
|
258
|
+
return [
|
|
259
|
+
exports.theme.primary(`/${command}`) + exports.theme.muted(' - ') + description,
|
|
260
|
+
exports.theme.muted(' Usage: ') + usage,
|
|
261
|
+
].join('\n');
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Create a divider line
|
|
265
|
+
*/
|
|
266
|
+
function divider(char = '─', width = 60) {
|
|
267
|
+
return exports.theme.muted(char.repeat(width));
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Format a welcome message
|
|
271
|
+
*/
|
|
272
|
+
function formatWelcomeMessage() {
|
|
273
|
+
return exports.theme.muted('Type /help for commands, /exit to quit.');
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Format a suggestions dropdown in Claude Code style
|
|
277
|
+
* Shows command suggestions with descriptions in a formatted panel
|
|
278
|
+
*/
|
|
279
|
+
function formatSuggestionsDropdown(suggestions, selectedIndex, maxWidth = process.stdout.columns || 80) {
|
|
280
|
+
if (suggestions.length === 0)
|
|
281
|
+
return '';
|
|
282
|
+
const lines = [];
|
|
283
|
+
// Calculate column widths
|
|
284
|
+
const nameWidth = Math.max(...suggestions.map(s => s.name.length)) + 2;
|
|
285
|
+
const descWidth = maxWidth - nameWidth - 4;
|
|
286
|
+
// Top border
|
|
287
|
+
lines.push(exports.theme.muted('─'.repeat(Math.min(maxWidth, 100))));
|
|
288
|
+
// Suggestions
|
|
289
|
+
suggestions.forEach((suggestion, index) => {
|
|
290
|
+
const isSelected = index === selectedIndex;
|
|
291
|
+
const name = suggestion.name.padEnd(nameWidth);
|
|
292
|
+
const desc = truncateText(suggestion.description, descWidth);
|
|
293
|
+
if (isSelected) {
|
|
294
|
+
// Highlight selected item
|
|
295
|
+
lines.push(exports.theme.primary('› ') +
|
|
296
|
+
exports.theme.primary.bold(name) +
|
|
297
|
+
exports.theme.muted(desc));
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
lines.push(' ' +
|
|
301
|
+
exports.theme.info(name) +
|
|
302
|
+
exports.theme.muted(desc));
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
// Bottom border
|
|
306
|
+
lines.push(exports.theme.muted('─'.repeat(Math.min(maxWidth, 100))));
|
|
307
|
+
return lines.join('\n');
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Truncate text to fit within maxWidth, adding ellipsis if needed
|
|
311
|
+
*/
|
|
312
|
+
function truncateText(text, maxWidth) {
|
|
313
|
+
if (text.length <= maxWidth)
|
|
314
|
+
return text;
|
|
315
|
+
if (maxWidth <= 3)
|
|
316
|
+
return '...';
|
|
317
|
+
return text.slice(0, maxWidth - 3) + '...';
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Clear the suggestions dropdown from the terminal
|
|
321
|
+
* @param numLines Number of lines to clear
|
|
322
|
+
*/
|
|
323
|
+
function clearSuggestionsDropdown(numLines) {
|
|
324
|
+
// Move cursor up and clear each line
|
|
325
|
+
for (let i = 0; i < numLines; i++) {
|
|
326
|
+
process.stdout.write('\x1B[1A'); // Move up one line
|
|
327
|
+
process.stdout.write('\x1B[2K'); // Clear entire line
|
|
328
|
+
}
|
|
329
|
+
process.stdout.write('\x1B[0G'); // Move cursor to beginning of line
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/cli/ui/components.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ClawSQL CLI - UI Module
|
|
4
|
+
*
|
|
5
|
+
* Export all UI components.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
__exportStar(require("./components.js"), exports);
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/ui/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,kDAAgC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClawSQL CLI - Docker Files Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages extraction and versioning of bundled Docker configuration files.
|
|
5
|
+
* This enables `npm install -g clawsql` to work without cloning the repo.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Get the ClawSQL home directory (~/.clawsql/)
|
|
9
|
+
*/
|
|
10
|
+
export declare function getClawSQLHome(): string;
|
|
11
|
+
/**
|
|
12
|
+
* Get the docker files directory (~/.clawsql/docker/)
|
|
13
|
+
*/
|
|
14
|
+
export declare function getDockerFilesDir(): string;
|
|
15
|
+
/**
|
|
16
|
+
* Check if Docker files need to be extracted
|
|
17
|
+
*/
|
|
18
|
+
export declare function needsExtraction(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Extract Docker files from npm package to ~/.clawsql/docker/
|
|
21
|
+
*/
|
|
22
|
+
export declare function ensureDockerFiles(): Promise<string>;
|
|
23
|
+
/**
|
|
24
|
+
* Get docker-compose.yml path
|
|
25
|
+
*/
|
|
26
|
+
export declare function getDockerComposePath(): string;
|
|
27
|
+
/**
|
|
28
|
+
* Get docker-compose.demo.yml path
|
|
29
|
+
*/
|
|
30
|
+
export declare function getDockerComposeDemoPath(): string;
|
|
31
|
+
/**
|
|
32
|
+
* Get .env.example path
|
|
33
|
+
*/
|
|
34
|
+
export declare function getEnvExamplePath(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Ensure .env file exists in the docker directory
|
|
37
|
+
*/
|
|
38
|
+
export declare function ensureEnvFile(): Promise<string>;
|
|
39
|
+
//# sourceMappingURL=docker-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-files.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/docker-files.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AASD;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAsBzC;AAyCD;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAsDzD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAyBrD"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ClawSQL CLI - Docker Files Manager
|
|
4
|
+
*
|
|
5
|
+
* Manages extraction and versioning of bundled Docker configuration files.
|
|
6
|
+
* This enables `npm install -g clawsql` to work without cloning the repo.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.getClawSQLHome = getClawSQLHome;
|
|
43
|
+
exports.getDockerFilesDir = getDockerFilesDir;
|
|
44
|
+
exports.needsExtraction = needsExtraction;
|
|
45
|
+
exports.ensureDockerFiles = ensureDockerFiles;
|
|
46
|
+
exports.getDockerComposePath = getDockerComposePath;
|
|
47
|
+
exports.getDockerComposeDemoPath = getDockerComposeDemoPath;
|
|
48
|
+
exports.getEnvExamplePath = getEnvExamplePath;
|
|
49
|
+
exports.ensureEnvFile = ensureEnvFile;
|
|
50
|
+
const fs = __importStar(require("fs"));
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
const os = __importStar(require("os"));
|
|
53
|
+
const settings_js_1 = require("../../config/settings.js");
|
|
54
|
+
/**
|
|
55
|
+
* Get the ClawSQL home directory (~/.clawsql/)
|
|
56
|
+
*/
|
|
57
|
+
function getClawSQLHome() {
|
|
58
|
+
const homeDir = os.homedir();
|
|
59
|
+
return path.join(homeDir, '.clawsql');
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get the docker files directory (~/.clawsql/docker/)
|
|
63
|
+
*/
|
|
64
|
+
function getDockerFilesDir() {
|
|
65
|
+
return path.join(getClawSQLHome(), 'docker');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get the version file path
|
|
69
|
+
*/
|
|
70
|
+
function getVersionFilePath() {
|
|
71
|
+
return path.join(getDockerFilesDir(), '.version');
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if Docker files need to be extracted
|
|
75
|
+
*/
|
|
76
|
+
function needsExtraction() {
|
|
77
|
+
const dockerDir = getDockerFilesDir();
|
|
78
|
+
const versionFile = getVersionFilePath();
|
|
79
|
+
// Check if directory exists
|
|
80
|
+
if (!fs.existsSync(dockerDir)) {
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
// Check if version file exists
|
|
84
|
+
if (!fs.existsSync(versionFile)) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
// Compare versions
|
|
88
|
+
try {
|
|
89
|
+
const storedVersion = fs.readFileSync(versionFile, 'utf-8').trim();
|
|
90
|
+
const currentVersion = (0, settings_js_1.getSettings)().appVersion;
|
|
91
|
+
return storedVersion !== currentVersion;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Recursively copy a directory
|
|
99
|
+
*/
|
|
100
|
+
function copyDirRecursive(src, dest) {
|
|
101
|
+
// Create destination directory
|
|
102
|
+
if (!fs.existsSync(dest)) {
|
|
103
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
104
|
+
}
|
|
105
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
106
|
+
for (const entry of entries) {
|
|
107
|
+
const srcPath = path.join(src, entry.name);
|
|
108
|
+
const destPath = path.join(dest, entry.name);
|
|
109
|
+
if (entry.isDirectory()) {
|
|
110
|
+
copyDirRecursive(srcPath, destPath);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
fs.copyFileSync(srcPath, destPath);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get the bundled docker files path (from npm package)
|
|
119
|
+
*/
|
|
120
|
+
function getBundledDockerPath() {
|
|
121
|
+
// When running from npm install, files are relative to dist/cli/utils/
|
|
122
|
+
return path.join(__dirname, '..', '..', '..', 'docker');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get the bundled docker-compose files path
|
|
126
|
+
*/
|
|
127
|
+
function getBundledDockerComposePath() {
|
|
128
|
+
// docker-compose.yml is at the root of the npm package
|
|
129
|
+
return path.join(__dirname, '..', '..', '..');
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Extract Docker files from npm package to ~/.clawsql/docker/
|
|
133
|
+
*/
|
|
134
|
+
async function ensureDockerFiles() {
|
|
135
|
+
const dockerDir = getDockerFilesDir();
|
|
136
|
+
// Check if extraction is needed
|
|
137
|
+
if (!needsExtraction()) {
|
|
138
|
+
return dockerDir;
|
|
139
|
+
}
|
|
140
|
+
console.log('Extracting Docker configuration files...');
|
|
141
|
+
// Create directory structure
|
|
142
|
+
if (!fs.existsSync(dockerDir)) {
|
|
143
|
+
fs.mkdirSync(dockerDir, { recursive: true });
|
|
144
|
+
}
|
|
145
|
+
// Get bundled paths
|
|
146
|
+
const bundledDockerPath = getBundledDockerPath();
|
|
147
|
+
const bundledRootPath = getBundledDockerComposePath();
|
|
148
|
+
// Check if bundled files exist
|
|
149
|
+
if (!fs.existsSync(bundledDockerPath)) {
|
|
150
|
+
throw new Error('Docker configuration files not found. ' +
|
|
151
|
+
'Please ensure clawsql is installed correctly.');
|
|
152
|
+
}
|
|
153
|
+
// Copy docker/ directory
|
|
154
|
+
copyDirRecursive(bundledDockerPath, dockerDir);
|
|
155
|
+
// Copy docker-compose.yml files
|
|
156
|
+
const composeFiles = ['docker-compose.yml', 'docker-compose.demo.yml'];
|
|
157
|
+
for (const file of composeFiles) {
|
|
158
|
+
const srcPath = path.join(bundledRootPath, file);
|
|
159
|
+
const destPath = path.join(dockerDir, file);
|
|
160
|
+
if (fs.existsSync(srcPath)) {
|
|
161
|
+
fs.copyFileSync(srcPath, destPath);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Copy init/ directory (MySQL init scripts)
|
|
165
|
+
const bundledInitPath = path.join(bundledRootPath, 'init');
|
|
166
|
+
const destInitPath = path.join(dockerDir, 'init');
|
|
167
|
+
if (fs.existsSync(bundledInitPath)) {
|
|
168
|
+
copyDirRecursive(bundledInitPath, destInitPath);
|
|
169
|
+
}
|
|
170
|
+
// Write version file
|
|
171
|
+
const version = (0, settings_js_1.getSettings)().appVersion;
|
|
172
|
+
fs.writeFileSync(getVersionFilePath(), version);
|
|
173
|
+
console.log(`Docker files extracted to: ${dockerDir}`);
|
|
174
|
+
return dockerDir;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Get docker-compose.yml path
|
|
178
|
+
*/
|
|
179
|
+
function getDockerComposePath() {
|
|
180
|
+
return path.join(getDockerFilesDir(), 'docker-compose.yml');
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get docker-compose.demo.yml path
|
|
184
|
+
*/
|
|
185
|
+
function getDockerComposeDemoPath() {
|
|
186
|
+
return path.join(getDockerFilesDir(), 'docker-compose.demo.yml');
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Get .env.example path
|
|
190
|
+
*/
|
|
191
|
+
function getEnvExamplePath() {
|
|
192
|
+
const bundledRootPath = getBundledDockerComposePath();
|
|
193
|
+
return path.join(bundledRootPath, '.env.example');
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Ensure .env file exists in the docker directory
|
|
197
|
+
*/
|
|
198
|
+
async function ensureEnvFile() {
|
|
199
|
+
const dockerDir = getDockerFilesDir();
|
|
200
|
+
const envPath = path.join(dockerDir, '.env');
|
|
201
|
+
const envExamplePath = path.join(dockerDir, '.env.example');
|
|
202
|
+
if (!fs.existsSync(envPath)) {
|
|
203
|
+
// Try to copy from example
|
|
204
|
+
if (fs.existsSync(envExamplePath)) {
|
|
205
|
+
fs.copyFileSync(envExamplePath, envPath);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
// Create minimal .env
|
|
209
|
+
const minimalEnv = `# ClawSQL Configuration
|
|
210
|
+
# Generated by ClawSQL CLI
|
|
211
|
+
|
|
212
|
+
API_TOKEN_SECRET=change-me-in-production
|
|
213
|
+
MYSQL_ADMIN_USER=clawsql
|
|
214
|
+
MYSQL_ADMIN_PASSWORD=clawsql_password
|
|
215
|
+
MYSQL_REPLICATION_USER=repl
|
|
216
|
+
MYSQL_REPLICATION_PASSWORD=repl_password
|
|
217
|
+
`;
|
|
218
|
+
fs.writeFileSync(envPath, minimalEnv);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return envPath;
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=docker-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-files.js","sourceRoot":"","sources":["../../../src/cli/utils/docker-files.ts"],"names":[],"mappings":"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"}
|