@reifydb/shell 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/terminal/styles.css"],"sourcesContent":["/* SPDX-License-Identifier: AGPL-3.0-or-later */\n/* Copyright (c) 2025 ReifyDB */\n\n/* Fullscreen mode */\n.reifydb-shell-fullscreen {\n position: fixed !important;\n top: 0 !important;\n left: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n width: 100vw !important;\n height: 100vh !important;\n z-index: 9999 !important;\n background: #1e1e2e !important;\n}\n\n/* xterm.js container styling */\n.xterm {\n padding: 12px;\n}\n\n.xterm-viewport {\n /* Hide scrollbar but keep scrolling functional */\n scrollbar-width: thin;\n scrollbar-color: #45475a #1e1e2e;\n}\n\n.xterm-viewport::-webkit-scrollbar {\n width: 8px;\n}\n\n.xterm-viewport::-webkit-scrollbar-track {\n background: #1e1e2e;\n}\n\n.xterm-viewport::-webkit-scrollbar-thumb {\n background: #45475a;\n border-radius: 4px;\n}\n\n.xterm-viewport::-webkit-scrollbar-thumb:hover {\n background: #585b70;\n}\n"],"mappings":";AAIA,CAAC;AACC,YAAU;AACV,OAAK;AACL,QAAM;AACN,SAAO;AACP,UAAQ;AACR,SAAO;AACP,UAAQ;AACR,WAAS;AACT,cAAY;AACd;AAGA,CAAC;AACC,WAAS;AACX;AAEA,CAAC;AAEC,mBAAiB;AACjB,mBAAiB,QAAQ;AAC3B;AAEA,CANC,cAMc;AACb,SAAO;AACT;AAEA,CAVC,cAUc;AACb,cAAY;AACd;AAEA,CAdC,cAcc;AACb,cAAY;AACZ,iBAAe;AACjB;AAEA,CAnBC,cAmBc,yBAAyB;AACtC,cAAY;AACd;","names":[]}
1
+ {"version":3,"sources":["../src/terminal/styles.css"],"sourcesContent":["/* SPDX-License-Identifier: Apache-2.0 */\n/* Copyright (c) 2025 ReifyDB */\n\n/* Fullscreen mode */\n.reifydb-shell-fullscreen {\n position: fixed !important;\n top: 0 !important;\n left: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n width: 100vw !important;\n height: 100vh !important;\n z-index: 9999 !important;\n background: #1e1e2e !important;\n}\n\n/* xterm.js container styling */\n.xterm {\n padding: 12px;\n}\n\n.xterm-viewport {\n /* Hide scrollbar but keep scrolling functional */\n scrollbar-width: thin;\n scrollbar-color: #45475a #1e1e2e;\n}\n\n.xterm-viewport::-webkit-scrollbar {\n width: 8px;\n}\n\n.xterm-viewport::-webkit-scrollbar-track {\n background: #1e1e2e;\n}\n\n.xterm-viewport::-webkit-scrollbar-thumb {\n background: #45475a;\n border-radius: 4px;\n}\n\n.xterm-viewport::-webkit-scrollbar-thumb:hover {\n background: #585b70;\n}\n"],"mappings":";AAIA,CAAC;AACC,YAAU;AACV,OAAK;AACL,QAAM;AACN,SAAO;AACP,UAAQ;AACR,SAAO;AACP,UAAQ;AACR,WAAS;AACT,cAAY;AACd;AAGA,CAAC;AACC,WAAS;AACX;AAEA,CAAC;AAEC,mBAAiB;AACjB,mBAAiB,QAAQ;AAC3B;AAEA,CANC,cAMc;AACb,SAAO;AACT;AAEA,CAVC,cAUc;AACb,cAAY;AACd;AAEA,CAdC,cAcc;AACb,cAAY;AACZ,iBAAe;AACjB;AAEA,CAnBC,cAmBc,yBAAyB;AACtC,cAAY;AACd;","names":[]}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/terminal/adapter.ts","../src/terminal/theme.ts","../src/input/line-editor.ts","../src/input/history.ts","../src/input/multiline.ts","../src/commands/dot-commands.ts","../src/output/table.ts","../src/output/formatter.ts","../src/shell.ts","../src/executors/wasm-executor.ts","../src/executors/ws-executor.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\n// Copyright (c) 2025 ReifyDB\n\nimport { Terminal } from '@xterm/xterm';\nimport { FitAddon } from '@xterm/addon-fit';\nimport '@xterm/xterm/css/xterm.css';\nimport './styles.css';\nimport { defaultTheme, COLORS, type TerminalTheme } from './theme';\n\nexport type KeyHandler = (key: string, domEvent: KeyboardEvent) => void;\n\nexport class TerminalAdapter {\n private terminal: Terminal;\n private fitAddon: FitAddon;\n private container: HTMLElement;\n private keyHandler: KeyHandler | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private _isFullscreen: boolean = false;\n\n constructor(container: HTMLElement, theme: TerminalTheme = defaultTheme) {\n this.container = container;\n this.terminal = new Terminal({\n theme,\n fontFamily: \"'JetBrains Mono', 'Fira Code', 'Consolas', 'Monaco', monospace\",\n fontSize: 14,\n lineHeight: 1.2,\n cursorBlink: true,\n cursorStyle: 'block',\n scrollback: 10000,\n allowProposedApi: true,\n });\n\n this.fitAddon = new FitAddon();\n this.terminal.loadAddon(this.fitAddon);\n\n container.innerHTML = '';\n this.terminal.open(container);\n this.fitAddon.fit();\n\n // Handle resize\n this.resizeObserver = new ResizeObserver(() => {\n this.fitAddon.fit();\n });\n this.resizeObserver.observe(container);\n\n // Handle key input\n this.terminal.onKey(({ key, domEvent }) => {\n if (this.keyHandler) {\n this.keyHandler(key, domEvent);\n }\n });\n }\n\n onKey(handler: KeyHandler): void {\n this.keyHandler = handler;\n }\n\n write(text: string): void {\n this.terminal.write(text);\n }\n\n writeln(text: string): void {\n this.terminal.writeln(text);\n }\n\n clear(): void {\n this.terminal.clear();\n }\n\n get cols(): number {\n return this.terminal.cols;\n }\n\n get rows(): number {\n return this.terminal.rows;\n }\n\n focus(): void {\n this.terminal.focus();\n }\n\n dispose(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n this.terminal.dispose();\n }\n\n get isFullscreen(): boolean {\n return this._isFullscreen;\n }\n\n enterFullscreen(): void {\n if (this._isFullscreen) return;\n this._isFullscreen = true;\n this.container.classList.add('reifydb-shell-fullscreen');\n this.fitAddon.fit();\n }\n\n exitFullscreen(): void {\n if (!this._isFullscreen) return;\n this._isFullscreen = false;\n this.container.classList.remove('reifydb-shell-fullscreen');\n this.fitAddon.fit();\n }\n\n // ANSI escape code helpers - static for use without instance\n static readonly COLORS = COLORS;\n\n // Cursor control helpers\n static cursorUp(n: number = 1): string {\n return `\\x1b[${n}A`;\n }\n\n static cursorDown(n: number = 1): string {\n return `\\x1b[${n}B`;\n }\n\n static cursorForward(n: number = 1): string {\n return `\\x1b[${n}C`;\n }\n\n static cursorBack(n: number = 1): string {\n return `\\x1b[${n}D`;\n }\n\n static cursorPosition(row: number, col: number): string {\n return `\\x1b[${row};${col}H`;\n }\n\n static clearLine(): string {\n return '\\x1b[2K';\n }\n\n static clearToEndOfLine(): string {\n return '\\x1b[K';\n }\n\n static clearScreen(): string {\n return '\\x1b[2J\\x1b[3J\\x1b[H';\n }\n\n static saveCursor(): string {\n return '\\x1b[s';\n }\n\n static restoreCursor(): string {\n return '\\x1b[u';\n }\n}\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n// Copyright (c) 2025 ReifyDB\n\n/**\n * Terminal color theme configuration\n */\nexport interface TerminalTheme {\n background: string;\n foreground: string;\n cursor: string;\n cursorAccent: string;\n selectionBackground: string;\n black: string;\n red: string;\n green: string;\n yellow: string;\n blue: string;\n magenta: string;\n cyan: string;\n white: string;\n brightBlack: string;\n brightRed: string;\n brightGreen: string;\n brightYellow: string;\n brightBlue: string;\n brightMagenta: string;\n brightCyan: string;\n brightWhite: string;\n}\n\n/**\n * Catppuccin Mocha theme - default theme\n */\nexport const defaultTheme: TerminalTheme = {\n background: '#1e1e2e',\n foreground: '#cdd6f4',\n cursor: '#f5e0dc',\n cursorAccent: '#1e1e2e',\n selectionBackground: '#45475a',\n black: '#45475a',\n red: '#f38ba8',\n green: '#a6e3a1',\n yellow: '#f9e2af',\n blue: '#89b4fa',\n magenta: '#f5c2e7',\n cyan: '#94e2d5',\n white: '#bac2de',\n brightBlack: '#585b70',\n brightRed: '#f38ba8',\n brightGreen: '#a6e3a1',\n brightYellow: '#f9e2af',\n brightBlue: '#89b4fa',\n brightMagenta: '#f5c2e7',\n brightCyan: '#94e2d5',\n brightWhite: '#a6adc8',\n};\n\n/**\n * ANSI escape codes for terminal colors and formatting\n */\nexport const COLORS = {\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n italic: '\\x1b[3m',\n underline: '\\x1b[4m',\n\n // Foreground colors\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n\n // Bright foreground colors\n brightBlack: '\\x1b[90m',\n brightRed: '\\x1b[91m',\n brightGreen: '\\x1b[92m',\n brightYellow: '\\x1b[93m',\n brightBlue: '\\x1b[94m',\n brightMagenta: '\\x1b[95m',\n brightCyan: '\\x1b[96m',\n brightWhite: '\\x1b[97m',\n} as const;\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n// Copyright (c) 2025 ReifyDB\n\nimport { TerminalAdapter } from '../terminal/adapter';\n\nexport class LineEditor {\n private buffer: string = '';\n private cursorPos: number = 0;\n private terminal: TerminalAdapter;\n\n constructor(terminal: TerminalAdapter) {\n this.terminal = terminal;\n }\n\n get value(): string {\n return this.buffer;\n }\n\n get cursor(): number {\n return this.cursorPos;\n }\n\n clear(): void {\n this.buffer = '';\n this.cursorPos = 0;\n }\n\n setValue(value: string): void {\n this.buffer = value;\n this.cursorPos = value.length;\n }\n\n insert(char: string): void {\n this.buffer =\n this.buffer.slice(0, this.cursorPos) +\n char +\n this.buffer.slice(this.cursorPos);\n this.cursorPos++;\n }\n\n backspace(): boolean {\n if (this.cursorPos > 0) {\n this.buffer =\n this.buffer.slice(0, this.cursorPos - 1) +\n this.buffer.slice(this.cursorPos);\n this.cursorPos--;\n return true;\n }\n return false;\n }\n\n delete(): boolean {\n if (this.cursorPos < this.buffer.length) {\n this.buffer =\n this.buffer.slice(0, this.cursorPos) +\n this.buffer.slice(this.cursorPos + 1);\n return true;\n }\n return false;\n }\n\n moveLeft(): boolean {\n if (this.cursorPos > 0) {\n this.cursorPos--;\n this.terminal.write(TerminalAdapter.cursorBack());\n return true;\n }\n return false;\n }\n\n moveRight(): boolean {\n if (this.cursorPos < this.buffer.length) {\n this.cursorPos++;\n this.terminal.write(TerminalAdapter.cursorForward());\n return true;\n }\n return false;\n }\n\n moveToStart(): void {\n if (this.cursorPos > 0) {\n this.terminal.write(TerminalAdapter.cursorBack(this.cursorPos));\n this.cursorPos = 0;\n }\n }\n\n moveToEnd(): void {\n if (this.cursorPos < this.buffer.length) {\n const distance = this.buffer.length - this.cursorPos;\n this.terminal.write(TerminalAdapter.cursorForward(distance));\n this.cursorPos = this.buffer.length;\n }\n }\n\n moveWordLeft(): void {\n if (this.cursorPos === 0) return;\n\n let newPos = this.cursorPos - 1;\n\n // Skip whitespace\n while (newPos > 0 && /\\s/.test(this.buffer[newPos])) {\n newPos--;\n }\n\n // Move to start of word\n while (newPos > 0 && !/\\s/.test(this.buffer[newPos - 1])) {\n newPos--;\n }\n\n const distance = this.cursorPos - newPos;\n if (distance > 0) {\n this.terminal.write(TerminalAdapter.cursorBack(distance));\n this.cursorPos = newPos;\n }\n }\n\n moveWordRight(): void {\n if (this.cursorPos >= this.buffer.length) return;\n\n let newPos = this.cursorPos;\n\n // Move past current word\n while (newPos < this.buffer.length && !/\\s/.test(this.buffer[newPos])) {\n newPos++;\n }\n\n // Skip whitespace\n while (newPos < this.buffer.length && /\\s/.test(this.buffer[newPos])) {\n newPos++;\n }\n\n const distance = newPos - this.cursorPos;\n if (distance > 0) {\n this.terminal.write(TerminalAdapter.cursorForward(distance));\n this.cursorPos = newPos;\n }\n }\n\n clearLine(): void {\n this.buffer = '';\n this.cursorPos = 0;\n }\n\n deleteToEnd(): void {\n this.buffer = this.buffer.slice(0, this.cursorPos);\n }\n\n deleteToStart(): void {\n this.buffer = this.buffer.slice(this.cursorPos);\n this.cursorPos = 0;\n }\n\n deleteWord(): void {\n if (this.cursorPos === 0) return;\n\n let newPos = this.cursorPos - 1;\n\n // Skip whitespace\n while (newPos > 0 && /\\s/.test(this.buffer[newPos])) {\n newPos--;\n }\n\n // Move to start of word\n while (newPos > 0 && !/\\s/.test(this.buffer[newPos - 1])) {\n newPos--;\n }\n\n this.buffer = this.buffer.slice(0, newPos) + this.buffer.slice(this.cursorPos);\n this.cursorPos = newPos;\n }\n\n // Called by shell to render the line with prompt\n render(prompt: string): void {\n this.terminal.write(\n '\\r' +\n TerminalAdapter.clearToEndOfLine() +\n prompt +\n this.buffer\n );\n\n // Position cursor correctly\n const cursorOffset = this.buffer.length - this.cursorPos;\n if (cursorOffset > 0) {\n this.terminal.write(TerminalAdapter.cursorBack(cursorOffset));\n }\n }\n}\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n// Copyright (c) 2025 ReifyDB\n\nimport type { HistoryStorage } from '../types';\n\nconst DEFAULT_STORAGE_KEY = 'reifydb-shell-history';\nconst MAX_HISTORY = 1000;\n\n/**\n * Default localStorage-based history storage\n */\nexport class LocalStorageHistoryStorage implements HistoryStorage {\n private key: string;\n\n constructor(key: string = DEFAULT_STORAGE_KEY) {\n this.key = key;\n }\n\n load(): string[] {\n try {\n const stored = localStorage.getItem(this.key);\n if (stored) {\n const parsed = JSON.parse(stored);\n if (Array.isArray(parsed)) {\n return parsed.filter((e): e is string => typeof e === 'string');\n }\n }\n } catch {\n // Ignore localStorage errors\n }\n return [];\n }\n\n save(entries: string[]): void {\n try {\n localStorage.setItem(this.key, JSON.stringify(entries));\n } catch {\n // Ignore localStorage errors (quota exceeded, etc.)\n }\n }\n}\n\n/**\n * In-memory history storage (no persistence)\n */\nexport class MemoryHistoryStorage implements HistoryStorage {\n private entries: string[] = [];\n\n load(): string[] {\n return [...this.entries];\n }\n\n save(entries: string[]): void {\n this.entries = [...entries];\n }\n}\n\nexport class CommandHistory {\n private entries: string[] = [];\n private position: number = -1;\n private savedInput: string = '';\n private storage: HistoryStorage;\n\n constructor(storage?: HistoryStorage, historyKey?: string) {\n this.storage = storage ?? new LocalStorageHistoryStorage(historyKey);\n this.entries = this.storage.load();\n }\n\n add(command: string): void {\n const trimmed = command.trim();\n if (!trimmed) return;\n\n // Don't add duplicates at the end\n if (this.entries.length > 0 && this.entries[this.entries.length - 1] === trimmed) {\n this.reset();\n return;\n }\n\n this.entries.push(trimmed);\n\n // Limit size\n if (this.entries.length > MAX_HISTORY) {\n this.entries = this.entries.slice(-MAX_HISTORY);\n }\n\n this.storage.save(this.entries);\n this.reset();\n }\n\n previous(currentInput: string): string | null {\n if (this.entries.length === 0) return null;\n\n // Save current input when starting navigation\n if (this.position === -1) {\n this.savedInput = currentInput;\n this.position = this.entries.length;\n }\n\n if (this.position > 0) {\n this.position--;\n return this.entries[this.position];\n }\n\n return null;\n }\n\n next(): string | null {\n if (this.position === -1) return null;\n\n if (this.position < this.entries.length - 1) {\n this.position++;\n return this.entries[this.position];\n }\n\n if (this.position === this.entries.length - 1) {\n this.position = -1;\n return this.savedInput;\n }\n\n return null;\n }\n\n reset(): void {\n this.position = -1;\n this.savedInput = '';\n }\n\n getAll(): string[] {\n return [...this.entries];\n }\n\n clear(): void {\n this.entries = [];\n this.position = -1;\n this.savedInput = '';\n this.storage.save(this.entries);\n }\n}\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n// Copyright (c) 2025 ReifyDB\n\nexport class MultilineBuffer {\n private lines: string[] = [];\n\n get isEmpty(): boolean {\n return this.lines.length === 0;\n }\n\n get content(): string {\n return this.lines.join(' ');\n }\n\n addLine(line: string): void {\n this.lines.push(line);\n }\n\n clear(): void {\n this.lines = [];\n }\n\n isComplete(): boolean {\n // A statement is complete when it ends with a semicolon\n const full = this.content.trim();\n return full.endsWith(';');\n }\n\n static isStatementComplete(input: string): boolean {\n const trimmed = input.trim();\n return trimmed.endsWith(';');\n }\n}\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n// Copyright (c) 2025 ReifyDB\n\nimport { TerminalAdapter } from '../terminal/adapter';\nimport type { DotCommandContext, DotCommandResult, DisplayMode } from '../types';\n\nconst C = TerminalAdapter.COLORS;\n\nexport async function handleDotCommand(\n input: string,\n context: DotCommandContext\n): Promise<DotCommandResult> {\n const parts = input.trim().split(/\\s+/);\n const command = parts[0].toLowerCase();\n const args = parts.slice(1);\n\n switch (command) {\n case '.help':\n showHelp(context.terminal);\n return { handled: true };\n\n case '.clear':\n context.terminal.write(TerminalAdapter.clearScreen());\n return { handled: true };\n\n case '.mode':\n handleMode(args, context);\n return { handled: true };\n\n case '.history':\n showHistory(context);\n return { handled: true };\n\n case '.tables':\n await showTables(context);\n return { handled: true };\n\n case '.schema':\n await showSchema(args, context);\n return { handled: true };\n\n case '.fullscreen':\n context.enterFullscreen();\n return { handled: true };\n\n case '.exit':\n if (context.isFullscreen) {\n context.exitFullscreen();\n }\n return { handled: true };\n\n default:\n if (command.startsWith('.')) {\n context.terminal.writeln(\n `${C.red}Unknown command: ${command}${C.reset}`\n );\n context.terminal.writeln(`Type ${C.cyan}.help${C.reset} for available commands.`);\n return { handled: true };\n }\n return { handled: false };\n }\n}\n\nfunction showHelp(terminal: TerminalAdapter): void {\n terminal.writeln('');\n terminal.writeln(`${C.bold}${C.cyan}Available commands:${C.reset}`);\n terminal.writeln('');\n terminal.writeln(` ${C.green}.help${C.reset} Show this help message`);\n terminal.writeln(` ${C.green}.clear${C.reset} Clear the screen`);\n terminal.writeln(` ${C.green}.mode${C.reset} [mode] Set display mode (truncate|full)`);\n terminal.writeln(` ${C.green}.history${C.reset} Show command history`);\n terminal.writeln(` ${C.green}.tables${C.reset} List all tables`);\n terminal.writeln(` ${C.green}.schema${C.reset} [table] Show table schema`);\n terminal.writeln(` ${C.green}.fullscreen${C.reset} Enter fullscreen mode`);\n terminal.writeln(` ${C.green}.exit${C.reset} Exit fullscreen mode`);\n terminal.writeln('');\n terminal.writeln(`${C.bold}${C.cyan}Keyboard shortcuts:${C.reset}`);\n terminal.writeln('');\n terminal.writeln(` ${C.yellow}Left/Right${C.reset} Move cursor`);\n terminal.writeln(` ${C.yellow}Ctrl+Left/Right${C.reset} Move by word`);\n terminal.writeln(` ${C.yellow}Home/End${C.reset} Start/end of line`);\n terminal.writeln(` ${C.yellow}Ctrl+A/E${C.reset} Start/end of line`);\n terminal.writeln(` ${C.yellow}Ctrl+U${C.reset} Clear line`);\n terminal.writeln(` ${C.yellow}Ctrl+W${C.reset} Delete word`);\n terminal.writeln(` ${C.yellow}Up/Down${C.reset} Navigate history`);\n terminal.writeln(` ${C.yellow}Ctrl+C${C.reset} Cancel input`);\n terminal.writeln('');\n terminal.writeln(`${C.dim}Statements must end with a semicolon (;)${C.reset}`);\n terminal.writeln('');\n}\n\nfunction handleMode(args: string[], context: DotCommandContext): void {\n const terminal = context.terminal;\n\n if (args.length === 0) {\n terminal.writeln(`Current display mode: ${C.cyan}${context.displayMode}${C.reset}`);\n return;\n }\n\n const mode = args[0].toLowerCase();\n if (mode === 'truncate' || mode === 'full') {\n context.setDisplayMode(mode as DisplayMode);\n terminal.writeln(`Display mode set to: ${C.cyan}${mode}${C.reset}`);\n } else {\n terminal.writeln(\n `${C.red}Unknown mode: ${mode}${C.reset}. Use 'truncate' or 'full'.`\n );\n }\n}\n\nfunction showHistory(context: DotCommandContext): void {\n const terminal = context.terminal;\n const entries = context.history.getAll();\n\n if (entries.length === 0) {\n terminal.writeln(`${C.dim}No command history${C.reset}`);\n return;\n }\n\n terminal.writeln('');\n terminal.writeln(`${C.bold}${C.cyan}Command history:${C.reset}`);\n terminal.writeln('');\n\n // Show last 20 entries\n const toShow = entries.slice(-20);\n const startIdx = entries.length - toShow.length;\n\n toShow.forEach((entry, i) => {\n const num = String(startIdx + i + 1).padStart(4, ' ');\n terminal.writeln(`${C.dim}${num}${C.reset} ${entry}`);\n });\n\n if (entries.length > 20) {\n terminal.writeln('');\n terminal.writeln(`${C.dim}... and ${entries.length - 20} more entries${C.reset}`);\n }\n terminal.writeln('');\n}\n\nasync function showTables(context: DotCommandContext): Promise<void> {\n const terminal = context.terminal;\n\n if (!context.executor.getTables) {\n terminal.writeln(`${C.dim}.tables command not supported by this executor${C.reset}`);\n return;\n }\n\n const tables = await context.executor.getTables();\n\n if (tables.length === 0) {\n terminal.writeln(`${C.dim}No tables found${C.reset}`);\n return;\n }\n\n terminal.writeln('');\n terminal.writeln(`${C.bold}${C.cyan}Tables:${C.reset}`);\n terminal.writeln('');\n\n tables.forEach((table) => {\n terminal.writeln(` ${C.green}${table}${C.reset}`);\n });\n terminal.writeln('');\n}\n\nasync function showSchema(args: string[], context: DotCommandContext): Promise<void> {\n const terminal = context.terminal;\n\n if (!context.executor.getSchema) {\n terminal.writeln(`${C.dim}.schema command not supported by this executor${C.reset}`);\n return;\n }\n\n if (args.length === 0) {\n terminal.writeln(`${C.red}Usage: .schema <table_name>${C.reset}`);\n return;\n }\n\n const tableName = args[0];\n const schema = await context.executor.getSchema(tableName);\n\n if (schema) {\n terminal.writeln('');\n terminal.writeln(schema);\n terminal.writeln('');\n } else {\n terminal.writeln(`${C.red}Table not found: ${tableName}${C.reset}`);\n }\n}\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n// Copyright (c) 2025 ReifyDB\n\nexport interface TableColumn {\n name: string;\n width: number;\n}\n\nexport interface TableOptions {\n maxWidth?: number;\n truncate?: boolean;\n}\n\nexport class TableRenderer {\n private data: Record<string, unknown>[];\n private columns: TableColumn[];\n private maxWidth: number;\n private truncate: boolean;\n\n constructor(data: Record<string, unknown>[], options: TableOptions = {}) {\n this.data = data;\n this.maxWidth = options.maxWidth ?? 120;\n this.truncate = options.truncate ?? false;\n this.columns = this.calculateColumns();\n }\n\n private calculateColumns(): TableColumn[] {\n if (this.data.length === 0) return [];\n\n const columns: Map<string, number> = new Map();\n\n // Get all column names and calculate max widths\n for (const row of this.data) {\n for (const [key, value] of Object.entries(row)) {\n const valueStr = this.formatValue(value);\n const currentMax = columns.get(key) ?? key.length;\n columns.set(key, Math.max(currentMax, valueStr.length));\n }\n }\n\n return Array.from(columns.entries()).map(([name, width]) => ({\n name,\n width: Math.max(width, name.length),\n }));\n }\n\n private formatValue(value: unknown): string {\n if (value === null || value === undefined) {\n return 'undefined';\n }\n // Check if it's a core Value object (has type property and toString)\n if (value && typeof value === 'object' && 'type' in value && typeof (value as { toString(): string }).toString === 'function') {\n return (value as { toString(): string }).toString();\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return String(value);\n }\n\n private truncateString(str: string, maxLen: number): string {\n if (str.length <= maxLen) return str;\n if (maxLen <= 3) return str.slice(0, maxLen);\n return str.slice(0, maxLen - 3) + '...';\n }\n\n render(): string[] {\n if (this.data.length === 0 || this.columns.length === 0) {\n return ['(no results)'];\n }\n\n const lines: string[] = [];\n let columnsToShow = this.columns;\n let widths = this.columns.map((c) => c.width);\n\n // Calculate how many columns fit\n if (this.truncate) {\n const result = this.fitColumns(this.maxWidth);\n columnsToShow = result.columns;\n widths = result.widths;\n }\n\n // Build separator line\n const separator =\n '+' + widths.map((w) => '-'.repeat(w + 2)).join('+') + '+';\n\n lines.push(separator);\n\n // Build header\n const headerCells = columnsToShow.map((col, i) =>\n this.padCenter(col.name, widths[i])\n );\n lines.push('| ' + headerCells.join(' | ') + ' |');\n lines.push(separator);\n\n // Build rows\n for (const row of this.data) {\n const cells = columnsToShow.map((col, i) => {\n const value = this.formatValue(row[col.name]);\n const truncated = this.truncate\n ? this.truncateString(value, widths[i])\n : value;\n return this.padRight(truncated, widths[i]);\n });\n lines.push('| ' + cells.join(' | ') + ' |');\n }\n\n lines.push(separator);\n\n return lines;\n }\n\n private fitColumns(maxWidth: number): {\n columns: TableColumn[];\n widths: number[];\n } {\n const columns: TableColumn[] = [];\n const widths: number[] = [];\n let currentWidth = 1; // Starting '|'\n\n for (const col of this.columns) {\n // Each column: ' content ' + '|' = 3 extra chars\n const colWidth = Math.min(col.width, 40); // Cap individual column width\n const totalColWidth = colWidth + 3;\n\n if (currentWidth + totalColWidth <= maxWidth) {\n columns.push(col);\n widths.push(colWidth);\n currentWidth += totalColWidth;\n } else {\n break;\n }\n }\n\n // If no columns fit, show at least the first one\n if (columns.length === 0 && this.columns.length > 0) {\n const firstCol = this.columns[0];\n const availableWidth = maxWidth - 4; // '| ' and ' |'\n columns.push(firstCol);\n widths.push(Math.max(availableWidth, 10));\n }\n\n return { columns, widths };\n }\n\n private padCenter(str: string, width: number): string {\n const padding = width - str.length;\n if (padding <= 0) return str.slice(0, width);\n const left = Math.floor(padding / 2);\n const right = padding - left;\n return ' '.repeat(left) + str + ' '.repeat(right);\n }\n\n private padRight(str: string, width: number): string {\n const padding = width - str.length;\n if (padding <= 0) return str.slice(0, width);\n return str + ' '.repeat(padding);\n }\n}\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n// Copyright (c) 2025 ReifyDB\n\nimport { TerminalAdapter } from '../terminal/adapter';\nimport { TableRenderer } from './table';\nimport type { ExecutionResult, DisplayMode } from '../types';\n\nconst C = TerminalAdapter.COLORS;\n\nexport class OutputFormatter {\n private terminal: TerminalAdapter;\n private displayMode: DisplayMode;\n\n constructor(terminal: TerminalAdapter, displayMode: DisplayMode = 'full') {\n this.terminal = terminal;\n this.displayMode = displayMode;\n }\n\n setDisplayMode(mode: DisplayMode): void {\n this.displayMode = mode;\n }\n\n formatResult(result: ExecutionResult): void {\n if (!result.success) {\n this.formatError(result.error ?? 'Unknown error', result.executionTime);\n return;\n }\n\n if (!result.data || result.data.length === 0) {\n this.terminal.writeln('');\n this.terminal.writeln(`${C.dim}Query executed successfully. No rows returned.${C.reset}`);\n this.formatExecutionTime(result.executionTime);\n return;\n }\n\n this.formatTable(result.data, result.executionTime);\n }\n\n private formatTable(data: Record<string, unknown>[], executionTime: number): void {\n const renderer = new TableRenderer(data, {\n maxWidth: this.displayMode === 'truncate' ? this.terminal.cols - 2 : undefined,\n truncate: this.displayMode === 'truncate',\n });\n\n const lines = renderer.render();\n this.terminal.writeln('');\n for (const line of lines) {\n this.terminal.writeln(line);\n }\n\n const rowCount = data.length;\n this.terminal.writeln('');\n this.terminal.write(\n `${C.green}${rowCount} row${rowCount !== 1 ? 's' : ''}${C.reset}`\n );\n this.formatExecutionTime(executionTime);\n }\n\n private formatError(error: string, executionTime: number): void {\n this.terminal.writeln('');\n for (const line of error.split('\\n')) {\n this.terminal.writeln(line);\n }\n this.formatExecutionTime(executionTime);\n }\n\n private formatExecutionTime(ms: number): void {\n this.terminal.writeln(` ${C.dim}(${ms}ms)${C.reset}`);\n }\n}\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n// Copyright (c) 2025 ReifyDB\n\nimport { TerminalAdapter } from './terminal/adapter';\nimport { COLORS } from './terminal/theme';\nimport { LineEditor } from './input/line-editor';\nimport { CommandHistory } from './input/history';\nimport { MultilineBuffer } from './input/multiline';\nimport { handleDotCommand } from './commands/dot-commands';\nimport { OutputFormatter } from './output/formatter';\nimport type { ShellOptions, DisplayMode, Executor } from './types';\n\nconst C = COLORS;\n\n// Default prompts\nconst DEFAULT_PRIMARY_PROMPT = `${C.cyan}reifydb${C.reset}${C.brightBlack}>${C.reset} `;\nconst DEFAULT_CONTINUATION_PROMPT = `${C.brightBlack} ...${C.reset} `;\n\n// Prompt lengths without ANSI codes (for cursor positioning)\nconst DEFAULT_PRIMARY_PROMPT_LEN = 9; // \"reifydb> \"\nconst DEFAULT_CONTINUATION_PROMPT_LEN = 8; // \" ... \"\n\nexport class Shell {\n private terminal: TerminalAdapter;\n private lineEditor: LineEditor;\n private history: CommandHistory;\n private multiline: MultilineBuffer;\n private executor: Executor;\n private formatter: OutputFormatter;\n private displayMode: DisplayMode;\n private isExited: boolean = false;\n\n // Configurable options\n private primaryPrompt: string;\n private primaryPromptLen: number;\n private continuationPrompt: string;\n private continuationPromptLen: number;\n private welcomeMessage: string | string[] | (() => string[]) | undefined;\n private onExit: (() => void) | undefined;\n private onFullscreenChange: ((isFullscreen: boolean) => void) | undefined;\n\n constructor(container: HTMLElement, options: ShellOptions) {\n this.executor = options.executor;\n this.displayMode = options.displayMode ?? 'full';\n this.welcomeMessage = options.welcomeMessage;\n this.onExit = options.onExit;\n this.onFullscreenChange = options.onFullscreenChange;\n\n // Set up prompts\n this.primaryPrompt = options.prompt ?? DEFAULT_PRIMARY_PROMPT;\n this.primaryPromptLen = options.promptLength ?? DEFAULT_PRIMARY_PROMPT_LEN;\n this.continuationPrompt = options.continuationPrompt ?? DEFAULT_CONTINUATION_PROMPT;\n this.continuationPromptLen = options.continuationPromptLength ?? DEFAULT_CONTINUATION_PROMPT_LEN;\n\n // Initialize components\n this.terminal = new TerminalAdapter(container, options.theme);\n this.lineEditor = new LineEditor(this.terminal);\n this.history = new CommandHistory(options.historyStorage, options.historyKey);\n this.multiline = new MultilineBuffer();\n this.formatter = new OutputFormatter(this.terminal, this.displayMode);\n\n this.setupKeyHandler();\n }\n\n start(): void {\n this.showWelcomeBanner();\n this.showPrompt();\n this.terminal.focus();\n }\n\n dispose(): void {\n this.isExited = true;\n this.terminal.exitFullscreen();\n this.terminal.dispose();\n }\n\n get isFullscreen(): boolean {\n return this.terminal.isFullscreen;\n }\n\n enterFullscreen(): void {\n this.terminal.enterFullscreen();\n this.onFullscreenChange?.(true);\n }\n\n exitFullscreen(): void {\n this.terminal.exitFullscreen();\n this.onFullscreenChange?.(false);\n }\n\n private showWelcomeBanner(): void {\n if (this.welcomeMessage === undefined) {\n // Default welcome banner\n this.terminal.writeln('');\n this.terminal.writeln(`${C.bold}${C.cyan}ReifyDB Shell${C.reset}`);\n this.terminal.writeln('');\n this.terminal.writeln(`Type ${C.green}.help${C.reset} for available commands`);\n this.terminal.writeln(`Statements must end with a semicolon ${C.yellow};${C.reset}`);\n this.terminal.writeln('');\n return;\n }\n\n let lines: string[];\n if (typeof this.welcomeMessage === 'function') {\n lines = this.welcomeMessage();\n } else if (Array.isArray(this.welcomeMessage)) {\n lines = this.welcomeMessage;\n } else {\n lines = [this.welcomeMessage];\n }\n\n for (const line of lines) {\n this.terminal.writeln(line);\n }\n }\n\n private showPrompt(): void {\n const prompt = this.multiline.isEmpty ? this.primaryPrompt : this.continuationPrompt;\n this.terminal.write(prompt);\n }\n\n private getCurrentPromptLen(): number {\n return this.multiline.isEmpty ? this.primaryPromptLen : this.continuationPromptLen;\n }\n\n private setupKeyHandler(): void {\n this.terminal.onKey((key, event) => {\n if (this.isExited) return;\n this.handleKey(key, event);\n });\n }\n\n private handleKey(key: string, event: KeyboardEvent): void {\n const code = event.keyCode;\n\n // Handle Ctrl key combinations\n if (event.ctrlKey) {\n switch (event.key.toLowerCase()) {\n case 'a': // Ctrl+A - go to start\n event.preventDefault();\n this.lineEditor.moveToStart();\n return;\n\n case 'e': // Ctrl+E - go to end\n event.preventDefault();\n this.lineEditor.moveToEnd();\n return;\n\n case 'u': // Ctrl+U - clear line\n event.preventDefault();\n this.lineEditor.clearLine();\n this.redrawLine();\n return;\n\n case 'w': // Ctrl+W - delete word\n event.preventDefault();\n this.lineEditor.deleteWord();\n this.redrawLine();\n return;\n\n case 'c': // Ctrl+C - cancel\n event.preventDefault();\n this.terminal.writeln('^C');\n this.lineEditor.clear();\n this.multiline.clear();\n this.history.reset();\n this.showPrompt();\n return;\n\n case 'l': // Ctrl+L - clear screen\n event.preventDefault();\n this.clearScreen();\n return;\n }\n\n // Ctrl+Left/Right for word navigation\n if (code === 37) { // Left\n event.preventDefault();\n this.lineEditor.moveWordLeft();\n return;\n }\n if (code === 39) { // Right\n event.preventDefault();\n this.lineEditor.moveWordRight();\n return;\n }\n\n return;\n }\n\n // Handle special keys\n switch (code) {\n case 13: // Enter\n this.handleEnter();\n return;\n\n case 8: // Backspace\n if (this.lineEditor.backspace()) {\n this.redrawLine();\n }\n return;\n\n case 46: // Delete\n if (this.lineEditor.delete()) {\n this.redrawLine();\n }\n return;\n\n case 37: // Left arrow\n this.lineEditor.moveLeft();\n return;\n\n case 39: // Right arrow\n this.lineEditor.moveRight();\n return;\n\n case 38: // Up arrow\n this.navigateHistory('up');\n return;\n\n case 40: // Down arrow\n this.navigateHistory('down');\n return;\n\n case 36: // Home\n this.lineEditor.moveToStart();\n return;\n\n case 35: // End\n this.lineEditor.moveToEnd();\n return;\n\n case 9: // Tab - ignore for now\n return;\n\n case 27: // Escape - exit fullscreen\n if (this.terminal.isFullscreen) {\n this.exitFullscreen();\n }\n return;\n }\n\n // Regular character input\n if (key.length === 1 && !event.ctrlKey && !event.altKey && !event.metaKey) {\n this.lineEditor.insert(key);\n this.redrawLine();\n }\n }\n\n private redrawLine(): void {\n const prompt = this.multiline.isEmpty ? this.primaryPrompt : this.continuationPrompt;\n this.lineEditor.render(prompt);\n }\n\n private navigateHistory(direction: 'up' | 'down'): void {\n let entry: string | null;\n\n if (direction === 'up') {\n entry = this.history.previous(this.lineEditor.value);\n } else {\n entry = this.history.next();\n }\n\n if (entry !== null) {\n this.lineEditor.setValue(entry);\n this.redrawLine();\n }\n }\n\n private async handleEnter(): Promise<void> {\n const line = this.lineEditor.value;\n this.terminal.writeln('');\n this.lineEditor.clear();\n\n // Handle dot commands (only on first line)\n if (this.multiline.isEmpty && line.trim().startsWith('.')) {\n this.history.add(line);\n const result = await handleDotCommand(line, {\n terminal: this.terminal,\n executor: this.executor,\n history: this.history,\n displayMode: this.displayMode,\n setDisplayMode: (mode) => {\n this.displayMode = mode;\n this.formatter.setDisplayMode(mode);\n },\n clearScreen: () => this.clearScreen(),\n isFullscreen: this.isFullscreen,\n enterFullscreen: () => this.enterFullscreen(),\n exitFullscreen: () => this.exitFullscreen(),\n });\n\n if (result.exit) {\n this.isExited = true;\n if (this.onExit) {\n this.onExit();\n }\n return;\n }\n\n this.showPrompt();\n return;\n }\n\n // Add line to multiline buffer\n this.multiline.addLine(line);\n\n // Check if statement is complete\n if (this.multiline.isComplete()) {\n const statement = this.multiline.content;\n this.multiline.clear();\n this.history.add(statement);\n this.history.reset();\n\n // Execute the statement\n const result = await this.executor.execute(statement);\n this.formatter.formatResult(result);\n }\n\n this.showPrompt();\n }\n\n private clearScreen(): void {\n this.terminal.write(TerminalAdapter.clearScreen());\n this.showPrompt();\n this.terminal.write(this.lineEditor.value);\n }\n}\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n// Copyright (c) 2025 ReifyDB\n\nimport type { Executor, ExecutionResult } from '../types';\n\n/**\n * Interface for WebAssembly database instances.\n * This matches the WasmDB interface from reifydb-wasm.\n */\nexport interface WasmDB {\n admin(rql: string): Promise<unknown> | unknown;\n}\n\n/**\n * Executor adapter for WebAssembly-based ReifyDB instances.\n */\nexport class WasmExecutor implements Executor {\n private db: WasmDB;\n\n constructor(db: WasmDB) {\n this.db = db;\n }\n\n async execute(statement: string): Promise<ExecutionResult> {\n const trimmed = statement.trim();\n\n // Remove trailing semicolon for execution\n const query = trimmed.endsWith(';')\n ? trimmed.slice(0, -1).trim()\n : trimmed;\n\n if (!query) {\n return {\n success: true,\n data: [],\n executionTime: 0,\n };\n }\n\n const startTime = performance.now();\n\n try {\n const results = await this.db.admin(query);\n const endTime = performance.now();\n\n return {\n success: true,\n data: Array.isArray(results) ? results : [],\n executionTime: Math.round(endTime - startTime),\n };\n } catch (error) {\n const endTime = performance.now();\n\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n executionTime: Math.round(endTime - startTime),\n };\n }\n }\n\n async getTables(): Promise<string[]> {\n try {\n // Query system catalog for tables\n const result = await this.db.admin('FROM system::tables MAP { namespace, name }');\n if (Array.isArray(result)) {\n return result.map((row: Record<string, unknown>) => {\n const ns = row.namespace as string;\n const name = row.name as string;\n return ns ? `${ns}::${name}` : name;\n });\n }\n return [];\n } catch {\n return [];\n }\n }\n\n async getSchema(tableName: string): Promise<string | null> {\n try {\n // Query system catalog for table schema\n const result = await this.db.admin(\n `FROM system::columns FILTER table = \"${tableName}\" MAP { name, type }`\n );\n if (Array.isArray(result) && result.length > 0) {\n const columns = result.map((row: Record<string, unknown>) =>\n ` ${row.name}: ${row.type}`\n ).join(',\\n');\n return `${tableName} {\\n${columns}\\n}`;\n }\n return null;\n } catch {\n return null;\n }\n }\n}\n","// SPDX-License-Identifier: AGPL-3.0-or-later\n// Copyright (c) 2025 ReifyDB\n\nimport type { Executor, ExecutionResult } from '../types';\n\n/**\n * Interface for WebSocket client.\n * This matches the WsClient interface from @reifydb/client.\n */\nexport interface WsClient {\n admin<const S extends readonly unknown[]>(\n statements: string | string[],\n params: unknown,\n schemas: S\n ): Promise<unknown[][]>;\n}\n\n/**\n * Executor adapter for WebSocket-based ReifyDB connections.\n */\nexport class WsExecutor implements Executor {\n private client: WsClient;\n\n constructor(client: WsClient) {\n this.client = client;\n }\n\n async execute(statement: string): Promise<ExecutionResult> {\n const trimmed = statement.trim();\n\n // Remove trailing semicolon for execution\n const query = trimmed.endsWith(';')\n ? trimmed.slice(0, -1).trim()\n : trimmed;\n\n if (!query) {\n return {\n success: true,\n data: [],\n executionTime: 0,\n };\n }\n\n const startTime = performance.now();\n\n try {\n // Execute via admin endpoint with no schema transformation\n const frames = await this.client.admin(query, null, []);\n const endTime = performance.now();\n\n // Get first frame results (admin typically returns single frame)\n const results = frames[0] ?? [];\n\n // Convert results to plain objects, keeping Value objects as-is\n const data = results.map((row: unknown) => {\n if (row && typeof row === 'object') {\n const plainRow: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(row as Record<string, unknown>)) {\n plainRow[key] = value; // Keep Value objects as-is\n }\n return plainRow;\n }\n return row as Record<string, unknown>;\n });\n\n return {\n success: true,\n data,\n executionTime: Math.round(endTime - startTime),\n };\n } catch (error) {\n const endTime = performance.now();\n\n // Extract error message from ReifyError if present\n let errorMessage: string;\n if (error && typeof error === 'object' && 'diagnostic' in error) {\n const diagnostic = (error as { diagnostic: { message: string } }).diagnostic;\n errorMessage = diagnostic.message;\n } else if (error instanceof Error) {\n errorMessage = error.message;\n } else {\n errorMessage = String(error);\n }\n\n return {\n success: false,\n error: errorMessage,\n executionTime: Math.round(endTime - startTime),\n };\n }\n }\n\n async getTables(): Promise<string[]> {\n try {\n const frames = await this.client.admin(\n 'FROM system::tables MAP { namespace, name }',\n null,\n []\n );\n const results = frames[0] ?? [];\n\n return results.map((row: unknown) => {\n const r = row as Record<string, unknown>;\n const ns = this.extractValue(r.namespace) as string;\n const name = this.extractValue(r.name) as string;\n return ns ? `${ns}::${name}` : name;\n });\n } catch {\n return [];\n }\n }\n\n async getSchema(tableName: string): Promise<string | null> {\n try {\n const frames = await this.client.admin(\n `FROM system::columns FILTER table = \"${tableName}\" MAP { name, type }`,\n null,\n []\n );\n const results = frames[0] ?? [];\n\n if (results.length > 0) {\n const columns = results.map((row: unknown) => {\n const r = row as Record<string, unknown>;\n return ` ${this.extractValue(r.name)}: ${this.extractValue(r.type)}`;\n }).join(',\\n');\n return `${tableName} {\\n${columns}\\n}`;\n }\n return null;\n } catch {\n return null;\n }\n }\n\n private extractValue(value: unknown): unknown {\n if (value && typeof value === 'object' && typeof (value as { valueOf(): unknown }).valueOf === 'function') {\n return (value as { valueOf(): unknown }).valueOf();\n }\n return value;\n }\n}\n"],"mappings":"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","names":["C","C"]}
1
+ {"version":3,"sources":["../src/terminal/adapter.ts","../src/terminal/theme.ts","../src/input/line-editor.ts","../src/input/history.ts","../src/input/multiline.ts","../src/commands/dot-commands.ts","../src/output/table.ts","../src/output/formatter.ts","../src/shell.ts","../src/executors/wasm-executor.ts","../src/executors/ws-executor.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { Terminal } from '@xterm/xterm';\nimport { FitAddon } from '@xterm/addon-fit';\nimport '@xterm/xterm/css/xterm.css';\nimport './styles.css';\nimport { defaultTheme, COLORS, type TerminalTheme } from './theme';\n\nexport type KeyHandler = (key: string, domEvent: KeyboardEvent) => void;\n\nexport class TerminalAdapter {\n private terminal: Terminal;\n private fitAddon: FitAddon;\n private container: HTMLElement;\n private keyHandler: KeyHandler | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private _isFullscreen: boolean = false;\n\n constructor(container: HTMLElement, theme: TerminalTheme = defaultTheme) {\n this.container = container;\n this.terminal = new Terminal({\n theme,\n fontFamily: \"'JetBrains Mono', 'Fira Code', 'Consolas', 'Monaco', monospace\",\n fontSize: 14,\n lineHeight: 1.2,\n cursorBlink: true,\n cursorStyle: 'block',\n scrollback: 10000,\n allowProposedApi: true,\n });\n\n this.fitAddon = new FitAddon();\n this.terminal.loadAddon(this.fitAddon);\n\n container.innerHTML = '';\n this.terminal.open(container);\n this.fitAddon.fit();\n\n // Handle resize\n this.resizeObserver = new ResizeObserver(() => {\n this.fitAddon.fit();\n });\n this.resizeObserver.observe(container);\n\n // Handle key input\n this.terminal.onKey(({ key, domEvent }) => {\n if (this.keyHandler) {\n this.keyHandler(key, domEvent);\n }\n });\n }\n\n onKey(handler: KeyHandler): void {\n this.keyHandler = handler;\n }\n\n write(text: string): void {\n this.terminal.write(text);\n }\n\n writeln(text: string): void {\n this.terminal.writeln(text);\n }\n\n clear(): void {\n this.terminal.clear();\n }\n\n get cols(): number {\n return this.terminal.cols;\n }\n\n get rows(): number {\n return this.terminal.rows;\n }\n\n focus(): void {\n this.terminal.focus();\n }\n\n dispose(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n this.terminal.dispose();\n }\n\n get isFullscreen(): boolean {\n return this._isFullscreen;\n }\n\n enterFullscreen(): void {\n if (this._isFullscreen) return;\n this._isFullscreen = true;\n this.container.classList.add('reifydb-shell-fullscreen');\n this.fitAddon.fit();\n }\n\n exitFullscreen(): void {\n if (!this._isFullscreen) return;\n this._isFullscreen = false;\n this.container.classList.remove('reifydb-shell-fullscreen');\n this.fitAddon.fit();\n }\n\n // ANSI escape code helpers - static for use without instance\n static readonly COLORS = COLORS;\n\n // Cursor control helpers\n static cursorUp(n: number = 1): string {\n return `\\x1b[${n}A`;\n }\n\n static cursorDown(n: number = 1): string {\n return `\\x1b[${n}B`;\n }\n\n static cursorForward(n: number = 1): string {\n return `\\x1b[${n}C`;\n }\n\n static cursorBack(n: number = 1): string {\n return `\\x1b[${n}D`;\n }\n\n static cursorPosition(row: number, col: number): string {\n return `\\x1b[${row};${col}H`;\n }\n\n static clearLine(): string {\n return '\\x1b[2K';\n }\n\n static clearToEndOfLine(): string {\n return '\\x1b[K';\n }\n\n static clearScreen(): string {\n return '\\x1b[2J\\x1b[3J\\x1b[H';\n }\n\n static saveCursor(): string {\n return '\\x1b[s';\n }\n\n static restoreCursor(): string {\n return '\\x1b[u';\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\n/**\n * Terminal color theme configuration\n */\nexport interface TerminalTheme {\n background: string;\n foreground: string;\n cursor: string;\n cursorAccent: string;\n selectionBackground: string;\n black: string;\n red: string;\n green: string;\n yellow: string;\n blue: string;\n magenta: string;\n cyan: string;\n white: string;\n brightBlack: string;\n brightRed: string;\n brightGreen: string;\n brightYellow: string;\n brightBlue: string;\n brightMagenta: string;\n brightCyan: string;\n brightWhite: string;\n}\n\n/**\n * Catppuccin Mocha theme - default theme\n */\nexport const defaultTheme: TerminalTheme = {\n background: '#1e1e2e',\n foreground: '#cdd6f4',\n cursor: '#f5e0dc',\n cursorAccent: '#1e1e2e',\n selectionBackground: '#45475a',\n black: '#45475a',\n red: '#f38ba8',\n green: '#a6e3a1',\n yellow: '#f9e2af',\n blue: '#89b4fa',\n magenta: '#f5c2e7',\n cyan: '#94e2d5',\n white: '#bac2de',\n brightBlack: '#585b70',\n brightRed: '#f38ba8',\n brightGreen: '#a6e3a1',\n brightYellow: '#f9e2af',\n brightBlue: '#89b4fa',\n brightMagenta: '#f5c2e7',\n brightCyan: '#94e2d5',\n brightWhite: '#a6adc8',\n};\n\n/**\n * ANSI escape codes for terminal colors and formatting\n */\nexport const COLORS = {\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n italic: '\\x1b[3m',\n underline: '\\x1b[4m',\n\n // Foreground colors\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n\n // Bright foreground colors\n brightBlack: '\\x1b[90m',\n brightRed: '\\x1b[91m',\n brightGreen: '\\x1b[92m',\n brightYellow: '\\x1b[93m',\n brightBlue: '\\x1b[94m',\n brightMagenta: '\\x1b[95m',\n brightCyan: '\\x1b[96m',\n brightWhite: '\\x1b[97m',\n} as const;\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { TerminalAdapter } from '../terminal/adapter';\n\nexport class LineEditor {\n private buffer: string = '';\n private cursorPos: number = 0;\n private terminal: TerminalAdapter;\n\n constructor(terminal: TerminalAdapter) {\n this.terminal = terminal;\n }\n\n get value(): string {\n return this.buffer;\n }\n\n get cursor(): number {\n return this.cursorPos;\n }\n\n clear(): void {\n this.buffer = '';\n this.cursorPos = 0;\n }\n\n setValue(value: string): void {\n this.buffer = value;\n this.cursorPos = value.length;\n }\n\n insert(char: string): void {\n this.buffer =\n this.buffer.slice(0, this.cursorPos) +\n char +\n this.buffer.slice(this.cursorPos);\n this.cursorPos++;\n }\n\n backspace(): boolean {\n if (this.cursorPos > 0) {\n this.buffer =\n this.buffer.slice(0, this.cursorPos - 1) +\n this.buffer.slice(this.cursorPos);\n this.cursorPos--;\n return true;\n }\n return false;\n }\n\n delete(): boolean {\n if (this.cursorPos < this.buffer.length) {\n this.buffer =\n this.buffer.slice(0, this.cursorPos) +\n this.buffer.slice(this.cursorPos + 1);\n return true;\n }\n return false;\n }\n\n moveLeft(): boolean {\n if (this.cursorPos > 0) {\n this.cursorPos--;\n this.terminal.write(TerminalAdapter.cursorBack());\n return true;\n }\n return false;\n }\n\n moveRight(): boolean {\n if (this.cursorPos < this.buffer.length) {\n this.cursorPos++;\n this.terminal.write(TerminalAdapter.cursorForward());\n return true;\n }\n return false;\n }\n\n moveToStart(): void {\n if (this.cursorPos > 0) {\n this.terminal.write(TerminalAdapter.cursorBack(this.cursorPos));\n this.cursorPos = 0;\n }\n }\n\n moveToEnd(): void {\n if (this.cursorPos < this.buffer.length) {\n const distance = this.buffer.length - this.cursorPos;\n this.terminal.write(TerminalAdapter.cursorForward(distance));\n this.cursorPos = this.buffer.length;\n }\n }\n\n moveWordLeft(): void {\n if (this.cursorPos === 0) return;\n\n let newPos = this.cursorPos - 1;\n\n // Skip whitespace\n while (newPos > 0 && /\\s/.test(this.buffer[newPos])) {\n newPos--;\n }\n\n // Move to start of word\n while (newPos > 0 && !/\\s/.test(this.buffer[newPos - 1])) {\n newPos--;\n }\n\n const distance = this.cursorPos - newPos;\n if (distance > 0) {\n this.terminal.write(TerminalAdapter.cursorBack(distance));\n this.cursorPos = newPos;\n }\n }\n\n moveWordRight(): void {\n if (this.cursorPos >= this.buffer.length) return;\n\n let newPos = this.cursorPos;\n\n // Move past current word\n while (newPos < this.buffer.length && !/\\s/.test(this.buffer[newPos])) {\n newPos++;\n }\n\n // Skip whitespace\n while (newPos < this.buffer.length && /\\s/.test(this.buffer[newPos])) {\n newPos++;\n }\n\n const distance = newPos - this.cursorPos;\n if (distance > 0) {\n this.terminal.write(TerminalAdapter.cursorForward(distance));\n this.cursorPos = newPos;\n }\n }\n\n clearLine(): void {\n this.buffer = '';\n this.cursorPos = 0;\n }\n\n deleteToEnd(): void {\n this.buffer = this.buffer.slice(0, this.cursorPos);\n }\n\n deleteToStart(): void {\n this.buffer = this.buffer.slice(this.cursorPos);\n this.cursorPos = 0;\n }\n\n deleteWord(): void {\n if (this.cursorPos === 0) return;\n\n let newPos = this.cursorPos - 1;\n\n // Skip whitespace\n while (newPos > 0 && /\\s/.test(this.buffer[newPos])) {\n newPos--;\n }\n\n // Move to start of word\n while (newPos > 0 && !/\\s/.test(this.buffer[newPos - 1])) {\n newPos--;\n }\n\n this.buffer = this.buffer.slice(0, newPos) + this.buffer.slice(this.cursorPos);\n this.cursorPos = newPos;\n }\n\n // Called by shell to render the line with prompt\n render(prompt: string): void {\n this.terminal.write(\n '\\r' +\n TerminalAdapter.clearToEndOfLine() +\n prompt +\n this.buffer\n );\n\n // Position cursor correctly\n const cursorOffset = this.buffer.length - this.cursorPos;\n if (cursorOffset > 0) {\n this.terminal.write(TerminalAdapter.cursorBack(cursorOffset));\n }\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { HistoryStorage } from '../types';\n\nconst DEFAULT_STORAGE_KEY = 'reifydb-shell-history';\nconst MAX_HISTORY = 1000;\n\n/**\n * Default localStorage-based history storage\n */\nexport class LocalStorageHistoryStorage implements HistoryStorage {\n private key: string;\n\n constructor(key: string = DEFAULT_STORAGE_KEY) {\n this.key = key;\n }\n\n load(): string[] {\n try {\n const stored = localStorage.getItem(this.key);\n if (stored) {\n const parsed = JSON.parse(stored);\n if (Array.isArray(parsed)) {\n return parsed.filter((e): e is string => typeof e === 'string');\n }\n }\n } catch {\n // Ignore localStorage errors\n }\n return [];\n }\n\n save(entries: string[]): void {\n try {\n localStorage.setItem(this.key, JSON.stringify(entries));\n } catch {\n // Ignore localStorage errors (quota exceeded, etc.)\n }\n }\n}\n\n/**\n * In-memory history storage (no persistence)\n */\nexport class MemoryHistoryStorage implements HistoryStorage {\n private entries: string[] = [];\n\n load(): string[] {\n return [...this.entries];\n }\n\n save(entries: string[]): void {\n this.entries = [...entries];\n }\n}\n\nexport class CommandHistory {\n private entries: string[] = [];\n private position: number = -1;\n private savedInput: string = '';\n private storage: HistoryStorage;\n\n constructor(storage?: HistoryStorage, historyKey?: string) {\n this.storage = storage ?? new LocalStorageHistoryStorage(historyKey);\n this.entries = this.storage.load();\n }\n\n add(command: string): void {\n const trimmed = command.trim();\n if (!trimmed) return;\n\n // Don't add duplicates at the end\n if (this.entries.length > 0 && this.entries[this.entries.length - 1] === trimmed) {\n this.reset();\n return;\n }\n\n this.entries.push(trimmed);\n\n // Limit size\n if (this.entries.length > MAX_HISTORY) {\n this.entries = this.entries.slice(-MAX_HISTORY);\n }\n\n this.storage.save(this.entries);\n this.reset();\n }\n\n previous(currentInput: string): string | null {\n if (this.entries.length === 0) return null;\n\n // Save current input when starting navigation\n if (this.position === -1) {\n this.savedInput = currentInput;\n this.position = this.entries.length;\n }\n\n if (this.position > 0) {\n this.position--;\n return this.entries[this.position];\n }\n\n return null;\n }\n\n next(): string | null {\n if (this.position === -1) return null;\n\n if (this.position < this.entries.length - 1) {\n this.position++;\n return this.entries[this.position];\n }\n\n if (this.position === this.entries.length - 1) {\n this.position = -1;\n return this.savedInput;\n }\n\n return null;\n }\n\n reset(): void {\n this.position = -1;\n this.savedInput = '';\n }\n\n getAll(): string[] {\n return [...this.entries];\n }\n\n clear(): void {\n this.entries = [];\n this.position = -1;\n this.savedInput = '';\n this.storage.save(this.entries);\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nexport class MultilineBuffer {\n private lines: string[] = [];\n\n get isEmpty(): boolean {\n return this.lines.length === 0;\n }\n\n get content(): string {\n return this.lines.join(' ');\n }\n\n addLine(line: string): void {\n this.lines.push(line);\n }\n\n clear(): void {\n this.lines = [];\n }\n\n isComplete(): boolean {\n // A statement is complete when it ends with a semicolon\n const full = this.content.trim();\n return full.endsWith(';');\n }\n\n static isStatementComplete(input: string): boolean {\n const trimmed = input.trim();\n return trimmed.endsWith(';');\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { TerminalAdapter } from '../terminal/adapter';\nimport type { DotCommandContext, DotCommandResult, DisplayMode } from '../types';\n\nconst C = TerminalAdapter.COLORS;\n\nexport async function handleDotCommand(\n input: string,\n context: DotCommandContext\n): Promise<DotCommandResult> {\n const parts = input.trim().split(/\\s+/);\n const command = parts[0].toLowerCase();\n const args = parts.slice(1);\n\n switch (command) {\n case '.help':\n showHelp(context.terminal);\n return { handled: true };\n\n case '.clear':\n context.terminal.write(TerminalAdapter.clearScreen());\n return { handled: true };\n\n case '.mode':\n handleMode(args, context);\n return { handled: true };\n\n case '.history':\n showHistory(context);\n return { handled: true };\n\n case '.tables':\n await showTables(context);\n return { handled: true };\n\n case '.schema':\n await showSchema(args, context);\n return { handled: true };\n\n case '.fullscreen':\n context.enterFullscreen();\n return { handled: true };\n\n case '.exit':\n if (context.isFullscreen) {\n context.exitFullscreen();\n }\n return { handled: true };\n\n default:\n if (command.startsWith('.')) {\n context.terminal.writeln(\n `${C.red}Unknown command: ${command}${C.reset}`\n );\n context.terminal.writeln(`Type ${C.cyan}.help${C.reset} for available commands.`);\n return { handled: true };\n }\n return { handled: false };\n }\n}\n\nfunction showHelp(terminal: TerminalAdapter): void {\n terminal.writeln('');\n terminal.writeln(`${C.bold}${C.cyan}Available commands:${C.reset}`);\n terminal.writeln('');\n terminal.writeln(` ${C.green}.help${C.reset} Show this help message`);\n terminal.writeln(` ${C.green}.clear${C.reset} Clear the screen`);\n terminal.writeln(` ${C.green}.mode${C.reset} [mode] Set display mode (truncate|full)`);\n terminal.writeln(` ${C.green}.history${C.reset} Show command history`);\n terminal.writeln(` ${C.green}.tables${C.reset} List all tables`);\n terminal.writeln(` ${C.green}.schema${C.reset} [table] Show table schema`);\n terminal.writeln(` ${C.green}.fullscreen${C.reset} Enter fullscreen mode`);\n terminal.writeln(` ${C.green}.exit${C.reset} Exit fullscreen mode`);\n terminal.writeln('');\n terminal.writeln(`${C.bold}${C.cyan}Keyboard shortcuts:${C.reset}`);\n terminal.writeln('');\n terminal.writeln(` ${C.yellow}Left/Right${C.reset} Move cursor`);\n terminal.writeln(` ${C.yellow}Ctrl+Left/Right${C.reset} Move by word`);\n terminal.writeln(` ${C.yellow}Home/End${C.reset} Start/end of line`);\n terminal.writeln(` ${C.yellow}Ctrl+A/E${C.reset} Start/end of line`);\n terminal.writeln(` ${C.yellow}Ctrl+U${C.reset} Clear line`);\n terminal.writeln(` ${C.yellow}Ctrl+W${C.reset} Delete word`);\n terminal.writeln(` ${C.yellow}Up/Down${C.reset} Navigate history`);\n terminal.writeln(` ${C.yellow}Ctrl+C${C.reset} Cancel input`);\n terminal.writeln('');\n terminal.writeln(`${C.dim}Statements must end with a semicolon (;)${C.reset}`);\n terminal.writeln('');\n}\n\nfunction handleMode(args: string[], context: DotCommandContext): void {\n const terminal = context.terminal;\n\n if (args.length === 0) {\n terminal.writeln(`Current display mode: ${C.cyan}${context.displayMode}${C.reset}`);\n return;\n }\n\n const mode = args[0].toLowerCase();\n if (mode === 'truncate' || mode === 'full') {\n context.setDisplayMode(mode as DisplayMode);\n terminal.writeln(`Display mode set to: ${C.cyan}${mode}${C.reset}`);\n } else {\n terminal.writeln(\n `${C.red}Unknown mode: ${mode}${C.reset}. Use 'truncate' or 'full'.`\n );\n }\n}\n\nfunction showHistory(context: DotCommandContext): void {\n const terminal = context.terminal;\n const entries = context.history.getAll();\n\n if (entries.length === 0) {\n terminal.writeln(`${C.dim}No command history${C.reset}`);\n return;\n }\n\n terminal.writeln('');\n terminal.writeln(`${C.bold}${C.cyan}Command history:${C.reset}`);\n terminal.writeln('');\n\n // Show last 20 entries\n const toShow = entries.slice(-20);\n const startIdx = entries.length - toShow.length;\n\n toShow.forEach((entry, i) => {\n const num = String(startIdx + i + 1).padStart(4, ' ');\n terminal.writeln(`${C.dim}${num}${C.reset} ${entry}`);\n });\n\n if (entries.length > 20) {\n terminal.writeln('');\n terminal.writeln(`${C.dim}... and ${entries.length - 20} more entries${C.reset}`);\n }\n terminal.writeln('');\n}\n\nasync function showTables(context: DotCommandContext): Promise<void> {\n const terminal = context.terminal;\n\n if (!context.executor.getTables) {\n terminal.writeln(`${C.dim}.tables command not supported by this executor${C.reset}`);\n return;\n }\n\n const tables = await context.executor.getTables();\n\n if (tables.length === 0) {\n terminal.writeln(`${C.dim}No tables found${C.reset}`);\n return;\n }\n\n terminal.writeln('');\n terminal.writeln(`${C.bold}${C.cyan}Tables:${C.reset}`);\n terminal.writeln('');\n\n tables.forEach((table) => {\n terminal.writeln(` ${C.green}${table}${C.reset}`);\n });\n terminal.writeln('');\n}\n\nasync function showSchema(args: string[], context: DotCommandContext): Promise<void> {\n const terminal = context.terminal;\n\n if (!context.executor.getSchema) {\n terminal.writeln(`${C.dim}.schema command not supported by this executor${C.reset}`);\n return;\n }\n\n if (args.length === 0) {\n terminal.writeln(`${C.red}Usage: .schema <table_name>${C.reset}`);\n return;\n }\n\n const tableName = args[0];\n const schema = await context.executor.getSchema(tableName);\n\n if (schema) {\n terminal.writeln('');\n terminal.writeln(schema);\n terminal.writeln('');\n } else {\n terminal.writeln(`${C.red}Table not found: ${tableName}${C.reset}`);\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nexport interface TableColumn {\n name: string;\n width: number;\n}\n\nexport interface TableOptions {\n maxWidth?: number;\n truncate?: boolean;\n}\n\nexport class TableRenderer {\n private data: Record<string, unknown>[];\n private columns: TableColumn[];\n private maxWidth: number;\n private truncate: boolean;\n\n constructor(data: Record<string, unknown>[], options: TableOptions = {}) {\n this.data = data;\n this.maxWidth = options.maxWidth ?? 120;\n this.truncate = options.truncate ?? false;\n this.columns = this.calculateColumns();\n }\n\n private calculateColumns(): TableColumn[] {\n if (this.data.length === 0) return [];\n\n const columns: Map<string, number> = new Map();\n\n // Get all column names and calculate max widths\n for (const row of this.data) {\n for (const [key, value] of Object.entries(row)) {\n const valueStr = this.formatValue(value);\n const currentMax = columns.get(key) ?? key.length;\n columns.set(key, Math.max(currentMax, valueStr.length));\n }\n }\n\n return Array.from(columns.entries()).map(([name, width]) => ({\n name,\n width: Math.max(width, name.length),\n }));\n }\n\n private formatValue(value: unknown): string {\n if (value === null || value === undefined) {\n return 'undefined';\n }\n // Check if it's a core Value object (has type property and toString)\n if (value && typeof value === 'object' && 'type' in value && typeof (value as { toString(): string }).toString === 'function') {\n return (value as { toString(): string }).toString();\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return String(value);\n }\n\n private truncateString(str: string, maxLen: number): string {\n if (str.length <= maxLen) return str;\n if (maxLen <= 3) return str.slice(0, maxLen);\n return str.slice(0, maxLen - 3) + '...';\n }\n\n render(): string[] {\n if (this.data.length === 0 || this.columns.length === 0) {\n return ['(no results)'];\n }\n\n const lines: string[] = [];\n let columnsToShow = this.columns;\n let widths = this.columns.map((c) => c.width);\n\n // Calculate how many columns fit\n if (this.truncate) {\n const result = this.fitColumns(this.maxWidth);\n columnsToShow = result.columns;\n widths = result.widths;\n }\n\n // Build separator line\n const separator =\n '+' + widths.map((w) => '-'.repeat(w + 2)).join('+') + '+';\n\n lines.push(separator);\n\n // Build header\n const headerCells = columnsToShow.map((col, i) =>\n this.padCenter(col.name, widths[i])\n );\n lines.push('| ' + headerCells.join(' | ') + ' |');\n lines.push(separator);\n\n // Build rows\n for (const row of this.data) {\n const cells = columnsToShow.map((col, i) => {\n const value = this.formatValue(row[col.name]);\n const truncated = this.truncate\n ? this.truncateString(value, widths[i])\n : value;\n return this.padRight(truncated, widths[i]);\n });\n lines.push('| ' + cells.join(' | ') + ' |');\n }\n\n lines.push(separator);\n\n return lines;\n }\n\n private fitColumns(maxWidth: number): {\n columns: TableColumn[];\n widths: number[];\n } {\n const columns: TableColumn[] = [];\n const widths: number[] = [];\n let currentWidth = 1; // Starting '|'\n\n for (const col of this.columns) {\n // Each column: ' content ' + '|' = 3 extra chars\n const colWidth = Math.min(col.width, 40); // Cap individual column width\n const totalColWidth = colWidth + 3;\n\n if (currentWidth + totalColWidth <= maxWidth) {\n columns.push(col);\n widths.push(colWidth);\n currentWidth += totalColWidth;\n } else {\n break;\n }\n }\n\n // If no columns fit, show at least the first one\n if (columns.length === 0 && this.columns.length > 0) {\n const firstCol = this.columns[0];\n const availableWidth = maxWidth - 4; // '| ' and ' |'\n columns.push(firstCol);\n widths.push(Math.max(availableWidth, 10));\n }\n\n return { columns, widths };\n }\n\n private padCenter(str: string, width: number): string {\n const padding = width - str.length;\n if (padding <= 0) return str.slice(0, width);\n const left = Math.floor(padding / 2);\n const right = padding - left;\n return ' '.repeat(left) + str + ' '.repeat(right);\n }\n\n private padRight(str: string, width: number): string {\n const padding = width - str.length;\n if (padding <= 0) return str.slice(0, width);\n return str + ' '.repeat(padding);\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { TerminalAdapter } from '../terminal/adapter';\nimport { TableRenderer } from './table';\nimport type { ExecutionResult, DisplayMode } from '../types';\n\nconst C = TerminalAdapter.COLORS;\n\nexport class OutputFormatter {\n private terminal: TerminalAdapter;\n private displayMode: DisplayMode;\n\n constructor(terminal: TerminalAdapter, displayMode: DisplayMode = 'full') {\n this.terminal = terminal;\n this.displayMode = displayMode;\n }\n\n setDisplayMode(mode: DisplayMode): void {\n this.displayMode = mode;\n }\n\n formatResult(result: ExecutionResult): void {\n if (!result.success) {\n this.formatError(result.error ?? 'Unknown error', result.executionTime);\n return;\n }\n\n if (!result.data || result.data.length === 0) {\n this.terminal.writeln('');\n this.terminal.writeln(`${C.dim}Query executed successfully. No rows returned.${C.reset}`);\n this.formatExecutionTime(result.executionTime);\n return;\n }\n\n this.formatTable(result.data, result.executionTime);\n }\n\n private formatTable(data: Record<string, unknown>[], executionTime: number): void {\n const renderer = new TableRenderer(data, {\n maxWidth: this.displayMode === 'truncate' ? this.terminal.cols - 2 : undefined,\n truncate: this.displayMode === 'truncate',\n });\n\n const lines = renderer.render();\n this.terminal.writeln('');\n for (const line of lines) {\n this.terminal.writeln(line);\n }\n\n const rowCount = data.length;\n this.terminal.writeln('');\n this.terminal.write(\n `${C.green}${rowCount} row${rowCount !== 1 ? 's' : ''}${C.reset}`\n );\n this.formatExecutionTime(executionTime);\n }\n\n private formatError(error: string, executionTime: number): void {\n this.terminal.writeln('');\n for (const line of error.split('\\n')) {\n this.terminal.writeln(line);\n }\n this.formatExecutionTime(executionTime);\n }\n\n private formatExecutionTime(ms: number): void {\n this.terminal.writeln(` ${C.dim}(${ms}ms)${C.reset}`);\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport { TerminalAdapter } from './terminal/adapter';\nimport { COLORS } from './terminal/theme';\nimport { LineEditor } from './input/line-editor';\nimport { CommandHistory } from './input/history';\nimport { MultilineBuffer } from './input/multiline';\nimport { handleDotCommand } from './commands/dot-commands';\nimport { OutputFormatter } from './output/formatter';\nimport type { ShellOptions, DisplayMode, Executor } from './types';\n\nconst C = COLORS;\n\n// Default prompts\nconst DEFAULT_PRIMARY_PROMPT = `${C.cyan}reifydb${C.reset}${C.brightBlack}>${C.reset} `;\nconst DEFAULT_CONTINUATION_PROMPT = `${C.brightBlack} ...${C.reset} `;\n\n// Prompt lengths without ANSI codes (for cursor positioning)\nconst DEFAULT_PRIMARY_PROMPT_LEN = 9; // \"reifydb> \"\nconst DEFAULT_CONTINUATION_PROMPT_LEN = 8; // \" ... \"\n\nexport class Shell {\n private terminal: TerminalAdapter;\n private lineEditor: LineEditor;\n private history: CommandHistory;\n private multiline: MultilineBuffer;\n private executor: Executor;\n private formatter: OutputFormatter;\n private displayMode: DisplayMode;\n private isExited: boolean = false;\n\n // Configurable options\n private primaryPrompt: string;\n private primaryPromptLen: number;\n private continuationPrompt: string;\n private continuationPromptLen: number;\n private welcomeMessage: string | string[] | (() => string[]) | undefined;\n private onExit: (() => void) | undefined;\n private onFullscreenChange: ((isFullscreen: boolean) => void) | undefined;\n\n constructor(container: HTMLElement, options: ShellOptions) {\n this.executor = options.executor;\n this.displayMode = options.displayMode ?? 'full';\n this.welcomeMessage = options.welcomeMessage;\n this.onExit = options.onExit;\n this.onFullscreenChange = options.onFullscreenChange;\n\n // Set up prompts\n this.primaryPrompt = options.prompt ?? DEFAULT_PRIMARY_PROMPT;\n this.primaryPromptLen = options.promptLength ?? DEFAULT_PRIMARY_PROMPT_LEN;\n this.continuationPrompt = options.continuationPrompt ?? DEFAULT_CONTINUATION_PROMPT;\n this.continuationPromptLen = options.continuationPromptLength ?? DEFAULT_CONTINUATION_PROMPT_LEN;\n\n // Initialize components\n this.terminal = new TerminalAdapter(container, options.theme);\n this.lineEditor = new LineEditor(this.terminal);\n this.history = new CommandHistory(options.historyStorage, options.historyKey);\n this.multiline = new MultilineBuffer();\n this.formatter = new OutputFormatter(this.terminal, this.displayMode);\n\n this.setupKeyHandler();\n }\n\n start(): void {\n this.showWelcomeBanner();\n this.showPrompt();\n this.terminal.focus();\n }\n\n dispose(): void {\n this.isExited = true;\n this.terminal.exitFullscreen();\n this.terminal.dispose();\n }\n\n get isFullscreen(): boolean {\n return this.terminal.isFullscreen;\n }\n\n enterFullscreen(): void {\n this.terminal.enterFullscreen();\n this.onFullscreenChange?.(true);\n }\n\n exitFullscreen(): void {\n this.terminal.exitFullscreen();\n this.onFullscreenChange?.(false);\n }\n\n private showWelcomeBanner(): void {\n if (this.welcomeMessage === undefined) {\n // Default welcome banner\n this.terminal.writeln('');\n this.terminal.writeln(`${C.bold}${C.cyan}ReifyDB Shell${C.reset}`);\n this.terminal.writeln('');\n this.terminal.writeln(`Type ${C.green}.help${C.reset} for available commands`);\n this.terminal.writeln(`Statements must end with a semicolon ${C.yellow};${C.reset}`);\n this.terminal.writeln('');\n return;\n }\n\n let lines: string[];\n if (typeof this.welcomeMessage === 'function') {\n lines = this.welcomeMessage();\n } else if (Array.isArray(this.welcomeMessage)) {\n lines = this.welcomeMessage;\n } else {\n lines = [this.welcomeMessage];\n }\n\n for (const line of lines) {\n this.terminal.writeln(line);\n }\n }\n\n private showPrompt(): void {\n const prompt = this.multiline.isEmpty ? this.primaryPrompt : this.continuationPrompt;\n this.terminal.write(prompt);\n }\n\n private getCurrentPromptLen(): number {\n return this.multiline.isEmpty ? this.primaryPromptLen : this.continuationPromptLen;\n }\n\n private setupKeyHandler(): void {\n this.terminal.onKey((key, event) => {\n if (this.isExited) return;\n this.handleKey(key, event);\n });\n }\n\n private handleKey(key: string, event: KeyboardEvent): void {\n const code = event.keyCode;\n\n // Handle Ctrl key combinations\n if (event.ctrlKey) {\n switch (event.key.toLowerCase()) {\n case 'a': // Ctrl+A - go to start\n event.preventDefault();\n this.lineEditor.moveToStart();\n return;\n\n case 'e': // Ctrl+E - go to end\n event.preventDefault();\n this.lineEditor.moveToEnd();\n return;\n\n case 'u': // Ctrl+U - clear line\n event.preventDefault();\n this.lineEditor.clearLine();\n this.redrawLine();\n return;\n\n case 'w': // Ctrl+W - delete word\n event.preventDefault();\n this.lineEditor.deleteWord();\n this.redrawLine();\n return;\n\n case 'c': // Ctrl+C - cancel\n event.preventDefault();\n this.terminal.writeln('^C');\n this.lineEditor.clear();\n this.multiline.clear();\n this.history.reset();\n this.showPrompt();\n return;\n\n case 'l': // Ctrl+L - clear screen\n event.preventDefault();\n this.clearScreen();\n return;\n }\n\n // Ctrl+Left/Right for word navigation\n if (code === 37) { // Left\n event.preventDefault();\n this.lineEditor.moveWordLeft();\n return;\n }\n if (code === 39) { // Right\n event.preventDefault();\n this.lineEditor.moveWordRight();\n return;\n }\n\n return;\n }\n\n // Handle special keys\n switch (code) {\n case 13: // Enter\n this.handleEnter();\n return;\n\n case 8: // Backspace\n if (this.lineEditor.backspace()) {\n this.redrawLine();\n }\n return;\n\n case 46: // Delete\n if (this.lineEditor.delete()) {\n this.redrawLine();\n }\n return;\n\n case 37: // Left arrow\n this.lineEditor.moveLeft();\n return;\n\n case 39: // Right arrow\n this.lineEditor.moveRight();\n return;\n\n case 38: // Up arrow\n this.navigateHistory('up');\n return;\n\n case 40: // Down arrow\n this.navigateHistory('down');\n return;\n\n case 36: // Home\n this.lineEditor.moveToStart();\n return;\n\n case 35: // End\n this.lineEditor.moveToEnd();\n return;\n\n case 9: // Tab - ignore for now\n return;\n\n case 27: // Escape - exit fullscreen\n if (this.terminal.isFullscreen) {\n this.exitFullscreen();\n }\n return;\n }\n\n // Regular character input\n if (key.length === 1 && !event.ctrlKey && !event.altKey && !event.metaKey) {\n this.lineEditor.insert(key);\n this.redrawLine();\n }\n }\n\n private redrawLine(): void {\n const prompt = this.multiline.isEmpty ? this.primaryPrompt : this.continuationPrompt;\n this.lineEditor.render(prompt);\n }\n\n private navigateHistory(direction: 'up' | 'down'): void {\n let entry: string | null;\n\n if (direction === 'up') {\n entry = this.history.previous(this.lineEditor.value);\n } else {\n entry = this.history.next();\n }\n\n if (entry !== null) {\n this.lineEditor.setValue(entry);\n this.redrawLine();\n }\n }\n\n private async handleEnter(): Promise<void> {\n const line = this.lineEditor.value;\n this.terminal.writeln('');\n this.lineEditor.clear();\n\n // Handle dot commands (only on first line)\n if (this.multiline.isEmpty && line.trim().startsWith('.')) {\n this.history.add(line);\n const result = await handleDotCommand(line, {\n terminal: this.terminal,\n executor: this.executor,\n history: this.history,\n displayMode: this.displayMode,\n setDisplayMode: (mode) => {\n this.displayMode = mode;\n this.formatter.setDisplayMode(mode);\n },\n clearScreen: () => this.clearScreen(),\n isFullscreen: this.isFullscreen,\n enterFullscreen: () => this.enterFullscreen(),\n exitFullscreen: () => this.exitFullscreen(),\n });\n\n if (result.exit) {\n this.isExited = true;\n if (this.onExit) {\n this.onExit();\n }\n return;\n }\n\n this.showPrompt();\n return;\n }\n\n // Add line to multiline buffer\n this.multiline.addLine(line);\n\n // Check if statement is complete\n if (this.multiline.isComplete()) {\n const statement = this.multiline.content;\n this.multiline.clear();\n this.history.add(statement);\n this.history.reset();\n\n // Execute the statement\n const result = await this.executor.execute(statement);\n this.formatter.formatResult(result);\n }\n\n this.showPrompt();\n }\n\n private clearScreen(): void {\n this.terminal.write(TerminalAdapter.clearScreen());\n this.showPrompt();\n this.terminal.write(this.lineEditor.value);\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { Executor, ExecutionResult } from '../types';\n\n/**\n * Interface for WebAssembly database instances.\n * This matches the WasmDB interface from reifydb-wasm.\n */\nexport interface WasmDB {\n admin(rql: string): Promise<unknown> | unknown;\n}\n\n/**\n * Executor adapter for WebAssembly-based ReifyDB instances.\n */\nexport class WasmExecutor implements Executor {\n private db: WasmDB;\n\n constructor(db: WasmDB) {\n this.db = db;\n }\n\n async execute(statement: string): Promise<ExecutionResult> {\n const trimmed = statement.trim();\n\n // Remove trailing semicolon for execution\n const query = trimmed.endsWith(';')\n ? trimmed.slice(0, -1).trim()\n : trimmed;\n\n if (!query) {\n return {\n success: true,\n data: [],\n executionTime: 0,\n };\n }\n\n const startTime = performance.now();\n\n try {\n const results = await this.db.admin(query);\n const endTime = performance.now();\n\n return {\n success: true,\n data: Array.isArray(results) ? results : [],\n executionTime: Math.round(endTime - startTime),\n };\n } catch (error) {\n const endTime = performance.now();\n\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n executionTime: Math.round(endTime - startTime),\n };\n }\n }\n\n async getTables(): Promise<string[]> {\n try {\n // Query system catalog for tables\n const result = await this.db.admin('FROM system::tables MAP { namespace, name }');\n if (Array.isArray(result)) {\n return result.map((row: Record<string, unknown>) => {\n const ns = row.namespace as string;\n const name = row.name as string;\n return ns ? `${ns}::${name}` : name;\n });\n }\n return [];\n } catch {\n return [];\n }\n }\n\n async getSchema(tableName: string): Promise<string | null> {\n try {\n // Query system catalog for table schema\n const result = await this.db.admin(\n `FROM system::columns FILTER table = \"${tableName}\" MAP { name, type }`\n );\n if (Array.isArray(result) && result.length > 0) {\n const columns = result.map((row: Record<string, unknown>) =>\n ` ${row.name}: ${row.type}`\n ).join(',\\n');\n return `${tableName} {\\n${columns}\\n}`;\n }\n return null;\n } catch {\n return null;\n }\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\n\nimport type { Executor, ExecutionResult } from '../types';\n\n/**\n * Interface for WebSocket client.\n * This matches the WsClient interface from @reifydb/client.\n */\nexport interface WsClient {\n admin<const S extends readonly unknown[]>(\n statements: string | string[],\n params: unknown,\n schemas: S\n ): Promise<unknown[][]>;\n}\n\n/**\n * Executor adapter for WebSocket-based ReifyDB connections.\n */\nexport class WsExecutor implements Executor {\n private client: WsClient;\n\n constructor(client: WsClient) {\n this.client = client;\n }\n\n async execute(statement: string): Promise<ExecutionResult> {\n const trimmed = statement.trim();\n\n // Remove trailing semicolon for execution\n const query = trimmed.endsWith(';')\n ? trimmed.slice(0, -1).trim()\n : trimmed;\n\n if (!query) {\n return {\n success: true,\n data: [],\n executionTime: 0,\n };\n }\n\n const startTime = performance.now();\n\n try {\n // Execute via admin endpoint with no schema transformation\n const frames = await this.client.admin(query, null, []);\n const endTime = performance.now();\n\n // Get first frame results (admin typically returns single frame)\n const results = frames[0] ?? [];\n\n // Convert results to plain objects, keeping Value objects as-is\n const data = results.map((row: unknown) => {\n if (row && typeof row === 'object') {\n const plainRow: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(row as Record<string, unknown>)) {\n plainRow[key] = value; // Keep Value objects as-is\n }\n return plainRow;\n }\n return row as Record<string, unknown>;\n });\n\n return {\n success: true,\n data,\n executionTime: Math.round(endTime - startTime),\n };\n } catch (error) {\n const endTime = performance.now();\n\n // Extract error message from ReifyError if present\n let errorMessage: string;\n if (error && typeof error === 'object' && 'diagnostic' in error) {\n const diagnostic = (error as { diagnostic: { message: string } }).diagnostic;\n errorMessage = diagnostic.message;\n } else if (error instanceof Error) {\n errorMessage = error.message;\n } else {\n errorMessage = String(error);\n }\n\n return {\n success: false,\n error: errorMessage,\n executionTime: Math.round(endTime - startTime),\n };\n }\n }\n\n async getTables(): Promise<string[]> {\n try {\n const frames = await this.client.admin(\n 'FROM system::tables MAP { namespace, name }',\n null,\n []\n );\n const results = frames[0] ?? [];\n\n return results.map((row: unknown) => {\n const r = row as Record<string, unknown>;\n const ns = this.extractValue(r.namespace) as string;\n const name = this.extractValue(r.name) as string;\n return ns ? `${ns}::${name}` : name;\n });\n } catch {\n return [];\n }\n }\n\n async getSchema(tableName: string): Promise<string | null> {\n try {\n const frames = await this.client.admin(\n `FROM system::columns FILTER table = \"${tableName}\" MAP { name, type }`,\n null,\n []\n );\n const results = frames[0] ?? [];\n\n if (results.length > 0) {\n const columns = results.map((row: unknown) => {\n const r = row as Record<string, unknown>;\n return ` ${this.extractValue(r.name)}: ${this.extractValue(r.type)}`;\n }).join(',\\n');\n return `${tableName} {\\n${columns}\\n}`;\n }\n return null;\n } catch {\n return null;\n }\n }\n\n private extractValue(value: unknown): unknown {\n if (value && typeof value === 'object' && typeof (value as { valueOf(): unknown }).valueOf === 'function') {\n return (value as { valueOf(): unknown }).valueOf();\n }\n return value;\n }\n}\n"],"mappings":"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","names":["C","C"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reifydb/shell",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "description": "Interactive terminal shell for ReifyDB databases",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -19,7 +19,7 @@
19
19
  "@xterm/addon-fit": "^0.10.0",
20
20
  "tsup": "^8.5.0",
21
21
  "typescript": "^5.8.3",
22
- "@reifydb/client": "0.3.0"
22
+ "@reifydb/client": "0.4.1"
23
23
  },
24
24
  "engines": {
25
25
  "node": ">=16.0.0"
@@ -42,7 +42,7 @@
42
42
  "access": "public",
43
43
  "linkWorkspacePackages": false
44
44
  },
45
- "license": "AGPL-3.0-or-later",
45
+ "license": "Apache-2.0",
46
46
  "repository": {
47
47
  "type": "git",
48
48
  "url": "https://github.com/reifydb/reifydb.git",