@quereus/quoomb-cli 0.1.2 → 0.1.4

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/dist/repl.d.ts ADDED
@@ -0,0 +1,26 @@
1
+ import { type QuoombConfig } from '@quereus/plugin-loader';
2
+ interface REPLOptions {
3
+ json?: boolean;
4
+ color?: boolean;
5
+ config?: QuoombConfig;
6
+ autoload?: boolean;
7
+ }
8
+ export declare class REPL {
9
+ private db;
10
+ private rl;
11
+ private dotCommands;
12
+ private options;
13
+ constructor(options?: REPLOptions);
14
+ private getPrompt;
15
+ private setupSignalHandlers;
16
+ start(): Promise<void>;
17
+ private completer;
18
+ private printResults;
19
+ private printTable;
20
+ private printError;
21
+ private printHelp;
22
+ close(): void;
23
+ private printEnhancedError;
24
+ }
25
+ export {};
26
+ //# sourceMappingURL=repl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAM5H,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,IAAI;IACf,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,EAAE,CAAqB;IAC/B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,OAAO,CAAc;gBAEjB,OAAO,GAAE,WAAgB;IAerC,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,mBAAmB;IAOrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkF5B,OAAO,CAAC,SAAS;IAmDjB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,SAAS;IAuBjB,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,kBAAkB;CA2D3B"}
package/dist/repl.js ADDED
@@ -0,0 +1,288 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAqC,MAAM,wBAAwB,CAAC;AAC5H,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AASlF,MAAM,OAAO,IAAI;IACP,EAAE,CAAW;IACb,EAAE,CAAqB;IACvB,WAAW,CAAc;IACzB,OAAO,CAAc;IAE7B,YAAY,UAAuB,EAAE;QACnC,IAAI,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;QAC3D,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE5C,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YACjC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE;YACxB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;SACrC,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAEO,SAAS;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACnE,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACxB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACrD,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,+DAA+D;QAC/D,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC3D,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC7D,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;oBAC9B,MAAM,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,+CAA+C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;YACzH,CAAC;QACH,CAAC;QAED,+DAA+D;QAC/D,IAAI,CAAC;YACH,MAAM,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,mCAAmC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC7G,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;QAEjB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YAED,sBAAsB;YACtB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACH,uCAAuC;oBACvC,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;wBAClC,MAAM,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;oBACpD,CAAC;yBAAM,CAAC;wBACN,oCAAoC;wBACpC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;wBAChE,IAAI,CAAC,OAAO,EAAE,CAAC;4BACb,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;4BAC3C,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;wBACnD,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBACjC,CAAC;gBACD,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YAED,aAAa;YACb,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC;gBACnB,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC9C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;gBAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACvB,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,oBAAoB,CAAC,CAAC;gBACvD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;YAED,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC7B,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,SAAS,CAAC,IAAY;QAC5B,MAAM,IAAI,GAAG,EAAE,CAAC;QAEhB,yBAAyB;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG;gBAClB,OAAO;gBACP,SAAS;gBACT,SAAS;gBACT,OAAO;gBACP,OAAO;gBACP,OAAO;gBACP,SAAS;gBACT,iBAAiB;gBACjB,cAAc;gBACd,gBAAgB;gBAChB,iBAAiB;gBACjB,gBAAgB;gBAChB,gBAAgB;gBAChB,gBAAgB;aACjB,CAAC;YAEF,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC9B,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,yBAAyB;YACzB,MAAM,WAAW,GAAG;gBAClB,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;gBACvD,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM;gBACnD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI;gBAC/C,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ;gBACnD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ;gBAChD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU;aAChD,CAAC;YAEF,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YAE9D,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;gBAClC,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACjC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtB,CAAC;IAEO,YAAY,CAAC,OAAc,EAAE,aAAqB;QACxD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,YAAY,aAAa,KAAK,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEO,UAAU,CAAC,OAAc;QAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEjC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;YACtB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACpE,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;aACzC;SACF,CAAC,CAAC;QAEH,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvB,IAAI,KAAK,KAAK,IAAI;oBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC5E,IAAI,OAAO,KAAK,KAAK,QAAQ;oBAAE,OAAO,KAAK,CAAC;gBAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChC,CAAC;IAEO,UAAU,CAAC,KAAU;QAC3B,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAEO,SAAS;QACf,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;CAkBhB,CAAC;QACE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAEO,kBAAkB,CAAC,KAAU;QACnC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAEtC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,kDAAkD;gBAClD,MAAM,cAAc,GAAG,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;gBAC3D,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACvB,2BAA2B;oBAC3B,MAAM,SAAS,GAAG,cAAc;yBAC7B,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;yBACvE,OAAO,CAAC,qBAAqB,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;yBACrF,OAAO,CAAC,kCAAkC,EAAE,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;oBACtF,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,oCAAoC;gBACpC,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,OAAO,GAAG,SAAS,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;gBAElD,IAAI,SAAS,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,EAAE,CAAC;oBACzC,OAAO,IAAI,aAAa,SAAS,CAAC,IAAI,YAAY,SAAS,CAAC,MAAM,GAAG,CAAC;gBACxE,CAAC;gBAED,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACvB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;gBACpC,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,iCAAiC;YACjC,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAClE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;CACF"}
package/package.json CHANGED
@@ -1,49 +1,49 @@
1
- {
2
- "name": "@quereus/quoomb-cli",
3
- "version": "0.1.2",
4
- "type": "module",
5
- "description": "Quoomb CLI - Interactive REPL for Quereus SQL engine",
6
- "license": "MIT",
7
- "main": "dist/index.js",
8
- "types": "./dist/index.d.ts",
9
- "bin": {
10
- "quoomb": "./dist/bin/quoomb.js"
11
- },
12
- "files": [
13
- "dist",
14
- "!**/*.tsbuildinfo"
15
- ],
16
- "exports": {
17
- ".": {
18
- "types": "./dist/index.d.ts",
19
- "import": "./dist/index.js"
20
- }
21
- },
22
- "scripts": {
23
- "clean": "rimraf dist",
24
- "build": "tsc",
25
- "dev": "tsc && node dist/bin/quoomb.js",
26
- "lint": "eslint src/**/*.ts",
27
- "test": "vitest",
28
- "prepublish": "npm run build"
29
- },
30
- "devDependencies": {
31
- "@types/node": "^22.15.29",
32
- "@typescript-eslint/eslint-plugin": "^8.33.0",
33
- "@typescript-eslint/parser": "^8.33.0",
34
- "eslint": "^9.28.0",
35
- "rimraf": "^6.1.2",
36
- "tsx": "^4.19.4",
37
- "typescript": "^5.8.3",
38
- "vitest": "^3.1.4"
39
- },
40
- "dependencies": {
41
- "@quereus/plugin-loader": "*",
42
- "@quereus/quereus": "*",
43
- "chalk": "^5.4.1",
44
- "cli-table3": "^0.6.5",
45
- "commander": "^14.0.0",
46
- "papaparse": "^5.5.3",
47
- "readline": "^1.3.0"
48
- }
49
- }
1
+ {
2
+ "name": "@quereus/quoomb-cli",
3
+ "version": "0.1.4",
4
+ "type": "module",
5
+ "description": "Quoomb CLI - Interactive REPL for Quereus SQL engine",
6
+ "license": "MIT",
7
+ "main": "dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "bin": {
10
+ "quoomb": "./dist/bin/quoomb.js"
11
+ },
12
+ "files": [
13
+ "dist",
14
+ "!**/*.tsbuildinfo"
15
+ ],
16
+ "exports": {
17
+ ".": {
18
+ "types": "./dist/index.d.ts",
19
+ "import": "./dist/index.js"
20
+ }
21
+ },
22
+ "scripts": {
23
+ "clean": "rimraf dist",
24
+ "build": "tsc",
25
+ "dev": "tsc && node dist/bin/quoomb.js",
26
+ "lint": "eslint src/**/*.ts",
27
+ "test": "vitest",
28
+ "prepublish": "npm run build"
29
+ },
30
+ "devDependencies": {
31
+ "@types/node": "^22.15.29",
32
+ "@typescript-eslint/eslint-plugin": "^8.33.0",
33
+ "@typescript-eslint/parser": "^8.33.0",
34
+ "eslint": "^9.28.0",
35
+ "rimraf": "^6.1.2",
36
+ "tsx": "^4.19.4",
37
+ "typescript": "^5.8.3",
38
+ "vitest": "^3.1.4"
39
+ },
40
+ "dependencies": {
41
+ "@quereus/plugin-loader": "^0.1.10",
42
+ "@quereus/quereus": "^0.8.8",
43
+ "chalk": "^5.4.1",
44
+ "cli-table3": "^0.6.5",
45
+ "commander": "^14.0.0",
46
+ "papaparse": "^5.5.3",
47
+ "readline": "^1.3.0"
48
+ }
49
+ }