@boba-cli/machine 0.1.0-alpha.1 → 0.1.0-alpha.2
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/browser/index.cjs +1 -1
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.d.cts +4 -1
- package/dist/browser/index.d.ts +4 -1
- package/dist/browser/index.js +1 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/index.cjs +13 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +29 -3
- package/dist/index.d.ts +29 -3
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/node/index.d.cts +2 -1
- package/dist/node/index.d.ts +2 -1
- package/dist/{types-FB6TYMn5.d.cts → types-l5LiTaxI.d.cts} +3 -42
- package/dist/{types-FB6TYMn5.d.ts → types-l5LiTaxI.d.ts} +3 -42
- package/package.json +4 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/style/index.ts","../../src/browser/archive.ts","../../src/browser/clipboard.ts","../../src/browser/environment.ts","../../src/browser/filesystem.ts","../../src/browser/path.ts","../../src/browser/signals.ts","../../src/bytes.ts","../../src/browser/terminal.ts","../../src/browser/index.ts"],"names":["r","g","b"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Pure JavaScript ANSI styling utility for terminal text.\n * Works identically in Node.js and browser/xterm.js contexts.\n */\n\nimport type { ColorSupport, StyleFn } from '../types.js'\n\n// ANSI escape codes\nconst ESC = '\\x1b['\nconst RESET = `${ESC}0m`\n\n// Modifier codes\nconst CODES = {\n // Modifiers (open, close)\n bold: ['1', '22'],\n dim: ['2', '22'],\n italic: ['3', '23'],\n underline: ['4', '24'],\n inverse: ['7', '27'],\n hidden: ['8', '28'],\n strikethrough: ['9', '29'],\n\n // Basic foreground colors (30-37)\n black: ['30', '39'],\n red: ['31', '39'],\n green: ['32', '39'],\n yellow: ['33', '39'],\n blue: ['34', '39'],\n magenta: ['35', '39'],\n cyan: ['36', '39'],\n white: ['37', '39'],\n\n // Bright foreground colors (90-97)\n blackBright: ['90', '39'],\n redBright: ['91', '39'],\n greenBright: ['92', '39'],\n yellowBright: ['93', '39'],\n blueBright: ['94', '39'],\n magentaBright: ['95', '39'],\n cyanBright: ['96', '39'],\n whiteBright: ['97', '39'],\n\n // Basic background colors (40-47)\n bgBlack: ['40', '49'],\n bgRed: ['41', '49'],\n bgGreen: ['42', '49'],\n bgYellow: ['43', '49'],\n bgBlue: ['44', '49'],\n bgMagenta: ['45', '49'],\n bgCyan: ['46', '49'],\n bgWhite: ['47', '49'],\n\n // Bright background colors (100-107)\n bgBlackBright: ['100', '49'],\n bgRedBright: ['101', '49'],\n bgGreenBright: ['102', '49'],\n bgYellowBright: ['103', '49'],\n bgBlueBright: ['104', '49'],\n bgMagentaBright: ['105', '49'],\n bgCyanBright: ['106', '49'],\n bgWhiteBright: ['107', '49'],\n} as const\n\ntype CodeName = keyof typeof CODES\n\n/**\n * Apply ANSI codes to text.\n * @param text - Text to style\n * @param open - Opening ANSI code\n * @param close - Closing ANSI code\n * @returns Styled text\n */\nfunction applyStyle(text: string, open: string, close: string): string {\n const openSeq = `${ESC}${open}m`\n const closeSeq = `${ESC}${close}m`\n\n // Replace any existing close codes with close+open to properly nest styles\n // This handles cases like style.bold(style.bold('text')) where the inner\n // bold close would prematurely end the outer bold\n const replaced = text.replace(\n new RegExp(closeSeq.replace(/[[\\](){}|^$+*?.\\\\]/g, '\\\\$&'), 'g'),\n closeSeq + openSeq,\n )\n\n return openSeq + replaced + closeSeq\n}\n\n/**\n * Convert hex color to RGB.\n * @param hex - Hex color string (with or without #)\n * @returns RGB array [r, g, b]\n */\nfunction hexToRgb(hex: string): [number, number, number] {\n const clean = hex.replace(/^#/, '')\n const num = parseInt(clean, 16)\n\n if (clean.length === 3) {\n // Short form: #RGB -> #RRGGBB\n const r = ((num >> 8) & 0xf) * 17\n const g = ((num >> 4) & 0xf) * 17\n const b = (num & 0xf) * 17\n return [r, g, b]\n }\n\n // Long form: #RRGGBB\n const r = (num >> 16) & 0xff\n const g = (num >> 8) & 0xff\n const b = num & 0xff\n return [r, g, b]\n}\n\n/**\n * Create a chainable style function.\n * @param colorSupport - Color support level information\n * @returns Chainable style function\n * @public\n */\nexport function createStyle(colorSupport: ColorSupport): StyleFn {\n const enabled = colorSupport.level > 0\n\n /**\n * Build a style function that can be chained.\n * @param stack - Array of [open, close] code pairs to apply\n * @returns Style function\n */\n function build(stack: Array<[string, string]>): StyleFn {\n // The function itself - applies all stacked styles\n const fn = (text: string): string => {\n if (!enabled || stack.length === 0) {\n return text\n }\n\n // Apply styles from inside out\n let result = text\n for (let i = stack.length - 1; i >= 0; i--) {\n const [open, close] = stack[i]!\n result = applyStyle(result, open, close)\n }\n return result\n }\n\n // Add all code-based style properties\n const codeNames = Object.keys(CODES) as CodeName[]\n for (const name of codeNames) {\n const [open, close] = CODES[name]\n Object.defineProperty(fn, name, {\n get() {\n return build([...stack, [open, close]])\n },\n })\n }\n\n // Add gray as alias for blackBright\n Object.defineProperty(fn, 'gray', {\n get() {\n const [open, close] = CODES.blackBright\n return build([...stack, [open, close]])\n },\n })\n\n // Add grey as alias for blackBright\n Object.defineProperty(fn, 'grey', {\n get() {\n const [open, close] = CODES.blackBright\n return build([...stack, [open, close]])\n },\n })\n\n // Add extended color methods\n\n // hex(color: string): StyleFn\n Object.defineProperty(fn, 'hex', {\n value: (color: string): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n const [r, g, b] = hexToRgb(color)\n return build([...stack, [`38;2;${r};${g};${b}`, '39']])\n },\n writable: true,\n })\n\n // rgb(r: number, g: number, b: number): StyleFn\n Object.defineProperty(fn, 'rgb', {\n value: (r: number, g: number, b: number): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n return build([...stack, [`38;2;${r};${g};${b}`, '39']])\n },\n writable: true,\n })\n\n // bgHex(color: string): StyleFn\n Object.defineProperty(fn, 'bgHex', {\n value: (color: string): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n const [r, g, b] = hexToRgb(color)\n return build([...stack, [`48;2;${r};${g};${b}`, '49']])\n },\n writable: true,\n })\n\n // bgRgb(r: number, g: number, b: number): StyleFn\n Object.defineProperty(fn, 'bgRgb', {\n value: (r: number, g: number, b: number): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n return build([...stack, [`48;2;${r};${g};${b}`, '49']])\n },\n writable: true,\n })\n\n // ansi256(code: number): StyleFn\n Object.defineProperty(fn, 'ansi256', {\n value: (code: number): StyleFn => {\n if (!enabled || !colorSupport.has256) {\n return build(stack)\n }\n return build([...stack, [`38;5;${code}`, '39']])\n },\n writable: true,\n })\n\n // bgAnsi256(code: number): StyleFn\n Object.defineProperty(fn, 'bgAnsi256', {\n value: (code: number): StyleFn => {\n if (!enabled || !colorSupport.has256) {\n return build(stack)\n }\n return build([...stack, [`48;5;${code}`, '49']])\n },\n writable: true,\n })\n\n return fn as StyleFn\n }\n\n return build([])\n}\n\n/**\n * Create a style function that always applies colors (for xterm.js).\n * @returns Chainable style function with full color support\n * @public\n */\nexport function createAlwaysEnabledStyle(): StyleFn {\n return createStyle({ level: 3, hasBasic: true, has256: true, has16m: true })\n}\n","/**\n * Browser archive adapter (not available).\n */\n\nimport type { ArchiveAdapter } from '../types.js'\n\n/**\n * Browser implementation of ArchiveAdapter.\n * Archive operations are not available in browser environments.\n * @public\n */\nexport class BrowserArchiveAdapter implements ArchiveAdapter {\n /**\n * Check if archive operations are available.\n * @returns Always false in browser environments\n */\n isAvailable(): boolean {\n return false\n }\n\n /**\n * Create a zip archive from a directory.\n * @param _sourceDir - Source directory to archive\n * @param _destPath - Destination path for the zip file\n * @throws Error - Always throws as archiving is not available in browser\n */\n async zip(_sourceDir: string, _destPath: string): Promise<void> {\n throw new Error('Archive operations not available in browser environment')\n }\n\n /**\n * Extract a zip archive to a directory.\n * @param _archivePath - Path to the zip file\n * @param _destDir - Destination directory for extraction\n * @throws Error - Always throws as archiving is not available in browser\n */\n async unzip(_archivePath: string, _destDir: string): Promise<void> {\n throw new Error('Archive operations not available in browser environment')\n }\n}\n","import type { ClipboardAdapter } from '../types.js'\n\n/**\n * Browser clipboard adapter using the Clipboard API.\n * Falls back gracefully when the API is not available.\n * @public\n */\nexport class BrowserClipboardAdapter implements ClipboardAdapter {\n async read(): Promise<string> {\n if (!this.isAvailable()) {\n throw new Error('Clipboard API not available')\n }\n\n try {\n return await navigator.clipboard.readText()\n } catch (error) {\n // The Clipboard API may throw if permission is denied\n throw new Error(\n `Failed to read from clipboard: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n }\n\n async write(text: string): Promise<void> {\n if (!this.isAvailable()) {\n throw new Error('Clipboard API not available')\n }\n\n try {\n await navigator.clipboard.writeText(text)\n } catch (error) {\n // The Clipboard API may throw if permission is denied\n throw new Error(\n `Failed to write to clipboard: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n }\n\n isAvailable(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n typeof navigator.clipboard !== 'undefined' &&\n typeof navigator.clipboard.readText === 'function' &&\n typeof navigator.clipboard.writeText === 'function'\n )\n }\n}\n","import type {\n ColorSupport,\n EnvironmentAdapter,\n TerminalBackground,\n} from '../types.js'\n\n/**\n * Browser environment adapter.\n * Provides sensible defaults for browser environments.\n * @public\n */\nexport class BrowserEnvironmentAdapter implements EnvironmentAdapter {\n private readonly envOverrides: Map<string, string>\n private colorSupportCached: ColorSupport | null = null\n private backgroundCached: TerminalBackground | null = null\n\n /**\n * Create a new browser environment adapter.\n * @param envOverrides - Optional environment variable overrides\n */\n constructor(envOverrides: Record<string, string> = {}) {\n this.envOverrides = new Map(Object.entries(envOverrides))\n }\n\n get(name: string): string | undefined {\n // Check overrides first\n if (this.envOverrides.has(name)) {\n return this.envOverrides.get(name)\n }\n\n // In browsers, environment variables are not available\n return undefined\n }\n\n /**\n * Set an environment variable override.\n * @param name - Variable name\n * @param value - Variable value\n */\n set(name: string, value: string): void {\n this.envOverrides.set(name, value)\n // Clear caches that depend on env vars\n this.colorSupportCached = null\n this.backgroundCached = null\n }\n\n getColorSupport(): ColorSupport {\n if (this.colorSupportCached) {\n return this.colorSupportCached\n }\n\n // Modern browsers and xterm.js support true color\n const support: ColorSupport = {\n level: 3,\n hasBasic: true,\n has256: true,\n has16m: true,\n }\n\n this.colorSupportCached = support\n return support\n }\n\n getTerminalBackground(): TerminalBackground {\n if (this.backgroundCached) {\n return this.backgroundCached\n }\n\n // Check for overrides\n const override = this.envOverrides.get('TERM_BACKGROUND')?.toLowerCase()\n if (override === 'dark' || override === 'light') {\n this.backgroundCached = override\n return override\n }\n\n // Try to detect from CSS media query\n if (typeof window !== 'undefined' && window.matchMedia) {\n const darkQuery = window.matchMedia('(prefers-color-scheme: dark)')\n if (darkQuery.matches) {\n this.backgroundCached = 'dark'\n return 'dark'\n }\n\n const lightQuery = window.matchMedia('(prefers-color-scheme: light)')\n if (lightQuery.matches) {\n this.backgroundCached = 'light'\n return 'light'\n }\n }\n\n this.backgroundCached = 'unknown'\n return 'unknown'\n }\n}\n","import type { DirectoryEntry, FileStat, FileSystemAdapter } from '../types.js'\n\n/**\n * Browser filesystem adapter.\n * Throws errors for all filesystem operations as browsers do not have filesystem access.\n * This adapter exists for API compatibility but should not be used in browser environments.\n * @public\n */\nexport class BrowserFileSystemAdapter implements FileSystemAdapter {\n async readdir(_path: string, _options?: { withFileTypes?: boolean }): Promise<DirectoryEntry[] | string[]> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async stat(_path: string): Promise<FileStat> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async readFile(_path: string, _encoding?: string): Promise<string> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async writeFile(_path: string, _content: string): Promise<void> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async exists(_path: string): Promise<boolean> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async mkdir(_path: string, _options?: { recursive?: boolean }): Promise<void> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async unlink(_path: string): Promise<void> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async rmdir(_path: string, _options?: { recursive?: boolean; force?: boolean }): Promise<void> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async rename(_src: string, _dst: string): Promise<void> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async copyFile(_src: string, _dst: string): Promise<void> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n cwd(): string {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n homedir(): string {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n}\n","import type { PathAdapter } from '../types.js'\n\n/**\n * Browser path adapter.\n * Pure JavaScript implementation of POSIX-style path operations for browsers.\n * Always uses forward slashes (/) as path separator.\n * @public\n */\nexport class BrowserPathAdapter implements PathAdapter {\n readonly sep = '/'\n\n join(...segments: string[]): string {\n if (segments.length === 0) {\n return '.'\n }\n\n // Filter out empty segments and join with separator\n const filtered = segments.filter((seg) => seg.length > 0)\n if (filtered.length === 0) {\n return '.'\n }\n\n const joined = filtered.join('/')\n // Use normalizeForResolve to strip trailing slashes (join should not preserve them)\n return this.normalizeForResolve(joined)\n }\n\n dirname(path: string): string {\n if (path.length === 0) {\n return '.'\n }\n\n // Remove trailing slashes\n const trimmed = path.replace(/\\/+$/, '')\n if (trimmed.length === 0) {\n return '/'\n }\n\n // Find last slash\n const lastSlash = trimmed.lastIndexOf('/')\n if (lastSlash === -1) {\n return '.'\n }\n\n if (lastSlash === 0) {\n return '/'\n }\n\n return trimmed.slice(0, lastSlash)\n }\n\n basename(path: string, ext?: string): string {\n if (path.length === 0) {\n return ''\n }\n\n // Remove trailing slashes\n const trimmed = path.replace(/\\/+$/, '')\n if (trimmed.length === 0) {\n return ''\n }\n\n // Find last slash\n const lastSlash = trimmed.lastIndexOf('/')\n let base = lastSlash === -1 ? trimmed : trimmed.slice(lastSlash + 1)\n\n // Remove extension if provided and matches\n if (ext && base.endsWith(ext)) {\n base = base.slice(0, -ext.length)\n }\n\n return base\n }\n\n extname(path: string): string {\n if (path.length === 0) {\n return ''\n }\n\n const base = this.basename(path)\n const lastDot = base.lastIndexOf('.')\n\n // No extension if:\n // - No dot found\n // - Dot is first character (hidden file like .gitignore)\n // - Dot is last character (file ending in dot)\n if (lastDot === -1 || lastDot === 0 || lastDot === base.length - 1) {\n return ''\n }\n\n return base.slice(lastDot)\n }\n\n resolve(...segments: string[]): string {\n let resolvedPath = ''\n let resolvedAbsolute = false\n\n // Process segments from right to left\n for (let i = segments.length - 1; i >= 0 && !resolvedAbsolute; i--) {\n const segment = segments[i]\n if (!segment || segment.length === 0) {\n continue\n }\n\n resolvedPath = resolvedPath.length > 0 ? `${segment}/${resolvedPath}` : segment\n resolvedAbsolute = segment[0] === '/'\n }\n\n // If still not absolute, prepend current working directory (/)\n if (!resolvedAbsolute) {\n resolvedPath = resolvedPath.length > 0 ? `/${resolvedPath}` : '/'\n }\n\n // Normalize the path\n const normalized = this.normalizeForResolve(resolvedPath)\n return normalized === '' ? '/' : normalized\n }\n\n /**\n * Normalize path specifically for resolve (never preserves trailing slash).\n * @param path - Path to normalize\n * @returns Normalized path without trailing slash\n */\n private normalizeForResolve(path: string): string {\n if (path.length === 0) {\n return '/'\n }\n\n const isAbsolute = path[0] === '/'\n\n // Split into segments and process\n const segments = path.split('/').filter((seg) => seg.length > 0 && seg !== '.')\n const normalized: string[] = []\n\n for (const segment of segments) {\n if (segment === '..') {\n // Go up one level if possible\n if (normalized.length > 0 && normalized[normalized.length - 1] !== '..') {\n normalized.pop()\n } else if (!isAbsolute) {\n // Can only add .. if not absolute path\n normalized.push('..')\n }\n } else {\n normalized.push(segment)\n }\n }\n\n let result = normalized.join('/')\n\n // Add prefix\n if (isAbsolute) {\n result = `/${result}`\n } else if (result.length === 0) {\n result = '.'\n }\n\n return result\n }\n\n isAbsolute(path: string): boolean {\n return path.length > 0 && path[0] === '/'\n }\n\n normalize(path: string): string {\n if (path.length === 0) {\n return '.'\n }\n\n const isAbsolute = path[0] === '/'\n const trailingSlash = path[path.length - 1] === '/'\n\n // Split into segments and process\n const segments = path.split('/').filter((seg) => seg.length > 0 && seg !== '.')\n const normalized: string[] = []\n\n for (const segment of segments) {\n if (segment === '..') {\n // Go up one level if possible\n if (normalized.length > 0 && normalized[normalized.length - 1] !== '..') {\n normalized.pop()\n } else if (!isAbsolute) {\n // Can only add .. if not absolute path\n normalized.push('..')\n }\n } else {\n normalized.push(segment)\n }\n }\n\n let result = normalized.join('/')\n\n // Add prefix\n if (isAbsolute) {\n result = `/${result}`\n } else if (result.length === 0) {\n result = '.'\n }\n\n // Preserve trailing slash for directories (except for root)\n if (trailingSlash && result !== '/' && result.length > 0) {\n result += '/'\n }\n\n return result\n }\n}\n","import type { Disposable, SignalAdapter, SignalHandler } from '../types.js'\n\n/**\n * Browser signal adapter using window events.\n * Maps browser events to the signal interface:\n * - beforeunload -\\> interrupt\n * - pagehide -\\> terminate\n * @public\n */\nexport class BrowserSignalAdapter implements SignalAdapter {\n private readonly interruptHandlers: Set<SignalHandler> = new Set()\n private readonly terminateHandlers: Set<SignalHandler> = new Set()\n private disposed = false\n private boundBeforeUnload: ((e: BeforeUnloadEvent) => void) | null = null\n private boundPageHide: (() => void) | null = null\n\n private handleBeforeUnload = (e: BeforeUnloadEvent): void => {\n for (const handler of this.interruptHandlers) {\n handler()\n }\n // Prevent the unload to allow handlers to run\n // This may show a confirmation dialog in some browsers\n if (this.interruptHandlers.size > 0) {\n e.preventDefault()\n }\n }\n\n private handlePageHide = (): void => {\n for (const handler of this.terminateHandlers) {\n handler()\n }\n }\n\n onInterrupt(handler: SignalHandler): Disposable {\n if (this.interruptHandlers.size === 0 && typeof window !== 'undefined') {\n this.boundBeforeUnload = this.handleBeforeUnload\n window.addEventListener('beforeunload', this.boundBeforeUnload)\n }\n this.interruptHandlers.add(handler)\n\n return {\n dispose: () => {\n this.interruptHandlers.delete(handler)\n if (\n this.interruptHandlers.size === 0 &&\n this.boundBeforeUnload &&\n typeof window !== 'undefined'\n ) {\n window.removeEventListener('beforeunload', this.boundBeforeUnload)\n this.boundBeforeUnload = null\n }\n },\n }\n }\n\n onTerminate(handler: SignalHandler): Disposable {\n if (this.terminateHandlers.size === 0 && typeof window !== 'undefined') {\n this.boundPageHide = this.handlePageHide\n window.addEventListener('pagehide', this.boundPageHide)\n }\n this.terminateHandlers.add(handler)\n\n return {\n dispose: () => {\n this.terminateHandlers.delete(handler)\n if (\n this.terminateHandlers.size === 0 &&\n this.boundPageHide &&\n typeof window !== 'undefined'\n ) {\n window.removeEventListener('pagehide', this.boundPageHide)\n this.boundPageHide = null\n }\n },\n }\n }\n\n dispose(): void {\n if (this.disposed) {\n return\n }\n this.disposed = true\n\n if (typeof window !== 'undefined') {\n if (this.boundBeforeUnload) {\n window.removeEventListener('beforeunload', this.boundBeforeUnload)\n }\n if (this.boundPageHide) {\n window.removeEventListener('pagehide', this.boundPageHide)\n }\n }\n\n this.interruptHandlers.clear()\n this.terminateHandlers.clear()\n }\n}\n","/**\n * Platform-agnostic byte utilities using Uint8Array.\n * These replace Node.js Buffer operations for cross-platform compatibility.\n */\n\n/** Shared TextEncoder instance for string encoding. */\nconst encoder = new TextEncoder()\n\n/** Shared TextDecoder instance for string decoding. */\nconst decoder = new TextDecoder('utf-8')\n\n/**\n * Encode a string to UTF-8 bytes.\n * Equivalent to `Buffer.from(text, 'utf8')`.\n * @param text - String to encode\n * @returns UTF-8 encoded bytes\n * @public\n */\nexport function encodeString(text: string): Uint8Array {\n return encoder.encode(text)\n}\n\n/**\n * Decode UTF-8 bytes to a string.\n * Equivalent to `buffer.toString('utf8')`.\n * @param bytes - Bytes to decode\n * @returns Decoded string\n * @public\n */\nexport function decodeString(bytes: Uint8Array): string {\n return decoder.decode(bytes)\n}\n\n/**\n * Get the byte length of a string when encoded as UTF-8.\n * Equivalent to `Buffer.byteLength(text, 'utf8')`.\n * @param text - String to measure\n * @returns Byte length\n * @public\n */\nexport function byteLength(text: string): number {\n return encoder.encode(text).length\n}\n\n/**\n * Concatenate multiple Uint8Arrays into one.\n * Equivalent to `Buffer.concat(arrays)`.\n * @param arrays - Arrays to concatenate\n * @returns Combined array\n * @public\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0)\n const result = new Uint8Array(totalLength)\n let offset = 0\n for (const arr of arrays) {\n result.set(arr, offset)\n offset += arr.length\n }\n return result\n}\n\n/**\n * Create a new Uint8Array of the specified size, filled with zeros.\n * Equivalent to `Buffer.alloc(size)`.\n * @param size - Size of the array\n * @returns New zero-filled array\n * @public\n */\nexport function allocBytes(size: number): Uint8Array {\n return new Uint8Array(size)\n}\n\n/**\n * Create a Uint8Array from an array of byte values.\n * Equivalent to `Buffer.from([...])`.\n * @param values - Byte values (0-255)\n * @returns New Uint8Array\n * @public\n */\nexport function fromBytes(values: number[]): Uint8Array {\n return new Uint8Array(values)\n}\n\n/**\n * Compare two Uint8Arrays for equality.\n * Equivalent to `buffer1.equals(buffer2)`.\n * @param a - First array\n * @param b - Second array\n * @returns True if arrays are equal\n * @public\n */\nexport function bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n return true\n}\n\n/**\n * Check if a byte array starts with a specific prefix.\n * @param bytes - Array to check\n * @param prefix - Prefix to look for\n * @returns True if bytes starts with prefix\n * @public\n */\nexport function startsWith(bytes: Uint8Array, prefix: Uint8Array): boolean {\n if (bytes.length < prefix.length) {\n return false\n }\n for (let i = 0; i < prefix.length; i++) {\n if (bytes[i] !== prefix[i]) {\n return false\n }\n }\n return true\n}\n\n/**\n * Check if a byte array starts with a specific string (UTF-8 encoded).\n * @param bytes - Array to check\n * @param prefix - String prefix to look for\n * @returns True if bytes starts with the encoded prefix\n * @public\n */\nexport function startsWithString(bytes: Uint8Array, prefix: string): boolean {\n return startsWith(bytes, encodeString(prefix))\n}\n\n/**\n * Find the index of a substring within a byte array.\n * Returns -1 if not found.\n * @param bytes - Array to search\n * @param needle - String to find\n * @param fromIndex - Start index (default 0)\n * @returns Index of first occurrence or -1\n * @public\n */\nexport function indexOfString(\n bytes: Uint8Array,\n needle: string,\n fromIndex: number = 0,\n): number {\n const needleBytes = encodeString(needle)\n const endIndex = bytes.length - needleBytes.length\n\n outer: for (let i = fromIndex; i <= endIndex; i++) {\n for (let j = 0; j < needleBytes.length; j++) {\n if (bytes[i + j] !== needleBytes[j]) {\n continue outer\n }\n }\n return i\n }\n return -1\n}\n\n/**\n * Decode the first complete UTF-8 character from a byte array.\n * Returns the character and its byte length, or null if incomplete.\n * @param bytes - Byte array to decode\n * @param offset - Start offset (default 0)\n * @returns Tuple of [character, byteLength] or [null, 0] if incomplete\n * @public\n */\nexport function decodeFirstRune(\n bytes: Uint8Array,\n offset: number = 0,\n): [string | null, number] {\n if (offset >= bytes.length) {\n return [null, 0]\n }\n\n const firstByte = bytes[offset]\n if (firstByte === undefined) {\n return [null, 0]\n }\n\n // Determine the byte length of this UTF-8 character\n let byteLen: number\n if ((firstByte & 0x80) === 0) {\n // Single byte character (ASCII)\n byteLen = 1\n } else if ((firstByte & 0xe0) === 0xc0) {\n // Two byte character\n byteLen = 2\n } else if ((firstByte & 0xf0) === 0xe0) {\n // Three byte character\n byteLen = 3\n } else if ((firstByte & 0xf8) === 0xf0) {\n // Four byte character\n byteLen = 4\n } else {\n // Invalid UTF-8 start byte, treat as single byte\n byteLen = 1\n }\n\n // Check if we have enough bytes\n if (offset + byteLen > bytes.length) {\n return [null, 0]\n }\n\n // Decode the character\n const slice = bytes.subarray(offset, offset + byteLen)\n const decoded = decoder.decode(slice)\n\n if (decoded.length === 0) {\n return [null, 0]\n }\n\n // Use codePointAt to properly handle surrogate pairs (emoji, etc.)\n // This returns the full Unicode code point, not just the first surrogate\n const codePoint = decoded.codePointAt(0)\n if (codePoint === undefined) {\n return [null, 0]\n }\n\n // Convert the code point back to a string (handles surrogate pairs correctly)\n const firstChar = String.fromCodePoint(codePoint)\n\n return [firstChar, byteLen]\n}\n\n/**\n * Slice a portion of a byte array.\n * Equivalent to `buffer.subarray(start, end)`.\n * @param bytes - Source array\n * @param start - Start index\n * @param end - End index (optional, defaults to length)\n * @returns New Uint8Array view of the slice\n * @public\n */\nexport function sliceBytes(\n bytes: Uint8Array,\n start: number,\n end?: number,\n): Uint8Array {\n return bytes.subarray(start, end)\n}\n\n/**\n * Create a copy of a byte array.\n * @param bytes - Array to copy\n * @returns New Uint8Array with copied data\n * @public\n */\nexport function copyBytes(bytes: Uint8Array): Uint8Array {\n return new Uint8Array(bytes)\n}\n","import { encodeString } from '../bytes.js'\nimport type {\n Disposable,\n InputHandler,\n ResizeHandler,\n TerminalAdapter,\n TerminalSize,\n} from '../types.js'\n\n/**\n * Minimal xterm.js Terminal interface.\n * This matches the core xterm.js API we need.\n * @public\n */\nexport interface XtermTerminal {\n readonly cols: number\n readonly rows: number\n write(data: string): void\n onData(listener: (data: string) => void): { dispose(): void }\n onResize(listener: (size: { cols: number; rows: number }) => void): {\n dispose(): void\n }\n}\n\n/**\n * Browser terminal adapter using xterm.js.\n * @public\n */\nexport class XtermTerminalAdapter implements TerminalAdapter {\n private disposed = false\n private readonly inputHandlers: Set<InputHandler> = new Set()\n private readonly resizeHandlers: Set<ResizeHandler> = new Set()\n private dataDisposable: { dispose(): void } | null = null\n private resizeDisposable: { dispose(): void } | null = null\n\n /**\n * Create a new xterm.js terminal adapter.\n * @param terminal - xterm.js Terminal instance\n */\n constructor(private readonly terminal: XtermTerminal) {}\n\n onInput(handler: InputHandler): Disposable {\n if (this.inputHandlers.size === 0) {\n this.dataDisposable = this.terminal.onData((data) => {\n const bytes = encodeString(data)\n for (const h of this.inputHandlers) {\n h(bytes)\n }\n })\n }\n this.inputHandlers.add(handler)\n\n return {\n dispose: () => {\n this.inputHandlers.delete(handler)\n if (this.inputHandlers.size === 0 && this.dataDisposable) {\n this.dataDisposable.dispose()\n this.dataDisposable = null\n }\n },\n }\n }\n\n onResize(handler: ResizeHandler): Disposable {\n if (this.resizeHandlers.size === 0) {\n this.resizeDisposable = this.terminal.onResize((size) => {\n const terminalSize: TerminalSize = {\n columns: size.cols,\n rows: size.rows,\n }\n for (const h of this.resizeHandlers) {\n h(terminalSize)\n }\n })\n }\n this.resizeHandlers.add(handler)\n\n return {\n dispose: () => {\n this.resizeHandlers.delete(handler)\n if (this.resizeHandlers.size === 0 && this.resizeDisposable) {\n this.resizeDisposable.dispose()\n this.resizeDisposable = null\n }\n },\n }\n }\n\n write(data: string): void {\n if (data.length === 0) {\n return\n }\n // Convert lone \\n to \\r\\n for proper terminal line handling\n // xterm.js requires \\r\\n for carriage return + line feed\n const normalized = data.replace(/(?<!\\r)\\n/g, '\\r\\n')\n this.terminal.write(normalized)\n }\n\n getSize(): TerminalSize {\n return {\n columns: this.terminal.cols,\n rows: this.terminal.rows,\n }\n }\n\n enableRawMode(): void {\n // xterm.js is always in \"raw mode\" - no action needed\n }\n\n disableRawMode(): void {\n // xterm.js is always in \"raw mode\" - no action needed\n }\n\n isTTY(): boolean {\n // xterm.js is always a TTY\n return true\n }\n\n dispose(): void {\n if (this.disposed) {\n return\n }\n this.disposed = true\n\n if (this.dataDisposable) {\n this.dataDisposable.dispose()\n this.dataDisposable = null\n }\n if (this.resizeDisposable) {\n this.resizeDisposable.dispose()\n this.resizeDisposable = null\n }\n\n this.inputHandlers.clear()\n this.resizeHandlers.clear()\n }\n}\n","/**\n * Browser platform adapters for \\@boba-cli/machine.\n * @packageDocumentation\n */\n\nimport type {\n ArchiveAdapter,\n ClipboardAdapter,\n Disposable,\n EnvironmentAdapter,\n FileSystemAdapter,\n PathAdapter,\n PlatformAdapter,\n SignalAdapter,\n StyleAdapter,\n TerminalAdapter,\n} from '../types.js'\nimport { createAlwaysEnabledStyle } from '../style/index.js'\nimport { BrowserArchiveAdapter } from './archive.js'\nimport { BrowserClipboardAdapter } from './clipboard.js'\nimport { BrowserEnvironmentAdapter } from './environment.js'\nimport { BrowserFileSystemAdapter } from './filesystem.js'\nimport { BrowserPathAdapter } from './path.js'\nimport { BrowserSignalAdapter } from './signals.js'\nimport { XtermTerminalAdapter, type XtermTerminal } from './terminal.js'\n\nexport { BrowserArchiveAdapter } from './archive.js'\nexport { BrowserClipboardAdapter } from './clipboard.js'\nexport { BrowserEnvironmentAdapter } from './environment.js'\nexport { BrowserFileSystemAdapter } from './filesystem.js'\nexport { BrowserPathAdapter } from './path.js'\nexport { BrowserSignalAdapter } from './signals.js'\nexport { XtermTerminalAdapter, type XtermTerminal } from './terminal.js'\n\n/**\n * Options for creating a browser platform adapter.\n * @public\n */\nexport interface BrowserPlatformOptions {\n /** xterm.js Terminal instance (required). */\n terminal: XtermTerminal\n /** Environment variable overrides. */\n env?: Record<string, string>\n}\n\n/**\n * Complete browser platform adapter.\n * Combines xterm.js terminal, browser signals, clipboard, environment, filesystem, path, archive, and style adapters.\n * @public\n */\nexport class BrowserPlatformAdapter implements PlatformAdapter {\n readonly terminal: TerminalAdapter\n readonly signals: SignalAdapter\n readonly clipboard: ClipboardAdapter\n readonly environment: EnvironmentAdapter\n readonly filesystem: FileSystemAdapter\n readonly path: PathAdapter\n readonly archive: ArchiveAdapter\n readonly style: StyleAdapter\n\n private disposed = false\n private readonly disposables: Disposable[] = []\n\n /**\n * Create a new browser platform adapter.\n * @param options - Configuration options (requires xterm.js Terminal)\n */\n constructor(options: BrowserPlatformOptions) {\n const terminalAdapter = new XtermTerminalAdapter(options.terminal)\n const signalAdapter = new BrowserSignalAdapter()\n const clipboardAdapter = new BrowserClipboardAdapter()\n const environmentAdapter = new BrowserEnvironmentAdapter(options.env)\n const filesystemAdapter = new BrowserFileSystemAdapter()\n const pathAdapter = new BrowserPathAdapter()\n const archiveAdapter = new BrowserArchiveAdapter()\n\n // Browser/xterm.js always supports full colors\n const styleAdapter: StyleAdapter = {\n style: createAlwaysEnabledStyle(),\n enabled: true,\n level: 3,\n }\n\n this.terminal = terminalAdapter\n this.signals = signalAdapter\n this.clipboard = clipboardAdapter\n this.environment = environmentAdapter\n this.filesystem = filesystemAdapter\n this.path = pathAdapter\n this.archive = archiveAdapter\n this.style = styleAdapter\n\n this.disposables.push(terminalAdapter, signalAdapter)\n }\n\n dispose(): void {\n if (this.disposed) {\n return\n }\n this.disposed = true\n\n for (const disposable of this.disposables) {\n disposable.dispose()\n }\n }\n}\n\n/**\n * Create a browser platform adapter with xterm.js.\n * @param options - Configuration options\n * @returns A new platform adapter\n * @public\n */\nexport function createBrowserPlatform(\n options: BrowserPlatformOptions,\n): PlatformAdapter {\n return new BrowserPlatformAdapter(options)\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/style/index.ts","../../src/browser/archive.ts","../../src/browser/clipboard.ts","../../src/browser/environment.ts","../../src/browser/filesystem.ts","../../src/browser/path.ts","../../src/browser/signals.ts","../../src/bytes.ts","../../src/browser/terminal.ts","../../src/browser/index.ts"],"names":["r","g","b"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Pure JavaScript ANSI styling utility for terminal text.\n * Works identically in Node.js and browser/xterm.js contexts.\n */\n\nimport type { ColorSupport, StyleFn } from '../types.js'\n\n// ANSI escape codes\nconst ESC = '\\x1b['\nconst RESET = `${ESC}0m`\n\n// Modifier codes\nconst CODES = {\n // Modifiers (open, close)\n bold: ['1', '22'],\n dim: ['2', '22'],\n italic: ['3', '23'],\n underline: ['4', '24'],\n inverse: ['7', '27'],\n hidden: ['8', '28'],\n strikethrough: ['9', '29'],\n\n // Basic foreground colors (30-37)\n black: ['30', '39'],\n red: ['31', '39'],\n green: ['32', '39'],\n yellow: ['33', '39'],\n blue: ['34', '39'],\n magenta: ['35', '39'],\n cyan: ['36', '39'],\n white: ['37', '39'],\n\n // Bright foreground colors (90-97)\n blackBright: ['90', '39'],\n redBright: ['91', '39'],\n greenBright: ['92', '39'],\n yellowBright: ['93', '39'],\n blueBright: ['94', '39'],\n magentaBright: ['95', '39'],\n cyanBright: ['96', '39'],\n whiteBright: ['97', '39'],\n\n // Basic background colors (40-47)\n bgBlack: ['40', '49'],\n bgRed: ['41', '49'],\n bgGreen: ['42', '49'],\n bgYellow: ['43', '49'],\n bgBlue: ['44', '49'],\n bgMagenta: ['45', '49'],\n bgCyan: ['46', '49'],\n bgWhite: ['47', '49'],\n\n // Bright background colors (100-107)\n bgBlackBright: ['100', '49'],\n bgRedBright: ['101', '49'],\n bgGreenBright: ['102', '49'],\n bgYellowBright: ['103', '49'],\n bgBlueBright: ['104', '49'],\n bgMagentaBright: ['105', '49'],\n bgCyanBright: ['106', '49'],\n bgWhiteBright: ['107', '49'],\n} as const\n\ntype CodeName = keyof typeof CODES\n\n/**\n * Apply ANSI codes to text.\n * @param text - Text to style\n * @param open - Opening ANSI code\n * @param close - Closing ANSI code\n * @returns Styled text\n */\nfunction applyStyle(text: string, open: string, close: string): string {\n const openSeq = `${ESC}${open}m`\n const closeSeq = `${ESC}${close}m`\n\n // Replace any existing close codes with close+open to properly nest styles\n // This handles cases like style.bold(style.bold('text')) where the inner\n // bold close would prematurely end the outer bold\n const replaced = text.replace(\n new RegExp(closeSeq.replace(/[[\\](){}|^$+*?.\\\\]/g, '\\\\$&'), 'g'),\n closeSeq + openSeq,\n )\n\n return openSeq + replaced + closeSeq\n}\n\n/**\n * Convert hex color to RGB.\n * @param hex - Hex color string (with or without #)\n * @returns RGB array [r, g, b]\n */\nfunction hexToRgb(hex: string): [number, number, number] {\n const clean = hex.replace(/^#/, '')\n const num = parseInt(clean, 16)\n\n if (clean.length === 3) {\n // Short form: #RGB -> #RRGGBB\n const r = ((num >> 8) & 0xf) * 17\n const g = ((num >> 4) & 0xf) * 17\n const b = (num & 0xf) * 17\n return [r, g, b]\n }\n\n // Long form: #RRGGBB\n const r = (num >> 16) & 0xff\n const g = (num >> 8) & 0xff\n const b = num & 0xff\n return [r, g, b]\n}\n\n/**\n * Create a chainable style function.\n * @param colorSupport - Color support level information\n * @returns Chainable style function\n * @public\n */\nexport function createStyle(colorSupport: ColorSupport): StyleFn {\n const enabled = colorSupport.level > 0\n\n /**\n * Build a style function that can be chained.\n * @param stack - Array of [open, close] code pairs to apply\n * @returns Style function\n */\n function build(stack: Array<[string, string]>): StyleFn {\n // The function itself - applies all stacked styles\n const fn = (text: string): string => {\n if (!enabled || stack.length === 0) {\n return text\n }\n\n // Apply styles from inside out\n let result = text\n for (let i = stack.length - 1; i >= 0; i--) {\n const [open, close] = stack[i]!\n result = applyStyle(result, open, close)\n }\n return result\n }\n\n // Add all code-based style properties\n const codeNames = Object.keys(CODES) as CodeName[]\n for (const name of codeNames) {\n const [open, close] = CODES[name]\n Object.defineProperty(fn, name, {\n get() {\n return build([...stack, [open, close]])\n },\n })\n }\n\n // Add gray as alias for blackBright\n Object.defineProperty(fn, 'gray', {\n get() {\n const [open, close] = CODES.blackBright\n return build([...stack, [open, close]])\n },\n })\n\n // Add grey as alias for blackBright\n Object.defineProperty(fn, 'grey', {\n get() {\n const [open, close] = CODES.blackBright\n return build([...stack, [open, close]])\n },\n })\n\n // Add extended color methods\n\n // hex(color: string): StyleFn\n Object.defineProperty(fn, 'hex', {\n value: (color: string): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n const [r, g, b] = hexToRgb(color)\n return build([...stack, [`38;2;${r};${g};${b}`, '39']])\n },\n writable: true,\n })\n\n // rgb(r: number, g: number, b: number): StyleFn\n Object.defineProperty(fn, 'rgb', {\n value: (r: number, g: number, b: number): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n return build([...stack, [`38;2;${r};${g};${b}`, '39']])\n },\n writable: true,\n })\n\n // bgHex(color: string): StyleFn\n Object.defineProperty(fn, 'bgHex', {\n value: (color: string): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n const [r, g, b] = hexToRgb(color)\n return build([...stack, [`48;2;${r};${g};${b}`, '49']])\n },\n writable: true,\n })\n\n // bgRgb(r: number, g: number, b: number): StyleFn\n Object.defineProperty(fn, 'bgRgb', {\n value: (r: number, g: number, b: number): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n return build([...stack, [`48;2;${r};${g};${b}`, '49']])\n },\n writable: true,\n })\n\n // ansi256(code: number): StyleFn\n Object.defineProperty(fn, 'ansi256', {\n value: (code: number): StyleFn => {\n if (!enabled || !colorSupport.has256) {\n return build(stack)\n }\n return build([...stack, [`38;5;${code}`, '39']])\n },\n writable: true,\n })\n\n // bgAnsi256(code: number): StyleFn\n Object.defineProperty(fn, 'bgAnsi256', {\n value: (code: number): StyleFn => {\n if (!enabled || !colorSupport.has256) {\n return build(stack)\n }\n return build([...stack, [`48;5;${code}`, '49']])\n },\n writable: true,\n })\n\n return fn as StyleFn\n }\n\n return build([])\n}\n\n/**\n * Create a style function that always applies colors (for xterm.js).\n * @returns Chainable style function with full color support\n * @public\n */\nexport function createAlwaysEnabledStyle(): StyleFn {\n return createStyle({ level: 3, hasBasic: true, has256: true, has16m: true })\n}\n","/**\n * Browser archive adapter (not available).\n */\n\nimport type { ArchiveAdapter } from '../types.js'\n\n/**\n * Browser implementation of ArchiveAdapter.\n * Archive operations are not available in browser environments.\n * @public\n */\nexport class BrowserArchiveAdapter implements ArchiveAdapter {\n /**\n * Check if archive operations are available.\n * @returns Always false in browser environments\n */\n isAvailable(): boolean {\n return false\n }\n\n /**\n * Create a zip archive from a directory.\n * @param _sourceDir - Source directory to archive\n * @param _destPath - Destination path for the zip file\n * @throws Error - Always throws as archiving is not available in browser\n */\n async zip(_sourceDir: string, _destPath: string): Promise<void> {\n throw new Error('Archive operations not available in browser environment')\n }\n\n /**\n * Extract a zip archive to a directory.\n * @param _archivePath - Path to the zip file\n * @param _destDir - Destination directory for extraction\n * @throws Error - Always throws as archiving is not available in browser\n */\n async unzip(_archivePath: string, _destDir: string): Promise<void> {\n throw new Error('Archive operations not available in browser environment')\n }\n}\n","import type { ClipboardAdapter } from '../types.js'\n\n/**\n * Browser clipboard adapter using the Clipboard API.\n * Falls back gracefully when the API is not available.\n * @public\n */\nexport class BrowserClipboardAdapter implements ClipboardAdapter {\n async read(): Promise<string> {\n if (!this.isAvailable()) {\n throw new Error('Clipboard API not available')\n }\n\n try {\n return await navigator.clipboard.readText()\n } catch (error) {\n // The Clipboard API may throw if permission is denied\n throw new Error(\n `Failed to read from clipboard: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n }\n\n async write(text: string): Promise<void> {\n if (!this.isAvailable()) {\n throw new Error('Clipboard API not available')\n }\n\n try {\n await navigator.clipboard.writeText(text)\n } catch (error) {\n // The Clipboard API may throw if permission is denied\n throw new Error(\n `Failed to write to clipboard: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n }\n\n isAvailable(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n typeof navigator.clipboard !== 'undefined' &&\n typeof navigator.clipboard.readText === 'function' &&\n typeof navigator.clipboard.writeText === 'function'\n )\n }\n}\n","import type {\n ColorSupport,\n EnvironmentAdapter,\n TerminalBackground,\n} from '../types.js'\n\n/**\n * Browser environment adapter.\n * Provides sensible defaults for browser environments.\n * @public\n */\nexport class BrowserEnvironmentAdapter implements EnvironmentAdapter {\n private readonly envOverrides: Map<string, string>\n private colorSupportCached: ColorSupport | null = null\n private backgroundCached: TerminalBackground | null = null\n\n /**\n * Create a new browser environment adapter.\n * @param envOverrides - Optional environment variable overrides\n */\n constructor(envOverrides: Record<string, string> = {}) {\n this.envOverrides = new Map(Object.entries(envOverrides))\n }\n\n get(name: string): string | undefined {\n // Check overrides first\n if (this.envOverrides.has(name)) {\n return this.envOverrides.get(name)\n }\n\n // In browsers, environment variables are not available\n return undefined\n }\n\n /**\n * Set an environment variable override.\n * @param name - Variable name\n * @param value - Variable value\n */\n set(name: string, value: string): void {\n this.envOverrides.set(name, value)\n // Clear caches that depend on env vars\n this.colorSupportCached = null\n this.backgroundCached = null\n }\n\n getColorSupport(): ColorSupport {\n if (this.colorSupportCached) {\n return this.colorSupportCached\n }\n\n // Modern browsers and xterm.js support true color\n const support: ColorSupport = {\n level: 3,\n hasBasic: true,\n has256: true,\n has16m: true,\n }\n\n this.colorSupportCached = support\n return support\n }\n\n getTerminalBackground(): TerminalBackground {\n if (this.backgroundCached) {\n return this.backgroundCached\n }\n\n // Check for overrides\n const override = this.envOverrides.get('TERM_BACKGROUND')?.toLowerCase()\n if (override === 'dark' || override === 'light') {\n this.backgroundCached = override\n return override\n }\n\n // Try to detect from CSS media query\n if (typeof window !== 'undefined' && window.matchMedia) {\n const darkQuery = window.matchMedia('(prefers-color-scheme: dark)')\n if (darkQuery.matches) {\n this.backgroundCached = 'dark'\n return 'dark'\n }\n\n const lightQuery = window.matchMedia('(prefers-color-scheme: light)')\n if (lightQuery.matches) {\n this.backgroundCached = 'light'\n return 'light'\n }\n }\n\n this.backgroundCached = 'unknown'\n return 'unknown'\n }\n}\n","import type { DirectoryEntry, FileStat, FileSystemAdapter } from '../types.js'\n\n/**\n * Browser filesystem adapter.\n * Throws errors for all filesystem operations as browsers do not have filesystem access.\n * This adapter exists for API compatibility but should not be used in browser environments.\n * @public\n */\nexport class BrowserFileSystemAdapter implements FileSystemAdapter {\n async readdir(_path: string, _options?: { withFileTypes?: boolean }): Promise<DirectoryEntry[] | string[]> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async stat(_path: string): Promise<FileStat> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async readFile(_path: string, _encoding?: string): Promise<string> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async writeFile(_path: string, _content: string): Promise<void> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async exists(_path: string): Promise<boolean> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async mkdir(_path: string, _options?: { recursive?: boolean }): Promise<void> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async unlink(_path: string): Promise<void> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async rmdir(_path: string, _options?: { recursive?: boolean; force?: boolean }): Promise<void> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async rename(_src: string, _dst: string): Promise<void> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n async copyFile(_src: string, _dst: string): Promise<void> {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n cwd(): string {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n\n homedir(): string {\n throw new Error('FileSystem operations are not available in browser environments')\n }\n}\n","import type { PathAdapter } from '../types.js'\n\n/**\n * Browser path adapter.\n * Pure JavaScript implementation of POSIX-style path operations for browsers.\n * Always uses forward slashes (/) as path separator.\n * @public\n */\nexport class BrowserPathAdapter implements PathAdapter {\n readonly sep = '/'\n\n join(...segments: string[]): string {\n if (segments.length === 0) {\n return '.'\n }\n\n // Filter out empty segments and join with separator\n const filtered = segments.filter((seg) => seg.length > 0)\n if (filtered.length === 0) {\n return '.'\n }\n\n const joined = filtered.join('/')\n // Use normalizeForResolve to strip trailing slashes (join should not preserve them)\n return this.normalizeForResolve(joined)\n }\n\n dirname(path: string): string {\n if (path.length === 0) {\n return '.'\n }\n\n // Remove trailing slashes\n const trimmed = path.replace(/\\/+$/, '')\n if (trimmed.length === 0) {\n return '/'\n }\n\n // Find last slash\n const lastSlash = trimmed.lastIndexOf('/')\n if (lastSlash === -1) {\n return '.'\n }\n\n if (lastSlash === 0) {\n return '/'\n }\n\n return trimmed.slice(0, lastSlash)\n }\n\n basename(path: string, ext?: string): string {\n if (path.length === 0) {\n return ''\n }\n\n // Remove trailing slashes\n const trimmed = path.replace(/\\/+$/, '')\n if (trimmed.length === 0) {\n return ''\n }\n\n // Find last slash\n const lastSlash = trimmed.lastIndexOf('/')\n let base = lastSlash === -1 ? trimmed : trimmed.slice(lastSlash + 1)\n\n // Remove extension if provided and matches\n if (ext && base.endsWith(ext)) {\n base = base.slice(0, -ext.length)\n }\n\n return base\n }\n\n extname(path: string): string {\n if (path.length === 0) {\n return ''\n }\n\n const base = this.basename(path)\n const lastDot = base.lastIndexOf('.')\n\n // No extension if:\n // - No dot found\n // - Dot is first character (hidden file like .gitignore)\n // - Dot is last character (file ending in dot)\n if (lastDot === -1 || lastDot === 0 || lastDot === base.length - 1) {\n return ''\n }\n\n return base.slice(lastDot)\n }\n\n resolve(...segments: string[]): string {\n let resolvedPath = ''\n let resolvedAbsolute = false\n\n // Process segments from right to left\n for (let i = segments.length - 1; i >= 0 && !resolvedAbsolute; i--) {\n const segment = segments[i]\n if (!segment || segment.length === 0) {\n continue\n }\n\n resolvedPath = resolvedPath.length > 0 ? `${segment}/${resolvedPath}` : segment\n resolvedAbsolute = segment[0] === '/'\n }\n\n // If still not absolute, prepend current working directory (/)\n if (!resolvedAbsolute) {\n resolvedPath = resolvedPath.length > 0 ? `/${resolvedPath}` : '/'\n }\n\n // Normalize the path\n const normalized = this.normalizeForResolve(resolvedPath)\n return normalized === '' ? '/' : normalized\n }\n\n /**\n * Normalize path specifically for resolve (never preserves trailing slash).\n * @param path - Path to normalize\n * @returns Normalized path without trailing slash\n */\n private normalizeForResolve(path: string): string {\n if (path.length === 0) {\n return '/'\n }\n\n const isAbsolute = path[0] === '/'\n\n // Split into segments and process\n const segments = path.split('/').filter((seg) => seg.length > 0 && seg !== '.')\n const normalized: string[] = []\n\n for (const segment of segments) {\n if (segment === '..') {\n // Go up one level if possible\n if (normalized.length > 0 && normalized[normalized.length - 1] !== '..') {\n normalized.pop()\n } else if (!isAbsolute) {\n // Can only add .. if not absolute path\n normalized.push('..')\n }\n } else {\n normalized.push(segment)\n }\n }\n\n let result = normalized.join('/')\n\n // Add prefix\n if (isAbsolute) {\n result = `/${result}`\n } else if (result.length === 0) {\n result = '.'\n }\n\n return result\n }\n\n isAbsolute(path: string): boolean {\n return path.length > 0 && path[0] === '/'\n }\n\n normalize(path: string): string {\n if (path.length === 0) {\n return '.'\n }\n\n const isAbsolute = path[0] === '/'\n const trailingSlash = path[path.length - 1] === '/'\n\n // Split into segments and process\n const segments = path.split('/').filter((seg) => seg.length > 0 && seg !== '.')\n const normalized: string[] = []\n\n for (const segment of segments) {\n if (segment === '..') {\n // Go up one level if possible\n if (normalized.length > 0 && normalized[normalized.length - 1] !== '..') {\n normalized.pop()\n } else if (!isAbsolute) {\n // Can only add .. if not absolute path\n normalized.push('..')\n }\n } else {\n normalized.push(segment)\n }\n }\n\n let result = normalized.join('/')\n\n // Add prefix\n if (isAbsolute) {\n result = `/${result}`\n } else if (result.length === 0) {\n result = '.'\n }\n\n // Preserve trailing slash for directories (except for root)\n if (trailingSlash && result !== '/' && result.length > 0) {\n result += '/'\n }\n\n return result\n }\n}\n","import type { Disposable, SignalAdapter, SignalHandler } from '../types.js'\n\n/**\n * Browser signal adapter using window events.\n * Maps browser events to the signal interface:\n * - beforeunload -\\> interrupt\n * - pagehide -\\> terminate\n * @public\n */\nexport class BrowserSignalAdapter implements SignalAdapter {\n private readonly interruptHandlers: Set<SignalHandler> = new Set()\n private readonly terminateHandlers: Set<SignalHandler> = new Set()\n private disposed = false\n private boundBeforeUnload: ((e: BeforeUnloadEvent) => void) | null = null\n private boundPageHide: (() => void) | null = null\n\n private handleBeforeUnload = (e: BeforeUnloadEvent): void => {\n for (const handler of this.interruptHandlers) {\n handler()\n }\n // Prevent the unload to allow handlers to run\n // This may show a confirmation dialog in some browsers\n if (this.interruptHandlers.size > 0) {\n e.preventDefault()\n }\n }\n\n private handlePageHide = (): void => {\n for (const handler of this.terminateHandlers) {\n handler()\n }\n }\n\n onInterrupt(handler: SignalHandler): Disposable {\n if (this.interruptHandlers.size === 0 && typeof window !== 'undefined') {\n this.boundBeforeUnload = this.handleBeforeUnload\n window.addEventListener('beforeunload', this.boundBeforeUnload)\n }\n this.interruptHandlers.add(handler)\n\n return {\n dispose: () => {\n this.interruptHandlers.delete(handler)\n if (\n this.interruptHandlers.size === 0 &&\n this.boundBeforeUnload &&\n typeof window !== 'undefined'\n ) {\n window.removeEventListener('beforeunload', this.boundBeforeUnload)\n this.boundBeforeUnload = null\n }\n },\n }\n }\n\n onTerminate(handler: SignalHandler): Disposable {\n if (this.terminateHandlers.size === 0 && typeof window !== 'undefined') {\n this.boundPageHide = this.handlePageHide\n window.addEventListener('pagehide', this.boundPageHide)\n }\n this.terminateHandlers.add(handler)\n\n return {\n dispose: () => {\n this.terminateHandlers.delete(handler)\n if (\n this.terminateHandlers.size === 0 &&\n this.boundPageHide &&\n typeof window !== 'undefined'\n ) {\n window.removeEventListener('pagehide', this.boundPageHide)\n this.boundPageHide = null\n }\n },\n }\n }\n\n dispose(): void {\n if (this.disposed) {\n return\n }\n this.disposed = true\n\n if (typeof window !== 'undefined') {\n if (this.boundBeforeUnload) {\n window.removeEventListener('beforeunload', this.boundBeforeUnload)\n }\n if (this.boundPageHide) {\n window.removeEventListener('pagehide', this.boundPageHide)\n }\n }\n\n this.interruptHandlers.clear()\n this.terminateHandlers.clear()\n }\n}\n","/**\n * Platform-agnostic byte utilities using Uint8Array.\n * These replace Node.js Buffer operations for cross-platform compatibility.\n */\n\n/** Shared TextEncoder instance for string encoding. */\nconst encoder = new TextEncoder()\n\n/** Shared TextDecoder instance for string decoding. */\nconst decoder = new TextDecoder('utf-8')\n\n/**\n * Encode a string to UTF-8 bytes.\n * Equivalent to `Buffer.from(text, 'utf8')`.\n * @param text - String to encode\n * @returns UTF-8 encoded bytes\n * @public\n */\nexport function encodeString(text: string): Uint8Array {\n return encoder.encode(text)\n}\n\n/**\n * Decode UTF-8 bytes to a string.\n * Equivalent to `buffer.toString('utf8')`.\n * @param bytes - Bytes to decode\n * @returns Decoded string\n * @public\n */\nexport function decodeString(bytes: Uint8Array): string {\n return decoder.decode(bytes)\n}\n\n/**\n * Get the byte length of a string when encoded as UTF-8.\n * Equivalent to `Buffer.byteLength(text, 'utf8')`.\n * @param text - String to measure\n * @returns Byte length\n * @public\n */\nexport function byteLength(text: string): number {\n return encoder.encode(text).length\n}\n\n/**\n * Concatenate multiple Uint8Arrays into one.\n * Equivalent to `Buffer.concat(arrays)`.\n * @param arrays - Arrays to concatenate\n * @returns Combined array\n * @public\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0)\n const result = new Uint8Array(totalLength)\n let offset = 0\n for (const arr of arrays) {\n result.set(arr, offset)\n offset += arr.length\n }\n return result\n}\n\n/**\n * Create a new Uint8Array of the specified size, filled with zeros.\n * Equivalent to `Buffer.alloc(size)`.\n * @param size - Size of the array\n * @returns New zero-filled array\n * @public\n */\nexport function allocBytes(size: number): Uint8Array {\n return new Uint8Array(size)\n}\n\n/**\n * Create a Uint8Array from an array of byte values.\n * Equivalent to `Buffer.from([...])`.\n * @param values - Byte values (0-255)\n * @returns New Uint8Array\n * @public\n */\nexport function fromBytes(values: number[]): Uint8Array {\n return new Uint8Array(values)\n}\n\n/**\n * Compare two Uint8Arrays for equality.\n * Equivalent to `buffer1.equals(buffer2)`.\n * @param a - First array\n * @param b - Second array\n * @returns True if arrays are equal\n * @public\n */\nexport function bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n return true\n}\n\n/**\n * Check if a byte array starts with a specific prefix.\n * @param bytes - Array to check\n * @param prefix - Prefix to look for\n * @returns True if bytes starts with prefix\n * @public\n */\nexport function startsWith(bytes: Uint8Array, prefix: Uint8Array): boolean {\n if (bytes.length < prefix.length) {\n return false\n }\n for (let i = 0; i < prefix.length; i++) {\n if (bytes[i] !== prefix[i]) {\n return false\n }\n }\n return true\n}\n\n/**\n * Check if a byte array starts with a specific string (UTF-8 encoded).\n * @param bytes - Array to check\n * @param prefix - String prefix to look for\n * @returns True if bytes starts with the encoded prefix\n * @public\n */\nexport function startsWithString(bytes: Uint8Array, prefix: string): boolean {\n return startsWith(bytes, encodeString(prefix))\n}\n\n/**\n * Find the index of a substring within a byte array.\n * Returns -1 if not found.\n * @param bytes - Array to search\n * @param needle - String to find\n * @param fromIndex - Start index (default 0)\n * @returns Index of first occurrence or -1\n * @public\n */\nexport function indexOfString(\n bytes: Uint8Array,\n needle: string,\n fromIndex: number = 0,\n): number {\n const needleBytes = encodeString(needle)\n const endIndex = bytes.length - needleBytes.length\n\n outer: for (let i = fromIndex; i <= endIndex; i++) {\n for (let j = 0; j < needleBytes.length; j++) {\n if (bytes[i + j] !== needleBytes[j]) {\n continue outer\n }\n }\n return i\n }\n return -1\n}\n\n/**\n * Decode the first complete UTF-8 character from a byte array.\n * Returns the character and its byte length, or null if incomplete.\n * @param bytes - Byte array to decode\n * @param offset - Start offset (default 0)\n * @returns Tuple of [character, byteLength] or [null, 0] if incomplete\n * @public\n */\nexport function decodeFirstRune(\n bytes: Uint8Array,\n offset: number = 0,\n): [string | null, number] {\n if (offset >= bytes.length) {\n return [null, 0]\n }\n\n const firstByte = bytes[offset]\n if (firstByte === undefined) {\n return [null, 0]\n }\n\n // Determine the byte length of this UTF-8 character\n let byteLen: number\n if ((firstByte & 0x80) === 0) {\n // Single byte character (ASCII)\n byteLen = 1\n } else if ((firstByte & 0xe0) === 0xc0) {\n // Two byte character\n byteLen = 2\n } else if ((firstByte & 0xf0) === 0xe0) {\n // Three byte character\n byteLen = 3\n } else if ((firstByte & 0xf8) === 0xf0) {\n // Four byte character\n byteLen = 4\n } else {\n // Invalid UTF-8 start byte, treat as single byte\n byteLen = 1\n }\n\n // Check if we have enough bytes\n if (offset + byteLen > bytes.length) {\n return [null, 0]\n }\n\n // Decode the character\n const slice = bytes.subarray(offset, offset + byteLen)\n const decoded = decoder.decode(slice)\n\n if (decoded.length === 0) {\n return [null, 0]\n }\n\n // Use codePointAt to properly handle surrogate pairs (emoji, etc.)\n // This returns the full Unicode code point, not just the first surrogate\n const codePoint = decoded.codePointAt(0)\n if (codePoint === undefined) {\n return [null, 0]\n }\n\n // Convert the code point back to a string (handles surrogate pairs correctly)\n const firstChar = String.fromCodePoint(codePoint)\n\n return [firstChar, byteLen]\n}\n\n/**\n * Slice a portion of a byte array.\n * Equivalent to `buffer.subarray(start, end)`.\n * @param bytes - Source array\n * @param start - Start index\n * @param end - End index (optional, defaults to length)\n * @returns New Uint8Array view of the slice\n * @public\n */\nexport function sliceBytes(\n bytes: Uint8Array,\n start: number,\n end?: number,\n): Uint8Array {\n return bytes.subarray(start, end)\n}\n\n/**\n * Create a copy of a byte array.\n * @param bytes - Array to copy\n * @returns New Uint8Array with copied data\n * @public\n */\nexport function copyBytes(bytes: Uint8Array): Uint8Array {\n return new Uint8Array(bytes)\n}\n","import { encodeString } from '../bytes.js'\nimport type {\n Disposable,\n InputHandler,\n ResizeHandler,\n TerminalAdapter,\n TerminalSize,\n} from '../types.js'\n\n/**\n * Minimal xterm.js Terminal interface.\n * This matches the core xterm.js API we need.\n * @public\n */\nexport interface XtermTerminal {\n readonly cols: number\n readonly rows: number\n write(data: string): void\n onData(listener: (data: string) => void): { dispose(): void }\n onResize(listener: (size: { cols: number; rows: number }) => void): {\n dispose(): void\n }\n}\n\n/**\n * Browser terminal adapter using xterm.js.\n * @public\n */\nexport class XtermTerminalAdapter implements TerminalAdapter {\n private disposed = false\n private readonly inputHandlers: Set<InputHandler> = new Set()\n private readonly resizeHandlers: Set<ResizeHandler> = new Set()\n private dataDisposable: { dispose(): void } | null = null\n private resizeDisposable: { dispose(): void } | null = null\n\n /**\n * Create a new xterm.js terminal adapter.\n * @param terminal - xterm.js Terminal instance\n */\n constructor(private readonly terminal: XtermTerminal) {}\n\n onInput(handler: InputHandler): Disposable {\n if (this.inputHandlers.size === 0) {\n this.dataDisposable = this.terminal.onData((data) => {\n const bytes = encodeString(data)\n for (const h of this.inputHandlers) {\n h(bytes)\n }\n })\n }\n this.inputHandlers.add(handler)\n\n return {\n dispose: () => {\n this.inputHandlers.delete(handler)\n if (this.inputHandlers.size === 0 && this.dataDisposable) {\n this.dataDisposable.dispose()\n this.dataDisposable = null\n }\n },\n }\n }\n\n onResize(handler: ResizeHandler): Disposable {\n if (this.resizeHandlers.size === 0) {\n this.resizeDisposable = this.terminal.onResize((size) => {\n const terminalSize: TerminalSize = {\n columns: size.cols,\n rows: size.rows,\n }\n for (const h of this.resizeHandlers) {\n h(terminalSize)\n }\n })\n }\n this.resizeHandlers.add(handler)\n\n return {\n dispose: () => {\n this.resizeHandlers.delete(handler)\n if (this.resizeHandlers.size === 0 && this.resizeDisposable) {\n this.resizeDisposable.dispose()\n this.resizeDisposable = null\n }\n },\n }\n }\n\n write(data: string): void {\n if (data.length === 0) {\n return\n }\n // Convert lone \\n to \\r\\n for proper terminal line handling\n // xterm.js requires \\r\\n for carriage return + line feed\n const normalized = data.replace(/(?<!\\r)\\n/g, '\\r\\n')\n this.terminal.write(normalized)\n }\n\n getSize(): TerminalSize {\n return {\n columns: this.terminal.cols,\n rows: this.terminal.rows,\n }\n }\n\n enableRawMode(): void {\n // xterm.js is always in \"raw mode\" - no action needed\n }\n\n disableRawMode(): void {\n // xterm.js is always in \"raw mode\" - no action needed\n }\n\n isTTY(): boolean {\n // xterm.js is always a TTY\n return true\n }\n\n dispose(): void {\n if (this.disposed) {\n return\n }\n this.disposed = true\n\n if (this.dataDisposable) {\n this.dataDisposable.dispose()\n this.dataDisposable = null\n }\n if (this.resizeDisposable) {\n this.resizeDisposable.dispose()\n this.resizeDisposable = null\n }\n\n this.inputHandlers.clear()\n this.resizeHandlers.clear()\n }\n}\n","/**\n * Browser platform adapters for \\@boba-cli/machine.\n * @packageDocumentation\n */\n\nimport type {\n ArchiveAdapter,\n ClipboardAdapter,\n Disposable,\n EnvironmentAdapter,\n FileSystemAdapter,\n PathAdapter,\n PlatformAdapter,\n SignalAdapter,\n StyleAdapter,\n TerminalAdapter,\n} from '../types.js'\nimport { createAlwaysEnabledStyle } from '../style/index.js'\nimport { BrowserArchiveAdapter } from './archive.js'\nimport { BrowserClipboardAdapter } from './clipboard.js'\nimport { BrowserEnvironmentAdapter } from './environment.js'\nimport { BrowserFileSystemAdapter } from './filesystem.js'\nimport { BrowserPathAdapter } from './path.js'\nimport { BrowserSignalAdapter } from './signals.js'\nimport { XtermTerminalAdapter, type XtermTerminal } from './terminal.js'\n\nexport { BrowserArchiveAdapter } from './archive.js'\nexport { BrowserClipboardAdapter } from './clipboard.js'\nexport { BrowserEnvironmentAdapter } from './environment.js'\nexport { BrowserFileSystemAdapter } from './filesystem.js'\nexport { BrowserPathAdapter } from './path.js'\nexport { BrowserSignalAdapter } from './signals.js'\nexport { XtermTerminalAdapter, type XtermTerminal } from './terminal.js'\n\n/**\n * Options for creating a browser platform adapter.\n * @public\n */\nexport interface BrowserPlatformOptions {\n /** xterm.js Terminal instance (required). */\n terminal: XtermTerminal\n /** Environment variable overrides. */\n env?: Record<string, string>\n /** Custom filesystem adapter (e.g., using memfs). If not provided, uses the default BrowserFileSystemAdapter which throws errors. */\n filesystem?: FileSystemAdapter\n}\n\n/**\n * Complete browser platform adapter.\n * Combines xterm.js terminal, browser signals, clipboard, environment, filesystem, path, archive, and style adapters.\n * @public\n */\nexport class BrowserPlatformAdapter implements PlatformAdapter {\n readonly terminal: TerminalAdapter\n readonly signals: SignalAdapter\n readonly clipboard: ClipboardAdapter\n readonly environment: EnvironmentAdapter\n readonly filesystem: FileSystemAdapter\n readonly path: PathAdapter\n readonly archive: ArchiveAdapter\n readonly style: StyleAdapter\n\n private disposed = false\n private readonly disposables: Disposable[] = []\n\n /**\n * Create a new browser platform adapter.\n * @param options - Configuration options (requires xterm.js Terminal)\n */\n constructor(options: BrowserPlatformOptions) {\n const terminalAdapter = new XtermTerminalAdapter(options.terminal)\n const signalAdapter = new BrowserSignalAdapter()\n const clipboardAdapter = new BrowserClipboardAdapter()\n const environmentAdapter = new BrowserEnvironmentAdapter(options.env)\n const filesystemAdapter = options.filesystem ?? new BrowserFileSystemAdapter()\n const pathAdapter = new BrowserPathAdapter()\n const archiveAdapter = new BrowserArchiveAdapter()\n\n // Browser/xterm.js always supports full colors\n const styleAdapter: StyleAdapter = {\n style: createAlwaysEnabledStyle(),\n enabled: true,\n level: 3,\n }\n\n this.terminal = terminalAdapter\n this.signals = signalAdapter\n this.clipboard = clipboardAdapter\n this.environment = environmentAdapter\n this.filesystem = filesystemAdapter\n this.path = pathAdapter\n this.archive = archiveAdapter\n this.style = styleAdapter\n\n this.disposables.push(terminalAdapter, signalAdapter)\n }\n\n dispose(): void {\n if (this.disposed) {\n return\n }\n this.disposed = true\n\n for (const disposable of this.disposables) {\n disposable.dispose()\n }\n }\n}\n\n/**\n * Create a browser platform adapter with xterm.js.\n * @param options - Configuration options\n * @returns A new platform adapter\n * @public\n */\nexport function createBrowserPlatform(\n options: BrowserPlatformOptions,\n): PlatformAdapter {\n return new BrowserPlatformAdapter(options)\n}\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -361,6 +361,17 @@ function createAlwaysEnabledStyle() {
|
|
|
361
361
|
return createStyle({ level: 3, has256: true, has16m: true });
|
|
362
362
|
}
|
|
363
363
|
|
|
364
|
+
// src/detect.ts
|
|
365
|
+
function isNodeEnvironment() {
|
|
366
|
+
const g = globalThis;
|
|
367
|
+
const proc = g["process"];
|
|
368
|
+
return !!proc && typeof proc["versions"]?.["node"] === "string";
|
|
369
|
+
}
|
|
370
|
+
function isBrowserEnvironment() {
|
|
371
|
+
const g = globalThis;
|
|
372
|
+
return typeof g["window"] !== "undefined" && typeof g["document"] !== "undefined" && !isNodeEnvironment();
|
|
373
|
+
}
|
|
374
|
+
|
|
364
375
|
exports.ALT_SCREEN_OFF = ALT_SCREEN_OFF;
|
|
365
376
|
exports.ALT_SCREEN_ON = ALT_SCREEN_ON;
|
|
366
377
|
exports.BEL = BEL;
|
|
@@ -424,6 +435,8 @@ exports.fg256 = fg256;
|
|
|
424
435
|
exports.fgRGB = fgRGB;
|
|
425
436
|
exports.fromBytes = fromBytes;
|
|
426
437
|
exports.indexOfString = indexOfString;
|
|
438
|
+
exports.isBrowserEnvironment = isBrowserEnvironment;
|
|
439
|
+
exports.isNodeEnvironment = isNodeEnvironment;
|
|
427
440
|
exports.scrollDown = scrollDown;
|
|
428
441
|
exports.scrollUp = scrollUp;
|
|
429
442
|
exports.setScrollRegion = setScrollRegion;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bytes.ts","../src/sequences.ts","../src/style/index.ts"],"names":["ESC","r","g","b"],"mappings":";;;AAMA,IAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAGhC,IAAM,OAAA,GAAU,IAAI,WAAA,CAAY,OAAO,CAAA;AAShC,SAAS,aAAa,IAAA,EAA0B;AACrD,EAAA,OAAO,OAAA,CAAQ,OAAO,IAAI,CAAA;AAC5B;AASO,SAAS,aAAa,KAAA,EAA2B;AACtD,EAAA,OAAO,OAAA,CAAQ,OAAO,KAAK,CAAA;AAC7B;AASO,SAAS,WAAW,IAAA,EAAsB;AAC/C,EAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA;AAC9B;AASO,SAAS,eAAe,MAAA,EAAkC;AAC/D,EAAA,MAAM,WAAA,GAAc,OAAO,MAAA,CAAO,CAAC,KAAK,GAAA,KAAQ,GAAA,GAAM,GAAA,CAAI,MAAA,EAAQ,CAAC,CAAA;AACnE,EAAA,MAAM,MAAA,GAAS,IAAI,UAAA,CAAW,WAAW,CAAA;AACzC,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,IAAA,MAAA,CAAO,GAAA,CAAI,KAAK,MAAM,CAAA;AACtB,IAAA,MAAA,IAAU,GAAA,CAAI,MAAA;AAAA,EAChB;AACA,EAAA,OAAO,MAAA;AACT;AASO,SAAS,WAAW,IAAA,EAA0B;AACnD,EAAA,OAAO,IAAI,WAAW,IAAI,CAAA;AAC5B;AASO,SAAS,UAAU,MAAA,EAA8B;AACtD,EAAA,OAAO,IAAI,WAAW,MAAM,CAAA;AAC9B;AAUO,SAAS,UAAA,CAAW,GAAe,CAAA,EAAwB;AAChE,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ;AACzB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AACjC,IAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,EAAG;AACjB,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AASO,SAAS,UAAA,CAAW,OAAmB,MAAA,EAA6B;AACzE,EAAA,IAAI,KAAA,CAAM,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ;AAChC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,CAAA,EAAG;AAC1B,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AASO,SAAS,gBAAA,CAAiB,OAAmB,MAAA,EAAyB;AAC3E,EAAA,OAAO,UAAA,CAAW,KAAA,EAAO,YAAA,CAAa,MAAM,CAAC,CAAA;AAC/C;AAWO,SAAS,aAAA,CACd,KAAA,EACA,MAAA,EACA,SAAA,GAAoB,CAAA,EACZ;AACR,EAAA,MAAM,WAAA,GAAc,aAAa,MAAM,CAAA;AACvC,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,MAAA,GAAS,WAAA,CAAY,MAAA;AAE5C,EAAA,KAAA,EAAO,KAAA,IAAS,CAAA,GAAI,SAAA,EAAW,CAAA,IAAK,UAAU,CAAA,EAAA,EAAK;AACjD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;AAC3C,MAAA,IAAI,MAAM,CAAA,GAAI,CAAC,CAAA,KAAM,WAAA,CAAY,CAAC,CAAA,EAAG;AACnC,QAAA,SAAS,KAAA;AAAA,MACX;AAAA,IACF;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAA;AACT;AAUO,SAAS,eAAA,CACd,KAAA,EACA,MAAA,GAAiB,CAAA,EACQ;AACzB,EAAA,IAAI,MAAA,IAAU,MAAM,MAAA,EAAQ;AAC1B,IAAA,OAAO,CAAC,MAAM,CAAC,CAAA;AAAA,EACjB;AAEA,EAAA,MAAM,SAAA,GAAY,MAAM,MAAM,CAAA;AAC9B,EAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,IAAA,OAAO,CAAC,MAAM,CAAC,CAAA;AAAA,EACjB;AAGA,EAAA,IAAI,OAAA;AACJ,EAAA,IAAA,CAAK,SAAA,GAAY,SAAU,CAAA,EAAG;AAE5B,IAAA,OAAA,GAAU,CAAA;AAAA,EACZ,CAAA,MAAA,IAAA,CAAY,SAAA,GAAY,GAAA,MAAU,GAAA,EAAM;AAEtC,IAAA,OAAA,GAAU,CAAA;AAAA,EACZ,CAAA,MAAA,IAAA,CAAY,SAAA,GAAY,GAAA,MAAU,GAAA,EAAM;AAEtC,IAAA,OAAA,GAAU,CAAA;AAAA,EACZ,CAAA,MAAA,IAAA,CAAY,SAAA,GAAY,GAAA,MAAU,GAAA,EAAM;AAEtC,IAAA,OAAA,GAAU,CAAA;AAAA,EACZ,CAAA,MAAO;AAEL,IAAA,OAAA,GAAU,CAAA;AAAA,EACZ;AAGA,EAAA,IAAI,MAAA,GAAS,OAAA,GAAU,KAAA,CAAM,MAAA,EAAQ;AACnC,IAAA,OAAO,CAAC,MAAM,CAAC,CAAA;AAAA,EACjB;AAGA,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,QAAA,CAAS,MAAA,EAAQ,SAAS,OAAO,CAAA;AACrD,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA;AAEpC,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,CAAC,MAAM,CAAC,CAAA;AAAA,EACjB;AAIA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,WAAA,CAAY,CAAC,CAAA;AACvC,EAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,IAAA,OAAO,CAAC,MAAM,CAAC,CAAA;AAAA,EACjB;AAGA,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,aAAA,CAAc,SAAS,CAAA;AAEhD,EAAA,OAAO,CAAC,WAAW,OAAO,CAAA;AAC5B;AAWO,SAAS,UAAA,CACd,KAAA,EACA,KAAA,EACA,GAAA,EACY;AACZ,EAAA,OAAO,KAAA,CAAM,QAAA,CAAS,KAAA,EAAO,GAAG,CAAA;AAClC;AAQO,SAAS,UAAU,KAAA,EAA+B;AACvD,EAAA,OAAO,IAAI,WAAW,KAAK,CAAA;AAC7B;;;ACvPO,IAAM,GAAA,GAAM;AAGZ,IAAM,GAAA,GAAM,GAAG,GAAG,CAAA,CAAA;AAGlB,IAAM,GAAA,GAAM,GAAG,GAAG,CAAA,CAAA;AAGlB,IAAM,EAAA,GAAK,GAAG,GAAG,CAAA,EAAA;AAGjB,IAAM,GAAA,GAAM;AAOZ,IAAM,WAAA,GAAc,GAAG,GAAG,CAAA,IAAA;AAG1B,IAAM,WAAA,GAAc,GAAG,GAAG,CAAA,IAAA;AAG1B,IAAM,WAAA,GAAc,GAAG,GAAG,CAAA,CAAA;AAS1B,SAAS,QAAA,CAAS,KAAa,GAAA,EAAqB;AACzD,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,GAAG,IAAI,GAAG,CAAA,CAAA,CAAA;AAC5B;AAQO,SAAS,QAAA,CAAS,IAAY,CAAA,EAAW;AAC9C,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,CAAC,CAAA,CAAA,CAAA;AACnB;AAQO,SAAS,UAAA,CAAW,IAAY,CAAA,EAAW;AAChD,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,CAAC,CAAA,CAAA,CAAA;AACnB;AAQO,SAAS,aAAA,CAAc,IAAY,CAAA,EAAW;AACnD,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,CAAC,CAAA,CAAA,CAAA;AACnB;AAQO,SAAS,cAAA,CAAe,IAAY,CAAA,EAAW;AACpD,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,CAAC,CAAA,CAAA,CAAA;AACnB;AAMO,IAAM,WAAA,GAAc,GAAG,GAAG,CAAA,CAAA;AAM1B,IAAM,cAAA,GAAiB,GAAG,GAAG,CAAA,CAAA;AAO7B,IAAM,YAAA,GAAe,GAAG,GAAG,CAAA,EAAA;AAG3B,IAAM,iBAAA,GAAoB,GAAG,GAAG,CAAA,EAAA;AAGhC,IAAM,eAAA,GAAkB,GAAG,GAAG,CAAA,EAAA;AAG9B,IAAM,UAAA,GAAa,GAAG,GAAG,CAAA,EAAA;AAGzB,IAAM,cAAA,GAAiB,GAAG,GAAG,CAAA,EAAA;AAG7B,IAAM,gBAAA,GAAmB,GAAG,GAAG,CAAA,EAAA;AAO/B,IAAM,aAAA,GAAgB,GAAG,GAAG,CAAA,MAAA;AAG5B,IAAM,cAAA,GAAiB,GAAG,GAAG,CAAA,MAAA;AAO7B,IAAM,aAAA,GAAgB,GAAG,GAAG,CAAA,MAAA;AAG5B,IAAM,YAAA,GAAe,GAAG,GAAG,CAAA,MAAA;AAG3B,IAAM,YAAA,GAAe,GAAG,GAAG,CAAA,MAAA;AAG3B,IAAM,cAAA,GAAiB,GAAG,GAAG,CAAA,MAAA;AAG7B,IAAM,aAAA,GAAgB,GAAG,GAAG,CAAA,MAAA;AAG5B,IAAM,aAAA,GAAgB,GAAG,GAAG,CAAA,MAAA;AAO5B,IAAM,kBAAA,GAAqB,GAAG,GAAG,CAAA,MAAA;AAGjC,IAAM,mBAAA,GAAsB,GAAG,GAAG,CAAA,MAAA;AAGlC,IAAM,qBAAA,GAAwB,GAAG,GAAG,CAAA,IAAA;AAGpC,IAAM,mBAAA,GAAsB,GAAG,GAAG,CAAA,IAAA;AAOlC,IAAM,eAAA,GAAkB,GAAG,GAAG,CAAA,MAAA;AAG9B,IAAM,gBAAA,GAAmB,GAAG,GAAG,CAAA,MAAA;AAG/B,IAAM,QAAA,GAAW,GAAG,GAAG,CAAA,CAAA;AAGvB,IAAM,SAAA,GAAY,GAAG,GAAG,CAAA,CAAA;AAYxB,SAAS,eAAe,KAAA,EAAuB;AACpD,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,KAAK,GAAG,GAAG,CAAA,CAAA;AAC/B;AAOO,IAAM,KAAA,GAAQ,GAAG,GAAG,CAAA,EAAA;AAGpB,IAAM,IAAA,GAAO,GAAG,GAAG,CAAA,EAAA;AAGnB,IAAM,GAAA,GAAM,GAAG,GAAG,CAAA,EAAA;AAGlB,IAAM,MAAA,GAAS,GAAG,GAAG,CAAA,EAAA;AAGrB,IAAM,SAAA,GAAY,GAAG,GAAG,CAAA,EAAA;AAGxB,IAAM,KAAA,GAAQ,GAAG,GAAG,CAAA,EAAA;AAGpB,IAAM,OAAA,GAAU,GAAG,GAAG,CAAA,EAAA;AAGtB,IAAM,MAAA,GAAS,GAAG,GAAG,CAAA,EAAA;AAGrB,IAAM,aAAA,GAAgB,GAAG,GAAG,CAAA,EAAA;AAY5B,SAAS,MAAM,UAAA,EAA4B;AAChD,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,KAAA,EAAQ,UAAU,CAAA,CAAA,CAAA;AACjC;AAQO,SAAS,MAAM,UAAA,EAA4B;AAChD,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,KAAA,EAAQ,UAAU,CAAA,CAAA,CAAA;AACjC;AAUO,SAAS,KAAA,CAAM,CAAA,EAAW,CAAA,EAAW,CAAA,EAAmB;AAC7D,EAAA,OAAO,GAAG,GAAG,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAA,EAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAA;AAClC;AAUO,SAAS,KAAA,CAAM,CAAA,EAAW,CAAA,EAAW,CAAA,EAAmB;AAC7D,EAAA,OAAO,GAAG,GAAG,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAA,EAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAA;AAClC;AAYO,SAAS,QAAA,CAAS,IAAY,CAAA,EAAW;AAC9C,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,CAAC,CAAA,CAAA,CAAA;AACnB;AAQO,SAAS,UAAA,CAAW,IAAY,CAAA,EAAW;AAChD,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,CAAC,CAAA,CAAA,CAAA;AACnB;AASO,SAAS,eAAA,CAAgB,KAAa,MAAA,EAAwB;AACnE,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,GAAG,IAAI,MAAM,CAAA,CAAA,CAAA;AAC/B;AAGO,IAAM,mBAAA,GAAsB,GAAG,GAAG,CAAA,CAAA;;;AC/SzC,IAAMA,IAAAA,GAAM,OAAA;AAIZ,IAAM,KAAA,GAAQ;AAAA;AAAA,EAEZ,IAAA,EAAM,CAAC,GAAA,EAAK,IAAI,CAAA;AAAA,EAChB,GAAA,EAAK,CAAC,GAAA,EAAK,IAAI,CAAA;AAAA,EACf,MAAA,EAAQ,CAAC,GAAA,EAAK,IAAI,CAAA;AAAA,EAClB,SAAA,EAAW,CAAC,GAAA,EAAK,IAAI,CAAA;AAAA,EACrB,OAAA,EAAS,CAAC,GAAA,EAAK,IAAI,CAAA;AAAA,EACnB,MAAA,EAAQ,CAAC,GAAA,EAAK,IAAI,CAAA;AAAA,EAClB,aAAA,EAAe,CAAC,GAAA,EAAK,IAAI,CAAA;AAAA;AAAA,EAGzB,KAAA,EAAO,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EAClB,GAAA,EAAK,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EAChB,KAAA,EAAO,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EAClB,MAAA,EAAQ,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACnB,IAAA,EAAM,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACjB,OAAA,EAAS,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACpB,IAAA,EAAM,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACjB,KAAA,EAAO,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA;AAAA,EAGlB,WAAA,EAAa,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACxB,SAAA,EAAW,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACtB,WAAA,EAAa,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACxB,YAAA,EAAc,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACzB,UAAA,EAAY,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACvB,aAAA,EAAe,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EAC1B,UAAA,EAAY,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACvB,WAAA,EAAa,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA;AAAA,EAGxB,OAAA,EAAS,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACpB,KAAA,EAAO,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EAClB,OAAA,EAAS,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACpB,QAAA,EAAU,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACrB,MAAA,EAAQ,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACnB,SAAA,EAAW,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACtB,MAAA,EAAQ,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA,EACnB,OAAA,EAAS,CAAC,IAAA,EAAM,IAAI,CAAA;AAAA;AAAA,EAGpB,aAAA,EAAe,CAAC,KAAA,EAAO,IAAI,CAAA;AAAA,EAC3B,WAAA,EAAa,CAAC,KAAA,EAAO,IAAI,CAAA;AAAA,EACzB,aAAA,EAAe,CAAC,KAAA,EAAO,IAAI,CAAA;AAAA,EAC3B,cAAA,EAAgB,CAAC,KAAA,EAAO,IAAI,CAAA;AAAA,EAC5B,YAAA,EAAc,CAAC,KAAA,EAAO,IAAI,CAAA;AAAA,EAC1B,eAAA,EAAiB,CAAC,KAAA,EAAO,IAAI,CAAA;AAAA,EAC7B,YAAA,EAAc,CAAC,KAAA,EAAO,IAAI,CAAA;AAAA,EAC1B,aAAA,EAAe,CAAC,KAAA,EAAO,IAAI;AAC7B,CAAA;AAWA,SAAS,UAAA,CAAW,IAAA,EAAc,IAAA,EAAc,KAAA,EAAuB;AACrE,EAAA,MAAM,OAAA,GAAU,CAAA,EAAGA,IAAG,CAAA,EAAG,IAAI,CAAA,CAAA,CAAA;AAC7B,EAAA,MAAM,QAAA,GAAW,CAAA,EAAGA,IAAG,CAAA,EAAG,KAAK,CAAA,CAAA,CAAA;AAK/B,EAAA,MAAM,WAAW,IAAA,CAAK,OAAA;AAAA,IACpB,IAAI,MAAA,CAAO,QAAA,CAAS,QAAQ,qBAAA,EAAuB,MAAM,GAAG,GAAG,CAAA;AAAA,IAC/D,QAAA,GAAW;AAAA,GACb;AAEA,EAAA,OAAO,UAAU,QAAA,GAAW,QAAA;AAC9B;AAOA,SAAS,SAAS,GAAA,EAAuC;AACvD,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AAClC,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,KAAA,EAAO,EAAE,CAAA;AAE9B,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AAEtB,IAAA,MAAMC,EAAAA,GAAAA,CAAM,GAAA,IAAO,CAAA,GAAK,EAAA,IAAO,EAAA;AAC/B,IAAA,MAAMC,EAAAA,GAAAA,CAAM,GAAA,IAAO,CAAA,GAAK,EAAA,IAAO,EAAA;AAC/B,IAAA,MAAMC,EAAAA,GAAAA,CAAK,MAAM,EAAA,IAAO,EAAA;AACxB,IAAA,OAAO,CAACF,EAAAA,EAAGC,EAAAA,EAAGC,EAAC,CAAA;AAAA,EACjB;AAGA,EAAA,MAAM,CAAA,GAAK,OAAO,EAAA,GAAM,GAAA;AACxB,EAAA,MAAM,CAAA,GAAK,OAAO,CAAA,GAAK,GAAA;AACvB,EAAA,MAAM,IAAI,GAAA,GAAM,GAAA;AAChB,EAAA,OAAO,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AACjB;AAQO,SAAS,YAAY,YAAA,EAAqC;AAC/D,EAAA,MAAM,OAAA,GAAU,aAAa,KAAA,GAAQ,CAAA;AAOrC,EAAA,SAAS,MAAM,KAAA,EAAyC;AAEtD,IAAA,MAAM,EAAA,GAAK,CAAC,IAAA,KAAyB;AACnC,MAAA,IAAI,CAAC,OAAA,IAAW,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAClC,QAAA,OAAO,IAAA;AAAA,MACT;AAGA,MAAA,IAAI,MAAA,GAAS,IAAA;AACb,MAAA,KAAA,IAAS,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC1C,QAAA,MAAM,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,MAAM,CAAC,CAAA;AAC7B,QAAA,MAAA,GAAS,UAAA,CAAW,MAAA,EAAQ,IAAA,EAAM,KAAK,CAAA;AAAA,MACzC;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAGA,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AACnC,IAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,MAAA,MAAM,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,MAAM,IAAI,CAAA;AAChC,MAAA,MAAA,CAAO,cAAA,CAAe,IAAI,IAAA,EAAM;AAAA,QAC9B,GAAA,GAAM;AACJ,UAAA,OAAO,KAAA,CAAM,CAAC,GAAG,KAAA,EAAO,CAAC,IAAA,EAAM,KAAK,CAAC,CAAC,CAAA;AAAA,QACxC;AAAA,OACD,CAAA;AAAA,IACH;AAGA,IAAA,MAAA,CAAO,cAAA,CAAe,IAAI,MAAA,EAAQ;AAAA,MAChC,GAAA,GAAM;AACJ,QAAA,MAAM,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,KAAA,CAAM,WAAA;AAC5B,QAAA,OAAO,KAAA,CAAM,CAAC,GAAG,KAAA,EAAO,CAAC,IAAA,EAAM,KAAK,CAAC,CAAC,CAAA;AAAA,MACxC;AAAA,KACD,CAAA;AAGD,IAAA,MAAA,CAAO,cAAA,CAAe,IAAI,MAAA,EAAQ;AAAA,MAChC,GAAA,GAAM;AACJ,QAAA,MAAM,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,KAAA,CAAM,WAAA;AAC5B,QAAA,OAAO,KAAA,CAAM,CAAC,GAAG,KAAA,EAAO,CAAC,IAAA,EAAM,KAAK,CAAC,CAAC,CAAA;AAAA,MACxC;AAAA,KACD,CAAA;AAKD,IAAA,MAAA,CAAO,cAAA,CAAe,IAAI,KAAA,EAAO;AAAA,MAC/B,KAAA,EAAO,CAAC,KAAA,KAA2B;AACjC,QAAA,IAAI,CAAC,OAAA,IAAW,CAAC,YAAA,CAAa,MAAA,EAAQ;AACpC,UAAA,OAAO,MAAM,KAAK,CAAA;AAAA,QACpB;AACA,QAAA,MAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,SAAS,KAAK,CAAA;AAChC,QAAA,OAAO,KAAA,CAAM,CAAC,GAAG,KAAA,EAAO,CAAC,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,CAAC,CAAA;AAAA,MACxD,CAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACX,CAAA;AAGD,IAAA,MAAA,CAAO,cAAA,CAAe,IAAI,KAAA,EAAO;AAAA,MAC/B,KAAA,EAAO,CAAC,CAAA,EAAW,CAAA,EAAW,CAAA,KAAuB;AACnD,QAAA,IAAI,CAAC,OAAA,IAAW,CAAC,YAAA,CAAa,MAAA,EAAQ;AACpC,UAAA,OAAO,MAAM,KAAK,CAAA;AAAA,QACpB;AACA,QAAA,OAAO,KAAA,CAAM,CAAC,GAAG,KAAA,EAAO,CAAC,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,CAAC,CAAA;AAAA,MACxD,CAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACX,CAAA;AAGD,IAAA,MAAA,CAAO,cAAA,CAAe,IAAI,OAAA,EAAS;AAAA,MACjC,KAAA,EAAO,CAAC,KAAA,KAA2B;AACjC,QAAA,IAAI,CAAC,OAAA,IAAW,CAAC,YAAA,CAAa,MAAA,EAAQ;AACpC,UAAA,OAAO,MAAM,KAAK,CAAA;AAAA,QACpB;AACA,QAAA,MAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,SAAS,KAAK,CAAA;AAChC,QAAA,OAAO,KAAA,CAAM,CAAC,GAAG,KAAA,EAAO,CAAC,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,CAAC,CAAA;AAAA,MACxD,CAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACX,CAAA;AAGD,IAAA,MAAA,CAAO,cAAA,CAAe,IAAI,OAAA,EAAS;AAAA,MACjC,KAAA,EAAO,CAAC,CAAA,EAAW,CAAA,EAAW,CAAA,KAAuB;AACnD,QAAA,IAAI,CAAC,OAAA,IAAW,CAAC,YAAA,CAAa,MAAA,EAAQ;AACpC,UAAA,OAAO,MAAM,KAAK,CAAA;AAAA,QACpB;AACA,QAAA,OAAO,KAAA,CAAM,CAAC,GAAG,KAAA,EAAO,CAAC,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,CAAC,CAAA;AAAA,MACxD,CAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACX,CAAA;AAGD,IAAA,MAAA,CAAO,cAAA,CAAe,IAAI,SAAA,EAAW;AAAA,MACnC,KAAA,EAAO,CAAC,IAAA,KAA0B;AAChC,QAAA,IAAI,CAAC,OAAA,IAAW,CAAC,YAAA,CAAa,MAAA,EAAQ;AACpC,UAAA,OAAO,MAAM,KAAK,CAAA;AAAA,QACpB;AACA,QAAA,OAAO,KAAA,CAAM,CAAC,GAAG,KAAA,EAAO,CAAC,QAAQ,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,CAAC,CAAA;AAAA,MACjD,CAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACX,CAAA;AAGD,IAAA,MAAA,CAAO,cAAA,CAAe,IAAI,WAAA,EAAa;AAAA,MACrC,KAAA,EAAO,CAAC,IAAA,KAA0B;AAChC,QAAA,IAAI,CAAC,OAAA,IAAW,CAAC,YAAA,CAAa,MAAA,EAAQ;AACpC,UAAA,OAAO,MAAM,KAAK,CAAA;AAAA,QACpB;AACA,QAAA,OAAO,KAAA,CAAM,CAAC,GAAG,KAAA,EAAO,CAAC,QAAQ,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,CAAC,CAAA;AAAA,MACjD,CAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACX,CAAA;AAED,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA,CAAM,EAAE,CAAA;AACjB;AAOO,SAAS,wBAAA,GAAoC;AAClD,EAAA,OAAO,WAAA,CAAY,EAAE,KAAA,EAAO,CAAA,EAAmB,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,CAAA;AAC7E","file":"index.cjs","sourcesContent":["/**\n * Platform-agnostic byte utilities using Uint8Array.\n * These replace Node.js Buffer operations for cross-platform compatibility.\n */\n\n/** Shared TextEncoder instance for string encoding. */\nconst encoder = new TextEncoder()\n\n/** Shared TextDecoder instance for string decoding. */\nconst decoder = new TextDecoder('utf-8')\n\n/**\n * Encode a string to UTF-8 bytes.\n * Equivalent to `Buffer.from(text, 'utf8')`.\n * @param text - String to encode\n * @returns UTF-8 encoded bytes\n * @public\n */\nexport function encodeString(text: string): Uint8Array {\n return encoder.encode(text)\n}\n\n/**\n * Decode UTF-8 bytes to a string.\n * Equivalent to `buffer.toString('utf8')`.\n * @param bytes - Bytes to decode\n * @returns Decoded string\n * @public\n */\nexport function decodeString(bytes: Uint8Array): string {\n return decoder.decode(bytes)\n}\n\n/**\n * Get the byte length of a string when encoded as UTF-8.\n * Equivalent to `Buffer.byteLength(text, 'utf8')`.\n * @param text - String to measure\n * @returns Byte length\n * @public\n */\nexport function byteLength(text: string): number {\n return encoder.encode(text).length\n}\n\n/**\n * Concatenate multiple Uint8Arrays into one.\n * Equivalent to `Buffer.concat(arrays)`.\n * @param arrays - Arrays to concatenate\n * @returns Combined array\n * @public\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0)\n const result = new Uint8Array(totalLength)\n let offset = 0\n for (const arr of arrays) {\n result.set(arr, offset)\n offset += arr.length\n }\n return result\n}\n\n/**\n * Create a new Uint8Array of the specified size, filled with zeros.\n * Equivalent to `Buffer.alloc(size)`.\n * @param size - Size of the array\n * @returns New zero-filled array\n * @public\n */\nexport function allocBytes(size: number): Uint8Array {\n return new Uint8Array(size)\n}\n\n/**\n * Create a Uint8Array from an array of byte values.\n * Equivalent to `Buffer.from([...])`.\n * @param values - Byte values (0-255)\n * @returns New Uint8Array\n * @public\n */\nexport function fromBytes(values: number[]): Uint8Array {\n return new Uint8Array(values)\n}\n\n/**\n * Compare two Uint8Arrays for equality.\n * Equivalent to `buffer1.equals(buffer2)`.\n * @param a - First array\n * @param b - Second array\n * @returns True if arrays are equal\n * @public\n */\nexport function bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n return true\n}\n\n/**\n * Check if a byte array starts with a specific prefix.\n * @param bytes - Array to check\n * @param prefix - Prefix to look for\n * @returns True if bytes starts with prefix\n * @public\n */\nexport function startsWith(bytes: Uint8Array, prefix: Uint8Array): boolean {\n if (bytes.length < prefix.length) {\n return false\n }\n for (let i = 0; i < prefix.length; i++) {\n if (bytes[i] !== prefix[i]) {\n return false\n }\n }\n return true\n}\n\n/**\n * Check if a byte array starts with a specific string (UTF-8 encoded).\n * @param bytes - Array to check\n * @param prefix - String prefix to look for\n * @returns True if bytes starts with the encoded prefix\n * @public\n */\nexport function startsWithString(bytes: Uint8Array, prefix: string): boolean {\n return startsWith(bytes, encodeString(prefix))\n}\n\n/**\n * Find the index of a substring within a byte array.\n * Returns -1 if not found.\n * @param bytes - Array to search\n * @param needle - String to find\n * @param fromIndex - Start index (default 0)\n * @returns Index of first occurrence or -1\n * @public\n */\nexport function indexOfString(\n bytes: Uint8Array,\n needle: string,\n fromIndex: number = 0,\n): number {\n const needleBytes = encodeString(needle)\n const endIndex = bytes.length - needleBytes.length\n\n outer: for (let i = fromIndex; i <= endIndex; i++) {\n for (let j = 0; j < needleBytes.length; j++) {\n if (bytes[i + j] !== needleBytes[j]) {\n continue outer\n }\n }\n return i\n }\n return -1\n}\n\n/**\n * Decode the first complete UTF-8 character from a byte array.\n * Returns the character and its byte length, or null if incomplete.\n * @param bytes - Byte array to decode\n * @param offset - Start offset (default 0)\n * @returns Tuple of [character, byteLength] or [null, 0] if incomplete\n * @public\n */\nexport function decodeFirstRune(\n bytes: Uint8Array,\n offset: number = 0,\n): [string | null, number] {\n if (offset >= bytes.length) {\n return [null, 0]\n }\n\n const firstByte = bytes[offset]\n if (firstByte === undefined) {\n return [null, 0]\n }\n\n // Determine the byte length of this UTF-8 character\n let byteLen: number\n if ((firstByte & 0x80) === 0) {\n // Single byte character (ASCII)\n byteLen = 1\n } else if ((firstByte & 0xe0) === 0xc0) {\n // Two byte character\n byteLen = 2\n } else if ((firstByte & 0xf0) === 0xe0) {\n // Three byte character\n byteLen = 3\n } else if ((firstByte & 0xf8) === 0xf0) {\n // Four byte character\n byteLen = 4\n } else {\n // Invalid UTF-8 start byte, treat as single byte\n byteLen = 1\n }\n\n // Check if we have enough bytes\n if (offset + byteLen > bytes.length) {\n return [null, 0]\n }\n\n // Decode the character\n const slice = bytes.subarray(offset, offset + byteLen)\n const decoded = decoder.decode(slice)\n\n if (decoded.length === 0) {\n return [null, 0]\n }\n\n // Use codePointAt to properly handle surrogate pairs (emoji, etc.)\n // This returns the full Unicode code point, not just the first surrogate\n const codePoint = decoded.codePointAt(0)\n if (codePoint === undefined) {\n return [null, 0]\n }\n\n // Convert the code point back to a string (handles surrogate pairs correctly)\n const firstChar = String.fromCodePoint(codePoint)\n\n return [firstChar, byteLen]\n}\n\n/**\n * Slice a portion of a byte array.\n * Equivalent to `buffer.subarray(start, end)`.\n * @param bytes - Source array\n * @param start - Start index\n * @param end - End index (optional, defaults to length)\n * @returns New Uint8Array view of the slice\n * @public\n */\nexport function sliceBytes(\n bytes: Uint8Array,\n start: number,\n end?: number,\n): Uint8Array {\n return bytes.subarray(start, end)\n}\n\n/**\n * Create a copy of a byte array.\n * @param bytes - Array to copy\n * @returns New Uint8Array with copied data\n * @public\n */\nexport function copyBytes(bytes: Uint8Array): Uint8Array {\n return new Uint8Array(bytes)\n}\n","/**\n * ANSI escape sequences for terminal control.\n * These are platform-agnostic constants that work in any terminal emulator.\n */\n\n/** Escape character. @public */\nexport const ESC = '\\u001b'\n\n/** Control Sequence Introducer. @public */\nexport const CSI = `${ESC}[`\n\n/** Operating System Command. @public */\nexport const OSC = `${ESC}]`\n\n/** String Terminator. @public */\nexport const ST = `${ESC}\\\\`\n\n/** Bell character (alternative string terminator). @public */\nexport const BEL = '\\u0007'\n\n// ============================================================================\n// Cursor Control\n// ============================================================================\n\n/** Show the cursor. @public */\nexport const CURSOR_SHOW = `${CSI}?25h`\n\n/** Hide the cursor. @public */\nexport const CURSOR_HIDE = `${CSI}?25l`\n\n/** Move cursor to home position (1,1). @public */\nexport const CURSOR_HOME = `${CSI}H`\n\n/**\n * Move cursor to specific position.\n * @param row - Row number (1-based)\n * @param col - Column number (1-based)\n * @returns ANSI escape sequence\n * @public\n */\nexport function cursorTo(row: number, col: number): string {\n return `${CSI}${row};${col}H`\n}\n\n/**\n * Move cursor up by n rows.\n * @param n - Number of rows\n * @returns ANSI escape sequence\n * @public\n */\nexport function cursorUp(n: number = 1): string {\n return `${CSI}${n}A`\n}\n\n/**\n * Move cursor down by n rows.\n * @param n - Number of rows\n * @returns ANSI escape sequence\n * @public\n */\nexport function cursorDown(n: number = 1): string {\n return `${CSI}${n}B`\n}\n\n/**\n * Move cursor forward (right) by n columns.\n * @param n - Number of columns\n * @returns ANSI escape sequence\n * @public\n */\nexport function cursorForward(n: number = 1): string {\n return `${CSI}${n}C`\n}\n\n/**\n * Move cursor backward (left) by n columns.\n * @param n - Number of columns\n * @returns ANSI escape sequence\n * @public\n */\nexport function cursorBackward(n: number = 1): string {\n return `${CSI}${n}D`\n}\n\n/**\n * Save cursor position.\n * @public\n */\nexport const CURSOR_SAVE = `${CSI}s`\n\n/**\n * Restore cursor position.\n * @public\n */\nexport const CURSOR_RESTORE = `${CSI}u`\n\n// ============================================================================\n// Screen Control\n// ============================================================================\n\n/** Clear the entire screen. @public */\nexport const CLEAR_SCREEN = `${CSI}2J`\n\n/** Clear from cursor to end of screen. @public */\nexport const CLEAR_SCREEN_DOWN = `${CSI}0J`\n\n/** Clear from cursor to beginning of screen. @public */\nexport const CLEAR_SCREEN_UP = `${CSI}1J`\n\n/** Clear the entire line. @public */\nexport const CLEAR_LINE = `${CSI}2K`\n\n/** Clear from cursor to end of line. @public */\nexport const CLEAR_LINE_END = `${CSI}0K`\n\n/** Clear from cursor to beginning of line. @public */\nexport const CLEAR_LINE_START = `${CSI}1K`\n\n// ============================================================================\n// Alternate Screen Buffer\n// ============================================================================\n\n/** Enter alternate screen buffer. @public */\nexport const ALT_SCREEN_ON = `${CSI}?1049h`\n\n/** Exit alternate screen buffer. @public */\nexport const ALT_SCREEN_OFF = `${CSI}?1049l`\n\n// ============================================================================\n// Mouse Tracking\n// ============================================================================\n\n/** Enable cell-motion mouse tracking (button events + motion while pressed). @public */\nexport const MOUSE_CELL_ON = `${CSI}?1002h`\n\n/** Enable all-motion mouse tracking (button events + all motion). @public */\nexport const MOUSE_ALL_ON = `${CSI}?1003h`\n\n/** Enable SGR extended mouse mode (supports coordinates \\> 223). @public */\nexport const MOUSE_SGR_ON = `${CSI}?1006h`\n\n/** Disable cell-motion mouse tracking. @public */\nexport const MOUSE_CELL_OFF = `${CSI}?1002l`\n\n/** Disable all-motion mouse tracking. @public */\nexport const MOUSE_ALL_OFF = `${CSI}?1003l`\n\n/** Disable SGR extended mouse mode. @public */\nexport const MOUSE_SGR_OFF = `${CSI}?1006l`\n\n// ============================================================================\n// Bracketed Paste\n// ============================================================================\n\n/** Enable bracketed paste mode. @public */\nexport const BRACKETED_PASTE_ON = `${CSI}?2004h`\n\n/** Disable bracketed paste mode. @public */\nexport const BRACKETED_PASTE_OFF = `${CSI}?2004l`\n\n/** Bracketed paste start sequence. @public */\nexport const BRACKETED_PASTE_START = `${CSI}200~`\n\n/** Bracketed paste end sequence. @public */\nexport const BRACKETED_PASTE_END = `${CSI}201~`\n\n// ============================================================================\n// Focus Reporting\n// ============================================================================\n\n/** Enable focus reporting. @public */\nexport const REPORT_FOCUS_ON = `${CSI}?1004h`\n\n/** Disable focus reporting. @public */\nexport const REPORT_FOCUS_OFF = `${CSI}?1004l`\n\n/** Focus gained sequence. @public */\nexport const FOCUS_IN = `${CSI}I`\n\n/** Focus lost sequence. @public */\nexport const FOCUS_OUT = `${CSI}O`\n\n// ============================================================================\n// Window Control\n// ============================================================================\n\n/**\n * Set the terminal window title.\n * @param title - Window title\n * @returns ANSI escape sequence\n * @public\n */\nexport function setWindowTitle(title: string): string {\n return `${OSC}0;${title}${BEL}`\n}\n\n// ============================================================================\n// Text Formatting (SGR - Select Graphic Rendition)\n// ============================================================================\n\n/** Reset all text attributes. @public */\nexport const RESET = `${CSI}0m`\n\n/** Bold text. @public */\nexport const BOLD = `${CSI}1m`\n\n/** Dim/faint text. @public */\nexport const DIM = `${CSI}2m`\n\n/** Italic text. @public */\nexport const ITALIC = `${CSI}3m`\n\n/** Underlined text. @public */\nexport const UNDERLINE = `${CSI}4m`\n\n/** Blinking text. @public */\nexport const BLINK = `${CSI}5m`\n\n/** Reverse video (swap foreground/background). @public */\nexport const REVERSE = `${CSI}7m`\n\n/** Hidden text. @public */\nexport const HIDDEN = `${CSI}8m`\n\n/** Strikethrough text. @public */\nexport const STRIKETHROUGH = `${CSI}9m`\n\n// ============================================================================\n// Color Utilities\n// ============================================================================\n\n/**\n * Set foreground color using 256-color palette.\n * @param colorIndex - Color index (0-255)\n * @returns ANSI escape sequence\n * @public\n */\nexport function fg256(colorIndex: number): string {\n return `${CSI}38;5;${colorIndex}m`\n}\n\n/**\n * Set background color using 256-color palette.\n * @param colorIndex - Color index (0-255)\n * @returns ANSI escape sequence\n * @public\n */\nexport function bg256(colorIndex: number): string {\n return `${CSI}48;5;${colorIndex}m`\n}\n\n/**\n * Set foreground color using RGB true color.\n * @param r - Red component (0-255)\n * @param g - Green component (0-255)\n * @param b - Blue component (0-255)\n * @returns ANSI escape sequence\n * @public\n */\nexport function fgRGB(r: number, g: number, b: number): string {\n return `${CSI}38;2;${r};${g};${b}m`\n}\n\n/**\n * Set background color using RGB true color.\n * @param r - Red component (0-255)\n * @param g - Green component (0-255)\n * @param b - Blue component (0-255)\n * @returns ANSI escape sequence\n * @public\n */\nexport function bgRGB(r: number, g: number, b: number): string {\n return `${CSI}48;2;${r};${g};${b}m`\n}\n\n// ============================================================================\n// Scrolling\n// ============================================================================\n\n/**\n * Scroll up by n lines.\n * @param n - Number of lines\n * @returns ANSI escape sequence\n * @public\n */\nexport function scrollUp(n: number = 1): string {\n return `${CSI}${n}S`\n}\n\n/**\n * Scroll down by n lines.\n * @param n - Number of lines\n * @returns ANSI escape sequence\n * @public\n */\nexport function scrollDown(n: number = 1): string {\n return `${CSI}${n}T`\n}\n\n/**\n * Set scrolling region.\n * @param top - Top row (1-based)\n * @param bottom - Bottom row (1-based)\n * @returns ANSI escape sequence\n * @public\n */\nexport function setScrollRegion(top: number, bottom: number): string {\n return `${CSI}${top};${bottom}r`\n}\n\n/** Reset scrolling region to full screen. @public */\nexport const RESET_SCROLL_REGION = `${CSI}r`\n","/**\n * Pure JavaScript ANSI styling utility for terminal text.\n * Works identically in Node.js and browser/xterm.js contexts.\n */\n\nimport type { ColorSupport, StyleFn } from '../types.js'\n\n// ANSI escape codes\nconst ESC = '\\x1b['\nconst RESET = `${ESC}0m`\n\n// Modifier codes\nconst CODES = {\n // Modifiers (open, close)\n bold: ['1', '22'],\n dim: ['2', '22'],\n italic: ['3', '23'],\n underline: ['4', '24'],\n inverse: ['7', '27'],\n hidden: ['8', '28'],\n strikethrough: ['9', '29'],\n\n // Basic foreground colors (30-37)\n black: ['30', '39'],\n red: ['31', '39'],\n green: ['32', '39'],\n yellow: ['33', '39'],\n blue: ['34', '39'],\n magenta: ['35', '39'],\n cyan: ['36', '39'],\n white: ['37', '39'],\n\n // Bright foreground colors (90-97)\n blackBright: ['90', '39'],\n redBright: ['91', '39'],\n greenBright: ['92', '39'],\n yellowBright: ['93', '39'],\n blueBright: ['94', '39'],\n magentaBright: ['95', '39'],\n cyanBright: ['96', '39'],\n whiteBright: ['97', '39'],\n\n // Basic background colors (40-47)\n bgBlack: ['40', '49'],\n bgRed: ['41', '49'],\n bgGreen: ['42', '49'],\n bgYellow: ['43', '49'],\n bgBlue: ['44', '49'],\n bgMagenta: ['45', '49'],\n bgCyan: ['46', '49'],\n bgWhite: ['47', '49'],\n\n // Bright background colors (100-107)\n bgBlackBright: ['100', '49'],\n bgRedBright: ['101', '49'],\n bgGreenBright: ['102', '49'],\n bgYellowBright: ['103', '49'],\n bgBlueBright: ['104', '49'],\n bgMagentaBright: ['105', '49'],\n bgCyanBright: ['106', '49'],\n bgWhiteBright: ['107', '49'],\n} as const\n\ntype CodeName = keyof typeof CODES\n\n/**\n * Apply ANSI codes to text.\n * @param text - Text to style\n * @param open - Opening ANSI code\n * @param close - Closing ANSI code\n * @returns Styled text\n */\nfunction applyStyle(text: string, open: string, close: string): string {\n const openSeq = `${ESC}${open}m`\n const closeSeq = `${ESC}${close}m`\n\n // Replace any existing close codes with close+open to properly nest styles\n // This handles cases like style.bold(style.bold('text')) where the inner\n // bold close would prematurely end the outer bold\n const replaced = text.replace(\n new RegExp(closeSeq.replace(/[[\\](){}|^$+*?.\\\\]/g, '\\\\$&'), 'g'),\n closeSeq + openSeq,\n )\n\n return openSeq + replaced + closeSeq\n}\n\n/**\n * Convert hex color to RGB.\n * @param hex - Hex color string (with or without #)\n * @returns RGB array [r, g, b]\n */\nfunction hexToRgb(hex: string): [number, number, number] {\n const clean = hex.replace(/^#/, '')\n const num = parseInt(clean, 16)\n\n if (clean.length === 3) {\n // Short form: #RGB -> #RRGGBB\n const r = ((num >> 8) & 0xf) * 17\n const g = ((num >> 4) & 0xf) * 17\n const b = (num & 0xf) * 17\n return [r, g, b]\n }\n\n // Long form: #RRGGBB\n const r = (num >> 16) & 0xff\n const g = (num >> 8) & 0xff\n const b = num & 0xff\n return [r, g, b]\n}\n\n/**\n * Create a chainable style function.\n * @param colorSupport - Color support level information\n * @returns Chainable style function\n * @public\n */\nexport function createStyle(colorSupport: ColorSupport): StyleFn {\n const enabled = colorSupport.level > 0\n\n /**\n * Build a style function that can be chained.\n * @param stack - Array of [open, close] code pairs to apply\n * @returns Style function\n */\n function build(stack: Array<[string, string]>): StyleFn {\n // The function itself - applies all stacked styles\n const fn = (text: string): string => {\n if (!enabled || stack.length === 0) {\n return text\n }\n\n // Apply styles from inside out\n let result = text\n for (let i = stack.length - 1; i >= 0; i--) {\n const [open, close] = stack[i]!\n result = applyStyle(result, open, close)\n }\n return result\n }\n\n // Add all code-based style properties\n const codeNames = Object.keys(CODES) as CodeName[]\n for (const name of codeNames) {\n const [open, close] = CODES[name]\n Object.defineProperty(fn, name, {\n get() {\n return build([...stack, [open, close]])\n },\n })\n }\n\n // Add gray as alias for blackBright\n Object.defineProperty(fn, 'gray', {\n get() {\n const [open, close] = CODES.blackBright\n return build([...stack, [open, close]])\n },\n })\n\n // Add grey as alias for blackBright\n Object.defineProperty(fn, 'grey', {\n get() {\n const [open, close] = CODES.blackBright\n return build([...stack, [open, close]])\n },\n })\n\n // Add extended color methods\n\n // hex(color: string): StyleFn\n Object.defineProperty(fn, 'hex', {\n value: (color: string): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n const [r, g, b] = hexToRgb(color)\n return build([...stack, [`38;2;${r};${g};${b}`, '39']])\n },\n writable: true,\n })\n\n // rgb(r: number, g: number, b: number): StyleFn\n Object.defineProperty(fn, 'rgb', {\n value: (r: number, g: number, b: number): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n return build([...stack, [`38;2;${r};${g};${b}`, '39']])\n },\n writable: true,\n })\n\n // bgHex(color: string): StyleFn\n Object.defineProperty(fn, 'bgHex', {\n value: (color: string): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n const [r, g, b] = hexToRgb(color)\n return build([...stack, [`48;2;${r};${g};${b}`, '49']])\n },\n writable: true,\n })\n\n // bgRgb(r: number, g: number, b: number): StyleFn\n Object.defineProperty(fn, 'bgRgb', {\n value: (r: number, g: number, b: number): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n return build([...stack, [`48;2;${r};${g};${b}`, '49']])\n },\n writable: true,\n })\n\n // ansi256(code: number): StyleFn\n Object.defineProperty(fn, 'ansi256', {\n value: (code: number): StyleFn => {\n if (!enabled || !colorSupport.has256) {\n return build(stack)\n }\n return build([...stack, [`38;5;${code}`, '39']])\n },\n writable: true,\n })\n\n // bgAnsi256(code: number): StyleFn\n Object.defineProperty(fn, 'bgAnsi256', {\n value: (code: number): StyleFn => {\n if (!enabled || !colorSupport.has256) {\n return build(stack)\n }\n return build([...stack, [`48;5;${code}`, '49']])\n },\n writable: true,\n })\n\n return fn as StyleFn\n }\n\n return build([])\n}\n\n/**\n * Create a style function that always applies colors (for xterm.js).\n * @returns Chainable style function with full color support\n * @public\n */\nexport function createAlwaysEnabledStyle(): StyleFn {\n return createStyle({ level: 3, hasBasic: true, has256: true, has16m: true })\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/bytes.ts","../src/sequences.ts","../src/style/index.ts","../src/detect.ts"],"names":["ESC","r","g","b"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Platform-agnostic byte utilities using Uint8Array.\n * These replace Node.js Buffer operations for cross-platform compatibility.\n */\n\n/** Shared TextEncoder instance for string encoding. */\nconst encoder = new TextEncoder()\n\n/** Shared TextDecoder instance for string decoding. */\nconst decoder = new TextDecoder('utf-8')\n\n/**\n * Encode a string to UTF-8 bytes.\n * Equivalent to `Buffer.from(text, 'utf8')`.\n * @param text - String to encode\n * @returns UTF-8 encoded bytes\n * @public\n */\nexport function encodeString(text: string): Uint8Array {\n return encoder.encode(text)\n}\n\n/**\n * Decode UTF-8 bytes to a string.\n * Equivalent to `buffer.toString('utf8')`.\n * @param bytes - Bytes to decode\n * @returns Decoded string\n * @public\n */\nexport function decodeString(bytes: Uint8Array): string {\n return decoder.decode(bytes)\n}\n\n/**\n * Get the byte length of a string when encoded as UTF-8.\n * Equivalent to `Buffer.byteLength(text, 'utf8')`.\n * @param text - String to measure\n * @returns Byte length\n * @public\n */\nexport function byteLength(text: string): number {\n return encoder.encode(text).length\n}\n\n/**\n * Concatenate multiple Uint8Arrays into one.\n * Equivalent to `Buffer.concat(arrays)`.\n * @param arrays - Arrays to concatenate\n * @returns Combined array\n * @public\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0)\n const result = new Uint8Array(totalLength)\n let offset = 0\n for (const arr of arrays) {\n result.set(arr, offset)\n offset += arr.length\n }\n return result\n}\n\n/**\n * Create a new Uint8Array of the specified size, filled with zeros.\n * Equivalent to `Buffer.alloc(size)`.\n * @param size - Size of the array\n * @returns New zero-filled array\n * @public\n */\nexport function allocBytes(size: number): Uint8Array {\n return new Uint8Array(size)\n}\n\n/**\n * Create a Uint8Array from an array of byte values.\n * Equivalent to `Buffer.from([...])`.\n * @param values - Byte values (0-255)\n * @returns New Uint8Array\n * @public\n */\nexport function fromBytes(values: number[]): Uint8Array {\n return new Uint8Array(values)\n}\n\n/**\n * Compare two Uint8Arrays for equality.\n * Equivalent to `buffer1.equals(buffer2)`.\n * @param a - First array\n * @param b - Second array\n * @returns True if arrays are equal\n * @public\n */\nexport function bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n return true\n}\n\n/**\n * Check if a byte array starts with a specific prefix.\n * @param bytes - Array to check\n * @param prefix - Prefix to look for\n * @returns True if bytes starts with prefix\n * @public\n */\nexport function startsWith(bytes: Uint8Array, prefix: Uint8Array): boolean {\n if (bytes.length < prefix.length) {\n return false\n }\n for (let i = 0; i < prefix.length; i++) {\n if (bytes[i] !== prefix[i]) {\n return false\n }\n }\n return true\n}\n\n/**\n * Check if a byte array starts with a specific string (UTF-8 encoded).\n * @param bytes - Array to check\n * @param prefix - String prefix to look for\n * @returns True if bytes starts with the encoded prefix\n * @public\n */\nexport function startsWithString(bytes: Uint8Array, prefix: string): boolean {\n return startsWith(bytes, encodeString(prefix))\n}\n\n/**\n * Find the index of a substring within a byte array.\n * Returns -1 if not found.\n * @param bytes - Array to search\n * @param needle - String to find\n * @param fromIndex - Start index (default 0)\n * @returns Index of first occurrence or -1\n * @public\n */\nexport function indexOfString(\n bytes: Uint8Array,\n needle: string,\n fromIndex: number = 0,\n): number {\n const needleBytes = encodeString(needle)\n const endIndex = bytes.length - needleBytes.length\n\n outer: for (let i = fromIndex; i <= endIndex; i++) {\n for (let j = 0; j < needleBytes.length; j++) {\n if (bytes[i + j] !== needleBytes[j]) {\n continue outer\n }\n }\n return i\n }\n return -1\n}\n\n/**\n * Decode the first complete UTF-8 character from a byte array.\n * Returns the character and its byte length, or null if incomplete.\n * @param bytes - Byte array to decode\n * @param offset - Start offset (default 0)\n * @returns Tuple of [character, byteLength] or [null, 0] if incomplete\n * @public\n */\nexport function decodeFirstRune(\n bytes: Uint8Array,\n offset: number = 0,\n): [string | null, number] {\n if (offset >= bytes.length) {\n return [null, 0]\n }\n\n const firstByte = bytes[offset]\n if (firstByte === undefined) {\n return [null, 0]\n }\n\n // Determine the byte length of this UTF-8 character\n let byteLen: number\n if ((firstByte & 0x80) === 0) {\n // Single byte character (ASCII)\n byteLen = 1\n } else if ((firstByte & 0xe0) === 0xc0) {\n // Two byte character\n byteLen = 2\n } else if ((firstByte & 0xf0) === 0xe0) {\n // Three byte character\n byteLen = 3\n } else if ((firstByte & 0xf8) === 0xf0) {\n // Four byte character\n byteLen = 4\n } else {\n // Invalid UTF-8 start byte, treat as single byte\n byteLen = 1\n }\n\n // Check if we have enough bytes\n if (offset + byteLen > bytes.length) {\n return [null, 0]\n }\n\n // Decode the character\n const slice = bytes.subarray(offset, offset + byteLen)\n const decoded = decoder.decode(slice)\n\n if (decoded.length === 0) {\n return [null, 0]\n }\n\n // Use codePointAt to properly handle surrogate pairs (emoji, etc.)\n // This returns the full Unicode code point, not just the first surrogate\n const codePoint = decoded.codePointAt(0)\n if (codePoint === undefined) {\n return [null, 0]\n }\n\n // Convert the code point back to a string (handles surrogate pairs correctly)\n const firstChar = String.fromCodePoint(codePoint)\n\n return [firstChar, byteLen]\n}\n\n/**\n * Slice a portion of a byte array.\n * Equivalent to `buffer.subarray(start, end)`.\n * @param bytes - Source array\n * @param start - Start index\n * @param end - End index (optional, defaults to length)\n * @returns New Uint8Array view of the slice\n * @public\n */\nexport function sliceBytes(\n bytes: Uint8Array,\n start: number,\n end?: number,\n): Uint8Array {\n return bytes.subarray(start, end)\n}\n\n/**\n * Create a copy of a byte array.\n * @param bytes - Array to copy\n * @returns New Uint8Array with copied data\n * @public\n */\nexport function copyBytes(bytes: Uint8Array): Uint8Array {\n return new Uint8Array(bytes)\n}\n","/**\n * ANSI escape sequences for terminal control.\n * These are platform-agnostic constants that work in any terminal emulator.\n */\n\n/** Escape character. @public */\nexport const ESC = '\\u001b'\n\n/** Control Sequence Introducer. @public */\nexport const CSI = `${ESC}[`\n\n/** Operating System Command. @public */\nexport const OSC = `${ESC}]`\n\n/** String Terminator. @public */\nexport const ST = `${ESC}\\\\`\n\n/** Bell character (alternative string terminator). @public */\nexport const BEL = '\\u0007'\n\n// ============================================================================\n// Cursor Control\n// ============================================================================\n\n/** Show the cursor. @public */\nexport const CURSOR_SHOW = `${CSI}?25h`\n\n/** Hide the cursor. @public */\nexport const CURSOR_HIDE = `${CSI}?25l`\n\n/** Move cursor to home position (1,1). @public */\nexport const CURSOR_HOME = `${CSI}H`\n\n/**\n * Move cursor to specific position.\n * @param row - Row number (1-based)\n * @param col - Column number (1-based)\n * @returns ANSI escape sequence\n * @public\n */\nexport function cursorTo(row: number, col: number): string {\n return `${CSI}${row};${col}H`\n}\n\n/**\n * Move cursor up by n rows.\n * @param n - Number of rows\n * @returns ANSI escape sequence\n * @public\n */\nexport function cursorUp(n: number = 1): string {\n return `${CSI}${n}A`\n}\n\n/**\n * Move cursor down by n rows.\n * @param n - Number of rows\n * @returns ANSI escape sequence\n * @public\n */\nexport function cursorDown(n: number = 1): string {\n return `${CSI}${n}B`\n}\n\n/**\n * Move cursor forward (right) by n columns.\n * @param n - Number of columns\n * @returns ANSI escape sequence\n * @public\n */\nexport function cursorForward(n: number = 1): string {\n return `${CSI}${n}C`\n}\n\n/**\n * Move cursor backward (left) by n columns.\n * @param n - Number of columns\n * @returns ANSI escape sequence\n * @public\n */\nexport function cursorBackward(n: number = 1): string {\n return `${CSI}${n}D`\n}\n\n/**\n * Save cursor position.\n * @public\n */\nexport const CURSOR_SAVE = `${CSI}s`\n\n/**\n * Restore cursor position.\n * @public\n */\nexport const CURSOR_RESTORE = `${CSI}u`\n\n// ============================================================================\n// Screen Control\n// ============================================================================\n\n/** Clear the entire screen. @public */\nexport const CLEAR_SCREEN = `${CSI}2J`\n\n/** Clear from cursor to end of screen. @public */\nexport const CLEAR_SCREEN_DOWN = `${CSI}0J`\n\n/** Clear from cursor to beginning of screen. @public */\nexport const CLEAR_SCREEN_UP = `${CSI}1J`\n\n/** Clear the entire line. @public */\nexport const CLEAR_LINE = `${CSI}2K`\n\n/** Clear from cursor to end of line. @public */\nexport const CLEAR_LINE_END = `${CSI}0K`\n\n/** Clear from cursor to beginning of line. @public */\nexport const CLEAR_LINE_START = `${CSI}1K`\n\n// ============================================================================\n// Alternate Screen Buffer\n// ============================================================================\n\n/** Enter alternate screen buffer. @public */\nexport const ALT_SCREEN_ON = `${CSI}?1049h`\n\n/** Exit alternate screen buffer. @public */\nexport const ALT_SCREEN_OFF = `${CSI}?1049l`\n\n// ============================================================================\n// Mouse Tracking\n// ============================================================================\n\n/** Enable cell-motion mouse tracking (button events + motion while pressed). @public */\nexport const MOUSE_CELL_ON = `${CSI}?1002h`\n\n/** Enable all-motion mouse tracking (button events + all motion). @public */\nexport const MOUSE_ALL_ON = `${CSI}?1003h`\n\n/** Enable SGR extended mouse mode (supports coordinates \\> 223). @public */\nexport const MOUSE_SGR_ON = `${CSI}?1006h`\n\n/** Disable cell-motion mouse tracking. @public */\nexport const MOUSE_CELL_OFF = `${CSI}?1002l`\n\n/** Disable all-motion mouse tracking. @public */\nexport const MOUSE_ALL_OFF = `${CSI}?1003l`\n\n/** Disable SGR extended mouse mode. @public */\nexport const MOUSE_SGR_OFF = `${CSI}?1006l`\n\n// ============================================================================\n// Bracketed Paste\n// ============================================================================\n\n/** Enable bracketed paste mode. @public */\nexport const BRACKETED_PASTE_ON = `${CSI}?2004h`\n\n/** Disable bracketed paste mode. @public */\nexport const BRACKETED_PASTE_OFF = `${CSI}?2004l`\n\n/** Bracketed paste start sequence. @public */\nexport const BRACKETED_PASTE_START = `${CSI}200~`\n\n/** Bracketed paste end sequence. @public */\nexport const BRACKETED_PASTE_END = `${CSI}201~`\n\n// ============================================================================\n// Focus Reporting\n// ============================================================================\n\n/** Enable focus reporting. @public */\nexport const REPORT_FOCUS_ON = `${CSI}?1004h`\n\n/** Disable focus reporting. @public */\nexport const REPORT_FOCUS_OFF = `${CSI}?1004l`\n\n/** Focus gained sequence. @public */\nexport const FOCUS_IN = `${CSI}I`\n\n/** Focus lost sequence. @public */\nexport const FOCUS_OUT = `${CSI}O`\n\n// ============================================================================\n// Window Control\n// ============================================================================\n\n/**\n * Set the terminal window title.\n * @param title - Window title\n * @returns ANSI escape sequence\n * @public\n */\nexport function setWindowTitle(title: string): string {\n return `${OSC}0;${title}${BEL}`\n}\n\n// ============================================================================\n// Text Formatting (SGR - Select Graphic Rendition)\n// ============================================================================\n\n/** Reset all text attributes. @public */\nexport const RESET = `${CSI}0m`\n\n/** Bold text. @public */\nexport const BOLD = `${CSI}1m`\n\n/** Dim/faint text. @public */\nexport const DIM = `${CSI}2m`\n\n/** Italic text. @public */\nexport const ITALIC = `${CSI}3m`\n\n/** Underlined text. @public */\nexport const UNDERLINE = `${CSI}4m`\n\n/** Blinking text. @public */\nexport const BLINK = `${CSI}5m`\n\n/** Reverse video (swap foreground/background). @public */\nexport const REVERSE = `${CSI}7m`\n\n/** Hidden text. @public */\nexport const HIDDEN = `${CSI}8m`\n\n/** Strikethrough text. @public */\nexport const STRIKETHROUGH = `${CSI}9m`\n\n// ============================================================================\n// Color Utilities\n// ============================================================================\n\n/**\n * Set foreground color using 256-color palette.\n * @param colorIndex - Color index (0-255)\n * @returns ANSI escape sequence\n * @public\n */\nexport function fg256(colorIndex: number): string {\n return `${CSI}38;5;${colorIndex}m`\n}\n\n/**\n * Set background color using 256-color palette.\n * @param colorIndex - Color index (0-255)\n * @returns ANSI escape sequence\n * @public\n */\nexport function bg256(colorIndex: number): string {\n return `${CSI}48;5;${colorIndex}m`\n}\n\n/**\n * Set foreground color using RGB true color.\n * @param r - Red component (0-255)\n * @param g - Green component (0-255)\n * @param b - Blue component (0-255)\n * @returns ANSI escape sequence\n * @public\n */\nexport function fgRGB(r: number, g: number, b: number): string {\n return `${CSI}38;2;${r};${g};${b}m`\n}\n\n/**\n * Set background color using RGB true color.\n * @param r - Red component (0-255)\n * @param g - Green component (0-255)\n * @param b - Blue component (0-255)\n * @returns ANSI escape sequence\n * @public\n */\nexport function bgRGB(r: number, g: number, b: number): string {\n return `${CSI}48;2;${r};${g};${b}m`\n}\n\n// ============================================================================\n// Scrolling\n// ============================================================================\n\n/**\n * Scroll up by n lines.\n * @param n - Number of lines\n * @returns ANSI escape sequence\n * @public\n */\nexport function scrollUp(n: number = 1): string {\n return `${CSI}${n}S`\n}\n\n/**\n * Scroll down by n lines.\n * @param n - Number of lines\n * @returns ANSI escape sequence\n * @public\n */\nexport function scrollDown(n: number = 1): string {\n return `${CSI}${n}T`\n}\n\n/**\n * Set scrolling region.\n * @param top - Top row (1-based)\n * @param bottom - Bottom row (1-based)\n * @returns ANSI escape sequence\n * @public\n */\nexport function setScrollRegion(top: number, bottom: number): string {\n return `${CSI}${top};${bottom}r`\n}\n\n/** Reset scrolling region to full screen. @public */\nexport const RESET_SCROLL_REGION = `${CSI}r`\n","/**\n * Pure JavaScript ANSI styling utility for terminal text.\n * Works identically in Node.js and browser/xterm.js contexts.\n */\n\nimport type { ColorSupport, StyleFn } from '../types.js'\n\n// ANSI escape codes\nconst ESC = '\\x1b['\nconst RESET = `${ESC}0m`\n\n// Modifier codes\nconst CODES = {\n // Modifiers (open, close)\n bold: ['1', '22'],\n dim: ['2', '22'],\n italic: ['3', '23'],\n underline: ['4', '24'],\n inverse: ['7', '27'],\n hidden: ['8', '28'],\n strikethrough: ['9', '29'],\n\n // Basic foreground colors (30-37)\n black: ['30', '39'],\n red: ['31', '39'],\n green: ['32', '39'],\n yellow: ['33', '39'],\n blue: ['34', '39'],\n magenta: ['35', '39'],\n cyan: ['36', '39'],\n white: ['37', '39'],\n\n // Bright foreground colors (90-97)\n blackBright: ['90', '39'],\n redBright: ['91', '39'],\n greenBright: ['92', '39'],\n yellowBright: ['93', '39'],\n blueBright: ['94', '39'],\n magentaBright: ['95', '39'],\n cyanBright: ['96', '39'],\n whiteBright: ['97', '39'],\n\n // Basic background colors (40-47)\n bgBlack: ['40', '49'],\n bgRed: ['41', '49'],\n bgGreen: ['42', '49'],\n bgYellow: ['43', '49'],\n bgBlue: ['44', '49'],\n bgMagenta: ['45', '49'],\n bgCyan: ['46', '49'],\n bgWhite: ['47', '49'],\n\n // Bright background colors (100-107)\n bgBlackBright: ['100', '49'],\n bgRedBright: ['101', '49'],\n bgGreenBright: ['102', '49'],\n bgYellowBright: ['103', '49'],\n bgBlueBright: ['104', '49'],\n bgMagentaBright: ['105', '49'],\n bgCyanBright: ['106', '49'],\n bgWhiteBright: ['107', '49'],\n} as const\n\ntype CodeName = keyof typeof CODES\n\n/**\n * Apply ANSI codes to text.\n * @param text - Text to style\n * @param open - Opening ANSI code\n * @param close - Closing ANSI code\n * @returns Styled text\n */\nfunction applyStyle(text: string, open: string, close: string): string {\n const openSeq = `${ESC}${open}m`\n const closeSeq = `${ESC}${close}m`\n\n // Replace any existing close codes with close+open to properly nest styles\n // This handles cases like style.bold(style.bold('text')) where the inner\n // bold close would prematurely end the outer bold\n const replaced = text.replace(\n new RegExp(closeSeq.replace(/[[\\](){}|^$+*?.\\\\]/g, '\\\\$&'), 'g'),\n closeSeq + openSeq,\n )\n\n return openSeq + replaced + closeSeq\n}\n\n/**\n * Convert hex color to RGB.\n * @param hex - Hex color string (with or without #)\n * @returns RGB array [r, g, b]\n */\nfunction hexToRgb(hex: string): [number, number, number] {\n const clean = hex.replace(/^#/, '')\n const num = parseInt(clean, 16)\n\n if (clean.length === 3) {\n // Short form: #RGB -> #RRGGBB\n const r = ((num >> 8) & 0xf) * 17\n const g = ((num >> 4) & 0xf) * 17\n const b = (num & 0xf) * 17\n return [r, g, b]\n }\n\n // Long form: #RRGGBB\n const r = (num >> 16) & 0xff\n const g = (num >> 8) & 0xff\n const b = num & 0xff\n return [r, g, b]\n}\n\n/**\n * Create a chainable style function.\n * @param colorSupport - Color support level information\n * @returns Chainable style function\n * @public\n */\nexport function createStyle(colorSupport: ColorSupport): StyleFn {\n const enabled = colorSupport.level > 0\n\n /**\n * Build a style function that can be chained.\n * @param stack - Array of [open, close] code pairs to apply\n * @returns Style function\n */\n function build(stack: Array<[string, string]>): StyleFn {\n // The function itself - applies all stacked styles\n const fn = (text: string): string => {\n if (!enabled || stack.length === 0) {\n return text\n }\n\n // Apply styles from inside out\n let result = text\n for (let i = stack.length - 1; i >= 0; i--) {\n const [open, close] = stack[i]!\n result = applyStyle(result, open, close)\n }\n return result\n }\n\n // Add all code-based style properties\n const codeNames = Object.keys(CODES) as CodeName[]\n for (const name of codeNames) {\n const [open, close] = CODES[name]\n Object.defineProperty(fn, name, {\n get() {\n return build([...stack, [open, close]])\n },\n })\n }\n\n // Add gray as alias for blackBright\n Object.defineProperty(fn, 'gray', {\n get() {\n const [open, close] = CODES.blackBright\n return build([...stack, [open, close]])\n },\n })\n\n // Add grey as alias for blackBright\n Object.defineProperty(fn, 'grey', {\n get() {\n const [open, close] = CODES.blackBright\n return build([...stack, [open, close]])\n },\n })\n\n // Add extended color methods\n\n // hex(color: string): StyleFn\n Object.defineProperty(fn, 'hex', {\n value: (color: string): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n const [r, g, b] = hexToRgb(color)\n return build([...stack, [`38;2;${r};${g};${b}`, '39']])\n },\n writable: true,\n })\n\n // rgb(r: number, g: number, b: number): StyleFn\n Object.defineProperty(fn, 'rgb', {\n value: (r: number, g: number, b: number): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n return build([...stack, [`38;2;${r};${g};${b}`, '39']])\n },\n writable: true,\n })\n\n // bgHex(color: string): StyleFn\n Object.defineProperty(fn, 'bgHex', {\n value: (color: string): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n const [r, g, b] = hexToRgb(color)\n return build([...stack, [`48;2;${r};${g};${b}`, '49']])\n },\n writable: true,\n })\n\n // bgRgb(r: number, g: number, b: number): StyleFn\n Object.defineProperty(fn, 'bgRgb', {\n value: (r: number, g: number, b: number): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n return build([...stack, [`48;2;${r};${g};${b}`, '49']])\n },\n writable: true,\n })\n\n // ansi256(code: number): StyleFn\n Object.defineProperty(fn, 'ansi256', {\n value: (code: number): StyleFn => {\n if (!enabled || !colorSupport.has256) {\n return build(stack)\n }\n return build([...stack, [`38;5;${code}`, '39']])\n },\n writable: true,\n })\n\n // bgAnsi256(code: number): StyleFn\n Object.defineProperty(fn, 'bgAnsi256', {\n value: (code: number): StyleFn => {\n if (!enabled || !colorSupport.has256) {\n return build(stack)\n }\n return build([...stack, [`48;5;${code}`, '49']])\n },\n writable: true,\n })\n\n return fn as StyleFn\n }\n\n return build([])\n}\n\n/**\n * Create a style function that always applies colors (for xterm.js).\n * @returns Chainable style function with full color support\n * @public\n */\nexport function createAlwaysEnabledStyle(): StyleFn {\n return createStyle({ level: 3, hasBasic: true, has256: true, has16m: true })\n}\n","/**\n * Platform detection utilities.\n */\n\n/**\n * Checks if the current environment is Node.js.\n *\n * @remarks\n * Uses a runtime check that works without requiring `@types/node`.\n *\n * @returns `true` if running in Node.js, `false` otherwise\n * @public\n */\nexport function isNodeEnvironment(): boolean {\n const g = globalThis as Record<string, unknown>\n const proc = g['process'] as Record<string, unknown> | undefined\n return (\n !!proc &&\n typeof (proc['versions'] as Record<string, unknown> | undefined)?.[\n 'node'\n ] === 'string'\n )\n}\n\n/**\n * Checks if the current environment is a browser.\n *\n * @remarks\n * Uses a runtime check for the presence of `window` and `document` objects.\n *\n * @returns `true` if running in a browser, `false` otherwise\n * @public\n */\nexport function isBrowserEnvironment(): boolean {\n const g = globalThis as Record<string, unknown>\n return (\n typeof g['window'] !== 'undefined' &&\n typeof g['document'] !== 'undefined' &&\n !isNodeEnvironment()\n )\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { S as StyleFn
|
|
2
|
-
export { A as ArchiveAdapter,
|
|
1
|
+
import { S as StyleFn } from './types-l5LiTaxI.cjs';
|
|
2
|
+
export { A as ArchiveAdapter, C as ClipboardAdapter, D as DirectoryEntry, a as Disposable, F as FileStat, b as FileSystemAdapter, I as InputHandler, P as PathAdapter, c as PlatformAdapter, R as ResizeHandler, d as SignalAdapter, e as SignalHandler, f as StyleAdapter, T as TerminalAdapter, g as TerminalSize } from './types-l5LiTaxI.cjs';
|
|
3
|
+
import { ColorSupport } from '@boba-cli/core';
|
|
4
|
+
export { ColorSupport, EnvironmentAdapter, TerminalBackground } from '@boba-cli/core';
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* Platform-agnostic byte utilities using Uint8Array.
|
|
@@ -326,4 +328,28 @@ declare function createStyle(colorSupport: ColorSupport): StyleFn;
|
|
|
326
328
|
*/
|
|
327
329
|
declare function createAlwaysEnabledStyle(): StyleFn;
|
|
328
330
|
|
|
329
|
-
|
|
331
|
+
/**
|
|
332
|
+
* Platform detection utilities.
|
|
333
|
+
*/
|
|
334
|
+
/**
|
|
335
|
+
* Checks if the current environment is Node.js.
|
|
336
|
+
*
|
|
337
|
+
* @remarks
|
|
338
|
+
* Uses a runtime check that works without requiring `@types/node`.
|
|
339
|
+
*
|
|
340
|
+
* @returns `true` if running in Node.js, `false` otherwise
|
|
341
|
+
* @public
|
|
342
|
+
*/
|
|
343
|
+
declare function isNodeEnvironment(): boolean;
|
|
344
|
+
/**
|
|
345
|
+
* Checks if the current environment is a browser.
|
|
346
|
+
*
|
|
347
|
+
* @remarks
|
|
348
|
+
* Uses a runtime check for the presence of `window` and `document` objects.
|
|
349
|
+
*
|
|
350
|
+
* @returns `true` if running in a browser, `false` otherwise
|
|
351
|
+
* @public
|
|
352
|
+
*/
|
|
353
|
+
declare function isBrowserEnvironment(): boolean;
|
|
354
|
+
|
|
355
|
+
export { ALT_SCREEN_OFF, ALT_SCREEN_ON, BEL, BLINK, BOLD, BRACKETED_PASTE_END, BRACKETED_PASTE_OFF, BRACKETED_PASTE_ON, BRACKETED_PASTE_START, CLEAR_LINE, CLEAR_LINE_END, CLEAR_LINE_START, CLEAR_SCREEN, CLEAR_SCREEN_DOWN, CLEAR_SCREEN_UP, CSI, CURSOR_HIDE, CURSOR_HOME, CURSOR_RESTORE, CURSOR_SAVE, CURSOR_SHOW, DIM, ESC, FOCUS_IN, FOCUS_OUT, HIDDEN, ITALIC, MOUSE_ALL_OFF, MOUSE_ALL_ON, MOUSE_CELL_OFF, MOUSE_CELL_ON, MOUSE_SGR_OFF, MOUSE_SGR_ON, OSC, REPORT_FOCUS_OFF, REPORT_FOCUS_ON, RESET, RESET_SCROLL_REGION, REVERSE, ST, STRIKETHROUGH, StyleFn, UNDERLINE, allocBytes, bg256, bgRGB, byteLength, bytesEqual, concatBytes, copyBytes, createAlwaysEnabledStyle, createStyle, cursorBackward, cursorDown, cursorForward, cursorTo, cursorUp, decodeFirstRune, decodeString, encodeString, fg256, fgRGB, fromBytes, indexOfString, isBrowserEnvironment, isNodeEnvironment, scrollDown, scrollUp, setScrollRegion, setWindowTitle, sliceBytes, startsWith, startsWithString };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { S as StyleFn
|
|
2
|
-
export { A as ArchiveAdapter,
|
|
1
|
+
import { S as StyleFn } from './types-l5LiTaxI.js';
|
|
2
|
+
export { A as ArchiveAdapter, C as ClipboardAdapter, D as DirectoryEntry, a as Disposable, F as FileStat, b as FileSystemAdapter, I as InputHandler, P as PathAdapter, c as PlatformAdapter, R as ResizeHandler, d as SignalAdapter, e as SignalHandler, f as StyleAdapter, T as TerminalAdapter, g as TerminalSize } from './types-l5LiTaxI.js';
|
|
3
|
+
import { ColorSupport } from '@boba-cli/core';
|
|
4
|
+
export { ColorSupport, EnvironmentAdapter, TerminalBackground } from '@boba-cli/core';
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* Platform-agnostic byte utilities using Uint8Array.
|
|
@@ -326,4 +328,28 @@ declare function createStyle(colorSupport: ColorSupport): StyleFn;
|
|
|
326
328
|
*/
|
|
327
329
|
declare function createAlwaysEnabledStyle(): StyleFn;
|
|
328
330
|
|
|
329
|
-
|
|
331
|
+
/**
|
|
332
|
+
* Platform detection utilities.
|
|
333
|
+
*/
|
|
334
|
+
/**
|
|
335
|
+
* Checks if the current environment is Node.js.
|
|
336
|
+
*
|
|
337
|
+
* @remarks
|
|
338
|
+
* Uses a runtime check that works without requiring `@types/node`.
|
|
339
|
+
*
|
|
340
|
+
* @returns `true` if running in Node.js, `false` otherwise
|
|
341
|
+
* @public
|
|
342
|
+
*/
|
|
343
|
+
declare function isNodeEnvironment(): boolean;
|
|
344
|
+
/**
|
|
345
|
+
* Checks if the current environment is a browser.
|
|
346
|
+
*
|
|
347
|
+
* @remarks
|
|
348
|
+
* Uses a runtime check for the presence of `window` and `document` objects.
|
|
349
|
+
*
|
|
350
|
+
* @returns `true` if running in a browser, `false` otherwise
|
|
351
|
+
* @public
|
|
352
|
+
*/
|
|
353
|
+
declare function isBrowserEnvironment(): boolean;
|
|
354
|
+
|
|
355
|
+
export { ALT_SCREEN_OFF, ALT_SCREEN_ON, BEL, BLINK, BOLD, BRACKETED_PASTE_END, BRACKETED_PASTE_OFF, BRACKETED_PASTE_ON, BRACKETED_PASTE_START, CLEAR_LINE, CLEAR_LINE_END, CLEAR_LINE_START, CLEAR_SCREEN, CLEAR_SCREEN_DOWN, CLEAR_SCREEN_UP, CSI, CURSOR_HIDE, CURSOR_HOME, CURSOR_RESTORE, CURSOR_SAVE, CURSOR_SHOW, DIM, ESC, FOCUS_IN, FOCUS_OUT, HIDDEN, ITALIC, MOUSE_ALL_OFF, MOUSE_ALL_ON, MOUSE_CELL_OFF, MOUSE_CELL_ON, MOUSE_SGR_OFF, MOUSE_SGR_ON, OSC, REPORT_FOCUS_OFF, REPORT_FOCUS_ON, RESET, RESET_SCROLL_REGION, REVERSE, ST, STRIKETHROUGH, StyleFn, UNDERLINE, allocBytes, bg256, bgRGB, byteLength, bytesEqual, concatBytes, copyBytes, createAlwaysEnabledStyle, createStyle, cursorBackward, cursorDown, cursorForward, cursorTo, cursorUp, decodeFirstRune, decodeString, encodeString, fg256, fgRGB, fromBytes, indexOfString, isBrowserEnvironment, isNodeEnvironment, scrollDown, scrollUp, setScrollRegion, setWindowTitle, sliceBytes, startsWith, startsWithString };
|