@quereus/quoomb-cli 0.4.2 → 0.4.3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quereus/quoomb-cli",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "type": "module",
5
5
  "description": "Quoomb CLI - Interactive REPL for Quereus SQL engine",
6
6
  "license": "MIT",
@@ -38,8 +38,8 @@
38
38
  "vitest": "^4.0.17"
39
39
  },
40
40
  "dependencies": {
41
- "@quereus/plugin-loader": "^0.3.2",
42
- "@quereus/quereus": "^0.16.0",
41
+ "@quereus/plugin-loader": "^0.3.3",
42
+ "@quereus/quereus": "^0.16.2",
43
43
  "chalk": "^5.6.2",
44
44
  "cli-table3": "^0.6.5",
45
45
  "commander": "^14.0.2",
@@ -1,210 +0,0 @@
1
- #!/usr/bin/env node
2
- import { Command } from 'commander';
3
- import { REPL } from '../repl.js';
4
- import { Database } from '@quereus/quereus';
5
- import { loadPluginsFromConfig, interpolateConfigEnvVars, validateConfig } from '@quereus/plugin-loader';
6
- import chalk from 'chalk';
7
- import * as fs from 'fs/promises';
8
- import * as path from 'path';
9
- import * as os from 'os';
10
- import Table from 'cli-table3';
11
- const program = new Command();
12
- program
13
- .name('quoomb')
14
- .description('Quoomb - Interactive REPL for Quereus SQL engine')
15
- .version('0.0.1')
16
- .option('-j, --json', 'output results as JSON instead of ASCII table')
17
- .option('-f, --file <path>', 'execute SQL from file and exit')
18
- .option('-c, --cmd <sql>', 'execute SQL command and exit')
19
- .option('--config <path>', 'load configuration from file')
20
- .option('--no-autoload', 'do not auto-load plugins from config')
21
- .option('--no-color', 'disable colored output')
22
- .action(async (options) => {
23
- try {
24
- if (options.file) {
25
- await executeFile(options.file, options);
26
- }
27
- else if (options.cmd) {
28
- await executeCommand(options.cmd, options);
29
- }
30
- else {
31
- console.log(chalk.blue('Welcome to Quoomb - Quereus SQL REPL'));
32
- console.log(chalk.gray('Type .help for available commands or enter SQL to execute'));
33
- console.log(chalk.gray('Use Ctrl+C or .exit to quit\n'));
34
- // Load config if available
35
- let config = undefined;
36
- const configPath = await resolveConfigPath(options.config);
37
- if (configPath) {
38
- try {
39
- config = await loadConfigFile(configPath);
40
- if (!validateConfig(config)) {
41
- console.warn(chalk.yellow(`Warning: Invalid config file at ${configPath}`));
42
- config = undefined;
43
- }
44
- else {
45
- console.log(chalk.gray(`Loaded config from ${configPath}`));
46
- }
47
- }
48
- catch (error) {
49
- console.warn(chalk.yellow(`Warning: ${error instanceof Error ? error.message : 'Failed to load config'}`));
50
- }
51
- }
52
- const repl = new REPL({ ...options, config, autoload: options.autoload !== false });
53
- await repl.start();
54
- }
55
- }
56
- catch (error) {
57
- console.error(chalk.red('Error:'), error instanceof Error ? error.message : error);
58
- process.exit(1);
59
- }
60
- });
61
- /**
62
- * Resolve config file path following the resolution strategy
63
- */
64
- async function resolveConfigPath(configOption) {
65
- // 1. --config CLI argument (highest priority)
66
- if (configOption) {
67
- return path.resolve(configOption);
68
- }
69
- // 2. QUOOMB_CONFIG environment variable
70
- if (process.env.QUOOMB_CONFIG) {
71
- return path.resolve(process.env.QUOOMB_CONFIG);
72
- }
73
- // 3. ./quoomb.config.json (current directory)
74
- const cwd = process.cwd();
75
- const cwdConfig = path.join(cwd, 'quoomb.config.json');
76
- try {
77
- await fs.access(cwdConfig);
78
- return cwdConfig;
79
- }
80
- catch {
81
- // File doesn't exist, continue
82
- }
83
- // 4. ~/.quoomb/config.json (user home directory)
84
- const homeDir = os.homedir();
85
- const homeConfig = path.join(homeDir, '.quoomb', 'config.json');
86
- try {
87
- await fs.access(homeConfig);
88
- return homeConfig;
89
- }
90
- catch {
91
- // File doesn't exist, continue
92
- }
93
- // 5. No config found
94
- return null;
95
- }
96
- /**
97
- * Load and parse config file
98
- */
99
- async function loadConfigFile(configPath) {
100
- try {
101
- const content = await fs.readFile(configPath, 'utf-8');
102
- return JSON.parse(content);
103
- }
104
- catch (error) {
105
- throw new Error(`Failed to load config from '${configPath}': ${error instanceof Error ? error.message : error}`);
106
- }
107
- }
108
- async function executeFile(filePath, options) {
109
- try {
110
- const sql = await fs.readFile(filePath, 'utf-8');
111
- await executeCommand(sql.trim(), options);
112
- }
113
- catch (error) {
114
- throw new Error(`Failed to read file '${filePath}': ${error instanceof Error ? error.message : error}`);
115
- }
116
- }
117
- async function executeCommand(sql, options) {
118
- const db = new Database();
119
- const startTime = Date.now();
120
- try {
121
- // Load config and plugins if available
122
- const configPath = await resolveConfigPath(options.config);
123
- if (configPath) {
124
- try {
125
- const config = await loadConfigFile(configPath);
126
- if (validateConfig(config)) {
127
- const interpolatedConfig = interpolateConfigEnvVars(config);
128
- if (interpolatedConfig.autoload !== false && options.autoload !== false) {
129
- await loadPluginsFromConfig(db, interpolatedConfig);
130
- }
131
- }
132
- }
133
- catch (error) {
134
- console.warn(chalk.yellow(`Warning: ${error instanceof Error ? error.message : 'Failed to load config'}`));
135
- }
136
- }
137
- // Check if this is a query that returns results
138
- const trimmedSql = sql.trim().toLowerCase();
139
- if (trimmedSql.startsWith('select') || trimmedSql.startsWith('with')) {
140
- const results = [];
141
- for await (const row of db.eval(sql)) {
142
- results.push(row);
143
- }
144
- const endTime = Date.now();
145
- if (options.json) {
146
- console.log(JSON.stringify(results, null, 2));
147
- }
148
- else {
149
- printTable(results, options);
150
- }
151
- if (options.color !== false) {
152
- console.error(chalk.gray(`${results.length} row(s) (${endTime - startTime}ms)`));
153
- }
154
- else {
155
- console.error(`${results.length} row(s) (${endTime - startTime}ms)`);
156
- }
157
- }
158
- else {
159
- // Execute statement without expecting results
160
- await db.exec(sql);
161
- const endTime = Date.now();
162
- if (options.color !== false) {
163
- console.error(chalk.green(`Query executed successfully (${endTime - startTime}ms)`));
164
- }
165
- else {
166
- console.error(`Query executed successfully (${endTime - startTime}ms)`);
167
- }
168
- }
169
- }
170
- catch (error) {
171
- const endTime = Date.now();
172
- if (options.color !== false) {
173
- console.error(chalk.red(`Query failed (${endTime - startTime}ms)`));
174
- }
175
- else {
176
- console.error(`Query failed (${endTime - startTime}ms)`);
177
- }
178
- throw error;
179
- }
180
- finally {
181
- await db.close();
182
- }
183
- }
184
- function printTable(results, options) {
185
- if (results.length === 0) {
186
- console.log(options.color !== false ? chalk.yellow('No rows returned') : 'No rows returned');
187
- return;
188
- }
189
- const columns = Object.keys(results[0]);
190
- const table = new Table({
191
- head: columns.map(col => options.color !== false ? chalk.cyan(col) : col),
192
- style: {
193
- head: options.color !== false ? ['cyan'] : []
194
- }
195
- });
196
- for (const row of results) {
197
- const values = columns.map(col => {
198
- const value = row[col];
199
- if (value === null)
200
- return options.color !== false ? chalk.gray('NULL') : 'NULL';
201
- if (typeof value === 'string')
202
- return value;
203
- return String(value);
204
- });
205
- table.push(values);
206
- }
207
- console.log(table.toString());
208
- }
209
- program.parse();
210
- //# sourceMappingURL=quoomb.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"quoomb.js","sourceRoot":"","sources":["../../src/bin/quoomb.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzG,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,kDAAkD,CAAC;KAC/D,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,YAAY,EAAE,+CAA+C,CAAC;KACrE,MAAM,CAAC,mBAAmB,EAAE,gCAAgC,CAAC;KAC7D,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;KACzD,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;KACzD,MAAM,CAAC,eAAe,EAAE,sCAAsC,CAAC;KAC/D,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;KAC9C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;YAEzD,2BAA2B;YAC3B,IAAI,MAAM,GAAQ,SAAS,CAAC;YAC5B,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC3D,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;oBAC1C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC5B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,mCAAmC,UAAU,EAAE,CAAC,CAAC,CAAC;wBAC5E,MAAM,GAAG,SAAS,CAAC;oBACrB,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC,CAAC;oBAC9D,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;gBAC7G,CAAC;YACH,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;YACpF,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,YAAqB;IACpD,8CAA8C;IAC9C,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAED,wCAAwC;IACxC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC;IAED,8CAA8C;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IAED,iDAAiD;IACjD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5B,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IAED,qBAAqB;IACrB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,UAAkB;IAC9C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,+BAA+B,UAAU,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACnH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,OAAY;IACvD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1G,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,OAAY;IACrD,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,uCAAuC;QACvC,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;gBAChD,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3B,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;oBAC5D,IAAI,kBAAkB,CAAC,QAAQ,KAAK,KAAK,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;wBACxE,MAAM,qBAAqB,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;oBACtD,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;YAC7G,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACrE,MAAM,OAAO,GAAG,EAAE,CAAC;YACnB,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE3B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/B,CAAC;YAED,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,YAAY,OAAO,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC;YACnF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,YAAY,OAAO,GAAG,SAAS,KAAK,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,8CAA8C;YAC9C,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE3B,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,OAAO,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC;YACvF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,gCAAgC,OAAO,GAAG,SAAS,KAAK,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,OAAO,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,iBAAiB,OAAO,GAAG,SAAS,KAAK,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,OAAc,EAAE,OAAY;IAC9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAC7F,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACzE,KAAK,EAAE;YACL,IAAI,EAAE,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;SAC9C;KACF,CAAC,CAAC;IAEH,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACjF,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -1,610 +0,0 @@
1
- import chalk from 'chalk';
2
- import Table from 'cli-table3';
3
- import * as fs from 'fs/promises';
4
- import * as path from 'path';
5
- import Papa from 'papaparse';
6
- import { dynamicLoadModule, validatePluginUrl } from '@quereus/plugin-loader';
7
- import os from 'os';
8
- import crypto from 'crypto';
9
- export class DotCommands {
10
- db;
11
- constructor(db) {
12
- this.db = db;
13
- }
14
- async handle(command, rl) {
15
- const parts = command.slice(1).split(/\s+/);
16
- const cmd = parts[0];
17
- const args = parts.slice(1);
18
- switch (cmd) {
19
- case 'help':
20
- this.printHelp();
21
- break;
22
- case 'exit':
23
- case 'quit':
24
- rl.close();
25
- break;
26
- case 'tables':
27
- await this.listTables();
28
- break;
29
- case 'schema':
30
- await this.showSchema(args[0]);
31
- break;
32
- case 'import':
33
- await this.importCsv(args[0]);
34
- break;
35
- case 'export':
36
- await this.exportQuery(args[0], args[1]);
37
- break;
38
- default:
39
- return false; // Command not handled
40
- }
41
- return true; // Command was handled
42
- }
43
- printHelp() {
44
- console.log(`
45
- Available commands:
46
- .help Show this help message
47
- .exit, .quit Exit the REPL
48
- .tables List all tables
49
- .schema [table] Show table schema
50
- .import <file.csv> Import CSV file as table
51
- .export <sql> <file> Export query results to file
52
-
53
- Plugin commands:
54
- .plugin install <url> Install plugin from URL
55
- .plugin list List installed plugins
56
- .plugin enable <name> Enable a plugin
57
- .plugin disable <name> Disable a plugin
58
- .plugin remove <name> Remove a plugin
59
- .plugin config <name> Configure a plugin
60
- .plugin reload <name> Reload a plugin
61
-
62
- SQL commands:
63
- Enter any SQL statement to execute it
64
-
65
- Examples:
66
- CREATE TABLE users (id INTEGER, name TEXT);
67
- INSERT INTO users VALUES (1, 'Alice');
68
- SELECT * FROM users;
69
- .import data.csv
70
- .export "SELECT * FROM users" output.json
71
- `);
72
- }
73
- async listTables() {
74
- try {
75
- const results = [];
76
- for await (const row of this.db.eval(`
77
- SELECT name, type FROM sqlite_schema
78
- WHERE type IN ('table', 'view')
79
- ORDER BY name
80
- `)) {
81
- results.push(row);
82
- }
83
- if (results.length === 0) {
84
- console.log(chalk.yellow('No tables found'));
85
- return;
86
- }
87
- const table = new Table({
88
- head: [chalk.cyan('Name'), chalk.cyan('Type')]
89
- });
90
- for (const row of results) {
91
- table.push([String(row.name || ''), String(row.type || '')]);
92
- }
93
- console.log(table.toString());
94
- console.log(chalk.gray(`\n${results.length} table(s)`));
95
- }
96
- catch (error) {
97
- console.error(chalk.red('Error listing tables:'), error instanceof Error ? error.message : String(error));
98
- }
99
- }
100
- async showSchema(tableName) {
101
- try {
102
- if (!tableName) {
103
- // Show all schemas
104
- const results = [];
105
- for await (const row of this.db.eval(`
106
- SELECT sql FROM sqlite_schema
107
- WHERE sql IS NOT NULL
108
- ORDER BY name
109
- `)) {
110
- results.push(row);
111
- }
112
- if (results.length === 0) {
113
- console.log(chalk.yellow('No schema found'));
114
- return;
115
- }
116
- for (const row of results) {
117
- console.log(chalk.white(String(row.sql) + ';'));
118
- }
119
- }
120
- else {
121
- // Show specific table schema
122
- const results = [];
123
- for await (const row of this.db.eval(`
124
- SELECT sql FROM sqlite_schema
125
- WHERE name = ? AND sql IS NOT NULL
126
- `, [tableName])) {
127
- results.push(row);
128
- }
129
- if (results.length === 0) {
130
- console.log(chalk.yellow(`Table '${tableName}' not found`));
131
- return;
132
- }
133
- console.log(chalk.white(String(results[0].sql) + ';'));
134
- // Also show column info
135
- const columns = [];
136
- for await (const row of this.db.eval(`PRAGMA table_info(${tableName})`)) {
137
- columns.push(row);
138
- }
139
- if (columns.length > 0) {
140
- console.log(chalk.gray('\nColumns:'));
141
- const table = new Table({
142
- head: [chalk.cyan('Name'), chalk.cyan('Type'), chalk.cyan('NotNull'), chalk.cyan('Default'), chalk.cyan('PK')]
143
- });
144
- for (const col of columns) {
145
- table.push([
146
- String(col.name || ''),
147
- String(col.type || 'TEXT'),
148
- col.notnull ? 'YES' : 'NO',
149
- String(col.dflt_value || ''),
150
- col.pk ? 'YES' : 'NO'
151
- ]);
152
- }
153
- console.log(table.toString());
154
- }
155
- }
156
- }
157
- catch (error) {
158
- console.error(chalk.red('Error showing schema:'), error instanceof Error ? error.message : String(error));
159
- }
160
- }
161
- async importCsv(filePath) {
162
- if (!filePath) {
163
- console.log(chalk.red('Please specify a CSV file path'));
164
- return;
165
- }
166
- try {
167
- const resolvedPath = path.resolve(filePath);
168
- const fileContent = await fs.readFile(resolvedPath, 'utf-8');
169
- // Parse CSV
170
- const parseResult = Papa.parse(fileContent, {
171
- header: true,
172
- skipEmptyLines: true,
173
- transform: (value, field) => {
174
- // Try to convert numbers
175
- if (value === '')
176
- return null;
177
- const num = Number(value);
178
- if (!isNaN(num) && value === num.toString()) {
179
- return num;
180
- }
181
- return value;
182
- }
183
- });
184
- if (parseResult.errors.length > 0) {
185
- console.log(chalk.red('CSV parsing errors:'));
186
- parseResult.errors.forEach(error => {
187
- console.log(chalk.red(` Line ${error.row}: ${error.message}`));
188
- });
189
- return;
190
- }
191
- if (parseResult.data.length === 0) {
192
- console.log(chalk.yellow('No data found in CSV file'));
193
- return;
194
- }
195
- // Generate table name from file name
196
- const tableName = path.basename(filePath, path.extname(filePath))
197
- .replace(/[^a-zA-Z0-9_]/g, '_')
198
- .replace(/^[0-9]/, '_$&'); // Ensure it doesn't start with a number
199
- // Infer column types from data
200
- const firstRow = parseResult.data[0];
201
- const columns = Object.keys(firstRow).map(col => {
202
- const sampleValues = parseResult.data.slice(0, 10).map(row => row[col]);
203
- const hasNumbers = sampleValues.some(val => typeof val === 'number');
204
- const hasStrings = sampleValues.some(val => typeof val === 'string' && val !== '');
205
- let type = 'TEXT';
206
- if (hasNumbers && !hasStrings) {
207
- type = 'REAL';
208
- }
209
- else if (hasNumbers) {
210
- type = 'TEXT'; // Mixed, so use TEXT
211
- }
212
- return `"${col}" ${type}`;
213
- });
214
- // Create table
215
- const createSql = `CREATE TABLE "${tableName}" (${columns.join(', ')})`;
216
- await this.db.exec(createSql);
217
- console.log(chalk.green(`Created table: ${tableName}`));
218
- // Insert data
219
- const columnNames = Object.keys(firstRow);
220
- const placeholders = columnNames.map(() => '?').join(', ');
221
- const insertSql = `INSERT INTO "${tableName}" (${columnNames.map(c => `"${c}"`).join(', ')}) VALUES (${placeholders})`;
222
- const stmt = await this.db.prepare(insertSql);
223
- let insertCount = 0;
224
- try {
225
- for (const row of parseResult.data) {
226
- const values = columnNames.map(col => row[col]);
227
- await stmt.run(values);
228
- insertCount++;
229
- }
230
- }
231
- finally {
232
- await stmt.finalize();
233
- }
234
- console.log(chalk.green(`Imported ${insertCount} rows into table '${tableName}'`));
235
- }
236
- catch (error) {
237
- console.error(chalk.red('Error importing CSV:'), error instanceof Error ? error.message : String(error));
238
- }
239
- }
240
- async exportQuery(sql, outputPath) {
241
- if (!sql || !outputPath) {
242
- console.log(chalk.red('Please specify both SQL query and output file path'));
243
- console.log(chalk.gray('Usage: .export "SELECT * FROM table" output.json'));
244
- return;
245
- }
246
- try {
247
- const results = [];
248
- for await (const row of this.db.eval(sql)) {
249
- results.push(row);
250
- }
251
- const resolvedPath = path.resolve(outputPath);
252
- const ext = path.extname(resolvedPath).toLowerCase();
253
- if (ext === '.json') {
254
- await fs.writeFile(resolvedPath, JSON.stringify(results, null, 2), 'utf-8');
255
- }
256
- else if (ext === '.csv') {
257
- if (results.length === 0) {
258
- await fs.writeFile(resolvedPath, '', 'utf-8');
259
- }
260
- else {
261
- const csv = Papa.unparse(results);
262
- await fs.writeFile(resolvedPath, csv, 'utf-8');
263
- }
264
- }
265
- else {
266
- // Default to JSON
267
- await fs.writeFile(resolvedPath, JSON.stringify(results, null, 2), 'utf-8');
268
- }
269
- console.log(chalk.green(`Exported ${results.length} rows to '${outputPath}'`));
270
- }
271
- catch (error) {
272
- console.error(chalk.red('Error exporting query:'), error instanceof Error ? error.message : String(error));
273
- }
274
- }
275
- }
276
- export const handleDotCommand = async (line, db, readlineInterface) => {
277
- // ... existing commands ...
278
- if (line.startsWith('.plugin')) {
279
- await handlePluginCommand(line, db);
280
- return true;
281
- }
282
- // ... rest of existing code ...
283
- // Return false for unhandled commands
284
- return false;
285
- };
286
- const handlePluginCommand = async (line, db) => {
287
- const args = line.split(/\s+/).slice(1);
288
- const subcommand = args[0];
289
- switch (subcommand) {
290
- case 'install':
291
- await installPluginCommand(args.slice(1), db);
292
- break;
293
- case 'list':
294
- await listPluginsCommand();
295
- break;
296
- case 'enable':
297
- await enablePluginCommand(args.slice(1), db);
298
- break;
299
- case 'disable':
300
- await disablePluginCommand(args.slice(1));
301
- break;
302
- case 'remove':
303
- await removePluginCommand(args.slice(1));
304
- break;
305
- case 'config':
306
- await configPluginCommand(args.slice(1), db);
307
- break;
308
- case 'reload':
309
- await reloadPluginCommand(args.slice(1), db);
310
- break;
311
- default:
312
- console.log('Plugin management commands:');
313
- console.log(' .plugin install <url> - Install plugin from URL');
314
- console.log(' .plugin list - List installed plugins');
315
- console.log(' .plugin enable <name> - Enable a plugin');
316
- console.log(' .plugin disable <name> - Disable a plugin');
317
- console.log(' .plugin remove <name> - Remove a plugin');
318
- console.log(' .plugin config <name> - Configure a plugin');
319
- console.log(' .plugin reload <name> - Reload a plugin');
320
- break;
321
- }
322
- };
323
- const getPluginsFilePath = () => {
324
- const homeDir = os.homedir();
325
- const configDir = path.join(homeDir, '.quoomb');
326
- return path.join(configDir, 'plugins.json');
327
- };
328
- const loadPlugins = async () => {
329
- try {
330
- const filePath = getPluginsFilePath();
331
- const data = await fs.readFile(filePath, 'utf-8');
332
- return JSON.parse(data);
333
- }
334
- catch (error) {
335
- // File doesn't exist or is invalid, return empty array
336
- return [];
337
- }
338
- };
339
- const savePlugins = async (plugins) => {
340
- const filePath = getPluginsFilePath();
341
- const configDir = path.dirname(filePath);
342
- // Ensure config directory exists
343
- try {
344
- await fs.mkdir(configDir, { recursive: true });
345
- }
346
- catch (error) {
347
- // Directory already exists
348
- }
349
- await fs.writeFile(filePath, JSON.stringify(plugins, null, 2));
350
- };
351
- const installPluginCommand = async (args, db) => {
352
- if (args.length === 0) {
353
- console.log('Usage: .plugin install <url>');
354
- return;
355
- }
356
- const url = args[0];
357
- if (!validatePluginUrl(url)) {
358
- console.log('Error: Invalid plugin URL. Must be https:// or file:// URL ending in .js or .mjs');
359
- return;
360
- }
361
- try {
362
- console.log(`Installing plugin from ${url}...`);
363
- // Try to load the plugin
364
- const manifest = await dynamicLoadModule(url, db, {});
365
- // Load existing plugins
366
- const plugins = await loadPlugins();
367
- // Check if already installed
368
- const existing = plugins.find(p => p.url === url);
369
- if (existing) {
370
- console.log(`Plugin from ${url} is already installed`);
371
- return;
372
- }
373
- // Create plugin record
374
- const pluginRecord = {
375
- id: crypto.randomUUID(),
376
- url,
377
- enabled: true,
378
- manifest,
379
- config: {},
380
- };
381
- // Add to list and save
382
- plugins.push(pluginRecord);
383
- await savePlugins(plugins);
384
- console.log(`Successfully installed plugin: ${manifest?.name || 'Unknown'}`);
385
- if (manifest?.description) {
386
- console.log(` ${manifest.description}`);
387
- }
388
- if (manifest?.version) {
389
- console.log(` Version: ${manifest.version}`);
390
- }
391
- }
392
- catch (error) {
393
- console.log(`Error installing plugin: ${error instanceof Error ? error.message : 'Unknown error'}`);
394
- }
395
- };
396
- const listPluginsCommand = async () => {
397
- const plugins = await loadPlugins();
398
- if (plugins.length === 0) {
399
- console.log('No plugins installed');
400
- return;
401
- }
402
- console.log('Installed plugins:');
403
- for (const plugin of plugins) {
404
- const status = plugin.enabled ? '✓' : '✗';
405
- const name = plugin.manifest?.name || 'Unknown';
406
- const version = plugin.manifest?.version || '';
407
- console.log(` ${status} ${name} ${version ? `(v${version})` : ''}`);
408
- console.log(` ${plugin.url}`);
409
- if (plugin.manifest?.description) {
410
- console.log(` ${plugin.manifest.description}`);
411
- }
412
- console.log();
413
- }
414
- };
415
- const enablePluginCommand = async (args, db) => {
416
- if (args.length === 0) {
417
- console.log('Usage: .plugin enable <name>');
418
- return;
419
- }
420
- const name = args[0];
421
- const plugins = await loadPlugins();
422
- const plugin = plugins.find(p => p.manifest?.name === name);
423
- if (!plugin) {
424
- console.log(`Plugin '${name}' not found`);
425
- return;
426
- }
427
- if (plugin.enabled) {
428
- console.log(`Plugin '${name}' is already enabled`);
429
- return;
430
- }
431
- try {
432
- // Load the plugin
433
- const manifest = await dynamicLoadModule(plugin.url, db, plugin.config);
434
- // Update plugin record
435
- plugin.enabled = true;
436
- if (manifest) {
437
- plugin.manifest = manifest;
438
- }
439
- await savePlugins(plugins);
440
- console.log(`Enabled plugin: ${name}`);
441
- }
442
- catch (error) {
443
- console.log(`Error enabling plugin: ${error instanceof Error ? error.message : 'Unknown error'}`);
444
- }
445
- };
446
- const disablePluginCommand = async (args) => {
447
- if (args.length === 0) {
448
- console.log('Usage: .plugin disable <name>');
449
- return;
450
- }
451
- const name = args[0];
452
- const plugins = await loadPlugins();
453
- const plugin = plugins.find(p => p.manifest?.name === name);
454
- if (!plugin) {
455
- console.log(`Plugin '${name}' not found`);
456
- return;
457
- }
458
- if (!plugin.enabled) {
459
- console.log(`Plugin '${name}' is already disabled`);
460
- return;
461
- }
462
- plugin.enabled = false;
463
- await savePlugins(plugins);
464
- console.log(`Disabled plugin: ${name}`);
465
- console.log('Note: Plugin will be unloaded on next restart');
466
- };
467
- const removePluginCommand = async (args) => {
468
- if (args.length === 0) {
469
- console.log('Usage: .plugin remove <name>');
470
- return;
471
- }
472
- const name = args[0];
473
- const plugins = await loadPlugins();
474
- const pluginIndex = plugins.findIndex(p => p.manifest?.name === name);
475
- if (pluginIndex === -1) {
476
- console.log(`Plugin '${name}' not found`);
477
- return;
478
- }
479
- plugins.splice(pluginIndex, 1);
480
- await savePlugins(plugins);
481
- console.log(`Removed plugin: ${name}`);
482
- };
483
- const configPluginCommand = async (args, db) => {
484
- if (args.length === 0) {
485
- console.log('Usage: .plugin config <name> [key=value ...]');
486
- return;
487
- }
488
- const name = args[0];
489
- const plugins = await loadPlugins();
490
- const plugin = plugins.find(p => p.manifest?.name === name);
491
- if (!plugin) {
492
- console.log(`Plugin '${name}' not found`);
493
- return;
494
- }
495
- if (args.length === 1) {
496
- // Show current configuration
497
- console.log(`Configuration for ${name}:`);
498
- if (!plugin.manifest?.settings?.length) {
499
- console.log(' No configuration options available');
500
- return;
501
- }
502
- for (const setting of plugin.manifest.settings) {
503
- const value = plugin.config[setting.key] ?? setting.default ?? '';
504
- console.log(` ${setting.key}: ${value} (${setting.type})`);
505
- if (setting.help) {
506
- console.log(` ${setting.help}`);
507
- }
508
- }
509
- return;
510
- }
511
- // Update configuration
512
- const configUpdates = {};
513
- for (let i = 1; i < args.length; i++) {
514
- const [key, ...valueParts] = args[i].split('=');
515
- if (!key || valueParts.length === 0) {
516
- console.log(`Invalid config format: ${args[i]}. Use key=value`);
517
- continue;
518
- }
519
- const value = valueParts.join('=');
520
- const setting = plugin.manifest?.settings?.find((s) => s.key === key);
521
- if (!setting) {
522
- console.log(`Unknown setting: ${key}`);
523
- continue;
524
- }
525
- // Parse value according to type
526
- let parsedValue;
527
- switch (setting.type) {
528
- case 'number':
529
- parsedValue = Number(value);
530
- if (isNaN(parsedValue)) {
531
- console.log(`Invalid number value for ${key}: ${value}`);
532
- continue;
533
- }
534
- break;
535
- case 'boolean':
536
- parsedValue = value.toLowerCase() === 'true';
537
- break;
538
- default:
539
- parsedValue = value;
540
- }
541
- configUpdates[key] = parsedValue;
542
- }
543
- // Update plugin config
544
- plugin.config = { ...plugin.config, ...configUpdates };
545
- await savePlugins(plugins);
546
- // Reload plugin if enabled
547
- if (plugin.enabled) {
548
- try {
549
- await dynamicLoadModule(plugin.url, db, plugin.config);
550
- console.log(`Updated configuration and reloaded plugin: ${name}`);
551
- }
552
- catch (error) {
553
- console.log(`Configuration updated but failed to reload plugin: ${error instanceof Error ? error.message : 'Unknown error'}`);
554
- }
555
- }
556
- else {
557
- console.log(`Updated configuration for plugin: ${name}`);
558
- }
559
- };
560
- const reloadPluginCommand = async (args, db) => {
561
- if (args.length === 0) {
562
- console.log('Usage: .plugin reload <name>');
563
- return;
564
- }
565
- const name = args[0];
566
- const plugins = await loadPlugins();
567
- const plugin = plugins.find(p => p.manifest?.name === name);
568
- if (!plugin) {
569
- console.log(`Plugin '${name}' not found`);
570
- return;
571
- }
572
- if (!plugin.enabled) {
573
- console.log(`Plugin '${name}' is disabled`);
574
- return;
575
- }
576
- try {
577
- const manifest = await dynamicLoadModule(plugin.url, db, plugin.config);
578
- // Update manifest if it changed
579
- if (manifest) {
580
- plugin.manifest = manifest;
581
- await savePlugins(plugins);
582
- }
583
- console.log(`Reloaded plugin: ${name}`);
584
- }
585
- catch (error) {
586
- console.log(`Error reloading plugin: ${error instanceof Error ? error.message : 'Unknown error'}`);
587
- }
588
- };
589
- // Update the startup function to load enabled plugins
590
- export const loadEnabledPlugins = async (db) => {
591
- const plugins = await loadPlugins();
592
- const enabledPlugins = plugins.filter(p => p.enabled);
593
- for (const plugin of enabledPlugins) {
594
- try {
595
- const manifest = await dynamicLoadModule(plugin.url, db, plugin.config);
596
- // Update manifest if it changed
597
- if (manifest && (!plugin.manifest || plugin.manifest.version !== manifest.version)) {
598
- plugin.manifest = manifest;
599
- await savePlugins(plugins);
600
- }
601
- }
602
- catch (error) {
603
- console.log(`Warning: Failed to load plugin ${plugin.manifest?.name || plugin.url}: ${error instanceof Error ? error.message : 'Unknown error'}`);
604
- // Disable the plugin if it failed to load
605
- plugin.enabled = false;
606
- await savePlugins(plugins);
607
- }
608
- }
609
- };
610
- //# sourceMappingURL=dot-commands.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dot-commands.js","sourceRoot":"","sources":["../../src/commands/dot-commands.ts"],"names":[],"mappings":"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"}
package/dist/index.js DELETED
@@ -1,3 +0,0 @@
1
- export { REPL } from './repl.js';
2
- export { DotCommands } from './commands/dot-commands.js';
3
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC"}
package/dist/repl.js DELETED
@@ -1,288 +0,0 @@
1
- import * as readline from 'readline';
2
- import { Database, formatErrorChain, unwrapError } from '@quereus/quereus';
3
- import { loadPluginsFromConfig, interpolateConfigEnvVars } from '@quereus/plugin-loader';
4
- import chalk from 'chalk';
5
- import Table from 'cli-table3';
6
- import { DotCommands } from './commands/dot-commands.js';
7
- import { handleDotCommand, loadEnabledPlugins } from './commands/dot-commands.js';
8
- export class REPL {
9
- db;
10
- rl;
11
- dotCommands;
12
- options;
13
- constructor(options = {}) {
14
- this.options = { color: true, autoload: true, ...options };
15
- this.db = new Database();
16
- this.dotCommands = new DotCommands(this.db);
17
- this.rl = readline.createInterface({
18
- input: process.stdin,
19
- output: process.stdout,
20
- prompt: this.getPrompt(),
21
- completer: this.completer.bind(this)
22
- });
23
- this.setupSignalHandlers();
24
- }
25
- getPrompt() {
26
- return this.options.color ? chalk.green('quoomb> ') : 'quoomb> ';
27
- }
28
- setupSignalHandlers() {
29
- this.rl.on('SIGINT', () => {
30
- console.log('\nReceived SIGINT. Use .exit to quit.');
31
- this.rl.prompt();
32
- });
33
- }
34
- async start() {
35
- console.log('🚀 Quoomb Interactive SQL Shell');
36
- console.log('Type .help for available commands, or enter SQL statements');
37
- console.log('');
38
- // Load plugins from config if provided and autoload is enabled
39
- if (this.options.config && this.options.autoload !== false) {
40
- try {
41
- const config = interpolateConfigEnvVars(this.options.config);
42
- if (config.autoload !== false) {
43
- await loadPluginsFromConfig(this.db, config);
44
- }
45
- }
46
- catch (error) {
47
- console.log(`Warning: Error loading plugins from config: ${error instanceof Error ? error.message : 'Unknown error'}`);
48
- }
49
- }
50
- // Load enabled plugins at startup (from legacy plugin storage)
51
- try {
52
- await loadEnabledPlugins(this.db);
53
- }
54
- catch (error) {
55
- console.log(`Warning: Error loading plugins: ${error instanceof Error ? error.message : 'Unknown error'}`);
56
- }
57
- this.rl.prompt();
58
- this.rl.on('line', async (line) => {
59
- const trimmed = line.trim();
60
- if (!trimmed) {
61
- this.rl.prompt();
62
- return;
63
- }
64
- // Handle dot commands
65
- if (trimmed.startsWith('.')) {
66
- try {
67
- // Check if it's a plugin command first
68
- if (trimmed.startsWith('.plugin')) {
69
- await handleDotCommand(trimmed, this.db, this.rl);
70
- }
71
- else {
72
- // Use existing dot commands handler
73
- const handled = await this.dotCommands.handle(trimmed, this.rl);
74
- if (!handled) {
75
- console.log(`Unknown command: ${trimmed}`);
76
- console.log('Type .help for available commands');
77
- }
78
- }
79
- }
80
- catch (error) {
81
- this.printEnhancedError(error);
82
- }
83
- this.rl.prompt();
84
- return;
85
- }
86
- // Handle SQL
87
- try {
88
- const results = [];
89
- for await (const row of this.db.eval(trimmed)) {
90
- results.push(row);
91
- }
92
- if (results.length > 0) {
93
- console.table(results);
94
- console.log(`\n${results.length} row(s) returned\n`);
95
- }
96
- else {
97
- console.log('Query executed successfully\n');
98
- }
99
- }
100
- catch (error) {
101
- this.printEnhancedError(error);
102
- }
103
- this.rl.prompt();
104
- });
105
- this.rl.on('close', () => {
106
- console.log('\nGoodbye! 👋');
107
- this.db.close();
108
- process.exit(0);
109
- });
110
- }
111
- completer(line) {
112
- const hits = [];
113
- // Dot command completion
114
- if (line.startsWith('.')) {
115
- const dotCommands = [
116
- '.help',
117
- '.tables',
118
- '.schema',
119
- '.dump',
120
- '.read',
121
- '.exit',
122
- '.plugin',
123
- '.plugin install',
124
- '.plugin list',
125
- '.plugin enable',
126
- '.plugin disable',
127
- '.plugin remove',
128
- '.plugin config',
129
- '.plugin reload'
130
- ];
131
- for (const cmd of dotCommands) {
132
- if (cmd.startsWith(line)) {
133
- hits.push(cmd);
134
- }
135
- }
136
- }
137
- else {
138
- // SQL keyword completion
139
- const sqlKeywords = [
140
- 'SELECT', 'FROM', 'WHERE', 'INSERT', 'UPDATE', 'DELETE',
141
- 'CREATE', 'DROP', 'ALTER', 'TABLE', 'INDEX', 'VIEW',
142
- 'JOIN', 'INNER', 'LEFT', 'RIGHT', 'OUTER', 'ON',
143
- 'GROUP BY', 'ORDER BY', 'HAVING', 'LIMIT', 'OFFSET',
144
- 'AND', 'OR', 'NOT', 'NULL', 'IS', 'IN', 'EXISTS',
145
- 'COUNT', 'SUM', 'AVG', 'MIN', 'MAX', 'DISTINCT'
146
- ];
147
- const upperLine = line.toUpperCase();
148
- const lastWord = line.split(/\s+/).pop()?.toUpperCase() || '';
149
- for (const keyword of sqlKeywords) {
150
- if (keyword.startsWith(lastWord)) {
151
- hits.push(line.slice(0, -lastWord.length) + keyword);
152
- }
153
- }
154
- }
155
- return [hits, line];
156
- }
157
- printResults(results, executionTime) {
158
- if (results.length === 0) {
159
- console.log(chalk.yellow('No rows returned'));
160
- return;
161
- }
162
- if (this.options.json) {
163
- console.log(JSON.stringify(results, null, 2));
164
- }
165
- else {
166
- this.printTable(results);
167
- }
168
- console.log(chalk.gray(`\n${results.length} row(s) (${executionTime}ms)`));
169
- }
170
- printTable(results) {
171
- if (results.length === 0)
172
- return;
173
- const columns = Object.keys(results[0]);
174
- const table = new Table({
175
- head: columns.map(col => this.options.color ? chalk.cyan(col) : col),
176
- style: {
177
- head: this.options.color ? ['cyan'] : []
178
- }
179
- });
180
- for (const row of results) {
181
- const values = columns.map(col => {
182
- const value = row[col];
183
- if (value === null)
184
- return this.options.color ? chalk.gray('NULL') : 'NULL';
185
- if (typeof value === 'string')
186
- return value;
187
- return String(value);
188
- });
189
- table.push(values);
190
- }
191
- console.log(table.toString());
192
- }
193
- printError(error) {
194
- if (this.options.color) {
195
- console.error(chalk.red('Error:'), error.message || error);
196
- }
197
- else {
198
- console.error('Error:', error.message || error);
199
- }
200
- }
201
- printHelp() {
202
- const help = `
203
- Available commands:
204
- .help Show this help message
205
- .exit, .quit Exit the REPL
206
- .tables List all tables
207
- .schema [table] Show table schema
208
- .import <file.csv> Import CSV file as table
209
- .export <sql> <file> Export query results to file
210
-
211
- SQL commands:
212
- Enter any SQL statement to execute it
213
-
214
- Examples:
215
- CREATE TABLE users (id INTEGER, name TEXT);
216
- INSERT INTO users VALUES (1, 'Alice');
217
- SELECT * FROM users;
218
- .import data.csv
219
- .export "SELECT * FROM users" output.json
220
- `;
221
- console.log(this.options.color ? chalk.yellow(help) : help);
222
- }
223
- close() {
224
- this.rl.close();
225
- }
226
- printEnhancedError(error) {
227
- if (this.options.color) {
228
- console.error(chalk.red('━'.repeat(60)));
229
- console.error(chalk.red.bold('SQL ERROR'));
230
- console.error(chalk.red('━'.repeat(60)));
231
- }
232
- else {
233
- console.error('━'.repeat(60));
234
- console.error('SQL ERROR');
235
- console.error('━'.repeat(60));
236
- }
237
- if (error instanceof Error) {
238
- const errorChain = unwrapError(error);
239
- if (errorChain.length > 1) {
240
- // Multiple errors in chain - show formatted chain
241
- const formattedChain = formatErrorChain(errorChain, false);
242
- if (this.options.color) {
243
- // Colorize the error chain
244
- const colorized = formattedChain
245
- .replace(/^Error: (.*)$/gm, chalk.red.bold('Error: ') + chalk.red('$1'))
246
- .replace(/^Caused by: (.*)$/gm, chalk.yellow.bold('Caused by: ') + chalk.yellow('$1'))
247
- .replace(/\(at line (\d+), column (\d+)\)/g, chalk.cyan('(at line $1, column $2)'));
248
- console.error(colorized);
249
- }
250
- else {
251
- console.error(formattedChain);
252
- }
253
- }
254
- else {
255
- // Single error - use simpler format
256
- const errorInfo = errorChain[0];
257
- let message = errorInfo?.message || error.message;
258
- if (errorInfo?.line && errorInfo?.column) {
259
- message += ` (at line ${errorInfo.line}, column ${errorInfo.column})`;
260
- }
261
- if (this.options.color) {
262
- console.error(chalk.red(message));
263
- }
264
- else {
265
- console.error(message);
266
- }
267
- }
268
- }
269
- else {
270
- // Fallback for non-Error objects
271
- const message = typeof error === 'string' ? error : String(error);
272
- if (this.options.color) {
273
- console.error(chalk.red(message));
274
- }
275
- else {
276
- console.error(message);
277
- }
278
- }
279
- if (this.options.color) {
280
- console.error(chalk.red('━'.repeat(60)));
281
- }
282
- else {
283
- console.error('━'.repeat(60));
284
- }
285
- console.error('');
286
- }
287
- }
288
- //# sourceMappingURL=repl.js.map
package/dist/repl.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"repl.js","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"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"}