kiro-kit 0.3.0 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +16398 -621
- package/dist/index.js.map +1 -1
- package/package.json +80 -65
- package/scripts/postinstall.js +90 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/commands/init.ts","../src/core/PresetLoader.ts","../src/core/ManifestParser.ts","../src/core/errors.ts","../src/core/ConflictResolver.ts","../src/core/BackupManager.ts","../src/core/TrackingStore.ts","../src/utils/logger.ts","../src/utils/color.ts","../src/core/MetadataWriter.ts","../src/core/StatuslineSelector.ts","../src/core/merge/mergeMCP.ts","../src/core/merge/mergeSettings.ts","../src/prompts/DiffViewer.ts","../src/utils/fs-safe.ts","../src/utils/paths.ts","../src/core/PowersLoader.ts","../src/core/MCPConfigurator.ts","../src/core/SetupGuideGenerator.ts","../src/core/EnvTemplateGenerator.ts","../src/prompts/PowersPrompter.ts","../src/commands/add.ts","../src/commands/list.ts","../src/commands/info.ts","../src/commands/update.ts","../src/commands/restore.ts","../src/commands/doctor.ts","../src/commands/telemetry.ts"],"sourcesContent":["#!/usr/bin/env node\r\n\r\nimport { createRequire } from 'node:module';\r\nimport process from 'node:process';\r\nimport { Command } from 'commander';\r\nimport { registerInitCommand } from './commands/init.js';\r\nimport { registerAddCommand } from './commands/add.js';\r\nimport { registerListCommand } from './commands/list.js';\r\nimport { registerInfoCommand } from './commands/info.js';\r\nimport { registerUpdateCommand } from './commands/update.js';\r\nimport { registerRestoreCommand } from './commands/restore.js';\r\nimport { registerDoctorCommand } from './commands/doctor.js';\r\nimport { registerTelemetryCommand } from './commands/telemetry.js';\r\nimport { setVerbose, setQuiet } from './utils/logger.js';\r\n\r\n// Node version check\r\nconst major = parseInt(process.versions.node.split('.')[0], 10);\r\nif (major < 18) {\r\n process.stderr.write(\r\n '[KK001] kiro-kit requires Node.js >= 18. ' +\r\n `Current version: ${process.version}. ` +\r\n 'Please upgrade Node.js.\\n',\r\n );\r\n process.exit(1);\r\n}\r\n\r\nconst require = createRequire(import.meta.url);\r\nconst pkg = require('../package.json') as { version: string };\r\n\r\nconst program = new Command();\r\n\r\nprogram\r\n .name('kiro-kit')\r\n .description('CLI tool for bootstrapping engineer-grade Kiro IDE workspaces.')\r\n .version(pkg.version, '-v, --version');\r\n\r\n// Global flags\r\nprogram.option('--verbose', 'Enable verbose output');\r\nprogram.option('--quiet', 'Suppress non-essential output');\r\nprogram.option('--no-color', 'Disable colored output');\r\n\r\n// Wire all commands\r\nregisterInitCommand(program);\r\nregisterAddCommand(program);\r\nregisterListCommand(program);\r\nregisterInfoCommand(program);\r\nregisterUpdateCommand(program);\r\nregisterRestoreCommand(program);\r\nregisterDoctorCommand(program);\r\nregisterTelemetryCommand(program);\r\n\r\n// Apply global flags before command execution\r\nprogram.hook('preAction', (thisCommand) => {\r\n const opts = thisCommand.opts();\r\n if (opts['verbose']) setVerbose(true);\r\n if (opts['quiet']) setQuiet(true);\r\n});\r\n\r\nprogram.parse(process.argv);\r\n","import { Command } from 'commander';\r\nimport fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport process from 'node:process';\r\nimport readline from 'node:readline';\r\nimport crypto from 'node:crypto';\r\n\r\nimport { load, loadAll, listAvailable } from '../core/PresetLoader.js';\r\nimport { resolve as resolveConflict, type ConflictMode, type SessionState } from '../core/ConflictResolver.js';\r\nimport { backup } from '../core/BackupManager.js';\r\nimport * as TrackingStore from '../core/TrackingStore.js';\r\nimport * as MetadataWriter from '../core/MetadataWriter.js';\r\nimport * as StatuslineSelector from '../core/StatuslineSelector.js';\r\nimport { mergeMCP, type MCPConfig } from '../core/merge/mergeMCP.js';\r\nimport { mergeSettings, type SettingsConfig } from '../core/merge/mergeSettings.js';\r\nimport { showDiff } from '../prompts/DiffViewer.js';\r\nimport { atomicWrite } from '../utils/fs-safe.js';\r\nimport { logger } from '../utils/logger.js';\r\nimport { color } from '../utils/color.js';\r\nimport { safePathInside } from '../utils/paths.js';\r\n\r\n// Powers integration modules\r\nimport { loadPowers, mergePowers, filterByTier } from '../core/PowersLoader.js';\r\nimport { getMCPConfig, mergeMCPConfig, writeMCPConfig } from '../core/MCPConfigurator.js';\r\nimport { generateSetupGuide, writeSetupGuide } from '../core/SetupGuideGenerator.js';\r\nimport { collectEnvVars, generateEnvTemplate, readExistingEnv, writeEnvTemplate } from '../core/EnvTemplateGenerator.js';\r\nimport { promptPowersTier, displayPowersRecommendations } from '../prompts/PowersPrompter.js';\r\n\r\ninterface InitOptions {\r\n yes?: boolean;\r\n preset?: string[];\r\n force?: boolean;\r\n skipExisting?: boolean;\r\n color?: boolean;\r\n powers?: string;\r\n quiet?: boolean;\r\n}\r\n\r\n// Handle SIGINT at process level for exit 130\r\nfunction setupSigintHandler(): void {\r\n process.on('SIGINT', () => {\r\n process.exit(130);\r\n });\r\n}\r\n\r\n/**\r\n * Interactive multi-pick prompt using readline.\r\n * Space to toggle, 'a' to toggle all, Enter to confirm.\r\n */\r\nasync function multiPickPrompt(\r\n items: Array<{ name: string; description: string }>,\r\n): Promise<string[]> {\r\n const selected = new Set<number>();\r\n let cursor = 0;\r\n\r\n const rl = readline.createInterface({\r\n input: process.stdin,\r\n output: process.stdout,\r\n terminal: false,\r\n });\r\n\r\n // Enable raw mode for keypress detection\r\n if (!process.stdin.isTTY) {\r\n // Non-interactive: return empty\r\n rl.close();\r\n return [];\r\n }\r\n\r\n return new Promise<string[]>((resolve, reject) => {\r\n let rendered = false;\r\n\r\n const render = (): void => {\r\n if (rendered) {\r\n // Restore saved cursor position (top of our render area)\r\n process.stdout.write('\\x1B[u');\r\n } else {\r\n // Save cursor position before first render\r\n process.stdout.write('\\x1B[s');\r\n }\r\n rendered = true;\r\n // Clear from cursor to end of screen — wipes all previous render\r\n process.stdout.write('\\x1B[J');\r\n // Write header\r\n process.stdout.write(\r\n color.bold('? Select presets to install:') +\r\n color.dim(' (Space to select, <a> toggle all, Enter to confirm)') +\r\n '\\n',\r\n );\r\n for (let i = 0; i < items.length; i++) {\r\n const marker = cursor === i ? color.cyan('>') : ' ';\r\n const check = selected.has(i)\r\n ? color.green('[x]')\r\n : '[ ]';\r\n const name = color.bold(items[i].name.padEnd(12));\r\n const desc = color.dim(`- ${items[i].description}`);\r\n process.stdout.write(` ${marker} ${check} ${name} ${desc}\\n`);\r\n }\r\n };\r\n\r\n render();\r\n\r\n process.stdin.setRawMode(true);\r\n process.stdin.resume();\r\n process.stdin.setEncoding('utf-8');\r\n\r\n let escBuffer = '';\r\n\r\n const handleArrow = (seq: string): boolean => {\r\n if (seq === '\\x1B[A' || seq === '\\x1BOA') {\r\n cursor = (cursor - 1 + items.length) % items.length;\r\n render();\r\n return true;\r\n }\r\n if (seq === '\\x1B[B' || seq === '\\x1BOB') {\r\n cursor = (cursor + 1) % items.length;\r\n render();\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n const onData = (key: string): void => {\r\n // Case 1: continuing a buffered escape sequence (split across chunks)\r\n if (escBuffer.length > 0) {\r\n escBuffer += key;\r\n if (escBuffer.length >= 3) {\r\n const seq = escBuffer;\r\n escBuffer = '';\r\n handleArrow(seq);\r\n }\r\n return;\r\n }\r\n\r\n // Case 2: full escape sequence arrived in one chunk (common on Windows)\r\n if (key.length >= 3 && key.startsWith('\\x1B')) {\r\n handleArrow(key);\r\n return;\r\n }\r\n\r\n // Case 3: start of escape sequence (single ESC byte, more coming)\r\n if (key === '\\x1B') {\r\n escBuffer = key;\r\n // Timeout: if no more bytes arrive within 50ms, discard (bare ESC key)\r\n setTimeout(() => {\r\n if (escBuffer.length > 0) {\r\n escBuffer = '';\r\n }\r\n }, 50);\r\n return;\r\n }\r\n\r\n // Ctrl+C / SIGINT\r\n if (key === '\\x03') {\r\n process.stdin.setRawMode(false);\r\n process.stdin.removeListener('data', onData);\r\n process.stdin.pause();\r\n rl.close();\r\n reject(new Error('SIGINT'));\r\n return;\r\n }\r\n\r\n // Enter\r\n if (key === '\\r' || key === '\\n') {\r\n process.stdin.setRawMode(false);\r\n process.stdin.removeListener('data', onData);\r\n process.stdin.pause();\r\n rl.close();\r\n const result = [...selected].map((i) => items[i].name);\r\n resolve(result);\r\n return;\r\n }\r\n\r\n // Space - toggle current\r\n if (key === ' ') {\r\n if (selected.has(cursor)) {\r\n selected.delete(cursor);\r\n } else {\r\n selected.add(cursor);\r\n }\r\n render();\r\n return;\r\n }\r\n\r\n // 'a' - toggle all\r\n if (key === 'a' || key === 'A') {\r\n if (selected.size === items.length) {\r\n selected.clear();\r\n } else {\r\n for (let i = 0; i < items.length; i++) selected.add(i);\r\n }\r\n render();\r\n return;\r\n }\r\n\r\n // Arrow up / k\r\n if (key === 'k') {\r\n cursor = (cursor - 1 + items.length) % items.length;\r\n render();\r\n return;\r\n }\r\n\r\n // Arrow down / j\r\n if (key === 'j') {\r\n cursor = (cursor + 1) % items.length;\r\n render();\r\n return;\r\n }\r\n };\r\n\r\n process.stdin.on('data', onData);\r\n });\r\n}\r\n\r\n/**\r\n * Confirmation prompt: \"About to write X files. Continue? (Y/n)\"\r\n */\r\nasync function confirmPrompt(message: string): Promise<boolean> {\r\n if (!process.stdin.isTTY) return true;\r\n\r\n return new Promise((resolve, reject) => {\r\n const rl = readline.createInterface({\r\n input: process.stdin,\r\n output: process.stdout,\r\n });\r\n\r\n rl.question(`${color.bold('?')} ${message} `, (answer) => {\r\n rl.close();\r\n const normalized = answer.trim().toLowerCase();\r\n resolve(normalized === '' || normalized === 'y' || normalized === 'yes');\r\n });\r\n\r\n rl.on('SIGINT', () => {\r\n rl.close();\r\n reject(new Error('SIGINT'));\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Interactive 4-option conflict prompt.\r\n */\r\nasync function conflictPrompt(\r\n target: string,\r\n): Promise<'overwrite' | 'skip' | 'view-diff' | 'overwrite-all'> {\r\n if (!process.stdin.isTTY) return 'skip';\r\n\r\n const relTarget = path.relative(process.cwd(), target);\r\n process.stdout.write(\r\n `\\n${color.yellow('?')} File ${color.bold(relTarget)} already exists with different content.\\n` +\r\n ` ${color.cyan('>')} overwrite - Replace existing file (backup will be saved)\\n` +\r\n ` skip - Keep existing file\\n` +\r\n ` view diff - Show unified diff and ask again\\n` +\r\n ` overwrite all - Replace this and all remaining conflicting files\\n`,\r\n );\r\n\r\n return new Promise((resolve, reject) => {\r\n const rl = readline.createInterface({\r\n input: process.stdin,\r\n output: process.stdout,\r\n });\r\n\r\n rl.question(` Choice (overwrite/skip/diff/all): `, (answer) => {\r\n rl.close();\r\n const a = answer.trim().toLowerCase();\r\n if (a === 'o' || a === 'overwrite') resolve('overwrite');\r\n else if (a === 's' || a === 'skip') resolve('skip');\r\n else if (a === 'd' || a === 'diff' || a === 'view diff') resolve('view-diff');\r\n else if (a === 'a' || a === 'all' || a === 'overwrite all') resolve('overwrite-all');\r\n else resolve('skip'); // default to skip on unrecognized input\r\n });\r\n\r\n rl.on('SIGINT', () => {\r\n rl.close();\r\n reject(new Error('SIGINT'));\r\n });\r\n });\r\n}\r\n\r\nfunction sha256(data: Buffer): string {\r\n return crypto.createHash('sha256').update(data).digest('hex');\r\n}\r\n\r\n/**\r\n * Register the init command on the given program.\r\n */\r\nexport function registerInitCommand(program: Command): void {\r\n program\r\n .command('init')\r\n .description('Initialize workspace with selected presets')\r\n .option('-y, --yes', 'Skip confirmation, accept defaults')\r\n .option('--preset <name>', 'Specify preset (repeatable)', collectPreset, [])\r\n .option('--force', 'Overwrite all files (with backup)')\r\n .option('--skip-existing', 'Skip all existing files')\r\n .option('--no-color', 'Disable ANSI colors')\r\n .option('--powers <mode>', 'Powers setup mode: none, all, or interactive (default)', 'interactive')\r\n .option('--quiet', 'Suppress non-essential output including Powers recommendations')\r\n .action(async (opts: InitOptions) => {\r\n setupSigintHandler();\r\n try {\r\n await runInit(opts);\r\n } catch (err: unknown) {\r\n if (err instanceof Error && err.message === 'SIGINT') {\r\n process.exit(130);\r\n }\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n\r\nfunction collectPreset(value: string, previous: string[]): string[] {\r\n return [...previous, value];\r\n}\r\n\r\nasync function runInit(opts: InitOptions): Promise<void> {\r\n const workspaceRoot = process.cwd();\r\n const available = listAvailable();\r\n\r\n // 1. Determine selected presets\r\n let selectedNames: string[];\r\n\r\n if (opts.preset && opts.preset.length > 0) {\r\n // Validate preset names\r\n for (const name of opts.preset) {\r\n if (!available.includes(name)) {\r\n logger.error(\r\n `Preset \"${name}\" not found. Available: ${available.join(', ')}`,\r\n );\r\n process.exit(1);\r\n }\r\n }\r\n selectedNames = opts.preset;\r\n } else {\r\n // Interactive multi-pick\r\n const items = available.map((name) => {\r\n try {\r\n const preset = load(name);\r\n return { name, description: preset.manifest.description };\r\n } catch {\r\n return { name, description: '' };\r\n }\r\n });\r\n\r\n selectedNames = await multiPickPrompt(items);\r\n }\r\n\r\n // Empty selection -> exit 0\r\n if (selectedNames.length === 0) {\r\n logger.info('No presets selected. Exiting.');\r\n process.exit(0);\r\n }\r\n\r\n // 2. Load selected presets\r\n const presets = loadAll(selectedNames);\r\n\r\n // 3. Plan operations - count total files\r\n let totalFiles = 0;\r\n for (const preset of presets) {\r\n totalFiles += preset.manifest.files.length;\r\n }\r\n\r\n // 4. Show summary and ask for confirmation\r\n if (!opts.yes) {\r\n const confirmed = await confirmPrompt(\r\n `About to write ${totalFiles} files into .kiro/ and workspace. Continue? (Y/n)`,\r\n );\r\n if (!confirmed) {\r\n logger.info('Cancelled.');\r\n process.exit(0);\r\n }\r\n }\r\n\r\n // 5. Determine conflict mode\r\n let mode: ConflictMode = 'interactive';\r\n if (opts.force) mode = 'force';\r\n else if (opts.skipExisting) mode = 'skip-existing';\r\n else if (opts.yes) mode = 'skip-existing';\r\n\r\n const sessionState: SessionState = { overwriteAll: false };\r\n const timestamp = generateTimestamp();\r\n\r\n // Track written files for tracking store\r\n const allTrackedFiles: TrackingStore.TrackedFile[] = [];\r\n let filesWritten = 0;\r\n let filesSkipped = 0;\r\n\r\n // 6. Process each preset\r\n for (const preset of presets) {\r\n const { manifest, dir: presetDir } = preset;\r\n\r\n // Separate files by type for special handling\r\n const regularFiles = manifest.files.filter(\r\n (f) => !['mcp', 'settings', 'statusline'].includes(f.type),\r\n );\r\n const mcpFiles = manifest.files.filter((f) => f.type === 'mcp');\r\n const settingsFiles = manifest.files.filter((f) => f.type === 'settings');\r\n const statuslineFiles = manifest.files.filter((f) => f.type === 'statusline');\r\n\r\n // Process regular files\r\n for (const fileEntry of regularFiles) {\r\n const sourcePath = path.join(presetDir, fileEntry.source);\r\n const targetPath = path.resolve(workspaceRoot, fileEntry.target);\r\n\r\n // Safety check\r\n if (!safePathInside(workspaceRoot, fileEntry.target)) {\r\n logger.warn(`Skipping unsafe path: ${fileEntry.target}`);\r\n filesSkipped++;\r\n continue;\r\n }\r\n\r\n if (!fs.existsSync(sourcePath)) {\r\n logger.debug(`Source file missing: ${sourcePath}`);\r\n continue;\r\n }\r\n\r\n const sourceContent = fs.readFileSync(sourcePath);\r\n\r\n const action = await resolveConflict({\r\n target: targetPath,\r\n sourceContent,\r\n mode,\r\n sessionState,\r\n prompt: conflictPrompt,\r\n showDiff: (t, s) => showDiff(t, s),\r\n });\r\n\r\n switch (action) {\r\n case 'WRITE_NEW':\r\n fs.mkdirSync(path.dirname(targetPath), { recursive: true });\r\n atomicWrite(targetPath, sourceContent.toString('utf-8'));\r\n // Set executable bit if needed\r\n if (fileEntry.executable && process.platform !== 'win32') {\r\n try { fs.chmodSync(targetPath, 0o755); } catch { /* non-critical */ }\r\n }\r\n filesWritten++;\r\n break;\r\n case 'OVERWRITE_WITH_BACKUP':\r\n backup(workspaceRoot, targetPath, timestamp);\r\n atomicWrite(targetPath, sourceContent.toString('utf-8'));\r\n if (fileEntry.executable && process.platform !== 'win32') {\r\n try { fs.chmodSync(targetPath, 0o755); } catch { /* non-critical */ }\r\n }\r\n filesWritten++;\r\n break;\r\n case 'SKIP':\r\n filesSkipped++;\r\n break;\r\n case 'NO_OP':\r\n // File already identical\r\n break;\r\n }\r\n\r\n // Track the file regardless of action (for tracking store)\r\n if (action !== 'SKIP') {\r\n allTrackedFiles.push({\r\n target: fileEntry.target,\r\n sourcePreset: manifest.name,\r\n contentHash: sha256(sourceContent),\r\n installedAt: new Date().toISOString(),\r\n });\r\n }\r\n }\r\n\r\n // Process statusline files via StatuslineSelector\r\n if (statuslineFiles.length > 0) {\r\n const installed = StatuslineSelector.install(presetDir, workspaceRoot);\r\n filesWritten += installed.length;\r\n for (const f of installed) {\r\n allTrackedFiles.push({\r\n target: f,\r\n sourcePreset: manifest.name,\r\n contentHash: '',\r\n installedAt: new Date().toISOString(),\r\n });\r\n }\r\n }\r\n\r\n // Process MCP merge\r\n if (mcpFiles.length > 0 && manifest.mcpServers) {\r\n const mcpPath = path.join(workspaceRoot, '.kiro/settings/mcp.json');\r\n let existingMcp: MCPConfig | null = null;\r\n if (fs.existsSync(mcpPath)) {\r\n try {\r\n existingMcp = JSON.parse(fs.readFileSync(mcpPath, 'utf-8')) as MCPConfig;\r\n } catch {\r\n existingMcp = null;\r\n }\r\n }\r\n const merged = mergeMCP(existingMcp, manifest.mcpServers, manifest.name);\r\n fs.mkdirSync(path.dirname(mcpPath), { recursive: true });\r\n atomicWrite(mcpPath, JSON.stringify(merged, null, 2) + '\\n');\r\n filesWritten++;\r\n }\r\n\r\n // Process settings merge\r\n if (settingsFiles.length > 0) {\r\n const settingsPath = path.join(workspaceRoot, '.kiro/settings.json');\r\n let existingSettings: SettingsConfig | null = null;\r\n if (fs.existsSync(settingsPath)) {\r\n try {\r\n existingSettings = JSON.parse(\r\n fs.readFileSync(settingsPath, 'utf-8'),\r\n ) as SettingsConfig;\r\n } catch {\r\n existingSettings = null;\r\n }\r\n }\r\n\r\n // Read preset settings\r\n const presetSettingsPath = path.join(presetDir, 'settings.json');\r\n if (fs.existsSync(presetSettingsPath)) {\r\n const presetSettings = JSON.parse(\r\n fs.readFileSync(presetSettingsPath, 'utf-8'),\r\n ) as SettingsConfig;\r\n\r\n // Resolve statusline command per platform\r\n const resolvedSettings = StatuslineSelector.resolveSettingsCommand(\r\n presetSettings as Record<string, unknown>,\r\n ) as SettingsConfig;\r\n\r\n const merged = mergeSettings(existingSettings, resolvedSettings);\r\n fs.mkdirSync(path.dirname(settingsPath), { recursive: true });\r\n atomicWrite(settingsPath, JSON.stringify(merged, null, 2) + '\\n');\r\n filesWritten++;\r\n }\r\n }\r\n\r\n // Also write .mcp.json.example if present in preset (as regular file)\r\n const mcpExampleSource = path.join(presetDir, '.mcp.json.example');\r\n if (fs.existsSync(mcpExampleSource)) {\r\n const mcpExampleTarget = path.join(workspaceRoot, '.kiro/.mcp.json.example');\r\n if (!fs.existsSync(mcpExampleTarget)) {\r\n fs.mkdirSync(path.dirname(mcpExampleTarget), { recursive: true });\r\n fs.copyFileSync(mcpExampleSource, mcpExampleTarget);\r\n }\r\n }\r\n }\r\n\r\n // -----------------------------------------------------------------------\r\n // 6a. Powers Loading\r\n // -----------------------------------------------------------------------\r\n try {\r\n if (opts.powers !== 'none') {\r\n const allPowerEntries = presets.map((p) => {\r\n const result = loadPowers(p.dir);\r\n if (!result.ok) {\r\n logger.warn(`Powers: ${result.error}`);\r\n }\r\n return result.powers;\r\n });\r\n\r\n const mergedPowers = mergePowers(allPowerEntries);\r\n\r\n if (mergedPowers.length > 0) {\r\n // 6b. Powers tier selection\r\n const promptResult = await promptPowersTier(mergedPowers, {\r\n powersFlag: opts.powers,\r\n yes: opts.yes,\r\n });\r\n\r\n const filteredPowers = promptResult.selectedTiers.length > 0\r\n ? filterByTier(mergedPowers, promptResult.selectedTiers)\r\n : [];\r\n\r\n // 6c. MCP auto-configuration\r\n if (promptResult.confirmMCP) {\r\n try {\r\n const presetMCPConfigs = presets.map((p) => getMCPConfig(p.manifest.name));\r\n // Merge all preset MCP configs into one\r\n let combinedMCP: Record<string, unknown> | null = null;\r\n const mcpJsonPath = path.join(workspaceRoot, '.mcp.json');\r\n if (fs.existsSync(mcpJsonPath)) {\r\n try {\r\n combinedMCP = JSON.parse(fs.readFileSync(mcpJsonPath, 'utf-8')) as Record<string, unknown>;\r\n } catch {\r\n logger.warn('Existing .mcp.json is invalid JSON, will create fresh.');\r\n combinedMCP = null;\r\n }\r\n }\r\n\r\n for (const mcpConfig of presetMCPConfigs) {\r\n combinedMCP = mergeMCPConfig(combinedMCP, mcpConfig);\r\n }\r\n\r\n // Prompt user to confirm MCP server installation (skip if --yes)\r\n let confirmWrite = true;\r\n if (!opts.yes) {\r\n confirmWrite = await confirmPrompt(\r\n 'Configure MCP servers in .mcp.json? (Y/n)',\r\n );\r\n }\r\n\r\n if (confirmWrite && combinedMCP) {\r\n writeMCPConfig(workspaceRoot, combinedMCP);\r\n if (!opts.quiet) {\r\n logger.info('MCP servers configured in .mcp.json');\r\n }\r\n }\r\n } catch (err) {\r\n logger.warn(`MCP configuration failed: ${err instanceof Error ? err.message : String(err)}`);\r\n }\r\n }\r\n\r\n // 6d. Display Powers recommendations and generate setup guide\r\n displayPowersRecommendations(filteredPowers, opts.quiet ?? false);\r\n\r\n try {\r\n const mcpServersForGuide = presets.reduce(\r\n (acc, p) => ({ ...acc, ...getMCPConfig(p.manifest.name).servers }),\r\n {} as Record<string, import('../core/MCPConfigurator.js').MCPServerEntry>,\r\n );\r\n\r\n const guideContent = generateSetupGuide({\r\n powers: filteredPowers,\r\n presetNames: selectedNames,\r\n mcpServers: mcpServersForGuide,\r\n });\r\n writeSetupGuide(workspaceRoot, guideContent);\r\n if (!opts.quiet) {\r\n logger.info('Setup guide written to .kiro/POWERS-SETUP.md');\r\n }\r\n } catch (err) {\r\n logger.warn(`Setup guide generation failed: ${err instanceof Error ? err.message : String(err)}`);\r\n }\r\n\r\n // 6e. Generate/update .env.example\r\n try {\r\n const mcpConfigForEnv = presets.reduce(\r\n (acc, p) => {\r\n const cfg = getMCPConfig(p.manifest.name);\r\n return { servers: { ...acc.servers, ...cfg.servers } };\r\n },\r\n { servers: {} } as import('../core/MCPConfigurator.js').MCPPresetConfig,\r\n );\r\n\r\n const envVars = collectEnvVars(mcpConfigForEnv, filteredPowers);\r\n if (envVars.length > 0) {\r\n const existingEnv = readExistingEnv(workspaceRoot);\r\n const envContent = generateEnvTemplate(existingEnv, envVars);\r\n if (envContent.trim().length > 0) {\r\n writeEnvTemplate(workspaceRoot, envContent);\r\n if (!opts.quiet) {\r\n logger.info('Environment template updated in .env.example');\r\n }\r\n }\r\n }\r\n } catch (err) {\r\n logger.warn(`Env template generation failed: ${err instanceof Error ? err.message : String(err)}`);\r\n }\r\n }\r\n }\r\n } catch (err) {\r\n // Powers integration is non-blocking — log warning and continue\r\n logger.warn(`Powers integration failed: ${err instanceof Error ? err.message : String(err)}`);\r\n }\r\n\r\n // 7. Write metadata.json\r\n const kitVersion = getKitVersion();\r\n const presetMetas = presets.map((p) => ({\r\n name: p.manifest.name,\r\n version: p.manifest.version,\r\n }));\r\n\r\n const existingMeta = MetadataWriter.read(workspaceRoot);\r\n const metadata = existingMeta\r\n ? MetadataWriter.mergePresets(existingMeta, presetMetas)\r\n : MetadataWriter.compose({\r\n kitVersion,\r\n repository: 'https://github.com/ihatesea69/kiro-kit.git',\r\n presets: presetMetas,\r\n });\r\n\r\n MetadataWriter.write(workspaceRoot, metadata);\r\n\r\n // 8. Write tracking file LAST\r\n let trackingData = TrackingStore.read(workspaceRoot) ?? TrackingStore.createInitial(kitVersion);\r\n\r\n for (const preset of presets) {\r\n const presetFiles = allTrackedFiles.filter(\r\n (f) => f.sourcePreset === preset.manifest.name,\r\n );\r\n const trackedPreset: TrackingStore.TrackedPreset = {\r\n name: preset.manifest.name,\r\n version: preset.manifest.version,\r\n installedAt: new Date().toISOString(),\r\n files: presetFiles,\r\n };\r\n trackingData = TrackingStore.upsertPreset(trackingData, trackedPreset);\r\n }\r\n\r\n trackingData.kitVersion = kitVersion;\r\n TrackingStore.write(workspaceRoot, trackingData);\r\n\r\n // 9. Print summary\r\n logger.success(\r\n `Done! ${filesWritten} files written, ${filesSkipped} skipped.`,\r\n );\r\n logger.info(\r\n `Presets installed: ${selectedNames.join(', ')}`,\r\n );\r\n}\r\n\r\nfunction generateTimestamp(): string {\r\n const now = new Date();\r\n const y = now.getFullYear();\r\n const mo = String(now.getMonth() + 1).padStart(2, '0');\r\n const d = String(now.getDate()).padStart(2, '0');\r\n const h = String(now.getHours()).padStart(2, '0');\r\n const mi = String(now.getMinutes()).padStart(2, '0');\r\n const s = String(now.getSeconds()).padStart(2, '0');\r\n const ms = String(now.getMilliseconds()).padStart(3, '0');\r\n return `${y}${mo}${d}-${h}${mi}${s}-${ms}`;\r\n}\r\n\r\nfunction getKitVersion(): string {\r\n try {\r\n const pkgPath = new URL('../package.json', import.meta.url);\r\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')) as { version: string };\r\n return pkg.version;\r\n } catch {\r\n return '0.1.0';\r\n }\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport { fileURLToPath } from 'node:url';\r\nimport { parse, validate, type Manifest } from './ManifestParser.js';\r\nimport { KKError, ErrorCodes } from './errors.js';\r\n\r\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\r\n\r\nfunction getPresetsDir(): string {\r\n // Try a couple of candidate locations so the loader works whether the\r\n // bundle places presets next to index.js or one level up.\r\n const candidates = [\r\n path.resolve(__dirname, 'presets'), // dist/presets (current bundle)\r\n path.resolve(__dirname, '../presets'), // legacy layout\r\n path.resolve(__dirname, '../../../../presets'), // dev/source checkout\r\n ];\r\n for (const candidate of candidates) {\r\n if (fs.existsSync(candidate)) return candidate;\r\n }\r\n throw new KKError(\r\n ErrorCodes.PRESET_NOT_FOUND,\r\n 'Cannot locate presets directory.',\r\n 'Ensure kiro-kit is installed correctly.',\r\n );\r\n}\r\n\r\nexport interface LoadedPreset {\r\n manifest: Manifest;\r\n dir: string;\r\n}\r\n\r\n/**\r\n * Load a single preset by name.\r\n */\r\nexport function load(name: string): LoadedPreset {\r\n const presetsDir = getPresetsDir();\r\n const presetDir = path.join(presetsDir, name);\r\n\r\n if (!fs.existsSync(presetDir)) {\r\n throw new KKError(\r\n ErrorCodes.PRESET_NOT_FOUND,\r\n `Preset \"${name}\" not found.`,\r\n `Available presets: ${listAvailable().join(', ')}`,\r\n );\r\n }\r\n\r\n const manifestPath = path.join(presetDir, 'manifest.json');\r\n if (!fs.existsSync(manifestPath)) {\r\n throw new KKError(\r\n ErrorCodes.PRESET_LOAD_FAILED,\r\n `Preset \"${name}\" is missing manifest.json.`,\r\n );\r\n }\r\n\r\n const raw = fs.readFileSync(manifestPath, 'utf-8');\r\n const result = parse(raw);\r\n\r\n if (!result.ok) {\r\n throw new KKError(\r\n ErrorCodes.PRESET_LOAD_FAILED,\r\n `Preset \"${name}\" manifest parse error: ${result.error.message}`,\r\n );\r\n }\r\n\r\n return { manifest: result.value, dir: presetDir };\r\n}\r\n\r\n/**\r\n * Load multiple presets by name.\r\n */\r\nexport function loadAll(names: string[]): LoadedPreset[] {\r\n return names.map((n) => load(n));\r\n}\r\n\r\n/**\r\n * List all available preset names from the presets directory.\r\n */\r\nexport function listAvailable(): string[] {\r\n const presetsDir = getPresetsDir();\r\n try {\r\n return fs\r\n .readdirSync(presetsDir, { withFileTypes: true })\r\n .filter((d) => d.isDirectory())\r\n .filter((d) => !d.name.startsWith('_'))\r\n .filter((d) =>\r\n fs.existsSync(path.join(presetsDir, d.name, 'manifest.json')),\r\n )\r\n .map((d) => d.name);\r\n } catch {\r\n return [];\r\n }\r\n}\r\n","import { z } from 'zod';\r\nimport fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport { KKError, ErrorCodes } from './errors.js';\r\n\r\nconst ArtifactTypeSchema = z.enum([\r\n 'steering', 'hook', 'mcp', 'skill', 'agent',\r\n 'command', 'workflow', 'statusline', 'metadata',\r\n 'settings', 'env', 'spec', 'docs', 'doc', 'config', 'other',\r\n 'powers',\r\n]);\r\n\r\nconst PresetNameSchema = z.enum([\r\n 'frontend', 'backend', 'fullstack', 'mobile', 'devops', 'data-ai',\r\n]);\r\n\r\nconst FileEntrySchema = z.object({\r\n source: z.string().min(1),\r\n target: z.string().min(1),\r\n type: ArtifactTypeSchema,\r\n executable: z.boolean().optional(),\r\n});\r\n\r\nconst MCPServerDefSchema = z.object({\r\n command: z.string().min(1),\r\n args: z.array(z.string()).optional(),\r\n env: z.record(z.string()).optional(),\r\n});\r\n\r\nconst HookEntrySchema = z.union([\r\n z.object({\r\n matcher: z.string().optional(),\r\n command: z.string().min(1),\r\n }),\r\n z.string().min(1),\r\n]);\r\n\r\nconst ManifestSchema = z.object({\r\n name: z.string().min(1),\r\n version: z.string().min(1),\r\n description: z.string().min(1),\r\n category: PresetNameSchema,\r\n files: z.array(FileEntrySchema).min(1),\r\n dependencies: z.array(PresetNameSchema).optional(),\r\n mcpServers: z.record(MCPServerDefSchema).optional(),\r\n hooks: z.object({\r\n PreToolUse: z.array(HookEntrySchema).optional(),\r\n PostToolUse: z.array(HookEntrySchema).optional(),\r\n agentStop: z.array(HookEntrySchema).optional(),\r\n fileEdited: z.array(HookEntrySchema).optional(),\r\n }).optional(),\r\n tags: z.array(z.string()).optional(),\r\n minCounts: z.object({\r\n agents: z.number().int().nonnegative().optional(),\r\n skills: z.number().int().nonnegative().optional(),\r\n commands: z.number().int().nonnegative().optional(),\r\n hooks: z.number().int().nonnegative().optional(),\r\n workflows: z.number().int().nonnegative().optional(),\r\n }).optional(),\r\n});\r\n\r\nexport type Manifest = z.infer<typeof ManifestSchema>;\r\nexport type FileEntry = z.infer<typeof FileEntrySchema>;\r\nexport type ArtifactType = z.infer<typeof ArtifactTypeSchema>;\r\n\r\nexport interface ManifestError {\r\n code: string;\r\n message: string;\r\n}\r\n\r\nexport type Result<T, E> =\r\n | { ok: true; value: T }\r\n | { ok: false; error: E };\r\n\r\n/**\r\n * Parse raw JSON string into a validated Manifest.\r\n */\r\nexport function parse(json: string): Result<Manifest, ManifestError> {\r\n let raw: unknown;\r\n try {\r\n raw = JSON.parse(json);\r\n } catch {\r\n return {\r\n ok: false,\r\n error: {\r\n code: ErrorCodes.MANIFEST_INVALID,\r\n message: 'Manifest is not valid JSON.',\r\n },\r\n };\r\n }\r\n\r\n const result = ManifestSchema.safeParse(raw);\r\n if (!result.success) {\r\n const issues = result.error.issues\r\n .map((i) => `${i.path.join('.')}: ${i.message}`)\r\n .join('; ');\r\n return {\r\n ok: false,\r\n error: {\r\n code: ErrorCodes.MANIFEST_MISSING_FIELD,\r\n message: `Manifest schema validation failed: ${issues}`,\r\n },\r\n };\r\n }\r\n\r\n return { ok: true, value: result.data };\r\n}\r\n\r\n/**\r\n * Pretty-print a Manifest object as JSON (2-space indent).\r\n */\r\nexport function print(m: Manifest): string {\r\n return JSON.stringify(m, null, 2);\r\n}\r\n\r\n/**\r\n * Validate a parsed Manifest against its preset directory on disk.\r\n * Checks:\r\n * 1. File completeness: every file in manifest.files exists at presetDir/source\r\n * 2. No-orphan: every file in presetDir (except manifest.json, README.md) is declared in manifest.files\r\n */\r\nexport function validate(m: Manifest, presetDir: string): Result<void, ManifestError[]> {\r\n const errors: ManifestError[] = [];\r\n\r\n // 1. File completeness check\r\n for (const entry of m.files) {\r\n const fullPath = path.join(presetDir, entry.source);\r\n if (!fs.existsSync(fullPath)) {\r\n errors.push({\r\n code: ErrorCodes.MANIFEST_INCOMPLETE,\r\n message: `File declared in manifest not found on disk: ${entry.source}`,\r\n });\r\n }\r\n }\r\n\r\n // 2. No-orphan check\r\n const declaredSources = new Set(m.files.map((f) => f.source));\r\n const ignoredFiles = new Set(['manifest.json', 'README.md']);\r\n\r\n const walkDir = (dir: string, prefix: string): void => {\r\n let entries: fs.Dirent[];\r\n try {\r\n entries = fs.readdirSync(dir, { withFileTypes: true });\r\n } catch {\r\n return;\r\n }\r\n for (const entry of entries) {\r\n const rel = prefix ? `${prefix}/${entry.name}` : entry.name;\r\n if (entry.isDirectory()) {\r\n walkDir(path.join(dir, entry.name), rel);\r\n } else if (entry.isFile()) {\r\n if (!ignoredFiles.has(rel) && !declaredSources.has(rel)) {\r\n errors.push({\r\n code: ErrorCodes.MANIFEST_ORPHAN_FILE,\r\n message: `File on disk not declared in manifest (orphan): ${rel}`,\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n walkDir(presetDir, '');\r\n\r\n if (errors.length > 0) {\r\n return { ok: false, error: errors };\r\n }\r\n return { ok: true, value: undefined };\r\n}\r\n","/**\r\n * Structured error class for kiro-kit CLI.\r\n * Each error carries a unique code (KK001-KK091), a human-readable message,\r\n * and an optional suggestion for resolution.\r\n */\r\nexport class KKError extends Error {\r\n readonly code: string;\r\n readonly suggestion?: string;\r\n\r\n constructor(code: string, message: string, suggestion?: string) {\r\n super(message);\r\n this.name = 'KKError';\r\n this.code = code;\r\n this.suggestion = suggestion;\r\n Object.setPrototypeOf(this, KKError.prototype);\r\n }\r\n\r\n format(): string {\r\n let output = `[${this.code}] ${this.message}`;\r\n if (this.suggestion) {\r\n output += `\\n Suggestion: ${this.suggestion}`;\r\n }\r\n return output;\r\n }\r\n}\r\n\r\n// Common error codes\r\nexport const ErrorCodes = {\r\n NODE_VERSION: 'KK001',\r\n MANIFEST_INVALID: 'KK010',\r\n MANIFEST_MISSING_FIELD: 'KK011',\r\n MANIFEST_ORPHAN_FILE: 'KK012',\r\n MANIFEST_INCOMPLETE: 'KK013',\r\n PRESET_NOT_FOUND: 'KK020',\r\n PRESET_LOAD_FAILED: 'KK021',\r\n CONFLICT_UNRESOLVED: 'KK030',\r\n TRACKING_CORRUPT: 'KK040',\r\n TRACKING_WRITE_FAILED: 'KK041',\r\n BACKUP_NOT_FOUND: 'KK050',\r\n BACKUP_WRITE_FAILED: 'KK051',\r\n MCP_MERGE_CONFLICT: 'KK060',\r\n MCP_INVALID_JSON: 'KK061',\r\n SETTINGS_MERGE_WARN: 'KK070',\r\n FRONTMATTER_INVALID: 'KK080',\r\n FRONTMATTER_MISSING: 'KK081',\r\n DOCTOR_FAIL: 'KK090',\r\n DOCTOR_WARN: 'KK091',\r\n} as const;\r\n","import fs from 'node:fs';\r\nimport crypto from 'node:crypto';\r\n\r\nexport type ConflictAction =\r\n | 'WRITE_NEW'\r\n | 'OVERWRITE_WITH_BACKUP'\r\n | 'SKIP'\r\n | 'NO_OP';\r\n\r\nexport type ConflictMode = 'interactive' | 'force' | 'skip-existing';\r\n\r\nexport interface SessionState {\r\n overwriteAll: boolean;\r\n}\r\n\r\nexport interface ConflictPromptFn {\r\n (target: string): Promise<'overwrite' | 'skip' | 'view-diff' | 'overwrite-all'>;\r\n}\r\n\r\nexport interface DiffViewerFn {\r\n (target: string, sourceContent: Buffer): void;\r\n}\r\n\r\nfunction sha256(data: Buffer): string {\r\n return crypto.createHash('sha256').update(data).digest('hex');\r\n}\r\n\r\n/**\r\n * Resolve file conflict based on mode and session state.\r\n */\r\nexport async function resolve(opts: {\r\n target: string;\r\n sourceContent: Buffer;\r\n mode: ConflictMode;\r\n sessionState: SessionState;\r\n prompt?: ConflictPromptFn;\r\n showDiff?: DiffViewerFn;\r\n}): Promise<ConflictAction> {\r\n const { target, sourceContent, mode, sessionState, prompt, showDiff } = opts;\r\n\r\n // File doesn't exist yet - write new\r\n if (!fs.existsSync(target)) {\r\n return 'WRITE_NEW';\r\n }\r\n\r\n // Compare hashes\r\n const currentContent = fs.readFileSync(target);\r\n const currentHash = sha256(currentContent);\r\n const newHash = sha256(sourceContent);\r\n\r\n // Byte-equal - no operation needed\r\n if (currentHash === newHash) {\r\n return 'NO_OP';\r\n }\r\n\r\n // Force mode - always overwrite with backup\r\n if (mode === 'force') {\r\n return 'OVERWRITE_WITH_BACKUP';\r\n }\r\n\r\n // Skip-existing mode - never overwrite\r\n if (mode === 'skip-existing') {\r\n return 'SKIP';\r\n }\r\n\r\n // Session overwrite-all already set\r\n if (sessionState.overwriteAll) {\r\n return 'OVERWRITE_WITH_BACKUP';\r\n }\r\n\r\n // Interactive mode - prompt user\r\n if (!prompt) {\r\n // No prompt function provided, default to skip\r\n return 'SKIP';\r\n }\r\n\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n const choice = await prompt(target);\r\n\r\n switch (choice) {\r\n case 'view-diff':\r\n if (showDiff) {\r\n showDiff(target, sourceContent);\r\n }\r\n continue;\r\n case 'overwrite':\r\n return 'OVERWRITE_WITH_BACKUP';\r\n case 'skip':\r\n return 'SKIP';\r\n case 'overwrite-all':\r\n sessionState.overwriteAll = true;\r\n return 'OVERWRITE_WITH_BACKUP';\r\n }\r\n }\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport { KKError, ErrorCodes } from './errors.js';\r\n\r\nconst BACKUP_DIR = '.kiro/.backup';\r\n\r\n/**\r\n * Generate timestamp string: YYYYMMDD-HHmmss-mmm\r\n */\r\nfunction generateTimestamp(): string {\r\n const now = new Date();\r\n const y = now.getFullYear();\r\n const mo = String(now.getMonth() + 1).padStart(2, '0');\r\n const d = String(now.getDate()).padStart(2, '0');\r\n const h = String(now.getHours()).padStart(2, '0');\r\n const mi = String(now.getMinutes()).padStart(2, '0');\r\n const s = String(now.getSeconds()).padStart(2, '0');\r\n const ms = String(now.getMilliseconds()).padStart(3, '0');\r\n return `${y}${mo}${d}-${h}${mi}${s}-${ms}`;\r\n}\r\n\r\n/**\r\n * Backup a file to .kiro/.backup/<timestamp>/<relative-path>\r\n */\r\nexport function backup(\r\n workspaceRoot: string,\r\n target: string,\r\n timestamp?: string,\r\n): string {\r\n const ts = timestamp ?? generateTimestamp();\r\n const relPath = path.relative(workspaceRoot, target);\r\n const backupPath = path.join(workspaceRoot, BACKUP_DIR, ts, relPath);\r\n const backupDir = path.dirname(backupPath);\r\n\r\n fs.mkdirSync(backupDir, { recursive: true });\r\n fs.copyFileSync(target, backupPath);\r\n\r\n return ts;\r\n}\r\n\r\n/**\r\n * Restore files from a backup timestamp.\r\n * If no timestamp given, uses the most recent backup.\r\n * Returns list of restored file paths.\r\n */\r\nexport function restore(\r\n workspaceRoot: string,\r\n timestamp?: string,\r\n): string[] {\r\n const ts = timestamp ?? getLatestTimestamp(workspaceRoot);\r\n\r\n if (!ts) {\r\n throw new KKError(\r\n ErrorCodes.BACKUP_NOT_FOUND,\r\n 'No backup found.',\r\n 'Run kiro-kit init or add first to create backups.',\r\n );\r\n }\r\n\r\n const backupRoot = path.join(workspaceRoot, BACKUP_DIR, ts);\r\n if (!fs.existsSync(backupRoot)) {\r\n throw new KKError(\r\n ErrorCodes.BACKUP_NOT_FOUND,\r\n `Backup timestamp \"${ts}\" not found.`,\r\n `Available: ${listTimestamps(workspaceRoot).join(', ') || 'none'}`,\r\n );\r\n }\r\n\r\n const restored: string[] = [];\r\n\r\n const walkAndRestore = (dir: string, relPrefix: string): void => {\r\n const entries = fs.readdirSync(dir, { withFileTypes: true });\r\n for (const entry of entries) {\r\n const fullPath = path.join(dir, entry.name);\r\n const rel = relPrefix ? `${relPrefix}/${entry.name}` : entry.name;\r\n if (entry.isDirectory()) {\r\n walkAndRestore(fullPath, rel);\r\n } else if (entry.isFile()) {\r\n const targetPath = path.join(workspaceRoot, rel);\r\n const targetDir = path.dirname(targetPath);\r\n fs.mkdirSync(targetDir, { recursive: true });\r\n fs.copyFileSync(fullPath, targetPath);\r\n restored.push(rel);\r\n }\r\n }\r\n };\r\n\r\n walkAndRestore(backupRoot, '');\r\n return restored;\r\n}\r\n\r\n/**\r\n * List all backup timestamps sorted newest first.\r\n */\r\nexport function listTimestamps(workspaceRoot: string): string[] {\r\n const backupBase = path.join(workspaceRoot, BACKUP_DIR);\r\n if (!fs.existsSync(backupBase)) return [];\r\n\r\n try {\r\n return fs\r\n .readdirSync(backupBase, { withFileTypes: true })\r\n .filter((d) => d.isDirectory())\r\n .map((d) => d.name)\r\n .sort()\r\n .reverse();\r\n } catch {\r\n return [];\r\n }\r\n}\r\n\r\nfunction getLatestTimestamp(workspaceRoot: string): string | undefined {\r\n const timestamps = listTimestamps(workspaceRoot);\r\n return timestamps[0];\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport { KKError, ErrorCodes } from './errors.js';\r\nimport { logger } from '../utils/logger.js';\r\n\r\nconst TRACKING_FILE = '.kiro/.kiro-kit.json';\r\n\r\nexport interface TrackedFile {\r\n target: string;\r\n sourcePreset: string;\r\n contentHash: string;\r\n installedAt: string;\r\n}\r\n\r\nexport interface TrackedPreset {\r\n name: string;\r\n version: string;\r\n installedAt: string;\r\n updatedAt?: string;\r\n files: TrackedFile[];\r\n}\r\n\r\nexport interface TrackingData {\r\n kitVersion: string;\r\n installedAt: string;\r\n updatedAt?: string;\r\n presets: TrackedPreset[];\r\n}\r\n\r\nfunction getTrackingPath(workspaceRoot: string): string {\r\n return path.join(workspaceRoot, TRACKING_FILE);\r\n}\r\n\r\n/**\r\n * Read tracking data from .kiro/.kiro-kit.json.\r\n * Returns null if file doesn't exist.\r\n * Throws KK040 if file is corrupt.\r\n */\r\nexport function read(workspaceRoot: string): TrackingData | null {\r\n const filePath = getTrackingPath(workspaceRoot);\r\n\r\n if (!fs.existsSync(filePath)) {\r\n return null;\r\n }\r\n\r\n const raw = fs.readFileSync(filePath, 'utf-8');\r\n try {\r\n return JSON.parse(raw) as TrackingData;\r\n } catch {\r\n logger.warn(`Tracking file is corrupt: ${filePath}`);\r\n throw new KKError(\r\n ErrorCodes.TRACKING_CORRUPT,\r\n 'Tracking file .kiro/.kiro-kit.json is corrupt (invalid JSON).',\r\n 'Delete the file and re-run kiro-kit init to regenerate.',\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Write tracking data to .kiro/.kiro-kit.json.\r\n * Creates directory if needed.\r\n */\r\nexport function write(workspaceRoot: string, data: TrackingData): void {\r\n const filePath = getTrackingPath(workspaceRoot);\r\n const dir = path.dirname(filePath);\r\n fs.mkdirSync(dir, { recursive: true });\r\n fs.writeFileSync(filePath, JSON.stringify(data, null, 2) + '\\n', 'utf-8');\r\n}\r\n\r\n/**\r\n * Add or update a preset in tracking data.\r\n */\r\nexport function upsertPreset(\r\n data: TrackingData,\r\n preset: TrackedPreset,\r\n): TrackingData {\r\n const existing = data.presets.findIndex((p) => p.name === preset.name);\r\n if (existing >= 0) {\r\n data.presets[existing] = preset;\r\n } else {\r\n data.presets.push(preset);\r\n }\r\n data.updatedAt = new Date().toISOString();\r\n return data;\r\n}\r\n\r\n/**\r\n * Create initial tracking data.\r\n */\r\nexport function createInitial(kitVersion: string): TrackingData {\r\n return {\r\n kitVersion,\r\n installedAt: new Date().toISOString(),\r\n presets: [],\r\n };\r\n}\r\n\r\n/**\r\n * Get a preset from tracking data by name.\r\n */\r\nexport function getPreset(\r\n data: TrackingData,\r\n name: string,\r\n): TrackedPreset | undefined {\r\n return data.presets.find((p) => p.name === name);\r\n}\r\n","import process from 'node:process';\r\nimport { color } from './color.js';\r\n\r\nlet verboseEnabled = false;\r\nlet quietEnabled = false;\r\n\r\nexport function setVerbose(enabled: boolean): void {\r\n verboseEnabled = enabled;\r\n}\r\n\r\nexport function setQuiet(enabled: boolean): void {\r\n quietEnabled = enabled;\r\n}\r\n\r\nexport const logger = {\r\n info(msg: string): void {\r\n if (!quietEnabled) {\r\n process.stdout.write(`${msg}\\n`);\r\n }\r\n },\r\n\r\n success(msg: string): void {\r\n if (!quietEnabled) {\r\n process.stdout.write(`${color.green(msg)}\\n`);\r\n }\r\n },\r\n\r\n warn(msg: string): void {\r\n process.stderr.write(`${color.yellow('WARN')} ${msg}\\n`);\r\n },\r\n\r\n error(msg: string): void {\r\n process.stderr.write(`${color.red('ERROR')} ${msg}\\n`);\r\n },\r\n\r\n debug(msg: string): void {\r\n if (verboseEnabled) {\r\n process.stderr.write(`${color.dim('[debug]')} ${msg}\\n`);\r\n }\r\n },\r\n};\r\n","import pc from 'picocolors';\r\nimport process from 'node:process';\r\n\r\nconst isColorDisabled =\r\n !!process.env['NO_COLOR'] ||\r\n process.argv.includes('--no-color') ||\r\n !process.stdout.isTTY;\r\n\r\nfunction wrap(fn: (s: string) => string): (s: string) => string {\r\n return (s: string) => (isColorDisabled ? s : fn(s));\r\n}\r\n\r\nexport const color = {\r\n green: wrap(pc.green),\r\n red: wrap(pc.red),\r\n yellow: wrap(pc.yellow),\r\n blue: wrap(pc.blue),\r\n cyan: wrap(pc.cyan),\r\n gray: wrap(pc.gray),\r\n bold: wrap(pc.bold),\r\n dim: wrap(pc.dim),\r\n};\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\n\r\nconst METADATA_FILE = '.kiro/metadata.json';\r\n\r\nexport interface PresetMeta {\r\n name: string;\r\n version: string;\r\n}\r\n\r\nexport interface Metadata {\r\n version: string;\r\n name: string;\r\n description: string;\r\n buildDate: string;\r\n repository: string;\r\n presets: PresetMeta[];\r\n installedAt: string;\r\n kitVersion: string;\r\n}\r\n\r\n/**\r\n * Compose metadata from installed presets and kit info.\r\n */\r\nexport function compose(opts: {\r\n kitVersion: string;\r\n repository: string;\r\n presets: PresetMeta[];\r\n}): Metadata {\r\n return {\r\n version: '1.0.0',\r\n name: 'kiro-kit',\r\n description: 'Kiro IDE workspace bootstrapped by kiro-kit.',\r\n buildDate: new Date().toISOString(),\r\n repository: opts.repository,\r\n presets: opts.presets,\r\n installedAt: new Date().toISOString(),\r\n kitVersion: opts.kitVersion,\r\n };\r\n}\r\n\r\n/**\r\n * Write metadata.json to workspace.\r\n * When installing multiple presets, merges preset list.\r\n */\r\nexport function write(workspaceRoot: string, metadata: Metadata): void {\r\n const filePath = path.join(workspaceRoot, METADATA_FILE);\r\n const dir = path.dirname(filePath);\r\n fs.mkdirSync(dir, { recursive: true });\r\n fs.writeFileSync(filePath, JSON.stringify(metadata, null, 2) + '\\n', 'utf-8');\r\n}\r\n\r\n/**\r\n * Read existing metadata, or return null if not present.\r\n */\r\nexport function read(workspaceRoot: string): Metadata | null {\r\n const filePath = path.join(workspaceRoot, METADATA_FILE);\r\n if (!fs.existsSync(filePath)) return null;\r\n try {\r\n return JSON.parse(fs.readFileSync(filePath, 'utf-8')) as Metadata;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Merge new presets into existing metadata (dedup by name).\r\n */\r\nexport function mergePresets(existing: Metadata, newPresets: PresetMeta[]): Metadata {\r\n const merged = [...(existing.presets || [])];\r\n for (const p of newPresets) {\r\n const idx = merged.findIndex((m) => m.name === p.name);\r\n if (idx >= 0) {\r\n merged[idx] = p;\r\n } else {\r\n merged.push(p);\r\n }\r\n }\r\n return { ...existing, presets: merged, buildDate: new Date().toISOString() };\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport process from 'node:process';\r\n\r\nconst STATUSLINE_FILES = ['statusline.js', 'statusline.sh', 'statusline.ps1'];\r\n\r\n/**\r\n * Get the appropriate statusline command for the current platform.\r\n */\r\nexport function getCommand(): string {\r\n switch (process.platform) {\r\n case 'win32':\r\n return 'powershell -ExecutionPolicy Bypass -File .kiro/statusline.ps1';\r\n default:\r\n // macOS, Linux, etc.\r\n return 'node .kiro/statusline.js';\r\n }\r\n}\r\n\r\n/**\r\n * Install statusline triple (.js, .sh, .ps1) from preset to workspace.\r\n * Sets chmod +x on .sh for Unix platforms.\r\n */\r\nexport function install(\r\n presetDir: string,\r\n workspaceRoot: string,\r\n): string[] {\r\n const installed: string[] = [];\r\n const targetDir = path.join(workspaceRoot, '.kiro');\r\n fs.mkdirSync(targetDir, { recursive: true });\r\n\r\n for (const file of STATUSLINE_FILES) {\r\n const source = path.join(presetDir, file);\r\n if (!fs.existsSync(source)) continue;\r\n\r\n const target = path.join(targetDir, file);\r\n fs.copyFileSync(source, target);\r\n installed.push(`.kiro/${file}`);\r\n\r\n // Set executable bit on Unix for .sh\r\n if (file.endsWith('.sh') && process.platform !== 'win32') {\r\n try {\r\n fs.chmodSync(target, 0o755);\r\n } catch {\r\n // Non-critical: skip if chmod fails\r\n }\r\n }\r\n }\r\n\r\n return installed;\r\n}\r\n\r\n/**\r\n * Resolve the statusLine.command field in settings based on platform.\r\n */\r\nexport function resolveSettingsCommand(settings: Record<string, unknown>): Record<string, unknown> {\r\n const statusLine = settings['statusLine'] as Record<string, unknown> | undefined;\r\n if (statusLine && statusLine['type'] === 'command') {\r\n statusLine['command'] = getCommand();\r\n }\r\n return settings;\r\n}\r\n","import { logger } from '../../utils/logger.js';\r\n\r\nexport interface MCPConfig {\r\n mcpServers: Record<string, MCPServerEntry>;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface MCPServerEntry {\r\n command: string;\r\n args?: string[];\r\n env?: Record<string, string>;\r\n disabled?: boolean;\r\n autoApprove?: string[];\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Merge preset MCP servers into existing MCP config.\r\n * User-priority: existing servers are never overwritten or deleted.\r\n * Warns on cross-preset conflicts (same server name from different presets).\r\n */\r\nexport function mergeMCP(\r\n existing: MCPConfig | null,\r\n presetServers: Record<string, MCPServerEntry>,\r\n presetName?: string,\r\n): MCPConfig {\r\n const result: MCPConfig = existing\r\n ? structuredClone(existing)\r\n : { mcpServers: {} };\r\n\r\n if (!result.mcpServers) {\r\n result.mcpServers = {};\r\n }\r\n\r\n for (const [serverName, def] of Object.entries(presetServers)) {\r\n if (serverName in result.mcpServers) {\r\n logger.warn(\r\n `MCP server \"${serverName}\" already exists, keeping user definition.` +\r\n (presetName ? ` (from preset: ${presetName})` : ''),\r\n );\r\n continue;\r\n }\r\n result.mcpServers[serverName] = structuredClone(def);\r\n }\r\n\r\n return result;\r\n}\r\n","import { logger } from '../../utils/logger.js';\r\n\r\nexport interface HookRef {\r\n command: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface SettingsConfig {\r\n statusLine?: { type?: string; command?: string; [key: string]: unknown };\r\n hooks?: {\r\n PreToolUse?: HookRef[];\r\n PostToolUse?: HookRef[];\r\n agentStop?: HookRef[];\r\n [key: string]: unknown;\r\n };\r\n includeCoAuthoredBy?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Merge preset settings into existing settings.\r\n * - Array fields (hooks.PreToolUse, hooks.PostToolUse, etc.): concat-dedupe by `command`\r\n * - Non-array fields: last-write-wins with warning\r\n * - Preserves user-added fields not in preset\r\n */\r\nexport function mergeSettings(\r\n existing: SettingsConfig | null,\r\n preset: SettingsConfig,\r\n): SettingsConfig {\r\n const result: SettingsConfig = existing\r\n ? structuredClone(existing)\r\n : {};\r\n\r\n // Merge hooks arrays with dedup by command\r\n if (preset.hooks) {\r\n if (!result.hooks) result.hooks = {};\r\n\r\n for (const key of ['PreToolUse', 'PostToolUse', 'agentStop'] as const) {\r\n const presetArr = preset.hooks[key];\r\n if (!presetArr || presetArr.length === 0) continue;\r\n\r\n const existingArr: HookRef[] = (result.hooks[key] as HookRef[]) ?? [];\r\n const existingCommands = new Set(existingArr.map((h) => h.command));\r\n\r\n for (const hook of presetArr) {\r\n if (!existingCommands.has(hook.command)) {\r\n existingArr.push(structuredClone(hook));\r\n }\r\n }\r\n (result.hooks as Record<string, unknown>)[key] = existingArr;\r\n }\r\n }\r\n\r\n // Merge non-array scalar fields with last-write-wins + warning\r\n if (preset.statusLine !== undefined) {\r\n if (result.statusLine !== undefined) {\r\n logger.warn('statusLine already set in settings, overwriting with preset value.');\r\n }\r\n result.statusLine = structuredClone(preset.statusLine);\r\n }\r\n\r\n if (preset.includeCoAuthoredBy !== undefined) {\r\n if (result.includeCoAuthoredBy !== undefined && result.includeCoAuthoredBy !== preset.includeCoAuthoredBy) {\r\n logger.warn('includeCoAuthoredBy already set, overwriting with preset value.');\r\n }\r\n result.includeCoAuthoredBy = preset.includeCoAuthoredBy;\r\n }\r\n\r\n return result;\r\n}\r\n","import fs from 'node:fs';\r\nimport { createTwoFilesPatch } from 'diff';\r\nimport { color } from '../utils/color.js';\r\n\r\n/**\r\n * Print a unified diff between the existing file on disk and new source content.\r\n * Highlights additions in green and deletions in red (NO_COLOR aware).\r\n */\r\nexport function showDiff(target: string, sourceContent: Buffer): void {\r\n const existing = fs.existsSync(target)\r\n ? fs.readFileSync(target, 'utf-8')\r\n : '';\r\n const incoming = sourceContent.toString('utf-8');\r\n\r\n const patch = createTwoFilesPatch(\r\n `a/${target}`,\r\n `b/${target}`,\r\n existing,\r\n incoming,\r\n 'current',\r\n 'incoming',\r\n { context: 3 },\r\n );\r\n\r\n const lines = patch.split('\\n');\r\n for (const line of lines) {\r\n if (line.startsWith('+') && !line.startsWith('+++')) {\r\n process.stdout.write(color.green(line) + '\\n');\r\n } else if (line.startsWith('-') && !line.startsWith('---')) {\r\n process.stdout.write(color.red(line) + '\\n');\r\n } else if (line.startsWith('@@')) {\r\n process.stdout.write(color.cyan(line) + '\\n');\r\n } else {\r\n process.stdout.write(line + '\\n');\r\n }\r\n }\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport crypto from 'node:crypto';\r\nimport os from 'node:os';\r\n\r\n/** Extensions that should always use LF line endings. */\r\nconst LF_EXTENSIONS = new Set(['.json', '.yaml', '.yml']);\r\n\r\n/**\r\n * Determine the appropriate line ending for a file based on extension.\r\n * - .json, .yaml, .yml -> LF\r\n * - Everything else -> OS default (CRLF on Windows, LF elsewhere)\r\n */\r\nfunction getLineEnding(filePath: string): string {\r\n const ext = path.extname(filePath).toLowerCase();\r\n if (LF_EXTENSIONS.has(ext)) return '\\n';\r\n return os.EOL;\r\n}\r\n\r\n/**\r\n * Normalize line endings in content based on target file extension.\r\n */\r\nfunction normalizeLineEndings(content: string, filePath: string): string {\r\n const eol = getLineEnding(filePath);\r\n // First normalize all to LF, then convert to target\r\n const normalized = content.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\r\n if (eol === '\\n') return normalized;\r\n return normalized.replace(/\\n/g, eol);\r\n}\r\n\r\n/**\r\n * Atomic write: writes to a temp file in the same directory, then renames.\r\n * This ensures the target file is never in a partial state.\r\n * Also normalizes line endings based on file extension.\r\n */\r\nexport function atomicWrite(target: string, content: string | Buffer): void {\r\n const dir = path.dirname(target);\r\n fs.mkdirSync(dir, { recursive: true });\r\n\r\n const rand = crypto.randomBytes(6).toString('hex');\r\n const tmpPath = path.join(dir, `.tmp.${rand}`);\r\n\r\n let data: Buffer;\r\n if (typeof content === 'string') {\r\n const normalized = normalizeLineEndings(content, target);\r\n data = Buffer.from(normalized, 'utf-8');\r\n } else {\r\n data = content;\r\n }\r\n\r\n try {\r\n fs.writeFileSync(tmpPath, data);\r\n fs.renameSync(tmpPath, target);\r\n } catch (err) {\r\n // Clean up temp file on failure\r\n try {\r\n fs.unlinkSync(tmpPath);\r\n } catch {\r\n // ignore cleanup errors\r\n }\r\n throw err;\r\n }\r\n}\r\n","import path from 'node:path';\r\n\r\n/**\r\n * Normalize a path to use forward slashes (for consistent cross-platform display).\r\n */\r\nexport function normalize(p: string): string {\r\n return p.split(path.sep).join('/');\r\n}\r\n\r\n/**\r\n * Get relative path from workspace root, normalized with forward slashes.\r\n */\r\nexport function relativeFromWorkspace(workspaceRoot: string, target: string): string {\r\n return normalize(path.relative(workspaceRoot, target));\r\n}\r\n\r\n/**\r\n * Check that a resolved path is safely inside the workspace root.\r\n * Prevents path traversal attacks (e.g., ../../etc/passwd).\r\n */\r\nexport function safePathInside(workspaceRoot: string, target: string): boolean {\r\n const resolved = path.resolve(workspaceRoot, target);\r\n const root = path.resolve(workspaceRoot);\r\n return resolved.startsWith(root + path.sep) || resolved === root;\r\n}\r\n\r\n/**\r\n * Join paths using OS-native separator.\r\n */\r\nexport function join(...segments: string[]): string {\r\n return path.join(...segments);\r\n}\r\n\r\n/**\r\n * Resolve to absolute path.\r\n */\r\nexport function resolve(...segments: string[]): string {\r\n return path.resolve(...segments);\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport { z } from 'zod';\r\n\r\n/**\r\n * PowersLoader — reads and validates `powers.json` from preset directories.\r\n *\r\n * Provides tier-based filtering and multi-preset merge with deduplication.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Schemas\r\n// ---------------------------------------------------------------------------\r\n\r\nexport const PowerTierSchema = z.enum(['essential', 'recommended', 'optional']);\r\n\r\nexport const PowerEntrySchema = z.object({\r\n name: z.string().min(1),\r\n url: z.string().url(),\r\n description: z.string().min(1),\r\n tier: PowerTierSchema,\r\n});\r\n\r\nexport const PowersConfigSchema = z.object({\r\n powers: z.array(PowerEntrySchema),\r\n});\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\nexport type PowerTier = z.infer<typeof PowerTierSchema>;\r\nexport type PowerEntry = z.infer<typeof PowerEntrySchema>;\r\nexport type PowersConfig = z.infer<typeof PowersConfigSchema>;\r\n\r\nexport interface LoadPowersResult {\r\n ok: boolean;\r\n powers: PowerEntry[];\r\n error?: string;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Constants\r\n// ---------------------------------------------------------------------------\r\n\r\nconst POWERS_FILENAME = 'powers.json';\r\n\r\n/** Priority order: lower index = higher priority. */\r\nconst TIER_PRIORITY: Record<PowerTier, number> = {\r\n essential: 0,\r\n recommended: 1,\r\n optional: 2,\r\n};\r\n\r\n// ---------------------------------------------------------------------------\r\n// Public API\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Load powers.json from a preset directory.\r\n * Returns empty array if file doesn't exist (graceful degradation).\r\n * Returns error result (not throw) for invalid JSON or schema failures.\r\n */\r\nexport function loadPowers(presetDir: string): LoadPowersResult {\r\n const filePath = path.join(presetDir, POWERS_FILENAME);\r\n\r\n if (!fs.existsSync(filePath)) {\r\n return { ok: true, powers: [] };\r\n }\r\n\r\n let raw: string;\r\n try {\r\n raw = fs.readFileSync(filePath, 'utf-8');\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : String(err);\r\n return { ok: false, powers: [], error: `Failed to read ${POWERS_FILENAME}: ${message}` };\r\n }\r\n\r\n let parsed: unknown;\r\n try {\r\n parsed = JSON.parse(raw);\r\n } catch {\r\n return { ok: false, powers: [], error: `${POWERS_FILENAME} is not valid JSON.` };\r\n }\r\n\r\n const result = PowersConfigSchema.safeParse(parsed);\r\n if (!result.success) {\r\n const issues = result.error.issues\r\n .map((i) => `${i.path.join('.')}: ${i.message}`)\r\n .join('; ');\r\n return { ok: false, powers: [], error: `${POWERS_FILENAME} schema validation failed: ${issues}` };\r\n }\r\n\r\n return { ok: true, powers: result.data.powers };\r\n}\r\n\r\n/**\r\n * Merge powers from multiple presets, deduplicating by name.\r\n * When duplicates exist, keep the entry with the highest tier\r\n * (essential > recommended > optional).\r\n */\r\nexport function mergePowers(configs: PowerEntry[][]): PowerEntry[] {\r\n const seen = new Map<string, PowerEntry>();\r\n\r\n for (const entries of configs) {\r\n for (const entry of entries) {\r\n const existing = seen.get(entry.name);\r\n if (!existing) {\r\n seen.set(entry.name, entry);\r\n } else if (TIER_PRIORITY[entry.tier] < TIER_PRIORITY[existing.tier]) {\r\n // New entry has higher priority tier — replace.\r\n seen.set(entry.name, entry);\r\n }\r\n }\r\n }\r\n\r\n return Array.from(seen.values());\r\n}\r\n\r\n/**\r\n * Filter powers by tier selection.\r\n * Returns only those powers whose tier is in the provided list.\r\n */\r\nexport function filterByTier(powers: PowerEntry[], tiers: PowerTier[]): PowerEntry[] {\r\n const tierSet = new Set<PowerTier>(tiers);\r\n return powers.filter((p) => tierSet.has(p.tier));\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport { KKError, ErrorCodes } from './errors.js';\r\n\r\n/**\r\n * MCPConfigurator — manages auto-configuration of MCP servers per preset.\r\n *\r\n * Generates functional `.mcp.json` files with preset-specific servers,\r\n * handles merge logic for existing configs, and uses `_disabled_` prefix\r\n * convention for servers requiring credentials.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface MCPServerEntry {\r\n command: string;\r\n args?: string[];\r\n env?: Record<string, string>;\r\n requiresCredentials?: boolean;\r\n credentialEnvVars?: string[];\r\n}\r\n\r\nexport interface MCPPresetConfig {\r\n servers: Record<string, MCPServerEntry>;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Constants\r\n// ---------------------------------------------------------------------------\r\n\r\nconst MCP_FILENAME = '.mcp.json';\r\n\r\n/** Shared MCP server definitions. */\r\nconst SERVER_DEFINITIONS: Record<string, MCPServerEntry> = {\r\n filesystem: {\r\n command: 'npx',\r\n args: ['-y', '@modelcontextprotocol/server-filesystem', '.'],\r\n requiresCredentials: false,\r\n },\r\n git: {\r\n command: 'npx',\r\n args: ['-y', '@modelcontextprotocol/server-git', '--repository', '.'],\r\n requiresCredentials: false,\r\n },\r\n fetch: {\r\n command: 'npx',\r\n args: ['-y', '@modelcontextprotocol/server-fetch'],\r\n requiresCredentials: false,\r\n },\r\n playwright: {\r\n command: 'npx',\r\n args: ['-y', '@modelcontextprotocol/server-playwright'],\r\n requiresCredentials: false,\r\n },\r\n postgres: {\r\n command: 'npx',\r\n args: ['-y', '@modelcontextprotocol/server-postgres'],\r\n env: { POSTGRES_URL: '${POSTGRES_URL}' },\r\n requiresCredentials: true,\r\n credentialEnvVars: ['POSTGRES_URL'],\r\n },\r\n docker: {\r\n command: 'npx',\r\n args: ['-y', '@modelcontextprotocol/server-docker'],\r\n env: { DOCKER_HOST: '${DOCKER_HOST}' },\r\n requiresCredentials: true,\r\n credentialEnvVars: ['DOCKER_HOST'],\r\n },\r\n};\r\n\r\n/** Preset-to-server mapping. */\r\nconst PRESET_SERVERS: Record<string, { default: string[]; optional: string[] }> = {\r\n frontend: { default: ['filesystem', 'git', 'fetch', 'playwright'], optional: [] },\r\n backend: { default: ['filesystem', 'git', 'fetch'], optional: ['postgres', 'docker'] },\r\n fullstack: { default: ['filesystem', 'git', 'fetch', 'playwright'], optional: ['postgres', 'docker'] },\r\n mobile: { default: ['filesystem', 'git', 'fetch'], optional: [] },\r\n devops: { default: ['filesystem', 'git', 'fetch'], optional: ['docker', 'postgres'] },\r\n 'data-ai': { default: ['filesystem', 'git', 'fetch'], optional: ['postgres'] },\r\n};\r\n\r\n// ---------------------------------------------------------------------------\r\n// Public API\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Get preset-specific MCP server configuration.\r\n * Servers requiring no credentials are enabled by default.\r\n * Servers requiring credentials are included with `requiresCredentials: true`.\r\n */\r\nexport function getMCPConfig(presetName: string): MCPPresetConfig {\r\n const mapping = PRESET_SERVERS[presetName];\r\n if (!mapping) {\r\n return { servers: {} };\r\n }\r\n\r\n const servers: Record<string, MCPServerEntry> = {};\r\n\r\n for (const name of mapping.default) {\r\n const def = SERVER_DEFINITIONS[name];\r\n if (def) {\r\n servers[name] = { ...def };\r\n }\r\n }\r\n\r\n for (const name of mapping.optional) {\r\n const def = SERVER_DEFINITIONS[name];\r\n if (def) {\r\n servers[name] = { ...def };\r\n }\r\n }\r\n\r\n return { servers };\r\n}\r\n\r\n/**\r\n * Merge new MCP config with existing `.mcp.json` without overwriting user entries.\r\n * Existing keys in `mcpServers` are preserved with their original values.\r\n * New keys from incoming config are added (using `_disabled_` prefix for credential servers).\r\n */\r\nexport function mergeMCPConfig(\r\n existing: Record<string, unknown> | null,\r\n incoming: MCPPresetConfig,\r\n): Record<string, unknown> {\r\n const existingServers: Record<string, unknown> =\r\n existing && typeof existing === 'object' && existing !== null\r\n ? ((existing as Record<string, unknown>).mcpServers as Record<string, unknown>) ?? {}\r\n : {};\r\n\r\n const merged: Record<string, unknown> = { ...existingServers };\r\n\r\n for (const [name, entry] of Object.entries(incoming.servers)) {\r\n const outputKey = entry.requiresCredentials ? `_disabled_${name}` : name;\r\n\r\n // Do not overwrite existing user entries (check both enabled and disabled keys).\r\n if (merged[name] !== undefined || merged[`_disabled_${name}`] !== undefined) {\r\n continue;\r\n }\r\n\r\n const serverObj: Record<string, unknown> = { command: entry.command };\r\n if (entry.args && entry.args.length > 0) {\r\n serverObj.args = entry.args;\r\n }\r\n if (entry.env && Object.keys(entry.env).length > 0) {\r\n serverObj.env = entry.env;\r\n }\r\n if (entry.requiresCredentials) {\r\n serverObj._comment = `Requires ${entry.credentialEnvVars?.join(', ') ?? 'credentials'} environment variable. Remove '_disabled_' prefix to enable.`;\r\n }\r\n\r\n merged[outputKey] = serverObj;\r\n }\r\n\r\n const result: Record<string, unknown> = { ...(existing ?? {}) };\r\n result.mcpServers = merged;\r\n return result;\r\n}\r\n\r\n/**\r\n * Write the final `.mcp.json` to workspace root.\r\n * Throws KKError if write fails.\r\n */\r\nexport function writeMCPConfig(\r\n workspaceRoot: string,\r\n config: Record<string, unknown>,\r\n): void {\r\n const filePath = path.join(workspaceRoot, MCP_FILENAME);\r\n const content = JSON.stringify(config, null, 2) + '\\n';\r\n\r\n try {\r\n fs.writeFileSync(filePath, content, 'utf-8');\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : String(err);\r\n throw new KKError(\r\n ErrorCodes.MCP_MERGE_CONFLICT,\r\n `Failed to write ${MCP_FILENAME}: ${message}`,\r\n 'Check file permissions and ensure the directory exists.',\r\n );\r\n }\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport { KKError, ErrorCodes } from './errors.js';\r\nimport type { PowerEntry, PowerTier } from './PowersLoader.js';\r\nimport type { MCPServerEntry } from './MCPConfigurator.js';\r\n\r\n/**\r\n * SetupGuideGenerator — creates POWERS-SETUP.md with installation instructions.\r\n *\r\n * Groups Powers by tier (essential first, then recommended, then optional),\r\n * includes marketplace URLs, and provides step-by-step instructions for\r\n * installing each Power via Kiro IDE.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface SetupGuideOptions {\r\n powers: PowerEntry[];\r\n presetNames: string[];\r\n mcpServers: Record<string, MCPServerEntry>;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Constants\r\n// ---------------------------------------------------------------------------\r\n\r\nconst SETUP_GUIDE_FILENAME = 'POWERS-SETUP.md';\r\nconst KIRO_DIR = '.kiro';\r\n\r\n/** Tier display order and labels. */\r\nconst TIER_ORDER: { tier: PowerTier; heading: string }[] = [\r\n { tier: 'essential', heading: 'Essential Powers (install these first)' },\r\n { tier: 'recommended', heading: 'Recommended Powers' },\r\n { tier: 'optional', heading: 'Optional Powers' },\r\n];\r\n\r\n// ---------------------------------------------------------------------------\r\n// Public API\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Generate POWERS-SETUP.md content.\r\n * Powers are grouped by tier with marketplace URLs and install instructions.\r\n */\r\nexport function generateSetupGuide(options: SetupGuideOptions): string {\r\n const { powers, presetNames, mcpServers } = options;\r\n const lines: string[] = [];\r\n\r\n lines.push('# Kiro Powers Setup Guide');\r\n lines.push('');\r\n lines.push(`## Presets: ${presetNames.join(', ')}`);\r\n lines.push('');\r\n\r\n // Group powers by tier\r\n let counter = 0;\r\n for (const { tier, heading } of TIER_ORDER) {\r\n const tierPowers = powers.filter((p) => p.tier === tier);\r\n if (tierPowers.length === 0) {\r\n continue;\r\n }\r\n\r\n lines.push(`## ${heading}`);\r\n lines.push('');\r\n\r\n for (const power of tierPowers) {\r\n counter += 1;\r\n lines.push(`### ${counter}. ${power.name}`);\r\n lines.push(`- URL: ${power.url}`);\r\n lines.push(`- Description: ${power.description}`);\r\n lines.push(`- How to install: Open Kiro IDE > Powers panel > Search \"${power.name}\" > Click Install`);\r\n lines.push('');\r\n }\r\n }\r\n\r\n // MCP servers section\r\n const serverNames = Object.keys(mcpServers);\r\n if (serverNames.length > 0) {\r\n lines.push('## MCP Servers (auto-configured)');\r\n lines.push('');\r\n lines.push('The following MCP servers have been configured in `.mcp.json`:');\r\n lines.push('');\r\n\r\n for (const name of serverNames) {\r\n const entry = mcpServers[name];\r\n if (entry.requiresCredentials) {\r\n lines.push(`- **${name}** (disabled, requires credentials)`);\r\n } else {\r\n lines.push(`- **${name}** (enabled)`);\r\n }\r\n }\r\n\r\n lines.push('');\r\n lines.push('To enable disabled servers, set the required environment variables');\r\n lines.push('and remove the `_disabled_` prefix from the server key in `.mcp.json`.');\r\n lines.push('');\r\n }\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\n/**\r\n * Write setup guide to .kiro/ directory.\r\n * Creates the .kiro directory if it does not exist.\r\n * Throws KKError if write fails.\r\n */\r\nexport function writeSetupGuide(workspaceRoot: string, content: string): void {\r\n const dirPath = path.join(workspaceRoot, KIRO_DIR);\r\n const filePath = path.join(dirPath, SETUP_GUIDE_FILENAME);\r\n\r\n try {\r\n if (!fs.existsSync(dirPath)) {\r\n fs.mkdirSync(dirPath, { recursive: true });\r\n }\r\n fs.writeFileSync(filePath, content, 'utf-8');\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : String(err);\r\n throw new KKError(\r\n ErrorCodes.MCP_MERGE_CONFLICT,\r\n `Failed to write ${SETUP_GUIDE_FILENAME}: ${message}`,\r\n 'Check file permissions and ensure the .kiro directory is writable.',\r\n );\r\n }\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport { KKError, ErrorCodes } from './errors.js';\r\nimport type { MCPPresetConfig, MCPServerEntry } from './MCPConfigurator.js';\r\nimport type { PowerEntry } from './PowersLoader.js';\r\n\r\n/**\r\n * EnvTemplateGenerator — generates/updates `.env.example` with environment\r\n * variables required by MCP servers and Powers.\r\n *\r\n * Collects variables from credential-requiring servers, groups them by service,\r\n * and appends without duplicating existing entries.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface EnvVariable {\r\n key: string;\r\n placeholder: string;\r\n comment: string;\r\n service: string;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Constants\r\n// ---------------------------------------------------------------------------\r\n\r\nconst ENV_FILENAME = '.env.example';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Public API\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Collect all required env vars from MCP servers that have requiresCredentials=true.\r\n * Also collects placeholder vars for Powers that may need configuration.\r\n */\r\nexport function collectEnvVars(\r\n mcpConfig: MCPPresetConfig,\r\n powers: PowerEntry[],\r\n): EnvVariable[] {\r\n const vars: EnvVariable[] = [];\r\n\r\n // Collect from MCP servers requiring credentials\r\n for (const [name, entry] of Object.entries(mcpConfig.servers)) {\r\n if (!entry.requiresCredentials) {\r\n continue;\r\n }\r\n\r\n const envVars = entry.credentialEnvVars ?? [];\r\n const envMap = entry.env ?? {};\r\n\r\n for (const key of envVars) {\r\n const placeholder = envMap[key] ?? `your-${key.toLowerCase().replace(/_/g, '-')}`;\r\n vars.push({\r\n key,\r\n placeholder,\r\n comment: `Required by ${name} MCP server`,\r\n service: `${name} MCP Server`,\r\n });\r\n }\r\n }\r\n\r\n // Collect from Powers (placeholder entries for Powers that may need env vars)\r\n // Powers are installed via marketplace, but some may need env configuration\r\n for (const power of powers) {\r\n if (power.tier === 'essential' || power.tier === 'recommended') {\r\n // Only include a generic placeholder for Powers that commonly need keys\r\n const knownPowerEnvVars = getKnownPowerEnvVars(power.name);\r\n for (const envVar of knownPowerEnvVars) {\r\n vars.push(envVar);\r\n }\r\n }\r\n }\r\n\r\n return vars;\r\n}\r\n\r\n/**\r\n * Parse existing .env.example content to get a Set of existing keys.\r\n * Ignores comments and blank lines.\r\n */\r\nexport function parseExistingEnv(content: string): Set<string> {\r\n const keys = new Set<string>();\r\n\r\n for (const line of content.split('\\n')) {\r\n const trimmed = line.trim();\r\n // Skip empty lines and comments\r\n if (trimmed === '' || trimmed.startsWith('#')) {\r\n continue;\r\n }\r\n // Extract key from KEY=value or # KEY=value (commented-out vars)\r\n const match = trimmed.match(/^#?\\s*([A-Z_][A-Z0-9_]*)=/);\r\n if (match) {\r\n keys.add(match[1]);\r\n }\r\n }\r\n\r\n return keys;\r\n}\r\n\r\n/**\r\n * Generate .env.example content, appending new vars without duplicating existing keys.\r\n * Variables are grouped by service with comment headers.\r\n */\r\nexport function generateEnvTemplate(\r\n existing: string | null,\r\n newVars: EnvVariable[],\r\n): string {\r\n const existingKeys = existing ? parseExistingEnv(existing) : new Set<string>();\r\n\r\n // Filter out vars that already exist\r\n const varsToAdd = newVars.filter((v) => !existingKeys.has(v.key));\r\n\r\n if (varsToAdd.length === 0) {\r\n return existing ?? '';\r\n }\r\n\r\n // Group by service\r\n const grouped = new Map<string, EnvVariable[]>();\r\n for (const v of varsToAdd) {\r\n const group = grouped.get(v.service) ?? [];\r\n group.push(v);\r\n grouped.set(v.service, group);\r\n }\r\n\r\n // Build new content\r\n const lines: string[] = [];\r\n\r\n for (const [service, vars] of grouped) {\r\n lines.push(`# ${service}`);\r\n for (const v of vars) {\r\n lines.push(`# ${v.comment}`);\r\n lines.push(`# ${v.key}=${v.placeholder}`);\r\n }\r\n lines.push('');\r\n }\r\n\r\n const newContent = lines.join('\\n');\r\n\r\n if (!existing || existing.trim() === '') {\r\n return newContent;\r\n }\r\n\r\n // Append to existing content with separator\r\n const separator = existing.endsWith('\\n') ? '' : '\\n';\r\n return existing + separator + '\\n' + newContent;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// File I/O\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Read existing .env.example from workspace root.\r\n * Returns null if file does not exist.\r\n */\r\nexport function readExistingEnv(workspaceRoot: string): string | null {\r\n const filePath = path.join(workspaceRoot, ENV_FILENAME);\r\n try {\r\n return fs.readFileSync(filePath, 'utf-8');\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Write .env.example to workspace root.\r\n * Throws KKError if write fails.\r\n */\r\nexport function writeEnvTemplate(workspaceRoot: string, content: string): void {\r\n const filePath = path.join(workspaceRoot, ENV_FILENAME);\r\n\r\n try {\r\n fs.writeFileSync(filePath, content, 'utf-8');\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : String(err);\r\n throw new KKError(\r\n ErrorCodes.MCP_MERGE_CONFLICT,\r\n `Failed to write ${ENV_FILENAME}: ${message}`,\r\n 'Check file permissions or create the file manually.',\r\n );\r\n }\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal Helpers\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Known environment variables for popular Powers.\r\n * Returns empty array for Powers without known env requirements.\r\n */\r\nfunction getKnownPowerEnvVars(powerName: string): EnvVariable[] {\r\n const mapping: Record<string, EnvVariable[]> = {\r\n Supabase: [\r\n {\r\n key: 'SUPABASE_URL',\r\n placeholder: 'https://your-project.supabase.co',\r\n comment: 'Supabase project URL',\r\n service: 'Supabase Power',\r\n },\r\n {\r\n key: 'SUPABASE_ANON_KEY',\r\n placeholder: 'your-anon-key',\r\n comment: 'Supabase anonymous key',\r\n service: 'Supabase Power',\r\n },\r\n ],\r\n Firebase: [\r\n {\r\n key: 'FIREBASE_PROJECT_ID',\r\n placeholder: 'your-project-id',\r\n comment: 'Firebase project ID',\r\n service: 'Firebase Power',\r\n },\r\n ],\r\n Stripe: [\r\n {\r\n key: 'STRIPE_SECRET_KEY',\r\n placeholder: 'sk_test_your-key',\r\n comment: 'Stripe secret key',\r\n service: 'Stripe Power',\r\n },\r\n ],\r\n Datadog: [\r\n {\r\n key: 'DD_API_KEY',\r\n placeholder: 'your-datadog-api-key',\r\n comment: 'Datadog API key',\r\n service: 'Datadog Power',\r\n },\r\n ],\r\n Neon: [\r\n {\r\n key: 'NEON_DATABASE_URL',\r\n placeholder: 'postgresql://user:password@host/dbname',\r\n comment: 'Neon database connection string',\r\n service: 'Neon Power',\r\n },\r\n ],\r\n };\r\n\r\n return mapping[powerName] ?? [];\r\n}\r\n","import readline from 'node:readline';\r\nimport { color } from '../utils/color.js';\r\nimport type { PowerEntry, PowerTier } from '../core/PowersLoader.js';\r\n\r\n/**\r\n * PowersPrompter — interactive tier selection and formatted display\r\n * for Powers recommendations during init flow.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface PowersPromptResult {\r\n selectedTiers: PowerTier[];\r\n confirmMCP: boolean;\r\n}\r\n\r\nexport interface PowersPromptFlags {\r\n powersFlag?: string;\r\n yes?: boolean;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Constants\r\n// ---------------------------------------------------------------------------\r\n\r\nconst TIER_ORDER: PowerTier[] = ['essential', 'recommended', 'optional'];\r\n\r\nconst TIER_LABELS: Record<PowerTier, string> = {\r\n essential: 'Essential',\r\n recommended: 'Recommended',\r\n optional: 'Optional',\r\n};\r\n\r\nconst TIER_OPTIONS: Array<{ label: string; tiers: PowerTier[] }> = [\r\n { label: 'Essential only', tiers: ['essential'] },\r\n { label: 'Essential + Recommended', tiers: ['essential', 'recommended'] },\r\n { label: 'All (Essential + Recommended + Optional)', tiers: ['essential', 'recommended', 'optional'] },\r\n { label: 'None (skip Powers)', tiers: [] },\r\n];\r\n\r\n// ---------------------------------------------------------------------------\r\n// Public API\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Prompt user for Powers tier selection.\r\n * Respects --powers and --yes flags to skip interactive prompts.\r\n *\r\n * - flags.powersFlag === 'none': return empty tiers, confirmMCP=false\r\n * - flags.powersFlag === 'all': return all tiers, confirmMCP=true\r\n * - flags.yes === true: return ['essential', 'recommended'] as default, confirmMCP=true\r\n * - Otherwise: prompt user interactively\r\n */\r\nexport async function promptPowersTier(\r\n powers: PowerEntry[],\r\n flags: PowersPromptFlags,\r\n): Promise<PowersPromptResult> {\r\n // No powers available — nothing to prompt\r\n if (powers.length === 0) {\r\n return { selectedTiers: [], confirmMCP: false };\r\n }\r\n\r\n // --powers=none: skip entirely\r\n if (flags.powersFlag === 'none') {\r\n return { selectedTiers: [], confirmMCP: false };\r\n }\r\n\r\n // --powers=all: include everything\r\n if (flags.powersFlag === 'all') {\r\n return { selectedTiers: ['essential', 'recommended', 'optional'], confirmMCP: true };\r\n }\r\n\r\n // --yes: use sensible defaults without prompting\r\n if (flags.yes === true) {\r\n return { selectedTiers: ['essential', 'recommended'], confirmMCP: true };\r\n }\r\n\r\n // Interactive mode\r\n return interactiveTierPrompt(powers);\r\n}\r\n\r\n/**\r\n * Display formatted Powers recommendations in terminal.\r\n * Groups by tier (essential -> recommended -> optional), shows URLs,\r\n * and prints a summary count at the end.\r\n *\r\n * Skips display when quiet=true.\r\n */\r\nexport function displayPowersRecommendations(\r\n powers: PowerEntry[],\r\n quiet: boolean,\r\n): void {\r\n if (quiet || powers.length === 0) {\r\n return;\r\n }\r\n\r\n process.stdout.write('\\n');\r\n process.stdout.write(color.bold('Recommended Kiro Powers:') + '\\n');\r\n\r\n for (const tier of TIER_ORDER) {\r\n const tierPowers = powers.filter((p) => p.tier === tier);\r\n if (tierPowers.length === 0) continue;\r\n\r\n process.stdout.write('\\n');\r\n process.stdout.write(` ${color.cyan(TIER_LABELS[tier])}:\\n`);\r\n\r\n for (const power of tierPowers) {\r\n process.stdout.write(` ${color.bold(power.name)} - ${power.description}\\n`);\r\n process.stdout.write(` ${color.dim(power.url)}\\n`);\r\n }\r\n }\r\n\r\n // Summary count\r\n const counts = countByTier(powers);\r\n const parts: string[] = [];\r\n if (counts.essential > 0) parts.push(`${counts.essential} essential`);\r\n if (counts.recommended > 0) parts.push(`${counts.recommended} recommended`);\r\n if (counts.optional > 0) parts.push(`${counts.optional} optional`);\r\n\r\n process.stdout.write('\\n');\r\n process.stdout.write(color.dim(`${parts.join(', ')} Powers recommended`) + '\\n');\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction countByTier(powers: PowerEntry[]): Record<PowerTier, number> {\r\n const counts: Record<PowerTier, number> = { essential: 0, recommended: 0, optional: 0 };\r\n for (const p of powers) {\r\n counts[p.tier]++;\r\n }\r\n return counts;\r\n}\r\n\r\n/**\r\n * Interactive single-select prompt for tier selection using readline.\r\n * Arrow keys to navigate, Enter to confirm.\r\n */\r\nasync function interactiveTierPrompt(powers: PowerEntry[]): Promise<PowersPromptResult> {\r\n if (!process.stdin.isTTY) {\r\n // Non-interactive fallback: use defaults\r\n return { selectedTiers: ['essential', 'recommended'], confirmMCP: true };\r\n }\r\n\r\n return new Promise<PowersPromptResult>((resolve, reject) => {\r\n let cursor = 1; // Default to \"Essential + Recommended\"\r\n let rendered = false;\r\n\r\n const rl = readline.createInterface({\r\n input: process.stdin,\r\n output: process.stdout,\r\n terminal: false,\r\n });\r\n\r\n const render = (): void => {\r\n if (rendered) {\r\n process.stdout.write('\\x1B[u');\r\n } else {\r\n process.stdout.write('\\x1B[s');\r\n }\r\n rendered = true;\r\n process.stdout.write('\\x1B[J');\r\n process.stdout.write(\r\n color.bold('? Which Powers tiers to include in setup guide?') +\r\n color.dim(' (Arrow keys to select, Enter to confirm)') +\r\n '\\n',\r\n );\r\n for (let i = 0; i < TIER_OPTIONS.length; i++) {\r\n const marker = cursor === i ? color.cyan('>') : ' ';\r\n const label = cursor === i\r\n ? color.cyan(TIER_OPTIONS[i].label)\r\n : TIER_OPTIONS[i].label;\r\n process.stdout.write(` ${marker} ${label}\\n`);\r\n }\r\n };\r\n\r\n render();\r\n\r\n process.stdin.setRawMode(true);\r\n process.stdin.resume();\r\n process.stdin.setEncoding('utf-8');\r\n\r\n let escBuffer = '';\r\n\r\n const handleArrow = (seq: string): boolean => {\r\n if (seq === '\\x1B[A' || seq === '\\x1BOA') {\r\n cursor = (cursor - 1 + TIER_OPTIONS.length) % TIER_OPTIONS.length;\r\n render();\r\n return true;\r\n }\r\n if (seq === '\\x1B[B' || seq === '\\x1BOB') {\r\n cursor = (cursor + 1) % TIER_OPTIONS.length;\r\n render();\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n const cleanup = (): void => {\r\n process.stdin.setRawMode(false);\r\n process.stdin.removeListener('data', onData);\r\n process.stdin.pause();\r\n rl.close();\r\n };\r\n\r\n const onData = (key: string): void => {\r\n // Buffered escape sequence\r\n if (escBuffer.length > 0) {\r\n escBuffer += key;\r\n if (escBuffer.length >= 3) {\r\n const seq = escBuffer;\r\n escBuffer = '';\r\n handleArrow(seq);\r\n }\r\n return;\r\n }\r\n\r\n // Full escape sequence in one chunk\r\n if (key.length >= 3 && key.startsWith('\\x1B')) {\r\n handleArrow(key);\r\n return;\r\n }\r\n\r\n // Start of escape sequence\r\n if (key === '\\x1B') {\r\n escBuffer = key;\r\n setTimeout(() => {\r\n if (escBuffer.length > 0) {\r\n escBuffer = '';\r\n }\r\n }, 50);\r\n return;\r\n }\r\n\r\n // Ctrl+C\r\n if (key === '\\x03') {\r\n cleanup();\r\n reject(new Error('SIGINT'));\r\n return;\r\n }\r\n\r\n // Enter\r\n if (key === '\\r' || key === '\\n') {\r\n cleanup();\r\n const selected = TIER_OPTIONS[cursor];\r\n const confirmMCP = selected.tiers.length > 0;\r\n resolve({ selectedTiers: selected.tiers, confirmMCP });\r\n return;\r\n }\r\n\r\n // Arrow up / k\r\n if (key === 'k') {\r\n cursor = (cursor - 1 + TIER_OPTIONS.length) % TIER_OPTIONS.length;\r\n render();\r\n return;\r\n }\r\n\r\n // Arrow down / j\r\n if (key === 'j') {\r\n cursor = (cursor + 1) % TIER_OPTIONS.length;\r\n render();\r\n return;\r\n }\r\n };\r\n\r\n process.stdin.on('data', onData);\r\n });\r\n}\r\n","import { Command } from 'commander';\r\nimport fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport process from 'node:process';\r\nimport crypto from 'node:crypto';\r\n\r\nimport { load, listAvailable } from '../core/PresetLoader.js';\r\nimport { resolve as resolveConflict, type ConflictMode, type SessionState } from '../core/ConflictResolver.js';\r\nimport { backup } from '../core/BackupManager.js';\r\nimport * as TrackingStore from '../core/TrackingStore.js';\r\nimport * as MetadataWriter from '../core/MetadataWriter.js';\r\nimport * as StatuslineSelector from '../core/StatuslineSelector.js';\r\nimport { mergeMCP, type MCPConfig } from '../core/merge/mergeMCP.js';\r\nimport { mergeSettings, type SettingsConfig } from '../core/merge/mergeSettings.js';\r\nimport { showDiff } from '../prompts/DiffViewer.js';\r\nimport { atomicWrite } from '../utils/fs-safe.js';\r\nimport { logger } from '../utils/logger.js';\r\nimport { color } from '../utils/color.js';\r\nimport { safePathInside } from '../utils/paths.js';\r\n\r\ninterface AddOptions {\r\n yes?: boolean;\r\n force?: boolean;\r\n skipExisting?: boolean;\r\n color?: boolean;\r\n}\r\n\r\nfunction sha256(data: Buffer): string {\r\n return crypto.createHash('sha256').update(data).digest('hex');\r\n}\r\n\r\nfunction generateTimestamp(): string {\r\n const now = new Date();\r\n const y = now.getFullYear();\r\n const mo = String(now.getMonth() + 1).padStart(2, '0');\r\n const d = String(now.getDate()).padStart(2, '0');\r\n const h = String(now.getHours()).padStart(2, '0');\r\n const mi = String(now.getMinutes()).padStart(2, '0');\r\n const s = String(now.getSeconds()).padStart(2, '0');\r\n const ms = String(now.getMilliseconds()).padStart(3, '0');\r\n return `${y}${mo}${d}-${h}${mi}${s}-${ms}`;\r\n}\r\n\r\nfunction getKitVersion(): string {\r\n try {\r\n const pkgPath = new URL('../../package.json', import.meta.url);\r\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')) as { version: string };\r\n return pkg.version;\r\n } catch {\r\n return '0.1.0';\r\n }\r\n}\r\n\r\nasync function conflictPrompt(\r\n target: string,\r\n): Promise<'overwrite' | 'skip' | 'view-diff' | 'overwrite-all'> {\r\n if (!process.stdin.isTTY) return 'skip';\r\n\r\n const { default: readline } = await import('node:readline');\r\n const relTarget = path.relative(process.cwd(), target);\r\n process.stdout.write(\r\n `\\n${color.yellow('?')} File ${color.bold(relTarget)} already exists with different content.\\n` +\r\n ` ${color.cyan('>')} overwrite - Replace existing file (backup will be saved)\\n` +\r\n ` skip - Keep existing file\\n` +\r\n ` view diff - Show unified diff and ask again\\n` +\r\n ` overwrite all - Replace this and all remaining conflicting files\\n`,\r\n );\r\n\r\n return new Promise((resolve) => {\r\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\r\n rl.question(` Choice (overwrite/skip/diff/all): `, (answer) => {\r\n rl.close();\r\n const a = answer.trim().toLowerCase();\r\n if (a === 'o' || a === 'overwrite') resolve('overwrite');\r\n else if (a === 's' || a === 'skip') resolve('skip');\r\n else if (a === 'd' || a === 'diff' || a === 'view diff') resolve('view-diff');\r\n else if (a === 'a' || a === 'all' || a === 'overwrite all') resolve('overwrite-all');\r\n else resolve('skip');\r\n });\r\n });\r\n}\r\n\r\nexport function registerAddCommand(program: Command): void {\r\n program\r\n .command('add <preset>')\r\n .description('Add a preset to existing workspace')\r\n .option('-y, --yes', 'Skip confirmation')\r\n .option('--force', 'Overwrite all files (with backup)')\r\n .option('--skip-existing', 'Skip all existing files')\r\n .option('--no-color', 'Disable ANSI colors')\r\n .action(async (presetName: string, opts: AddOptions) => {\r\n try {\r\n await runAdd(presetName, opts);\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n\r\nasync function runAdd(presetName: string, opts: AddOptions): Promise<void> {\r\n const workspaceRoot = process.cwd();\r\n const available = listAvailable();\r\n\r\n // Validate preset name\r\n if (!available.includes(presetName)) {\r\n logger.error(\r\n `Preset \"${presetName}\" not found. Available: ${available.join(', ')}`,\r\n );\r\n process.exit(1);\r\n }\r\n\r\n // Auto-init: create .kiro/ if it doesn't exist\r\n const kiroDir = path.join(workspaceRoot, '.kiro');\r\n if (!fs.existsSync(kiroDir)) {\r\n fs.mkdirSync(kiroDir, { recursive: true });\r\n logger.info('Created .kiro/ directory.');\r\n }\r\n\r\n // Load preset\r\n const preset = load(presetName);\r\n\r\n // Determine conflict mode\r\n let mode: ConflictMode = 'interactive';\r\n if (opts.force) mode = 'force';\r\n else if (opts.skipExisting) mode = 'skip-existing';\r\n else if (opts.yes) mode = 'skip-existing';\r\n\r\n const sessionState: SessionState = { overwriteAll: false };\r\n const timestamp = generateTimestamp();\r\n const allTrackedFiles: TrackingStore.TrackedFile[] = [];\r\n let filesWritten = 0;\r\n let filesSkipped = 0;\r\n\r\n const { manifest, dir: presetDir } = preset;\r\n\r\n // Separate files by type\r\n const regularFiles = manifest.files.filter(\r\n (f) => !['mcp', 'settings', 'statusline'].includes(f.type),\r\n );\r\n const statuslineFiles = manifest.files.filter((f) => f.type === 'statusline');\r\n\r\n // Process regular files\r\n for (const fileEntry of regularFiles) {\r\n const sourcePath = path.join(presetDir, fileEntry.source);\r\n const targetPath = path.resolve(workspaceRoot, fileEntry.target);\r\n\r\n if (!safePathInside(workspaceRoot, fileEntry.target)) {\r\n logger.warn(`Skipping unsafe path: ${fileEntry.target}`);\r\n filesSkipped++;\r\n continue;\r\n }\r\n\r\n if (!fs.existsSync(sourcePath)) {\r\n logger.debug(`Source file missing: ${sourcePath}`);\r\n continue;\r\n }\r\n\r\n const sourceContent = fs.readFileSync(sourcePath);\r\n\r\n const action = await resolveConflict({\r\n target: targetPath,\r\n sourceContent,\r\n mode,\r\n sessionState,\r\n prompt: conflictPrompt,\r\n showDiff: (t, s) => showDiff(t, s),\r\n });\r\n\r\n switch (action) {\r\n case 'WRITE_NEW':\r\n fs.mkdirSync(path.dirname(targetPath), { recursive: true });\r\n atomicWrite(targetPath, sourceContent.toString('utf-8'));\r\n if (fileEntry.executable && process.platform !== 'win32') {\r\n try { fs.chmodSync(targetPath, 0o755); } catch { /* non-critical */ }\r\n }\r\n filesWritten++;\r\n break;\r\n case 'OVERWRITE_WITH_BACKUP':\r\n backup(workspaceRoot, targetPath, timestamp);\r\n atomicWrite(targetPath, sourceContent.toString('utf-8'));\r\n if (fileEntry.executable && process.platform !== 'win32') {\r\n try { fs.chmodSync(targetPath, 0o755); } catch { /* non-critical */ }\r\n }\r\n filesWritten++;\r\n break;\r\n case 'SKIP':\r\n filesSkipped++;\r\n break;\r\n case 'NO_OP':\r\n break;\r\n }\r\n\r\n if (action !== 'SKIP') {\r\n allTrackedFiles.push({\r\n target: fileEntry.target,\r\n sourcePreset: manifest.name,\r\n contentHash: sha256(sourceContent),\r\n installedAt: new Date().toISOString(),\r\n });\r\n }\r\n }\r\n\r\n // Process statusline files\r\n if (statuslineFiles.length > 0) {\r\n const installed = StatuslineSelector.install(presetDir, workspaceRoot);\r\n filesWritten += installed.length;\r\n for (const f of installed) {\r\n allTrackedFiles.push({\r\n target: f,\r\n sourcePreset: manifest.name,\r\n contentHash: '',\r\n installedAt: new Date().toISOString(),\r\n });\r\n }\r\n }\r\n\r\n // Process MCP merge\r\n if (manifest.mcpServers) {\r\n const mcpPath = path.join(workspaceRoot, '.kiro/settings/mcp.json');\r\n let existingMcp: MCPConfig | null = null;\r\n if (fs.existsSync(mcpPath)) {\r\n try {\r\n existingMcp = JSON.parse(fs.readFileSync(mcpPath, 'utf-8')) as MCPConfig;\r\n } catch { existingMcp = null; }\r\n }\r\n const merged = mergeMCP(existingMcp, manifest.mcpServers, manifest.name);\r\n fs.mkdirSync(path.dirname(mcpPath), { recursive: true });\r\n atomicWrite(mcpPath, JSON.stringify(merged, null, 2) + '\\n');\r\n filesWritten++;\r\n }\r\n\r\n // Process settings merge\r\n const presetSettingsPath = path.join(presetDir, 'settings.json');\r\n if (fs.existsSync(presetSettingsPath)) {\r\n const settingsPath = path.join(workspaceRoot, '.kiro/settings.json');\r\n let existingSettings: SettingsConfig | null = null;\r\n if (fs.existsSync(settingsPath)) {\r\n try {\r\n existingSettings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8')) as SettingsConfig;\r\n } catch { existingSettings = null; }\r\n }\r\n const presetSettings = JSON.parse(fs.readFileSync(presetSettingsPath, 'utf-8')) as SettingsConfig;\r\n const resolvedSettings = StatuslineSelector.resolveSettingsCommand(\r\n presetSettings as Record<string, unknown>,\r\n ) as SettingsConfig;\r\n const merged = mergeSettings(existingSettings, resolvedSettings);\r\n fs.mkdirSync(path.dirname(settingsPath), { recursive: true });\r\n atomicWrite(settingsPath, JSON.stringify(merged, null, 2) + '\\n');\r\n filesWritten++;\r\n }\r\n\r\n // Write metadata\r\n const kitVersion = getKitVersion();\r\n const presetMeta = { name: manifest.name, version: manifest.version };\r\n const existingMeta = MetadataWriter.read(workspaceRoot);\r\n const metadata = existingMeta\r\n ? MetadataWriter.mergePresets(existingMeta, [presetMeta])\r\n : MetadataWriter.compose({ kitVersion, repository: 'https://github.com/ihatesea69/kiro-kit.git', presets: [presetMeta] });\r\n MetadataWriter.write(workspaceRoot, metadata);\r\n\r\n // Write tracking file LAST\r\n let trackingData = TrackingStore.read(workspaceRoot) ?? TrackingStore.createInitial(kitVersion);\r\n const trackedPreset: TrackingStore.TrackedPreset = {\r\n name: manifest.name,\r\n version: manifest.version,\r\n installedAt: new Date().toISOString(),\r\n files: allTrackedFiles,\r\n };\r\n trackingData = TrackingStore.upsertPreset(trackingData, trackedPreset);\r\n trackingData.kitVersion = kitVersion;\r\n TrackingStore.write(workspaceRoot, trackingData);\r\n\r\n // Summary\r\n logger.success(`Done! ${filesWritten} files written, ${filesSkipped} skipped.`);\r\n logger.info(`Preset added: ${presetName}`);\r\n}\r\n","import { Command } from 'commander';\r\nimport process from 'node:process';\r\n\r\nimport { load, listAvailable } from '../core/PresetLoader.js';\r\nimport { logger } from '../utils/logger.js';\r\nimport { color } from '../utils/color.js';\r\n\r\ninterface ListOptions {\r\n json?: boolean;\r\n}\r\n\r\ninterface PresetSummary {\r\n name: string;\r\n description: string;\r\n agents: number;\r\n skills: number;\r\n commands: number;\r\n hooks: number;\r\n workflows: number;\r\n mcp: number;\r\n}\r\n\r\nfunction countArtifacts(files: Array<{ type: string }>): Record<string, number> {\r\n const counts: Record<string, number> = {\r\n agent: 0,\r\n skill: 0,\r\n command: 0,\r\n hook: 0,\r\n workflow: 0,\r\n mcp: 0,\r\n };\r\n for (const f of files) {\r\n if (f.type in counts) {\r\n counts[f.type]++;\r\n }\r\n }\r\n return counts;\r\n}\r\n\r\nexport function registerListCommand(program: Command): void {\r\n program\r\n .command('list')\r\n .description('List available presets')\r\n .option('--json', 'Output as JSON')\r\n .action((opts: ListOptions) => {\r\n try {\r\n runList(opts);\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n\r\nfunction runList(opts: ListOptions): void {\r\n const available = listAvailable();\r\n const summaries: PresetSummary[] = [];\r\n\r\n for (const name of available) {\r\n try {\r\n const preset = load(name);\r\n const counts = countArtifacts(preset.manifest.files);\r\n summaries.push({\r\n name,\r\n description: preset.manifest.description,\r\n agents: counts['agent'],\r\n skills: counts['skill'],\r\n commands: counts['command'],\r\n hooks: counts['hook'],\r\n workflows: counts['workflow'],\r\n mcp: Object.keys(preset.manifest.mcpServers ?? {}).length,\r\n });\r\n } catch {\r\n summaries.push({\r\n name,\r\n description: '(failed to load)',\r\n agents: 0,\r\n skills: 0,\r\n commands: 0,\r\n hooks: 0,\r\n workflows: 0,\r\n mcp: 0,\r\n });\r\n }\r\n }\r\n\r\n if (opts.json) {\r\n process.stdout.write(JSON.stringify(summaries, null, 2) + '\\n');\r\n return;\r\n }\r\n\r\n // Text output\r\n for (const s of summaries) {\r\n const nameStr = color.bold(s.name.padEnd(12));\r\n const descStr = color.dim(`- ${s.description}`);\r\n process.stdout.write(` ${nameStr} ${descStr}\\n`);\r\n const counts = `${s.agents} agents, ${s.skills} skills, ${s.commands} commands, ${s.hooks} hooks, ${s.workflows} workflows, ${s.mcp} MCP servers`;\r\n process.stdout.write(`${''.padEnd(14)} ${color.gray(counts)}\\n`);\r\n }\r\n}\r\n","import { Command } from 'commander';\r\nimport process from 'node:process';\r\n\r\nimport { load, listAvailable } from '../core/PresetLoader.js';\r\nimport { logger } from '../utils/logger.js';\r\nimport { color } from '../utils/color.js';\r\n\r\ninterface InfoOptions {\r\n json?: boolean;\r\n}\r\n\r\ninterface PresetInfo {\r\n name: string;\r\n version: string;\r\n description: string;\r\n category: string;\r\n files: Array<{ source: string; target: string; type: string }>;\r\n mcpServers: string[];\r\n hooks: string[];\r\n agents: string[];\r\n skills: string[];\r\n commands: string[];\r\n workflows: string[];\r\n}\r\n\r\nexport function registerInfoCommand(program: Command): void {\r\n program\r\n .command('info <preset>')\r\n .description('Show detailed preset information')\r\n .option('--json', 'Output as JSON')\r\n .action((presetName: string, opts: InfoOptions) => {\r\n try {\r\n runInfo(presetName, opts);\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n\r\nfunction runInfo(presetName: string, opts: InfoOptions): void {\r\n const available = listAvailable();\r\n\r\n if (!available.includes(presetName)) {\r\n logger.error(\r\n `Preset \"${presetName}\" not found. Available: ${available.join(', ')}`,\r\n );\r\n process.exit(1);\r\n }\r\n\r\n const preset = load(presetName);\r\n const { manifest } = preset;\r\n\r\n const agents = manifest.files.filter((f) => f.type === 'agent').map((f) => f.source);\r\n const skills = manifest.files.filter((f) => f.type === 'skill').map((f) => f.source);\r\n const commands = manifest.files.filter((f) => f.type === 'command').map((f) => f.source);\r\n const workflows = manifest.files.filter((f) => f.type === 'workflow').map((f) => f.source);\r\n const hooks = manifest.files.filter((f) => f.type === 'hook').map((f) => f.source);\r\n const mcpServers = Object.keys(manifest.mcpServers ?? {});\r\n\r\n const info: PresetInfo = {\r\n name: manifest.name,\r\n version: manifest.version,\r\n description: manifest.description,\r\n category: manifest.category,\r\n files: manifest.files.map((f) => ({ source: f.source, target: f.target, type: f.type })),\r\n mcpServers,\r\n hooks,\r\n agents,\r\n skills,\r\n commands,\r\n workflows,\r\n };\r\n\r\n if (opts.json) {\r\n process.stdout.write(JSON.stringify(info, null, 2) + '\\n');\r\n return;\r\n }\r\n\r\n // Text output\r\n process.stdout.write(`\\n${color.bold(manifest.name)} v${manifest.version}\\n`);\r\n process.stdout.write(`${manifest.description}\\n\\n`);\r\n process.stdout.write(`${color.dim('Category:')} ${manifest.category}\\n`);\r\n process.stdout.write(`${color.dim('Total files:')} ${manifest.files.length}\\n\\n`);\r\n\r\n if (mcpServers.length > 0) {\r\n process.stdout.write(`${color.bold('MCP Servers')} (${mcpServers.length}):\\n`);\r\n for (const s of mcpServers) {\r\n process.stdout.write(` - ${s}\\n`);\r\n }\r\n process.stdout.write('\\n');\r\n }\r\n\r\n if (agents.length > 0) {\r\n process.stdout.write(`${color.bold('Agents')} (${agents.length}):\\n`);\r\n for (const a of agents) {\r\n process.stdout.write(` - ${a}\\n`);\r\n }\r\n process.stdout.write('\\n');\r\n }\r\n\r\n if (skills.length > 0) {\r\n process.stdout.write(`${color.bold('Skills')} (${skills.length}):\\n`);\r\n for (const s of skills) {\r\n process.stdout.write(` - ${s}\\n`);\r\n }\r\n process.stdout.write('\\n');\r\n }\r\n\r\n if (commands.length > 0) {\r\n process.stdout.write(`${color.bold('Commands')} (${commands.length}):\\n`);\r\n for (const c of commands) {\r\n process.stdout.write(` - ${c}\\n`);\r\n }\r\n process.stdout.write('\\n');\r\n }\r\n\r\n if (workflows.length > 0) {\r\n process.stdout.write(`${color.bold('Workflows')} (${workflows.length}):\\n`);\r\n for (const w of workflows) {\r\n process.stdout.write(` - ${w}\\n`);\r\n }\r\n process.stdout.write('\\n');\r\n }\r\n\r\n if (hooks.length > 0) {\r\n process.stdout.write(`${color.bold('Hooks')} (${hooks.length}):\\n`);\r\n for (const h of hooks) {\r\n process.stdout.write(` - ${h}\\n`);\r\n }\r\n process.stdout.write('\\n');\r\n }\r\n\r\n // File list with targets\r\n process.stdout.write(`${color.bold('File Targets')}:\\n`);\r\n for (const f of manifest.files) {\r\n process.stdout.write(` ${color.dim(f.type.padEnd(12))} ${f.target}\\n`);\r\n }\r\n}\r\n","import { Command } from 'commander';\r\nimport fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport process from 'node:process';\r\nimport crypto from 'node:crypto';\r\n\r\nimport { load } from '../core/PresetLoader.js';\r\nimport { resolve as resolveConflict, type ConflictMode, type SessionState } from '../core/ConflictResolver.js';\r\nimport { backup } from '../core/BackupManager.js';\r\nimport * as TrackingStore from '../core/TrackingStore.js';\r\nimport { showDiff } from '../prompts/DiffViewer.js';\r\nimport { atomicWrite } from '../utils/fs-safe.js';\r\nimport { logger } from '../utils/logger.js';\r\nimport { color } from '../utils/color.js';\r\nimport { safePathInside } from '../utils/paths.js';\r\n\r\ninterface UpdateOptions {\r\n yes?: boolean;\r\n force?: boolean;\r\n skipExisting?: boolean;\r\n}\r\n\r\nfunction sha256(data: Buffer): string {\r\n return crypto.createHash('sha256').update(data).digest('hex');\r\n}\r\n\r\nfunction generateTimestamp(): string {\r\n const now = new Date();\r\n const y = now.getFullYear();\r\n const mo = String(now.getMonth() + 1).padStart(2, '0');\r\n const d = String(now.getDate()).padStart(2, '0');\r\n const h = String(now.getHours()).padStart(2, '0');\r\n const mi = String(now.getMinutes()).padStart(2, '0');\r\n const s = String(now.getSeconds()).padStart(2, '0');\r\n const ms = String(now.getMilliseconds()).padStart(3, '0');\r\n return `${y}${mo}${d}-${h}${mi}${s}-${ms}`;\r\n}\r\n\r\nfunction getKitVersion(): string {\r\n try {\r\n const pkgPath = new URL('../../package.json', import.meta.url);\r\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')) as { version: string };\r\n return pkg.version;\r\n } catch {\r\n return '0.1.0';\r\n }\r\n}\r\n\r\nasync function conflictPrompt(\r\n target: string,\r\n): Promise<'overwrite' | 'skip' | 'view-diff' | 'overwrite-all'> {\r\n if (!process.stdin.isTTY) return 'skip';\r\n\r\n const { default: readline } = await import('node:readline');\r\n const relTarget = path.relative(process.cwd(), target);\r\n process.stdout.write(\r\n `\\n${color.yellow('?')} File ${color.bold(relTarget)} has changed in the new version.\\n` +\r\n ` ${color.cyan('>')} overwrite - Replace with new version (backup saved)\\n` +\r\n ` skip - Keep current file\\n` +\r\n ` view diff - Show unified diff and ask again\\n` +\r\n ` overwrite all - Replace all remaining changed files\\n`,\r\n );\r\n\r\n return new Promise((resolve) => {\r\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\r\n rl.question(` Choice (overwrite/skip/diff/all): `, (answer) => {\r\n rl.close();\r\n const a = answer.trim().toLowerCase();\r\n if (a === 'o' || a === 'overwrite') resolve('overwrite');\r\n else if (a === 's' || a === 'skip') resolve('skip');\r\n else if (a === 'd' || a === 'diff' || a === 'view diff') resolve('view-diff');\r\n else if (a === 'a' || a === 'all' || a === 'overwrite all') resolve('overwrite-all');\r\n else resolve('skip');\r\n });\r\n });\r\n}\r\n\r\nexport function registerUpdateCommand(program: Command): void {\r\n program\r\n .command('update')\r\n .description('Update installed presets to latest bundled version')\r\n .option('-y, --yes', 'Skip confirmation, auto-skip conflicts')\r\n .option('--force', 'Overwrite all changed files (with backup)')\r\n .option('--skip-existing', 'Skip all changed files')\r\n .action(async (opts: UpdateOptions) => {\r\n try {\r\n await runUpdate(opts);\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n\r\nasync function runUpdate(opts: UpdateOptions): Promise<void> {\r\n const workspaceRoot = process.cwd();\r\n\r\n // Read tracking\r\n const tracking = TrackingStore.read(workspaceRoot);\r\n if (!tracking || tracking.presets.length === 0) {\r\n logger.info('No presets installed. Nothing to update.');\r\n process.exit(0);\r\n }\r\n\r\n let mode: ConflictMode = 'interactive';\r\n if (opts.force) mode = 'force';\r\n else if (opts.skipExisting) mode = 'skip-existing';\r\n else if (opts.yes) mode = 'skip-existing';\r\n\r\n const sessionState: SessionState = { overwriteAll: false };\r\n const timestamp = generateTimestamp();\r\n let totalUpdated = 0;\r\n let totalSkipped = 0;\r\n\r\n for (const trackedPreset of tracking.presets) {\r\n let bundled;\r\n try {\r\n bundled = load(trackedPreset.name);\r\n } catch {\r\n logger.warn(`Preset \"${trackedPreset.name}\" not found in bundled presets. Skipping.`);\r\n continue;\r\n }\r\n\r\n const bundledVersion = bundled.manifest.version;\r\n if (bundledVersion === trackedPreset.version) {\r\n logger.debug(`Preset \"${trackedPreset.name}\" is up to date (v${bundledVersion}).`);\r\n continue;\r\n }\r\n\r\n logger.info(\r\n `Updating ${color.bold(trackedPreset.name)}: v${trackedPreset.version} -> v${bundledVersion}`,\r\n );\r\n\r\n // Find changed files by comparing content hashes\r\n const presetDir = bundled.dir;\r\n const updatedFiles: TrackingStore.TrackedFile[] = [];\r\n\r\n for (const fileEntry of bundled.manifest.files) {\r\n if (['mcp', 'settings', 'statusline'].includes(fileEntry.type)) continue;\r\n\r\n const sourcePath = path.join(presetDir, fileEntry.source);\r\n const targetPath = path.resolve(workspaceRoot, fileEntry.target);\r\n\r\n if (!safePathInside(workspaceRoot, fileEntry.target)) continue;\r\n if (!fs.existsSync(sourcePath)) continue;\r\n\r\n const sourceContent = fs.readFileSync(sourcePath);\r\n const newHash = sha256(sourceContent);\r\n\r\n // Check if file changed from what we installed\r\n const trackedFile = trackedPreset.files.find((f) => f.target === fileEntry.target);\r\n if (trackedFile && trackedFile.contentHash === newHash) {\r\n // Bundled file hasn't changed since last install\r\n continue;\r\n }\r\n\r\n // File has changed in the new version - resolve conflict\r\n const action = await resolveConflict({\r\n target: targetPath,\r\n sourceContent,\r\n mode,\r\n sessionState,\r\n prompt: conflictPrompt,\r\n showDiff: (t, s) => showDiff(t, s),\r\n });\r\n\r\n switch (action) {\r\n case 'WRITE_NEW':\r\n fs.mkdirSync(path.dirname(targetPath), { recursive: true });\r\n atomicWrite(targetPath, sourceContent.toString('utf-8'));\r\n if (fileEntry.executable && process.platform !== 'win32') {\r\n try { fs.chmodSync(targetPath, 0o755); } catch { /* */ }\r\n }\r\n totalUpdated++;\r\n break;\r\n case 'OVERWRITE_WITH_BACKUP':\r\n backup(workspaceRoot, targetPath, timestamp);\r\n atomicWrite(targetPath, sourceContent.toString('utf-8'));\r\n if (fileEntry.executable && process.platform !== 'win32') {\r\n try { fs.chmodSync(targetPath, 0o755); } catch { /* */ }\r\n }\r\n totalUpdated++;\r\n break;\r\n case 'SKIP':\r\n totalSkipped++;\r\n break;\r\n case 'NO_OP':\r\n break;\r\n }\r\n\r\n updatedFiles.push({\r\n target: fileEntry.target,\r\n sourcePreset: bundled.manifest.name,\r\n contentHash: newHash,\r\n installedAt: new Date().toISOString(),\r\n });\r\n }\r\n\r\n // Bump version in tracking\r\n trackedPreset.version = bundledVersion;\r\n trackedPreset.updatedAt = new Date().toISOString();\r\n // Update file hashes for changed files\r\n for (const uf of updatedFiles) {\r\n const idx = trackedPreset.files.findIndex((f) => f.target === uf.target);\r\n if (idx >= 0) {\r\n trackedPreset.files[idx] = uf;\r\n } else {\r\n trackedPreset.files.push(uf);\r\n }\r\n }\r\n }\r\n\r\n // Write updated tracking\r\n tracking.kitVersion = getKitVersion();\r\n tracking.updatedAt = new Date().toISOString();\r\n TrackingStore.write(workspaceRoot, tracking);\r\n\r\n if (totalUpdated === 0 && totalSkipped === 0) {\r\n logger.success('All presets are up to date.');\r\n } else {\r\n logger.success(`Update complete: ${totalUpdated} files updated, ${totalSkipped} skipped.`);\r\n }\r\n}\r\n","import { Command } from 'commander';\r\nimport process from 'node:process';\r\n\r\nimport { restore, listTimestamps } from '../core/BackupManager.js';\r\nimport { logger } from '../utils/logger.js';\r\nimport { color } from '../utils/color.js';\r\n\r\ninterface RestoreOptions {\r\n timestamp?: string;\r\n list?: boolean;\r\n}\r\n\r\nexport function registerRestoreCommand(program: Command): void {\r\n program\r\n .command('restore')\r\n .description('Restore files from backup')\r\n .option('--timestamp <ts>', 'Restore from specific backup timestamp')\r\n .option('--list', 'List available backup timestamps')\r\n .action((opts: RestoreOptions) => {\r\n try {\r\n runRestore(opts);\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n\r\nfunction runRestore(opts: RestoreOptions): void {\r\n const workspaceRoot = process.cwd();\r\n\r\n // --list flag: print available timestamps and exit\r\n if (opts.list) {\r\n const timestamps = listTimestamps(workspaceRoot);\r\n if (timestamps.length === 0) {\r\n logger.info('No backups available.');\r\n process.exit(0);\r\n }\r\n process.stdout.write(`${color.bold('Available backups')}:\\n`);\r\n for (const ts of timestamps) {\r\n process.stdout.write(` ${ts}\\n`);\r\n }\r\n process.exit(0);\r\n }\r\n\r\n // Check if any backups exist\r\n const timestamps = listTimestamps(workspaceRoot);\r\n if (timestamps.length === 0) {\r\n logger.error('No backups found. Nothing to restore.');\r\n process.exit(1);\r\n }\r\n\r\n // Restore from specified timestamp or latest\r\n const restored = restore(workspaceRoot, opts.timestamp);\r\n\r\n if (restored.length === 0) {\r\n logger.info('No files to restore from backup.');\r\n process.exit(0);\r\n }\r\n\r\n process.stdout.write(`${color.bold('Restored files')}:\\n`);\r\n for (const file of restored) {\r\n process.stdout.write(` ${color.green('+')} ${file}\\n`);\r\n }\r\n logger.success(`Restored ${restored.length} files.`);\r\n}\r\n","import { Command } from 'commander';\r\nimport fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport process from 'node:process';\r\n\r\nimport * as TrackingStore from '../core/TrackingStore.js';\r\nimport { logger } from '../utils/logger.js';\r\nimport { color } from '../utils/color.js';\r\n\r\ninterface DoctorOptions {\r\n fix?: boolean;\r\n}\r\n\r\ntype CheckResult = 'PASS' | 'FAIL' | 'WARN';\r\n\r\ninterface CheckReport {\r\n name: string;\r\n result: CheckResult;\r\n message: string;\r\n fixable?: boolean;\r\n fixAction?: () => void;\r\n}\r\n\r\nexport function registerDoctorCommand(program: Command): void {\r\n program\r\n .command('doctor')\r\n .description('Run workspace health checks')\r\n .option('--fix', 'Auto-fix fixable issues')\r\n .action((opts: DoctorOptions) => {\r\n try {\r\n runDoctor(opts);\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n\r\nfunction runDoctor(opts: DoctorOptions): void {\r\n const workspaceRoot = process.cwd();\r\n const checks: CheckReport[] = [];\r\n\r\n // (a) Node >= 18\r\n checks.push(checkNodeVersion());\r\n\r\n // (b) .kiro/ exists\r\n checks.push(checkKiroDir(workspaceRoot));\r\n\r\n // (c) mcp.json valid\r\n checks.push(checkMcpJson(workspaceRoot));\r\n\r\n // (d) tracking valid\r\n checks.push(checkTracking(workspaceRoot));\r\n\r\n // (e) tracked files exist\r\n checks.push(checkTrackedFiles(workspaceRoot));\r\n\r\n // (f) no trailing whitespace in steering front-matter\r\n checks.push(checkSteeringFrontMatter(workspaceRoot));\r\n\r\n // (g) metadata.json valid\r\n checks.push(checkMetadataJson(workspaceRoot));\r\n\r\n // (h) statusline exec bit (Unix)\r\n checks.push(checkStatuslineExecBit(workspaceRoot));\r\n\r\n // Print results\r\n let hasFail = false;\r\n for (const check of checks) {\r\n const tag = formatTag(check.result);\r\n process.stdout.write(`${tag} ${check.message}\\n`);\r\n\r\n if (check.result === 'FAIL') hasFail = true;\r\n\r\n // Apply fix if --fix and fixable\r\n if (opts.fix && check.fixable && check.fixAction) {\r\n check.fixAction();\r\n process.stdout.write(` ${color.green('Fixed!')}\\n`);\r\n }\r\n }\r\n\r\n process.exit(hasFail ? 1 : 0);\r\n}\r\n\r\nfunction formatTag(result: CheckResult): string {\r\n switch (result) {\r\n case 'PASS': return color.green('[PASS]');\r\n case 'FAIL': return color.red('[FAIL]');\r\n case 'WARN': return color.yellow('[WARN]');\r\n }\r\n}\r\n\r\nfunction checkNodeVersion(): CheckReport {\r\n const major = parseInt(process.versions.node.split('.')[0], 10);\r\n if (major >= 18) {\r\n return {\r\n name: 'node-version',\r\n result: 'PASS',\r\n message: `Node.js version >= 18 (${process.version})`,\r\n };\r\n }\r\n return {\r\n name: 'node-version',\r\n result: 'FAIL',\r\n message: `Node.js version >= 18 required (current: ${process.version})`,\r\n };\r\n}\r\n\r\nfunction checkKiroDir(workspaceRoot: string): CheckReport {\r\n const kiroDir = path.join(workspaceRoot, '.kiro');\r\n if (fs.existsSync(kiroDir) && fs.statSync(kiroDir).isDirectory()) {\r\n return { name: 'kiro-dir', result: 'PASS', message: '.kiro/ directory exists' };\r\n }\r\n return {\r\n name: 'kiro-dir',\r\n result: 'FAIL',\r\n message: '.kiro/ directory not found. Run `kiro-kit init` to create it.',\r\n };\r\n}\r\n\r\nfunction checkMcpJson(workspaceRoot: string): CheckReport {\r\n const mcpPath = path.join(workspaceRoot, '.kiro/settings/mcp.json');\r\n if (!fs.existsSync(mcpPath)) {\r\n return { name: 'mcp-json', result: 'WARN', message: '.kiro/settings/mcp.json not found (optional)' };\r\n }\r\n try {\r\n const content = fs.readFileSync(mcpPath, 'utf-8');\r\n JSON.parse(content);\r\n return { name: 'mcp-json', result: 'PASS', message: '.kiro/settings/mcp.json is valid JSON' };\r\n } catch {\r\n return {\r\n name: 'mcp-json',\r\n result: 'FAIL',\r\n message: '.kiro/settings/mcp.json is not valid JSON',\r\n fixable: true,\r\n fixAction: () => {\r\n const mcpPath2 = path.join(workspaceRoot, '.kiro/settings/mcp.json');\r\n fs.writeFileSync(mcpPath2, '{\\n \"mcpServers\": {}\\n}\\n', 'utf-8');\r\n },\r\n };\r\n }\r\n}\r\n\r\nfunction checkTracking(workspaceRoot: string): CheckReport {\r\n const trackingPath = path.join(workspaceRoot, '.kiro/.kiro-kit.json');\r\n if (!fs.existsSync(trackingPath)) {\r\n return { name: 'tracking', result: 'WARN', message: '.kiro/.kiro-kit.json not found (no presets installed)' };\r\n }\r\n try {\r\n const content = fs.readFileSync(trackingPath, 'utf-8');\r\n JSON.parse(content);\r\n return { name: 'tracking', result: 'PASS', message: '.kiro/.kiro-kit.json is valid' };\r\n } catch {\r\n return {\r\n name: 'tracking',\r\n result: 'FAIL',\r\n message: '.kiro/.kiro-kit.json is corrupt (invalid JSON)',\r\n };\r\n }\r\n}\r\n\r\nfunction checkTrackedFiles(workspaceRoot: string): CheckReport {\r\n let tracking: TrackingStore.TrackingData | null;\r\n try {\r\n tracking = TrackingStore.read(workspaceRoot);\r\n } catch {\r\n return { name: 'tracked-files', result: 'WARN', message: 'Cannot read tracking file, skipping file check' };\r\n }\r\n\r\n if (!tracking || tracking.presets.length === 0) {\r\n return { name: 'tracked-files', result: 'PASS', message: 'No tracked files to verify' };\r\n }\r\n\r\n const missing: string[] = [];\r\n for (const preset of tracking.presets) {\r\n for (const file of preset.files) {\r\n const fullPath = path.resolve(workspaceRoot, file.target);\r\n if (!fs.existsSync(fullPath)) {\r\n missing.push(file.target);\r\n }\r\n }\r\n }\r\n\r\n if (missing.length === 0) {\r\n return { name: 'tracked-files', result: 'PASS', message: 'All tracked files exist on disk' };\r\n }\r\n\r\n return {\r\n name: 'tracked-files',\r\n result: 'FAIL',\r\n message: `${missing.length} tracked file(s) missing: ${missing.slice(0, 3).join(', ')}${missing.length > 3 ? '...' : ''}`,\r\n };\r\n}\r\n\r\nfunction checkSteeringFrontMatter(workspaceRoot: string): CheckReport {\r\n const steeringDir = path.join(workspaceRoot, '.kiro/steering');\r\n if (!fs.existsSync(steeringDir)) {\r\n return { name: 'steering-fm', result: 'PASS', message: 'No steering files to check' };\r\n }\r\n\r\n const issues: string[] = [];\r\n\r\n const walkDir = (dir: string): void => {\r\n let entries: fs.Dirent[];\r\n try {\r\n entries = fs.readdirSync(dir, { withFileTypes: true });\r\n } catch { return; }\r\n for (const entry of entries) {\r\n const fullPath = path.join(dir, entry.name);\r\n if (entry.isDirectory()) {\r\n walkDir(fullPath);\r\n } else if (entry.isFile() && entry.name.endsWith('.md')) {\r\n checkSingleSteering(fullPath, issues);\r\n }\r\n }\r\n };\r\n\r\n walkDir(steeringDir);\r\n\r\n if (issues.length === 0) {\r\n return { name: 'steering-fm', result: 'PASS', message: 'Steering front-matter has no trailing whitespace' };\r\n }\r\n\r\n return {\r\n name: 'steering-fm',\r\n result: 'WARN',\r\n message: `${issues.length} steering file(s) have trailing whitespace in front-matter`,\r\n fixable: true,\r\n fixAction: () => {\r\n fixSteeringWhitespace(steeringDir);\r\n },\r\n };\r\n}\r\n\r\nfunction checkSingleSteering(filePath: string, issues: string[]): void {\r\n try {\r\n const content = fs.readFileSync(filePath, 'utf-8');\r\n const lines = content.split('\\n');\r\n if (lines[0]?.trim() !== '---') return;\r\n\r\n let endIdx = -1;\r\n for (let i = 1; i < lines.length; i++) {\r\n if (lines[i]?.trim() === '---') { endIdx = i; break; }\r\n }\r\n if (endIdx === -1) return;\r\n\r\n // Check for trailing whitespace in front-matter lines\r\n for (let i = 1; i < endIdx; i++) {\r\n if (lines[i] !== lines[i].trimEnd()) {\r\n issues.push(filePath);\r\n return;\r\n }\r\n }\r\n } catch { /* skip unreadable files */ }\r\n}\r\n\r\nfunction fixSteeringWhitespace(steeringDir: string): void {\r\n const walkAndFix = (dir: string): void => {\r\n let entries: fs.Dirent[];\r\n try { entries = fs.readdirSync(dir, { withFileTypes: true }); } catch { return; }\r\n for (const entry of entries) {\r\n const fullPath = path.join(dir, entry.name);\r\n if (entry.isDirectory()) {\r\n walkAndFix(fullPath);\r\n } else if (entry.isFile() && entry.name.endsWith('.md')) {\r\n const content = fs.readFileSync(fullPath, 'utf-8');\r\n const lines = content.split('\\n');\r\n if (lines[0]?.trim() !== '---') continue;\r\n let endIdx = -1;\r\n for (let i = 1; i < lines.length; i++) {\r\n if (lines[i]?.trim() === '---') { endIdx = i; break; }\r\n }\r\n if (endIdx === -1) continue;\r\n let changed = false;\r\n for (let i = 1; i < endIdx; i++) {\r\n const trimmed = lines[i].trimEnd();\r\n if (lines[i] !== trimmed) { lines[i] = trimmed; changed = true; }\r\n }\r\n if (changed) {\r\n fs.writeFileSync(fullPath, lines.join('\\n'), 'utf-8');\r\n }\r\n }\r\n }\r\n };\r\n walkAndFix(steeringDir);\r\n}\r\n\r\nfunction checkMetadataJson(workspaceRoot: string): CheckReport {\r\n const metaPath = path.join(workspaceRoot, '.kiro/metadata.json');\r\n if (!fs.existsSync(metaPath)) {\r\n return { name: 'metadata-json', result: 'WARN', message: '.kiro/metadata.json not found (optional)' };\r\n }\r\n try {\r\n const content = fs.readFileSync(metaPath, 'utf-8');\r\n const parsed = JSON.parse(content);\r\n if (!parsed.version || !parsed.name) {\r\n return { name: 'metadata-json', result: 'FAIL', message: '.kiro/metadata.json missing required fields (version, name)' };\r\n }\r\n return { name: 'metadata-json', result: 'PASS', message: '.kiro/metadata.json is valid' };\r\n } catch {\r\n return { name: 'metadata-json', result: 'FAIL', message: '.kiro/metadata.json is not valid JSON' };\r\n }\r\n}\r\n\r\nfunction checkStatuslineExecBit(workspaceRoot: string): CheckReport {\r\n // Only relevant on Unix\r\n if (process.platform === 'win32') {\r\n return { name: 'statusline-exec', result: 'PASS', message: 'Statusline exec bit check (skipped on Windows)' };\r\n }\r\n\r\n const shPath = path.join(workspaceRoot, '.kiro/statusline.sh');\r\n if (!fs.existsSync(shPath)) {\r\n return { name: 'statusline-exec', result: 'PASS', message: 'No statusline.sh to check' };\r\n }\r\n\r\n try {\r\n const stat = fs.statSync(shPath);\r\n const isExecutable = (stat.mode & 0o111) !== 0;\r\n if (isExecutable) {\r\n return { name: 'statusline-exec', result: 'PASS', message: 'statusline.sh is executable' };\r\n }\r\n return {\r\n name: 'statusline-exec',\r\n result: 'WARN',\r\n message: 'statusline.sh is not executable',\r\n fixable: true,\r\n fixAction: () => {\r\n fs.chmodSync(shPath, 0o755);\r\n },\r\n };\r\n } catch {\r\n return { name: 'statusline-exec', result: 'WARN', message: 'Cannot check statusline.sh permissions' };\r\n }\r\n}\r\n","import { Command } from 'commander';\r\nimport fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport os from 'node:os';\r\nimport process from 'node:process';\r\n\r\nimport { logger } from '../utils/logger.js';\r\nimport { color } from '../utils/color.js';\r\n\r\nconst CONFIG_DIR = path.join(os.homedir(), '.kiro-kit');\r\nconst CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');\r\n\r\ninterface TelemetryConfig {\r\n telemetry: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\nfunction readConfig(): TelemetryConfig {\r\n try {\r\n if (fs.existsSync(CONFIG_FILE)) {\r\n return JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf-8')) as TelemetryConfig;\r\n }\r\n } catch { /* ignore corrupt config */ }\r\n return { telemetry: false };\r\n}\r\n\r\nfunction writeConfig(config: TelemetryConfig): void {\r\n fs.mkdirSync(CONFIG_DIR, { recursive: true });\r\n fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + '\\n', 'utf-8');\r\n}\r\n\r\nexport function registerTelemetryCommand(program: Command): void {\r\n const telemetry = program\r\n .command('telemetry')\r\n .description('Manage anonymous usage telemetry');\r\n\r\n telemetry\r\n .command('enable')\r\n .description('Opt in to anonymous telemetry')\r\n .action(() => {\r\n try {\r\n const config = readConfig();\r\n config.telemetry = true;\r\n writeConfig(config);\r\n logger.success('Telemetry enabled. Anonymous usage data will be collected.');\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n\r\n telemetry\r\n .command('disable')\r\n .description('Opt out of telemetry')\r\n .action(() => {\r\n try {\r\n const config = readConfig();\r\n config.telemetry = false;\r\n writeConfig(config);\r\n logger.success('Telemetry disabled. No data will be collected.');\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n\r\n telemetry\r\n .command('status')\r\n .description('Show current telemetry status')\r\n .action(() => {\r\n try {\r\n const config = readConfig();\r\n const status = config.telemetry ? color.green('enabled') : color.yellow('disabled');\r\n process.stdout.write(`Telemetry: ${status}\\n`);\r\n process.stdout.write(`Config: ${CONFIG_FILE}\\n`);\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n"],"mappings":"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","names":["process","fs","path","process","readline","crypto","fs","path","path","fs","fs","showDiff","fs","path","path","fs","fs","path","process","process","process","path","fs","fs","path","write","read","fs","path","process","fs","fs","fs","path","crypto","path","path","fs","path","z","fs","path","path","fs","fs","path","path","fs","fs","path","path","fs","TIER_ORDER","resolve","process","readline","resolve","path","sha256","crypto","program","generateTimestamp","fs","read","write","pkg","fs","path","process","crypto","sha256","crypto","generateTimestamp","getKitVersion","pkg","fs","conflictPrompt","process","readline","path","resolve","program","read","write","process","program","process","process","program","process","fs","path","process","crypto","sha256","crypto","generateTimestamp","getKitVersion","pkg","fs","conflictPrompt","process","readline","path","resolve","program","process","program","process","timestamps","fs","path","process","program","process","major","path","fs","fs","path","os","process","path","os","fs","program","process","process","require"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/chalk@5.3.0/node_modules/chalk/source/vendor/ansi-styles/index.js","../../../node_modules/.pnpm/chalk@5.3.0/node_modules/chalk/source/vendor/supports-color/index.js","../../../node_modules/.pnpm/chalk@5.3.0/node_modules/chalk/source/utilities.js","../../../node_modules/.pnpm/chalk@5.3.0/node_modules/chalk/source/index.js","../../../node_modules/.pnpm/figlet@1.7.0/node_modules/figlet/lib/figlet.js","../../../node_modules/.pnpm/figlet@1.7.0/node_modules/figlet/lib/node-figlet.js","../../../node_modules/.pnpm/color-name@1.1.4/node_modules/color-name/index.js","../../../node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/conversions.js","../../../node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/route.js","../../../node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/index.js","../../../node_modules/.pnpm/ansi-styles@4.3.0/node_modules/ansi-styles/index.js","../../../node_modules/.pnpm/has-flag@4.0.0/node_modules/has-flag/index.js","../../../node_modules/.pnpm/supports-color@7.2.0/node_modules/supports-color/index.js","../../../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk/source/util.js","../../../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk/source/templates.js","../../../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk/source/index.js","../../../node_modules/.pnpm/tinycolor2@1.6.0/node_modules/tinycolor2/cjs/tinycolor.js","../../../node_modules/.pnpm/tinygradient@1.1.5/node_modules/tinygradient/index.js","../../../node_modules/.pnpm/gradient-string@2.0.2/node_modules/gradient-string/index.js","../../../node_modules/.pnpm/ansi-regex@6.2.2/node_modules/ansi-regex/index.js","../../../node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js","../../../node_modules/.pnpm/eastasianwidth@0.2.0/node_modules/eastasianwidth/eastasianwidth.js","../../../node_modules/.pnpm/emoji-regex@9.2.2/node_modules/emoji-regex/index.js","../../../node_modules/.pnpm/string-width@5.1.2/node_modules/string-width/index.js","../../../node_modules/.pnpm/widest-line@4.0.1/node_modules/widest-line/index.js","../../../node_modules/.pnpm/cli-boxes@3.0.0/node_modules/cli-boxes/boxes.json","../../../node_modules/.pnpm/cli-boxes@3.0.0/node_modules/cli-boxes/index.js","../../../node_modules/.pnpm/camelcase@7.0.1/node_modules/camelcase/index.js","../../../node_modules/.pnpm/ansi-regex@5.0.1/node_modules/ansi-regex/index.js","../../../node_modules/.pnpm/strip-ansi@6.0.1/node_modules/strip-ansi/index.js","../../../node_modules/.pnpm/is-fullwidth-code-point@3.0.0/node_modules/is-fullwidth-code-point/index.js","../../../node_modules/.pnpm/emoji-regex@8.0.0/node_modules/emoji-regex/index.js","../../../node_modules/.pnpm/string-width@4.2.3/node_modules/string-width/index.js","../../../node_modules/.pnpm/ansi-align@3.0.1/node_modules/ansi-align/index.js","../../../node_modules/.pnpm/ansi-styles@6.2.3/node_modules/ansi-styles/index.js","../../../node_modules/.pnpm/wrap-ansi@8.1.0/node_modules/wrap-ansi/index.js","../../../node_modules/.pnpm/boxen@7.1.1/node_modules/boxen/index.js","../../../node_modules/.pnpm/eventemitter3@5.0.4/node_modules/eventemitter3/index.js","../../../node_modules/.pnpm/eventemitter3@5.0.4/node_modules/eventemitter3/index.mjs","../../../node_modules/.pnpm/colorette@2.0.20/node_modules/colorette/index.js","../../../node_modules/.pnpm/rfdc@1.4.1/node_modules/rfdc/index.js","../../../node_modules/.pnpm/environment@1.1.0/node_modules/environment/index.js","../../../node_modules/.pnpm/ansi-escapes@7.3.0/node_modules/ansi-escapes/base.js","../../../node_modules/.pnpm/ansi-escapes@7.3.0/node_modules/ansi-escapes/index.js","../../../node_modules/.pnpm/mimic-function@5.0.1/node_modules/mimic-function/index.js","../../../node_modules/.pnpm/onetime@7.0.0/node_modules/onetime/index.js","../../../node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/src/signals.ts","../../../node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/src/index.ts","../../../node_modules/.pnpm/restore-cursor@5.1.0/node_modules/restore-cursor/index.js","../../../node_modules/.pnpm/cli-cursor@5.0.0/node_modules/cli-cursor/index.js","../../../node_modules/.pnpm/get-east-asian-width@1.6.0/node_modules/get-east-asian-width/lookup-data.js","../../../node_modules/.pnpm/get-east-asian-width@1.6.0/node_modules/get-east-asian-width/utilities.js","../../../node_modules/.pnpm/get-east-asian-width@1.6.0/node_modules/get-east-asian-width/lookup.js","../../../node_modules/.pnpm/get-east-asian-width@1.6.0/node_modules/get-east-asian-width/index.js","../../../node_modules/.pnpm/emoji-regex@10.6.0/node_modules/emoji-regex/index.mjs","../../../node_modules/.pnpm/string-width@7.2.0/node_modules/string-width/index.js","../../../node_modules/.pnpm/wrap-ansi@9.0.2/node_modules/wrap-ansi/index.js","../../../node_modules/.pnpm/is-fullwidth-code-point@5.1.0/node_modules/is-fullwidth-code-point/index.js","../../../node_modules/.pnpm/slice-ansi@7.1.2/node_modules/slice-ansi/index.js","../../../node_modules/.pnpm/log-update@6.1.0/node_modules/log-update/index.js","../../../node_modules/.pnpm/is-fullwidth-code-point@4.0.0/node_modules/is-fullwidth-code-point/index.js","../../../node_modules/.pnpm/slice-ansi@5.0.0/node_modules/slice-ansi/index.js","../../../node_modules/.pnpm/cli-truncate@4.0.0/node_modules/cli-truncate/index.js","../../../node_modules/.pnpm/listr2@8.0.1/node_modules/listr2/dist/index.js","../../../node_modules/.pnpm/kleur@3.0.3/node_modules/kleur/index.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/util/action.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/util/strip.js","../../../node_modules/.pnpm/sisteransi@1.0.5/node_modules/sisteransi/src/index.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/util/clear.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/util/figures.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/util/style.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/util/lines.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/util/wrap.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/util/entriesToDisplay.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/util/index.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/elements/prompt.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/elements/text.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/elements/select.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/elements/toggle.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/dateparts/datepart.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/dateparts/meridiem.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/dateparts/day.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/dateparts/hours.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/dateparts/milliseconds.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/dateparts/minutes.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/dateparts/month.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/dateparts/seconds.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/dateparts/year.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/dateparts/index.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/elements/date.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/elements/number.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/elements/multiselect.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/elements/autocomplete.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/elements/autocompleteMultiselect.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/elements/confirm.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/elements/index.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/prompts.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/index.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/util/action.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/util/strip.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/util/clear.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/util/figures.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/util/style.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/util/lines.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/util/wrap.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/util/entriesToDisplay.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/util/index.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/elements/prompt.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/elements/text.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/elements/select.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/elements/toggle.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/dateparts/datepart.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/dateparts/meridiem.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/dateparts/day.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/dateparts/hours.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/dateparts/milliseconds.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/dateparts/minutes.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/dateparts/month.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/dateparts/seconds.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/dateparts/year.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/dateparts/index.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/elements/date.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/elements/number.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/elements/multiselect.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/elements/autocomplete.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/elements/autocompleteMultiselect.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/elements/confirm.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/elements/index.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/prompts.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/lib/index.js","../../../node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/index.js","../../../node_modules/.pnpm/ansi-escapes@5.0.0/node_modules/ansi-escapes/index.js","../../../node_modules/.pnpm/supports-hyperlinks@2.3.0/node_modules/supports-hyperlinks/index.js","../../../node_modules/.pnpm/terminal-link@3.0.0/node_modules/terminal-link/index.js","../src/index.ts","../src/commands/init.ts","../src/core/PresetLoader.ts","../src/core/ManifestParser.ts","../src/core/errors.ts","../src/core/ConflictResolver.ts","../src/core/BackupManager.ts","../src/core/TrackingStore.ts","../src/utils/logger.ts","../src/utils/color.ts","../src/core/MetadataWriter.ts","../src/core/StatuslineSelector.ts","../src/core/merge/mergeMCP.ts","../src/core/merge/mergeSettings.ts","../src/prompts/DiffViewer.ts","../src/utils/fs-safe.ts","../src/utils/paths.ts","../src/core/PowersLoader.ts","../src/core/MCPConfigurator.ts","../src/core/SetupGuideGenerator.ts","../src/core/EnvTemplateGenerator.ts","../src/prompts/PowersPrompter.ts","../src/ui/capability.ts","../src/ui/vendor.ts","../src/ui/theme.ts","../src/ui/Logo.ts","../src/ui/ThemedBox.ts","../src/ui/screens/InitScreens.ts","../src/ui/ThemedPrompt.ts","../src/ui/TaskRunner.ts","../src/commands/add.ts","../src/commands/list.ts","../src/commands/info.ts","../src/commands/update.ts","../src/commands/restore.ts","../src/commands/doctor.ts","../src/commands/telemetry.ts"],"sourcesContent":["const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif ('GITHUB_ACTIONS' in env || 'GITEA_ACTIONS' in env) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","/*\n FIGlet.js (a FIGDriver for FIGlet fonts)\n Written by https://github.com/patorjk/figlet.js/graphs/contributors\n Originally Written For: http://patorjk.com/software/taag/\n License: MIT (with this header staying intact)\n\n This JavaScript code aims to fully implement the FIGlet spec.\n Full FIGlet spec: http://patorjk.com/software/taag/docs/figfont.txt\n\n FIGlet fonts are actually kind of complex, which is why you will see\n a lot of code about parsing and interpreting rules. The actual generation\n code is pretty simple and is done near the bottom of the code.\n*/\n\n\"use strict\";\n\nconst figlet = (() => {\n // ---------------------------------------------------------------------\n // Private static variables\n\n const FULL_WIDTH = 0,\n FITTING = 1,\n SMUSHING = 2,\n CONTROLLED_SMUSHING = 3;\n\n // ---------------------------------------------------------------------\n // Variable that will hold information about the fonts\n\n const figFonts = {}; // What stores all of the FIGlet font data\n const figDefaults = {\n font: \"Standard\",\n fontPath: \"./fonts\",\n };\n\n // ---------------------------------------------------------------------\n // Private static methods\n\n /*\n This method takes in the oldLayout and newLayout data from the FIGfont header file and returns\n the layout information.\n */\n function getSmushingRules(oldLayout, newLayout) {\n let rules = {};\n let val, index, len, code;\n let codes = [\n [16384, \"vLayout\", SMUSHING],\n [8192, \"vLayout\", FITTING],\n [4096, \"vRule5\", true],\n [2048, \"vRule4\", true],\n [1024, \"vRule3\", true],\n [512, \"vRule2\", true],\n [256, \"vRule1\", true],\n [128, \"hLayout\", SMUSHING],\n [64, \"hLayout\", FITTING],\n [32, \"hRule6\", true],\n [16, \"hRule5\", true],\n [8, \"hRule4\", true],\n [4, \"hRule3\", true],\n [2, \"hRule2\", true],\n [1, \"hRule1\", true],\n ];\n\n val = newLayout !== null ? newLayout : oldLayout;\n index = 0;\n len = codes.length;\n while (index < len) {\n code = codes[index];\n if (val >= code[0]) {\n val = val - code[0];\n rules[code[1]] =\n typeof rules[code[1]] === \"undefined\" ? code[2] : rules[code[1]];\n } else if (code[1] !== \"vLayout\" && code[1] !== \"hLayout\") {\n rules[code[1]] = false;\n }\n index++;\n }\n\n if (typeof rules[\"hLayout\"] === \"undefined\") {\n if (oldLayout === 0) {\n rules[\"hLayout\"] = FITTING;\n } else if (oldLayout === -1) {\n rules[\"hLayout\"] = FULL_WIDTH;\n } else {\n if (\n rules[\"hRule1\"] ||\n rules[\"hRule2\"] ||\n rules[\"hRule3\"] ||\n rules[\"hRule4\"] ||\n rules[\"hRule5\"] ||\n rules[\"hRule6\"]\n ) {\n rules[\"hLayout\"] = CONTROLLED_SMUSHING;\n } else {\n rules[\"hLayout\"] = SMUSHING;\n }\n }\n } else if (rules[\"hLayout\"] === SMUSHING) {\n if (\n rules[\"hRule1\"] ||\n rules[\"hRule2\"] ||\n rules[\"hRule3\"] ||\n rules[\"hRule4\"] ||\n rules[\"hRule5\"] ||\n rules[\"hRule6\"]\n ) {\n rules[\"hLayout\"] = CONTROLLED_SMUSHING;\n }\n }\n\n if (typeof rules[\"vLayout\"] === \"undefined\") {\n if (\n rules[\"vRule1\"] ||\n rules[\"vRule2\"] ||\n rules[\"vRule3\"] ||\n rules[\"vRule4\"] ||\n rules[\"vRule5\"]\n ) {\n rules[\"vLayout\"] = CONTROLLED_SMUSHING;\n } else {\n rules[\"vLayout\"] = FULL_WIDTH;\n }\n } else if (rules[\"vLayout\"] === SMUSHING) {\n if (\n rules[\"vRule1\"] ||\n rules[\"vRule2\"] ||\n rules[\"vRule3\"] ||\n rules[\"vRule4\"] ||\n rules[\"vRule5\"]\n ) {\n rules[\"vLayout\"] = CONTROLLED_SMUSHING;\n }\n }\n\n return rules;\n }\n\n /* The [vh]Rule[1-6]_Smush functions return the smushed character OR false if the two characters can't be smushed */\n\n /*\n Rule 1: EQUAL CHARACTER SMUSHING (code value 1)\n\n Two sub-characters are smushed into a single sub-character\n if they are the same. This rule does not smush\n hardblanks. (See rule 6 on hardblanks below)\n */\n function hRule1_Smush(ch1, ch2, hardBlank) {\n if (ch1 === ch2 && ch1 !== hardBlank) {\n return ch1;\n }\n return false;\n }\n\n /*\n Rule 2: UNDERSCORE SMUSHING (code value 2)\n\n An underscore (\"_\") will be replaced by any of: \"|\", \"/\",\n \"\\\", \"[\", \"]\", \"{\", \"}\", \"(\", \")\", \"<\" or \">\".\n */\n function hRule2_Smush(ch1, ch2) {\n let rule2Str = \"|/\\\\[]{}()<>\";\n if (ch1 === \"_\") {\n if (rule2Str.indexOf(ch2) !== -1) {\n return ch2;\n }\n } else if (ch2 === \"_\") {\n if (rule2Str.indexOf(ch1) !== -1) {\n return ch1;\n }\n }\n return false;\n }\n\n /*\n Rule 3: HIERARCHY SMUSHING (code value 4)\n\n A hierarchy of six classes is used: \"|\", \"/\\\", \"[]\", \"{}\",\n \"()\", and \"<>\". When two smushing sub-characters are\n from different classes, the one from the latter class\n will be used.\n */\n function hRule3_Smush(ch1, ch2) {\n let rule3Classes = \"| /\\\\ [] {} () <>\";\n let r3_pos1 = rule3Classes.indexOf(ch1);\n let r3_pos2 = rule3Classes.indexOf(ch2);\n if (r3_pos1 !== -1 && r3_pos2 !== -1) {\n if (r3_pos1 !== r3_pos2 && Math.abs(r3_pos1 - r3_pos2) !== 1) {\n const startPos = Math.max(r3_pos1, r3_pos2);\n const endPos = startPos + 1;\n return rule3Classes.substring(startPos, endPos);\n }\n }\n return false;\n }\n\n /*\n Rule 4: OPPOSITE PAIR SMUSHING (code value 8)\n\n Smushes opposing brackets (\"[]\" or \"][\"), braces (\"{}\" or\n \"}{\") and parentheses (\"()\" or \")(\") together, replacing\n any such pair with a vertical bar (\"|\").\n */\n function hRule4_Smush(ch1, ch2) {\n let rule4Str = \"[] {} ()\";\n let r4_pos1 = rule4Str.indexOf(ch1);\n let r4_pos2 = rule4Str.indexOf(ch2);\n if (r4_pos1 !== -1 && r4_pos2 !== -1) {\n if (Math.abs(r4_pos1 - r4_pos2) <= 1) {\n return \"|\";\n }\n }\n return false;\n }\n\n /*\n Rule 5: BIG X SMUSHING (code value 16)\n\n Smushes \"/\\\" into \"|\", \"\\/\" into \"Y\", and \"><\" into \"X\".\n Note that \"<>\" is not smushed in any way by this rule.\n The name \"BIG X\" is historical; originally all three pairs\n were smushed into \"X\".\n */\n function hRule5_Smush(ch1, ch2) {\n let rule5Str = \"/\\\\ \\\\/ ><\";\n let rule5Hash = { 0: \"|\", 3: \"Y\", 6: \"X\" };\n let r5_pos1 = rule5Str.indexOf(ch1);\n let r5_pos2 = rule5Str.indexOf(ch2);\n if (r5_pos1 !== -1 && r5_pos2 !== -1) {\n if (r5_pos2 - r5_pos1 === 1) {\n return rule5Hash[r5_pos1];\n }\n }\n return false;\n }\n\n /*\n Rule 6: HARDBLANK SMUSHING (code value 32)\n\n Smushes two hardblanks together, replacing them with a\n single hardblank. (See \"Hardblanks\" below.)\n */\n function hRule6_Smush(ch1, ch2, hardBlank) {\n if (ch1 === hardBlank && ch2 === hardBlank) {\n return hardBlank;\n }\n return false;\n }\n\n /*\n Rule 1: EQUAL CHARACTER SMUSHING (code value 256)\n\n Same as horizontal smushing rule 1.\n */\n function vRule1_Smush(ch1, ch2) {\n if (ch1 === ch2) {\n return ch1;\n }\n return false;\n }\n\n /*\n Rule 2: UNDERSCORE SMUSHING (code value 512)\n\n Same as horizontal smushing rule 2.\n */\n function vRule2_Smush(ch1, ch2) {\n let rule2Str = \"|/\\\\[]{}()<>\";\n if (ch1 === \"_\") {\n if (rule2Str.indexOf(ch2) !== -1) {\n return ch2;\n }\n } else if (ch2 === \"_\") {\n if (rule2Str.indexOf(ch1) !== -1) {\n return ch1;\n }\n }\n return false;\n }\n\n /*\n Rule 3: HIERARCHY SMUSHING (code value 1024)\n\n Same as horizontal smushing rule 3.\n */\n function vRule3_Smush(ch1, ch2) {\n let rule3Classes = \"| /\\\\ [] {} () <>\";\n let r3_pos1 = rule3Classes.indexOf(ch1);\n let r3_pos2 = rule3Classes.indexOf(ch2);\n if (r3_pos1 !== -1 && r3_pos2 !== -1) {\n if (r3_pos1 !== r3_pos2 && Math.abs(r3_pos1 - r3_pos2) !== 1) {\n const startPos = Math.max(r3_pos1, r3_pos2);\n const endPos = startPos + 1;\n return rule3Classes.substring(startPos, endPos);\n }\n }\n return false;\n }\n\n /*\n Rule 4: HORIZONTAL LINE SMUSHING (code value 2048)\n\n Smushes stacked pairs of \"-\" and \"_\", replacing them with\n a single \"=\" sub-character. It does not matter which is\n found above the other. Note that vertical smushing rule 1\n will smush IDENTICAL pairs of horizontal lines, while this\n rule smushes horizontal lines consisting of DIFFERENT\n sub-characters.\n */\n function vRule4_Smush(ch1, ch2) {\n if ((ch1 === \"-\" && ch2 === \"_\") || (ch1 === \"_\" && ch2 === \"-\")) {\n return \"=\";\n }\n return false;\n }\n\n /*\n Rule 5: VERTICAL LINE SUPERSMUSHING (code value 4096)\n\n This one rule is different from all others, in that it\n \"supersmushes\" vertical lines consisting of several\n vertical bars (\"|\"). This creates the illusion that\n FIGcharacters have slid vertically against each other.\n Supersmushing continues until any sub-characters other\n than \"|\" would have to be smushed. Supersmushing can\n produce impressive results, but it is seldom possible,\n since other sub-characters would usually have to be\n considered for smushing as soon as any such stacked\n vertical lines are encountered.\n */\n function vRule5_Smush(ch1, ch2) {\n if (ch1 === \"|\" && ch2 === \"|\") {\n return \"|\";\n }\n return false;\n }\n\n /*\n Universal smushing simply overrides the sub-character from the\n earlier FIGcharacter with the sub-character from the later\n FIGcharacter. This produces an \"overlapping\" effect with some\n FIGfonts, wherin the latter FIGcharacter may appear to be \"in\n front\".\n */\n function uni_Smush(ch1, ch2, hardBlank) {\n if (ch2 === \" \" || ch2 === \"\") {\n return ch1;\n } else if (ch2 === hardBlank && ch1 !== \" \") {\n return ch1;\n } else {\n return ch2;\n }\n }\n\n // --------------------------------------------------------------------------\n // main vertical smush routines (excluding rules)\n\n /*\n txt1 - A line of text\n txt2 - A line of text\n opts - FIGlet options array\n\n About: Takes in two lines of text and returns one of the following:\n \"valid\" - These lines can be smushed together given the current smushing rules\n \"end\" - The lines can be smushed, but we're at a stopping point\n \"invalid\" - The two lines cannot be smushed together\n */\n function canVerticalSmush(txt1, txt2, opts) {\n if (opts.fittingRules.vLayout === FULL_WIDTH) {\n return \"invalid\";\n }\n let ii,\n len = Math.min(txt1.length, txt2.length),\n ch1,\n ch2,\n endSmush = false,\n validSmush;\n if (len === 0) {\n return \"invalid\";\n }\n\n for (ii = 0; ii < len; ii++) {\n ch1 = txt1.substring(ii, ii + 1);\n ch2 = txt2.substring(ii, ii + 1);\n if (ch1 !== \" \" && ch2 !== \" \") {\n if (opts.fittingRules.vLayout === FITTING) {\n return \"invalid\";\n } else if (opts.fittingRules.vLayout === SMUSHING) {\n return \"end\";\n } else {\n if (vRule5_Smush(ch1, ch2)) {\n endSmush = endSmush || false;\n continue;\n } // rule 5 allow for \"super\" smushing, but only if we're not already ending this smush\n validSmush = false;\n validSmush = opts.fittingRules.vRule1\n ? vRule1_Smush(ch1, ch2)\n : validSmush;\n validSmush =\n !validSmush && opts.fittingRules.vRule2\n ? vRule2_Smush(ch1, ch2)\n : validSmush;\n validSmush =\n !validSmush && opts.fittingRules.vRule3\n ? vRule3_Smush(ch1, ch2)\n : validSmush;\n validSmush =\n !validSmush && opts.fittingRules.vRule4\n ? vRule4_Smush(ch1, ch2)\n : validSmush;\n endSmush = true;\n if (!validSmush) {\n return \"invalid\";\n }\n }\n }\n }\n if (endSmush) {\n return \"end\";\n } else {\n return \"valid\";\n }\n }\n\n function getVerticalSmushDist(lines1, lines2, opts) {\n let maxDist = lines1.length;\n let len1 = lines1.length;\n let len2 = lines2.length;\n let subLines1, subLines2, slen;\n let curDist = 1;\n let ii, ret, result;\n while (curDist <= maxDist) {\n subLines1 = lines1.slice(Math.max(0, len1 - curDist), len1);\n subLines2 = lines2.slice(0, Math.min(maxDist, curDist));\n\n slen = subLines2.length; //TODO:check this\n result = \"\";\n for (ii = 0; ii < slen; ii++) {\n ret = canVerticalSmush(subLines1[ii], subLines2[ii], opts);\n if (ret === \"end\") {\n result = ret;\n } else if (ret === \"invalid\") {\n result = ret;\n break;\n } else {\n if (result === \"\") {\n result = \"valid\";\n }\n }\n }\n\n if (result === \"invalid\") {\n curDist--;\n break;\n }\n if (result === \"end\") {\n break;\n }\n if (result === \"valid\") {\n curDist++;\n }\n }\n\n return Math.min(maxDist, curDist);\n }\n\n function verticallySmushLines(line1, line2, opts) {\n let ii,\n len = Math.min(line1.length, line2.length);\n let ch1,\n ch2,\n result = \"\",\n validSmush;\n\n for (ii = 0; ii < len; ii++) {\n ch1 = line1.substring(ii, ii + 1);\n ch2 = line2.substring(ii, ii + 1);\n if (ch1 !== \" \" && ch2 !== \" \") {\n if (opts.fittingRules.vLayout === FITTING) {\n result += uni_Smush(ch1, ch2);\n } else if (opts.fittingRules.vLayout === SMUSHING) {\n result += uni_Smush(ch1, ch2);\n } else {\n validSmush = false;\n validSmush = opts.fittingRules.vRule5\n ? vRule5_Smush(ch1, ch2)\n : validSmush;\n validSmush =\n !validSmush && opts.fittingRules.vRule1\n ? vRule1_Smush(ch1, ch2)\n : validSmush;\n validSmush =\n !validSmush && opts.fittingRules.vRule2\n ? vRule2_Smush(ch1, ch2)\n : validSmush;\n validSmush =\n !validSmush && opts.fittingRules.vRule3\n ? vRule3_Smush(ch1, ch2)\n : validSmush;\n validSmush =\n !validSmush && opts.fittingRules.vRule4\n ? vRule4_Smush(ch1, ch2)\n : validSmush;\n result += validSmush;\n }\n } else {\n result += uni_Smush(ch1, ch2);\n }\n }\n return result;\n }\n\n function verticalSmush(lines1, lines2, overlap, opts) {\n let len1 = lines1.length;\n let len2 = lines2.length;\n let piece1 = lines1.slice(0, Math.max(0, len1 - overlap));\n let piece2_1 = lines1.slice(Math.max(0, len1 - overlap), len1);\n let piece2_2 = lines2.slice(0, Math.min(overlap, len2));\n let ii,\n len,\n line,\n piece2 = [],\n piece3,\n result = [];\n\n len = piece2_1.length;\n for (ii = 0; ii < len; ii++) {\n if (ii >= len2) {\n line = piece2_1[ii];\n } else {\n line = verticallySmushLines(piece2_1[ii], piece2_2[ii], opts);\n }\n piece2.push(line);\n }\n\n piece3 = lines2.slice(Math.min(overlap, len2), len2);\n\n return result.concat(piece1, piece2, piece3);\n }\n\n function padLines(lines, numSpaces) {\n let ii,\n len = lines.length,\n padding = \"\";\n for (ii = 0; ii < numSpaces; ii++) {\n padding += \" \";\n }\n for (ii = 0; ii < len; ii++) {\n lines[ii] += padding;\n }\n }\n\n function smushVerticalFigLines(output, lines, opts) {\n let len1 = output[0].length;\n let len2 = lines[0].length;\n let overlap;\n if (len1 > len2) {\n padLines(lines, len1 - len2);\n } else if (len2 > len1) {\n padLines(output, len2 - len1);\n }\n overlap = getVerticalSmushDist(output, lines, opts);\n return verticalSmush(output, lines, overlap, opts);\n }\n\n // -------------------------------------------------------------------------\n // Main horizontal smush routines (excluding rules)\n\n function getHorizontalSmushLength(txt1, txt2, opts) {\n if (opts.fittingRules.hLayout === FULL_WIDTH) {\n return 0;\n }\n let ii,\n len1 = txt1.length,\n len2 = txt2.length;\n let maxDist = len1;\n let curDist = 1;\n let breakAfter = false;\n let validSmush = false;\n let seg1, seg2, ch1, ch2;\n if (len1 === 0) {\n return 0;\n }\n\n distCal: while (curDist <= maxDist) {\n const seg1StartPos = len1 - curDist;\n seg1 = txt1.substring(seg1StartPos, seg1StartPos + curDist);\n seg2 = txt2.substring(0, Math.min(curDist, len2));\n for (ii = 0; ii < Math.min(curDist, len2); ii++) {\n ch1 = seg1.substring(ii, ii + 1);\n ch2 = seg2.substring(ii, ii + 1);\n if (ch1 !== \" \" && ch2 !== \" \") {\n if (opts.fittingRules.hLayout === FITTING) {\n curDist = curDist - 1;\n break distCal;\n } else if (opts.fittingRules.hLayout === SMUSHING) {\n if (ch1 === opts.hardBlank || ch2 === opts.hardBlank) {\n curDist = curDist - 1; // universal smushing does not smush hardblanks\n }\n break distCal;\n } else {\n breakAfter = true; // we know we need to break, but we need to check if our smushing rules will allow us to smush the overlapped characters\n validSmush = false; // the below checks will let us know if we can smush these characters\n\n validSmush = opts.fittingRules.hRule1\n ? hRule1_Smush(ch1, ch2, opts.hardBlank)\n : validSmush;\n validSmush =\n !validSmush && opts.fittingRules.hRule2\n ? hRule2_Smush(ch1, ch2, opts.hardBlank)\n : validSmush;\n validSmush =\n !validSmush && opts.fittingRules.hRule3\n ? hRule3_Smush(ch1, ch2, opts.hardBlank)\n : validSmush;\n validSmush =\n !validSmush && opts.fittingRules.hRule4\n ? hRule4_Smush(ch1, ch2, opts.hardBlank)\n : validSmush;\n validSmush =\n !validSmush && opts.fittingRules.hRule5\n ? hRule5_Smush(ch1, ch2, opts.hardBlank)\n : validSmush;\n validSmush =\n !validSmush && opts.fittingRules.hRule6\n ? hRule6_Smush(ch1, ch2, opts.hardBlank)\n : validSmush;\n\n if (!validSmush) {\n curDist = curDist - 1;\n break distCal;\n }\n }\n }\n }\n if (breakAfter) {\n break;\n }\n curDist++;\n }\n return Math.min(maxDist, curDist);\n }\n\n function horizontalSmush(textBlock1, textBlock2, overlap, opts) {\n let ii,\n jj,\n outputFig = [],\n overlapStart,\n piece1,\n piece2,\n piece3,\n len1,\n len2,\n txt1,\n txt2;\n\n for (ii = 0; ii < opts.height; ii++) {\n txt1 = textBlock1[ii];\n txt2 = textBlock2[ii];\n len1 = txt1.length;\n len2 = txt2.length;\n overlapStart = len1 - overlap;\n piece1 = txt1.substr(0, Math.max(0, overlapStart));\n piece2 = \"\";\n\n // determine overlap piece\n const seg1StartPos = Math.max(0, len1 - overlap);\n var seg1 = txt1.substring(seg1StartPos, seg1StartPos + overlap);\n var seg2 = txt2.substring(0, Math.min(overlap, len2));\n\n for (jj = 0; jj < overlap; jj++) {\n var ch1 = jj < len1 ? seg1.substring(jj, jj + 1) : \" \";\n var ch2 = jj < len2 ? seg2.substring(jj, jj + 1) : \" \";\n\n if (ch1 !== \" \" && ch2 !== \" \") {\n if (opts.fittingRules.hLayout === FITTING) {\n piece2 += uni_Smush(ch1, ch2, opts.hardBlank);\n } else if (opts.fittingRules.hLayout === SMUSHING) {\n piece2 += uni_Smush(ch1, ch2, opts.hardBlank);\n } else {\n // Controlled Smushing\n var nextCh = \"\";\n nextCh =\n !nextCh && opts.fittingRules.hRule1\n ? hRule1_Smush(ch1, ch2, opts.hardBlank)\n : nextCh;\n nextCh =\n !nextCh && opts.fittingRules.hRule2\n ? hRule2_Smush(ch1, ch2, opts.hardBlank)\n : nextCh;\n nextCh =\n !nextCh && opts.fittingRules.hRule3\n ? hRule3_Smush(ch1, ch2, opts.hardBlank)\n : nextCh;\n nextCh =\n !nextCh && opts.fittingRules.hRule4\n ? hRule4_Smush(ch1, ch2, opts.hardBlank)\n : nextCh;\n nextCh =\n !nextCh && opts.fittingRules.hRule5\n ? hRule5_Smush(ch1, ch2, opts.hardBlank)\n : nextCh;\n nextCh =\n !nextCh && opts.fittingRules.hRule6\n ? hRule6_Smush(ch1, ch2, opts.hardBlank)\n : nextCh;\n nextCh = nextCh || uni_Smush(ch1, ch2, opts.hardBlank);\n piece2 += nextCh;\n }\n } else {\n piece2 += uni_Smush(ch1, ch2, opts.hardBlank);\n }\n }\n\n if (overlap >= len2) {\n piece3 = \"\";\n } else {\n piece3 = txt2.substring(overlap, overlap + Math.max(0, len2 - overlap));\n }\n outputFig[ii] = piece1 + piece2 + piece3;\n }\n return outputFig;\n }\n\n /*\n Creates new empty ASCII placeholder of give len\n - len - number\n */\n function newFigChar(len) {\n let outputFigText = [],\n row;\n for (row = 0; row < len; row++) {\n outputFigText[row] = \"\";\n }\n return outputFigText;\n }\n\n /*\n Return max line of the ASCII Art\n - text is array of lines for text\n - char is next character\n */\n const figLinesWidth = function (textLines) {\n return Math.max.apply(\n Math,\n textLines.map(function (line, i) {\n return line.length;\n })\n );\n };\n\n /*\n join words or single characaters into single Fig line\n - array - array of ASCII words or single characters: {fig: array, overlap: number}\n - len - height of the Characters (number of rows)\n - opt - options object\n */\n function joinFigArray(array, len, opts) {\n return array.reduce(function (acc, data) {\n return horizontalSmush(acc, data.fig, data.overlap, opts);\n }, newFigChar(len));\n }\n\n /*\n break long word return leftover characters and line before the break\n - figChars - list of single ASCII characters in form {fig, overlap}\n - len - number of rows\n - opt - options object\n */\n function breakWord(figChars, len, opts) {\n const result = {};\n for (let i = figChars.length; --i; ) {\n let w = joinFigArray(figChars.slice(0, i), len, opts);\n if (figLinesWidth(w) <= opts.width) {\n result.outputFigText = w;\n if (i < figChars.length) {\n result.chars = figChars.slice(i);\n } else {\n result.chars = [];\n }\n break;\n }\n }\n return result;\n }\n\n function generateFigTextLines(txt, figChars, opts) {\n let charIndex,\n figChar,\n overlap = 0,\n row,\n outputFigText,\n len,\n height = opts.height,\n outputFigLines = [],\n maxWidth,\n nextFigChars,\n figWords = [],\n char,\n isSpace,\n textFigWord,\n textFigLine,\n tmpBreak;\n\n outputFigText = newFigChar(height);\n if (opts.width > 0 && opts.whitespaceBreak) {\n // list of characters is used to break in the middle of the word when word is logner\n // chars is array of characters with {fig, overlap} and overlap is for whole word\n nextFigChars = {\n chars: [],\n overlap: overlap,\n };\n }\n if (opts.printDirection === 1) {\n txt = txt.split(\"\").reverse().join(\"\");\n }\n len = txt.length;\n for (charIndex = 0; charIndex < len; charIndex++) {\n char = txt.substring(charIndex, charIndex + 1);\n isSpace = char.match(/\\s/);\n figChar = figChars[char.charCodeAt(0)];\n textFigLine = null;\n if (figChar) {\n if (opts.fittingRules.hLayout !== FULL_WIDTH) {\n overlap = 10000; // a value too high to be the overlap\n for (row = 0; row < opts.height; row++) {\n overlap = Math.min(\n overlap,\n getHorizontalSmushLength(outputFigText[row], figChar[row], opts)\n );\n }\n overlap = overlap === 10000 ? 0 : overlap;\n }\n if (opts.width > 0) {\n if (opts.whitespaceBreak) {\n // next character in last word (figChars have same data as words)\n textFigWord = joinFigArray(\n nextFigChars.chars.concat([\n {\n fig: figChar,\n overlap: overlap,\n },\n ]),\n height,\n opts\n );\n textFigLine = joinFigArray(\n figWords.concat([\n {\n fig: textFigWord,\n overlap: nextFigChars.overlap,\n },\n ]),\n height,\n opts\n );\n maxWidth = figLinesWidth(textFigLine);\n } else {\n textFigLine = horizontalSmush(\n outputFigText,\n figChar,\n overlap,\n opts\n );\n maxWidth = figLinesWidth(textFigLine);\n }\n if (maxWidth >= opts.width && charIndex > 0) {\n if (opts.whitespaceBreak) {\n outputFigText = joinFigArray(figWords.slice(0, -1), height, opts);\n if (figWords.length > 1) {\n outputFigLines.push(outputFigText);\n outputFigText = newFigChar(height);\n }\n figWords = [];\n } else {\n outputFigLines.push(outputFigText);\n outputFigText = newFigChar(height);\n }\n }\n }\n if (opts.width > 0 && opts.whitespaceBreak) {\n if (!isSpace || charIndex === len - 1) {\n nextFigChars.chars.push({ fig: figChar, overlap: overlap });\n }\n if (isSpace || charIndex === len - 1) {\n // break long words\n tmpBreak = null;\n while (true) {\n textFigLine = joinFigArray(nextFigChars.chars, height, opts);\n maxWidth = figLinesWidth(textFigLine);\n if (maxWidth >= opts.width) {\n tmpBreak = breakWord(nextFigChars.chars, height, opts);\n nextFigChars = { chars: tmpBreak.chars };\n outputFigLines.push(tmpBreak.outputFigText);\n } else {\n break;\n }\n }\n // any leftovers\n if (maxWidth > 0) {\n if (tmpBreak) {\n figWords.push({ fig: textFigLine, overlap: 1 });\n } else {\n figWords.push({\n fig: textFigLine,\n overlap: nextFigChars.overlap,\n });\n }\n }\n // save space character and current overlap for smush in joinFigWords\n if (isSpace) {\n figWords.push({ fig: figChar, overlap: overlap });\n outputFigText = newFigChar(height);\n }\n if (charIndex === len - 1) {\n // last line\n outputFigText = joinFigArray(figWords, height, opts);\n }\n nextFigChars = {\n chars: [],\n overlap: overlap,\n };\n continue;\n }\n }\n outputFigText = horizontalSmush(outputFigText, figChar, overlap, opts);\n }\n }\n // special case when last line would be empty\n // this may happen if text fit exactly opt.width\n if (figLinesWidth(outputFigText) > 0) {\n outputFigLines.push(outputFigText);\n }\n // remove hardblanks\n if (opts.showHardBlanks !== true) {\n outputFigLines.forEach(function (outputFigText) {\n len = outputFigText.length;\n for (row = 0; row < len; row++) {\n outputFigText[row] = outputFigText[row].replace(\n new RegExp(\"\\\\\" + opts.hardBlank, \"g\"),\n \" \"\n );\n }\n });\n }\n return outputFigLines;\n }\n\n // -------------------------------------------------------------------------\n // Parsing and Generation methods\n\n const getHorizontalFittingRules = function (layout, options) {\n let props = [\n \"hLayout\",\n \"hRule1\",\n \"hRule2\",\n \"hRule3\",\n \"hRule4\",\n \"hRule5\",\n \"hRule6\",\n ],\n params = {},\n ii;\n if (layout === \"default\") {\n for (ii = 0; ii < props.length; ii++) {\n params[props[ii]] = options.fittingRules[props[ii]];\n }\n } else if (layout === \"full\") {\n params = {\n hLayout: FULL_WIDTH,\n hRule1: false,\n hRule2: false,\n hRule3: false,\n hRule4: false,\n hRule5: false,\n hRule6: false,\n };\n } else if (layout === \"fitted\") {\n params = {\n hLayout: FITTING,\n hRule1: false,\n hRule2: false,\n hRule3: false,\n hRule4: false,\n hRule5: false,\n hRule6: false,\n };\n } else if (layout === \"controlled smushing\") {\n params = {\n hLayout: CONTROLLED_SMUSHING,\n hRule1: true,\n hRule2: true,\n hRule3: true,\n hRule4: true,\n hRule5: true,\n hRule6: true,\n };\n } else if (layout === \"universal smushing\") {\n params = {\n hLayout: SMUSHING,\n hRule1: false,\n hRule2: false,\n hRule3: false,\n hRule4: false,\n hRule5: false,\n hRule6: false,\n };\n } else {\n return;\n }\n return params;\n };\n\n const getVerticalFittingRules = function (layout, options) {\n let props = [\"vLayout\", \"vRule1\", \"vRule2\", \"vRule3\", \"vRule4\", \"vRule5\"],\n params = {},\n ii;\n if (layout === \"default\") {\n for (ii = 0; ii < props.length; ii++) {\n params[props[ii]] = options.fittingRules[props[ii]];\n }\n } else if (layout === \"full\") {\n params = {\n vLayout: FULL_WIDTH,\n vRule1: false,\n vRule2: false,\n vRule3: false,\n vRule4: false,\n vRule5: false,\n };\n } else if (layout === \"fitted\") {\n params = {\n vLayout: FITTING,\n vRule1: false,\n vRule2: false,\n vRule3: false,\n vRule4: false,\n vRule5: false,\n };\n } else if (layout === \"controlled smushing\") {\n params = {\n vLayout: CONTROLLED_SMUSHING,\n vRule1: true,\n vRule2: true,\n vRule3: true,\n vRule4: true,\n vRule5: true,\n };\n } else if (layout === \"universal smushing\") {\n params = {\n vLayout: SMUSHING,\n vRule1: false,\n vRule2: false,\n vRule3: false,\n vRule4: false,\n vRule5: false,\n };\n } else {\n return;\n }\n return params;\n };\n\n /*\n Generates the ASCII Art\n - fontName: Font to use\n - option: Options to override the defaults\n - txt: The text to make into ASCII Art\n */\n const generateText = function (fontName, options, txt) {\n txt = txt.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n let lines = txt.split(\"\\n\");\n let figLines = [];\n let ii, len, output;\n len = lines.length;\n for (ii = 0; ii < len; ii++) {\n figLines = figLines.concat(\n generateFigTextLines(lines[ii], figFonts[fontName], options)\n );\n }\n len = figLines.length;\n output = figLines[0];\n for (ii = 1; ii < len; ii++) {\n output = smushVerticalFigLines(output, figLines[ii], options);\n }\n\n return output ? output.join(\"\\n\") : \"\";\n };\n\n /*\n takes assigned options and merges them with the default options from the choosen font\n */\n function _reworkFontOpts(fontOpts, options) {\n let myOpts = JSON.parse(JSON.stringify(fontOpts)), // make a copy because we may edit this (see below)\n params,\n prop;\n\n /*\n If the user is chosing to use a specific type of layout (e.g., 'full', 'fitted', etc etc)\n Then we need to override the default font options.\n */\n if (typeof options.horizontalLayout !== \"undefined\") {\n params = getHorizontalFittingRules(options.horizontalLayout, fontOpts);\n for (prop in params) {\n if (params.hasOwnProperty(prop)) {\n myOpts.fittingRules[prop] = params[prop];\n }\n }\n }\n if (typeof options.verticalLayout !== \"undefined\") {\n params = getVerticalFittingRules(options.verticalLayout, fontOpts);\n for (prop in params) {\n if (params.hasOwnProperty(prop)) {\n myOpts.fittingRules[prop] = params[prop];\n }\n }\n }\n myOpts.printDirection =\n typeof options.printDirection !== \"undefined\"\n ? options.printDirection\n : fontOpts.printDirection;\n myOpts.showHardBlanks = options.showHardBlanks || false;\n myOpts.width = options.width || -1;\n myOpts.whitespaceBreak = options.whitespaceBreak || false;\n\n return myOpts;\n }\n\n // -------------------------------------------------------------------------\n // Public methods\n\n /*\n A short-cut for the figlet.text method\n\n Parameters:\n - txt (string): The text to make into ASCII Art\n - options (object/string - optional): Options that will override the current font's default options.\n If a string is provided instead of an object, it is assumed to be the font name.\n\n * font\n * horizontalLayout\n * verticalLayout\n * showHardBlanks - Wont remove hardblank characters\n\n - next (function): A callback function, it will contained the outputted ASCII Art.\n */\n const me = function (txt, options, next) {\n return me.text(txt, options, next);\n };\n me.text = async function (txt, options, next) {\n let fontName = \"\";\n\n // Validate inputs\n txt = txt + \"\";\n\n if (typeof arguments[1] === \"function\") {\n next = options;\n options = {};\n options.font = figDefaults.font; // default font\n }\n\n if (typeof options === \"string\") {\n fontName = options;\n options = {};\n } else {\n options = options || {};\n fontName = options.font || figDefaults.font;\n }\n\n return await new Promise((resolve, reject) => {\n /*\n Load the font. If it loads, it's data will be contained in the figFonts object.\n The callback will recieve a fontsOpts object, which contains the default\n options of the font (its fitting rules, etc etc).\n */\n me.loadFont(fontName, function (err, fontOpts) {\n if (err) {\n reject(err);\n if (next) next(err);\n return;\n }\n\n const generatedTxt = generateText(\n fontName,\n _reworkFontOpts(fontOpts, options),\n txt\n );\n\n resolve(generatedTxt);\n if (next) next(null, generatedTxt);\n });\n });\n };\n\n /*\n Synchronous version of figlet.text.\n Accepts the same parameters.\n */\n me.textSync = function (txt, options) {\n let fontName = \"\";\n\n // Validate inputs\n txt = txt + \"\";\n\n if (typeof options === \"string\") {\n fontName = options;\n options = {};\n } else {\n options = options || {};\n fontName = options.font || figDefaults.font;\n }\n\n var fontOpts = _reworkFontOpts(me.loadFontSync(fontName), options);\n return generateText(fontName, fontOpts, txt);\n };\n\n /*\n Returns metadata about a specfic FIGlet font.\n\n Returns:\n next(err, options, headerComment)\n - err: The error if an error occurred, otherwise null/falsey.\n - options (object): The options defined for the font.\n - headerComment (string): The font's header comment.\n */\n me.metadata = function (fontName, next) {\n fontName = fontName + \"\";\n\n /*\n Load the font. If it loads, it's data will be contained in the figFonts object.\n The callback will recieve a fontsOpts object, which contains the default\n options of the font (its fitting rules, etc etc).\n */\n me.loadFont(fontName, function (err, fontOpts) {\n if (err) {\n next(err);\n return;\n }\n\n next(null, fontOpts, figFonts[fontName].comment);\n });\n };\n\n /*\n Allows you to override defaults. See the definition of the figDefaults object up above\n to see what properties can be overridden.\n Returns the options for the font.\n */\n me.defaults = function (opts) {\n if (typeof opts === \"object\" && opts !== null) {\n for (var prop in opts) {\n if (opts.hasOwnProperty(prop)) {\n figDefaults[prop] = opts[prop];\n }\n }\n }\n return JSON.parse(JSON.stringify(figDefaults));\n };\n\n /*\n Parses data from a FIGlet font file and places it into the figFonts object.\n */\n me.parseFont = function (fontName, data) {\n data = data.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n figFonts[fontName] = {};\n\n var lines = data.split(\"\\n\");\n var headerData = lines.splice(0, 1)[0].split(\" \");\n var figFont = figFonts[fontName];\n var opts = {};\n\n opts.hardBlank = headerData[0].substr(5, 1);\n opts.height = parseInt(headerData[1], 10);\n opts.baseline = parseInt(headerData[2], 10);\n opts.maxLength = parseInt(headerData[3], 10);\n opts.oldLayout = parseInt(headerData[4], 10);\n opts.numCommentLines = parseInt(headerData[5], 10);\n opts.printDirection =\n headerData.length >= 6 ? parseInt(headerData[6], 10) : 0;\n opts.fullLayout =\n headerData.length >= 7 ? parseInt(headerData[7], 10) : null;\n opts.codeTagCount =\n headerData.length >= 8 ? parseInt(headerData[8], 10) : null;\n opts.fittingRules = getSmushingRules(opts.oldLayout, opts.fullLayout);\n\n figFont.options = opts;\n\n // error check\n if (\n opts.hardBlank.length !== 1 ||\n isNaN(opts.height) ||\n isNaN(opts.baseline) ||\n isNaN(opts.maxLength) ||\n isNaN(opts.oldLayout) ||\n isNaN(opts.numCommentLines)\n ) {\n throw new Error(\"FIGlet header contains invalid values.\");\n }\n\n /*\n All FIGlet fonts must contain chars 32-126, 196, 214, 220, 228, 246, 252, 223\n */\n\n let charNums = [],\n ii;\n for (ii = 32; ii <= 126; ii++) {\n charNums.push(ii);\n }\n charNums = charNums.concat(196, 214, 220, 228, 246, 252, 223);\n\n // error check - validate that there are enough lines in the file\n if (lines.length < opts.numCommentLines + opts.height * charNums.length) {\n throw new Error(\"FIGlet file is missing data.\");\n }\n\n /*\n Parse out the context of the file and put it into our figFont object\n */\n\n let cNum,\n endCharRegEx,\n parseError = false;\n\n figFont.comment = lines.splice(0, opts.numCommentLines).join(\"\\n\");\n figFont.numChars = 0;\n\n while (lines.length > 0 && figFont.numChars < charNums.length) {\n cNum = charNums[figFont.numChars];\n figFont[cNum] = lines.splice(0, opts.height);\n // remove end sub-chars\n for (ii = 0; ii < opts.height; ii++) {\n if (typeof figFont[cNum][ii] === \"undefined\") {\n figFont[cNum][ii] = \"\";\n } else {\n endCharRegEx = new RegExp(\n \"\\\\\" +\n figFont[cNum][ii].substr(figFont[cNum][ii].length - 1, 1) +\n \"+$\"\n );\n figFont[cNum][ii] = figFont[cNum][ii].replace(endCharRegEx, \"\");\n }\n }\n figFont.numChars++;\n }\n\n /*\n Now we check to see if any additional characters are present\n */\n\n while (lines.length > 0) {\n cNum = lines.splice(0, 1)[0].split(\" \")[0];\n if (/^0[xX][0-9a-fA-F]+$/.test(cNum)) {\n cNum = parseInt(cNum, 16);\n } else if (/^0[0-7]+$/.test(cNum)) {\n cNum = parseInt(cNum, 8);\n } else if (/^[0-9]+$/.test(cNum)) {\n cNum = parseInt(cNum, 10);\n } else if (/^-0[xX][0-9a-fA-F]+$/.test(cNum)) {\n cNum = parseInt(cNum, 16);\n } else {\n if (cNum === \"\") {\n break;\n }\n // something's wrong\n console.log(\"Invalid data:\" + cNum);\n parseError = true;\n break;\n }\n\n figFont[cNum] = lines.splice(0, opts.height);\n // remove end sub-chars\n for (ii = 0; ii < opts.height; ii++) {\n if (typeof figFont[cNum][ii] === \"undefined\") {\n figFont[cNum][ii] = \"\";\n } else {\n endCharRegEx = new RegExp(\n \"\\\\\" +\n figFont[cNum][ii].substr(figFont[cNum][ii].length - 1, 1) +\n \"+$\"\n );\n figFont[cNum][ii] = figFont[cNum][ii].replace(endCharRegEx, \"\");\n }\n }\n figFont.numChars++;\n }\n\n // error check\n if (parseError === true) {\n throw new Error(\"Error parsing data.\");\n }\n\n return opts;\n };\n\n /*\n Loads a font.\n */\n me.loadFont = function (fontName, next) {\n if (figFonts[fontName]) {\n next(null, figFonts[fontName].options);\n return;\n }\n\n if (typeof fetch !== \"function\") {\n console.error(\n \"figlet.js requires the fetch API or a fetch polyfill such as https://cdnjs.com/libraries/fetch\"\n );\n throw new Error(\"fetch is required for figlet.js to work.\");\n }\n\n fetch(figDefaults.fontPath + \"/\" + fontName + \".flf\")\n .then(function (response) {\n if (response.ok) {\n return response.text();\n }\n\n console.log(\"Unexpected response\", response);\n throw new Error(\"Network response was not ok.\");\n })\n .then(function (text) {\n next(null, me.parseFont(fontName, text));\n })\n .catch(next);\n };\n\n /*\n loads a font synchronously, not implemented for the browser\n */\n me.loadFontSync = function (name) {\n if (figFonts[name]) {\n return figFonts[name].options;\n }\n throw new Error(\n \"synchronous font loading is not implemented for the browser\"\n );\n };\n\n /*\n preloads a list of fonts prior to using textSync\n - fonts: an array of font names (i.e. [\"Standard\",\"Soft\"])\n - next: callback function\n */\n me.preloadFonts = function (fonts, next) {\n let fontData = [];\n\n fonts\n .reduce(function (promise, name) {\n return promise.then(function () {\n return fetch(figDefaults.fontPath + \"/\" + name + \".flf\")\n .then((response) => {\n return response.text();\n })\n .then(function (data) {\n fontData.push(data);\n });\n });\n }, Promise.resolve())\n .then(function (res) {\n for (var i in fonts) {\n if (fonts.hasOwnProperty(i)) {\n me.parseFont(fonts[i], fontData[i]);\n }\n }\n\n if (next) {\n next();\n }\n });\n };\n\n me.figFonts = figFonts;\n\n return me;\n})();\n\n// for node.js\nif (typeof module !== \"undefined\") {\n if (typeof module.exports !== \"undefined\") {\n module.exports = figlet;\n }\n}\n","/*\n\tNode plugin for figlet.js\n*/\n\nconst figlet = require(\"./figlet.js\"),\n fs = require(\"fs\"),\n path = require(\"path\"),\n fontDir = path.join(__dirname, \"/../fonts/\");\n\n/*\n Loads a font into the figlet object.\n\n Parameters:\n - name (string): Name of the font to load.\n - next (function): Callback function.\n*/\nfiglet.loadFont = function (name, next) {\n if (figlet.figFonts[name]) {\n next(null, figlet.figFonts[name].options);\n return;\n }\n\n fs.readFile(\n path.join(fontDir, name + \".flf\"),\n { encoding: \"utf-8\" },\n function (err, fontData) {\n if (err) {\n return next(err);\n }\n\n fontData = fontData + \"\";\n try {\n next(null, figlet.parseFont(name, fontData));\n } catch (error) {\n next(error);\n }\n }\n );\n};\n\n/*\n Loads a font synchronously into the figlet object.\n\n Parameters:\n - name (string): Name of the font to load.\n */\nfiglet.loadFontSync = function (name) {\n if (figlet.figFonts[name]) {\n return figlet.figFonts[name].options;\n }\n\n var fontData = fs.readFileSync(path.join(fontDir, name + \".flf\"), {\n encoding: \"utf-8\",\n });\n\n fontData = fontData + \"\";\n return figlet.parseFont(name, fontData);\n};\n\n/*\n Returns an array containing all of the font names\n*/\nfiglet.fonts = function (next) {\n var fontList = [];\n fs.readdir(fontDir, function (err, files) {\n // '/' denotes the root folder\n if (err) {\n return next(err);\n }\n\n files.forEach(function (file) {\n if (/\\.flf$/.test(file)) {\n fontList.push(file.replace(/\\.flf$/, \"\"));\n }\n });\n\n next(null, fontList);\n });\n};\n\nfiglet.fontsSync = function () {\n var fontList = [];\n fs.readdirSync(fontDir).forEach(function (file) {\n if (/\\.flf$/.test(file)) {\n fontList.push(file.replace(/\\.flf$/, \"\"));\n }\n });\n\n return fontList;\n};\n\nmodule.exports = figlet;\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","/* MIT license */\n/* eslint-disable no-mixed-operators */\nconst cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// Assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","const conversions = require('./conversions');\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(fromModel => {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","'use strict';\n\nconst wrapAnsi16 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${code + offset}m`;\n};\n\nconst wrapAnsi256 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${38 + offset};5;${code}m`;\n};\n\nconst wrapAnsi16m = (fn, offset) => (...args) => {\n\tconst rgb = fn(...args);\n\treturn `\\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;\n};\n\nconst ansi2ansi = n => n;\nconst rgb2rgb = (r, g, b) => [r, g, b];\n\nconst setLazyProperty = (object, property, get) => {\n\tObject.defineProperty(object, property, {\n\t\tget: () => {\n\t\t\tconst value = get();\n\n\t\t\tObject.defineProperty(object, property, {\n\t\t\t\tvalue,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t});\n\n\t\t\treturn value;\n\t\t},\n\t\tenumerable: true,\n\t\tconfigurable: true\n\t});\n};\n\n/** @type {typeof import('color-convert')} */\nlet colorConvert;\nconst makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {\n\tif (colorConvert === undefined) {\n\t\tcolorConvert = require('color-convert');\n\t}\n\n\tconst offset = isBackground ? 10 : 0;\n\tconst styles = {};\n\n\tfor (const [sourceSpace, suite] of Object.entries(colorConvert)) {\n\t\tconst name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;\n\t\tif (sourceSpace === targetSpace) {\n\t\t\tstyles[name] = wrap(identity, offset);\n\t\t} else if (typeof suite === 'object') {\n\t\t\tstyles[name] = wrap(suite[targetSpace], offset);\n\t\t}\n\t}\n\n\treturn styles;\n};\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\tconst styles = {\n\t\tmodifier: {\n\t\t\treset: [0, 0],\n\t\t\t// 21 isn't widely supported and 22 does the same thing\n\t\t\tbold: [1, 22],\n\t\t\tdim: [2, 22],\n\t\t\titalic: [3, 23],\n\t\t\tunderline: [4, 24],\n\t\t\tinverse: [7, 27],\n\t\t\thidden: [8, 28],\n\t\t\tstrikethrough: [9, 29]\n\t\t},\n\t\tcolor: {\n\t\t\tblack: [30, 39],\n\t\t\tred: [31, 39],\n\t\t\tgreen: [32, 39],\n\t\t\tyellow: [33, 39],\n\t\t\tblue: [34, 39],\n\t\t\tmagenta: [35, 39],\n\t\t\tcyan: [36, 39],\n\t\t\twhite: [37, 39],\n\n\t\t\t// Bright color\n\t\t\tblackBright: [90, 39],\n\t\t\tredBright: [91, 39],\n\t\t\tgreenBright: [92, 39],\n\t\t\tyellowBright: [93, 39],\n\t\t\tblueBright: [94, 39],\n\t\t\tmagentaBright: [95, 39],\n\t\t\tcyanBright: [96, 39],\n\t\t\twhiteBright: [97, 39]\n\t\t},\n\t\tbgColor: {\n\t\t\tbgBlack: [40, 49],\n\t\t\tbgRed: [41, 49],\n\t\t\tbgGreen: [42, 49],\n\t\t\tbgYellow: [43, 49],\n\t\t\tbgBlue: [44, 49],\n\t\t\tbgMagenta: [45, 49],\n\t\t\tbgCyan: [46, 49],\n\t\t\tbgWhite: [47, 49],\n\n\t\t\t// Bright color\n\t\t\tbgBlackBright: [100, 49],\n\t\t\tbgRedBright: [101, 49],\n\t\t\tbgGreenBright: [102, 49],\n\t\t\tbgYellowBright: [103, 49],\n\t\t\tbgBlueBright: [104, 49],\n\t\t\tbgMagentaBright: [105, 49],\n\t\t\tbgCyanBright: [106, 49],\n\t\t\tbgWhiteBright: [107, 49]\n\t\t}\n\t};\n\n\t// Alias bright black as gray (and grey)\n\tstyles.color.gray = styles.color.blackBright;\n\tstyles.bgColor.bgGray = styles.bgColor.bgBlackBright;\n\tstyles.color.grey = styles.color.blackBright;\n\tstyles.bgColor.bgGrey = styles.bgColor.bgBlackBright;\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tsetLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));\n\tsetLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));\n\n\treturn styles;\n}\n\n// Make the export immutable\nObject.defineProperty(module, 'exports', {\n\tenumerable: true,\n\tget: assembleStyles\n});\n","'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n","'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n","'use strict';\n\nconst stringReplaceAll = (string, substring, replacer) => {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.substr(endIndex, index - endIndex) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nconst stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nmodule.exports = {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n};\n","'use strict';\nconst TEMPLATE_REGEX = /(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi;\nconst STYLE_REGEX = /(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g;\nconst STRING_REGEX = /^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/;\nconst ESCAPE_REGEX = /\\\\(u(?:[a-f\\d]{4}|{[a-f\\d]{1,6}})|x[a-f\\d]{2}|.)|([^\\\\])/gi;\n\nconst ESCAPES = new Map([\n\t['n', '\\n'],\n\t['r', '\\r'],\n\t['t', '\\t'],\n\t['b', '\\b'],\n\t['f', '\\f'],\n\t['v', '\\v'],\n\t['0', '\\0'],\n\t['\\\\', '\\\\'],\n\t['e', '\\u001B'],\n\t['a', '\\u0007']\n]);\n\nfunction unescape(c) {\n\tconst u = c[0] === 'u';\n\tconst bracket = c[1] === '{';\n\n\tif ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {\n\t\treturn String.fromCharCode(parseInt(c.slice(1), 16));\n\t}\n\n\tif (u && bracket) {\n\t\treturn String.fromCodePoint(parseInt(c.slice(2, -1), 16));\n\t}\n\n\treturn ESCAPES.get(c) || c;\n}\n\nfunction parseArguments(name, arguments_) {\n\tconst results = [];\n\tconst chunks = arguments_.trim().split(/\\s*,\\s*/g);\n\tlet matches;\n\n\tfor (const chunk of chunks) {\n\t\tconst number = Number(chunk);\n\t\tif (!Number.isNaN(number)) {\n\t\t\tresults.push(number);\n\t\t} else if ((matches = chunk.match(STRING_REGEX))) {\n\t\t\tresults.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character));\n\t\t} else {\n\t\t\tthrow new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction parseStyle(style) {\n\tSTYLE_REGEX.lastIndex = 0;\n\n\tconst results = [];\n\tlet matches;\n\n\twhile ((matches = STYLE_REGEX.exec(style)) !== null) {\n\t\tconst name = matches[1];\n\n\t\tif (matches[2]) {\n\t\t\tconst args = parseArguments(name, matches[2]);\n\t\t\tresults.push([name].concat(args));\n\t\t} else {\n\t\t\tresults.push([name]);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction buildStyle(chalk, styles) {\n\tconst enabled = {};\n\n\tfor (const layer of styles) {\n\t\tfor (const style of layer.styles) {\n\t\t\tenabled[style[0]] = layer.inverse ? null : style.slice(1);\n\t\t}\n\t}\n\n\tlet current = chalk;\n\tfor (const [styleName, styles] of Object.entries(enabled)) {\n\t\tif (!Array.isArray(styles)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!(styleName in current)) {\n\t\t\tthrow new Error(`Unknown Chalk style: ${styleName}`);\n\t\t}\n\n\t\tcurrent = styles.length > 0 ? current[styleName](...styles) : current[styleName];\n\t}\n\n\treturn current;\n}\n\nmodule.exports = (chalk, temporary) => {\n\tconst styles = [];\n\tconst chunks = [];\n\tlet chunk = [];\n\n\t// eslint-disable-next-line max-params\n\ttemporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => {\n\t\tif (escapeCharacter) {\n\t\t\tchunk.push(unescape(escapeCharacter));\n\t\t} else if (style) {\n\t\t\tconst string = chunk.join('');\n\t\t\tchunk = [];\n\t\t\tchunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string));\n\t\t\tstyles.push({inverse, styles: parseStyle(style)});\n\t\t} else if (close) {\n\t\t\tif (styles.length === 0) {\n\t\t\t\tthrow new Error('Found extraneous } in Chalk template literal');\n\t\t\t}\n\n\t\t\tchunks.push(buildStyle(chalk, styles)(chunk.join('')));\n\t\t\tchunk = [];\n\t\t\tstyles.pop();\n\t\t} else {\n\t\t\tchunk.push(character);\n\t\t}\n\t});\n\n\tchunks.push(chunk.join(''));\n\n\tif (styles.length > 0) {\n\t\tconst errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\\`}\\`)`;\n\t\tthrow new Error(errMessage);\n\t}\n\n\treturn chunks.join('');\n};\n","'use strict';\nconst ansiStyles = require('ansi-styles');\nconst {stdout: stdoutColor, stderr: stderrColor} = require('supports-color');\nconst {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n} = require('./util');\n\nconst {isArray} = Array;\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m'\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nclass ChalkClass {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = {};\n\tapplyOptions(chalk, options);\n\n\tchalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);\n\n\tObject.setPrototypeOf(chalk, Chalk.prototype);\n\tObject.setPrototypeOf(chalk.template, chalk);\n\n\tchalk.template.constructor = () => {\n\t\tthrow new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');\n\t};\n\n\tchalk.template.Instance = ChalkClass;\n\n\treturn chalk.template;\n};\n\nfunction Chalk(options) {\n\treturn chalkFactory(options);\n}\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t}\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this._styler, true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t}\n};\n\nconst usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nfor (const model of usedModels) {\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this._generator.level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis._generator.level = level;\n\t\t}\n\t}\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\tconst builder = (...arguments_) => {\n\t\tif (isArray(arguments_[0]) && isArray(arguments_[0].raw)) {\n\t\t\t// Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}`\n\t\t\treturn applyStyle(builder, chalkTag(builder, ...arguments_));\n\t\t}\n\n\t\t// Single argument is hot path, implicit coercion is faster than anything\n\t\t// eslint-disable-next-line no-implicit-coercion\n\t\treturn applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\t};\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder._generator = self;\n\tbuilder._styler = _styler;\n\tbuilder._isEmpty = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self._isEmpty ? '' : string;\n\t}\n\n\tlet styler = self._styler;\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.indexOf('\\u001B') !== -1) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nlet template;\nconst chalkTag = (chalk, ...strings) => {\n\tconst [firstString] = strings;\n\n\tif (!isArray(firstString) || !isArray(firstString.raw)) {\n\t\t// If chalk() was called by itself or with a string,\n\t\t// return the string itself as a string.\n\t\treturn strings.join(' ');\n\t}\n\n\tconst arguments_ = strings.slice(1);\n\tconst parts = [firstString.raw[0]];\n\n\tfor (let i = 1; i < firstString.length; i++) {\n\t\tparts.push(\n\t\t\tString(arguments_[i - 1]).replace(/[{}\\\\]/g, '\\\\$&'),\n\t\t\tString(firstString.raw[i])\n\t\t);\n\t}\n\n\tif (template === undefined) {\n\t\ttemplate = require('./templates');\n\t}\n\n\treturn template(chalk, parts.join(''));\n};\n\nObject.defineProperties(Chalk.prototype, styles);\n\nconst chalk = Chalk(); // eslint-disable-line new-cap\nchalk.supportsColor = stdoutColor;\nchalk.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap\nchalk.stderr.supportsColor = stderrColor;\n\nmodule.exports = chalk;\n","// This file is autogenerated. It's used to publish CJS to npm.\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.tinycolor = factory());\n})(this, (function () { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n }\n\n // https://github.com/bgrins/TinyColor\n // Brian Grinstead, MIT License\n\n var trimLeft = /^\\s+/;\n var trimRight = /\\s+$/;\n function tinycolor(color, opts) {\n color = color ? color : \"\";\n opts = opts || {};\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n var rgb = inputToRGB(color);\n this._originalInput = color, this._r = rgb.r, this._g = rgb.g, this._b = rgb.b, this._a = rgb.a, this._roundA = Math.round(100 * this._a) / 100, this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) this._r = Math.round(this._r);\n if (this._g < 1) this._g = Math.round(this._g);\n if (this._b < 1) this._b = Math.round(this._b);\n this._ok = rgb.ok;\n }\n tinycolor.prototype = {\n isDark: function isDark() {\n return this.getBrightness() < 128;\n },\n isLight: function isLight() {\n return !this.isDark();\n },\n isValid: function isValid() {\n return this._ok;\n },\n getOriginalInput: function getOriginalInput() {\n return this._originalInput;\n },\n getFormat: function getFormat() {\n return this._format;\n },\n getAlpha: function getAlpha() {\n return this._a;\n },\n getBrightness: function getBrightness() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function getLuminance() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r / 255;\n GsRGB = rgb.g / 255;\n BsRGB = rgb.b / 255;\n if (RsRGB <= 0.03928) R = RsRGB / 12.92;else R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n if (GsRGB <= 0.03928) G = GsRGB / 12.92;else G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n if (BsRGB <= 0.03928) B = BsRGB / 12.92;else B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n },\n setAlpha: function setAlpha(value) {\n this._a = boundAlpha(value);\n this._roundA = Math.round(100 * this._a) / 100;\n return this;\n },\n toHsv: function toHsv() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return {\n h: hsv.h * 360,\n s: hsv.s,\n v: hsv.v,\n a: this._a\n };\n },\n toHsvString: function toHsvString() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = Math.round(hsv.h * 360),\n s = Math.round(hsv.s * 100),\n v = Math.round(hsv.v * 100);\n return this._a == 1 ? \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" : \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + this._roundA + \")\";\n },\n toHsl: function toHsl() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return {\n h: hsl.h * 360,\n s: hsl.s,\n l: hsl.l,\n a: this._a\n };\n },\n toHslString: function toHslString() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = Math.round(hsl.h * 360),\n s = Math.round(hsl.s * 100),\n l = Math.round(hsl.l * 100);\n return this._a == 1 ? \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" : \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + this._roundA + \")\";\n },\n toHex: function toHex(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function toHexString(allow3Char) {\n return \"#\" + this.toHex(allow3Char);\n },\n toHex8: function toHex8(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function toHex8String(allow4Char) {\n return \"#\" + this.toHex8(allow4Char);\n },\n toRgb: function toRgb() {\n return {\n r: Math.round(this._r),\n g: Math.round(this._g),\n b: Math.round(this._b),\n a: this._a\n };\n },\n toRgbString: function toRgbString() {\n return this._a == 1 ? \"rgb(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \")\" : \"rgba(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function toPercentageRgb() {\n return {\n r: Math.round(bound01(this._r, 255) * 100) + \"%\",\n g: Math.round(bound01(this._g, 255) * 100) + \"%\",\n b: Math.round(bound01(this._b, 255) * 100) + \"%\",\n a: this._a\n };\n },\n toPercentageRgbString: function toPercentageRgbString() {\n return this._a == 1 ? \"rgb(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%)\" : \"rgba(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function toName() {\n if (this._a === 0) {\n return \"transparent\";\n }\n if (this._a < 1) {\n return false;\n }\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function toFilter(secondColor) {\n var hex8String = \"#\" + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = \"#\" + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n return \"progid:DXImageTransform.Microsoft.gradient(\" + gradientType + \"startColorstr=\" + hex8String + \",endColorstr=\" + secondHex8String + \")\";\n },\n toString: function toString(format) {\n var formatSet = !!format;\n format = format || this._format;\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n return formattedString || this.toHexString();\n },\n clone: function clone() {\n return tinycolor(this.toString());\n },\n _applyModification: function _applyModification(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function lighten() {\n return this._applyModification(_lighten, arguments);\n },\n brighten: function brighten() {\n return this._applyModification(_brighten, arguments);\n },\n darken: function darken() {\n return this._applyModification(_darken, arguments);\n },\n desaturate: function desaturate() {\n return this._applyModification(_desaturate, arguments);\n },\n saturate: function saturate() {\n return this._applyModification(_saturate, arguments);\n },\n greyscale: function greyscale() {\n return this._applyModification(_greyscale, arguments);\n },\n spin: function spin() {\n return this._applyModification(_spin, arguments);\n },\n _applyCombination: function _applyCombination(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function analogous() {\n return this._applyCombination(_analogous, arguments);\n },\n complement: function complement() {\n return this._applyCombination(_complement, arguments);\n },\n monochromatic: function monochromatic() {\n return this._applyCombination(_monochromatic, arguments);\n },\n splitcomplement: function splitcomplement() {\n return this._applyCombination(_splitcomplement, arguments);\n },\n // Disabled until https://github.com/bgrins/TinyColor/issues/254\n // polyad: function (number) {\n // return this._applyCombination(polyad, [number]);\n // },\n triad: function triad() {\n return this._applyCombination(polyad, [3]);\n },\n tetrad: function tetrad() {\n return this._applyCombination(polyad, [4]);\n }\n };\n\n // If input is an object, force 1 into \"1.0\" to handle ratios properly\n // String input requires \"1.0\" as input, so 1 will be treated as 1\n tinycolor.fromRatio = function (color, opts) {\n if (_typeof(color) == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n } else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n return tinycolor(color, opts);\n };\n\n // Given a string or object, convert that input to RGB\n // Possible string inputs:\n //\n // \"red\"\n // \"#f00\" or \"f00\"\n // \"#ff0000\" or \"ff0000\"\n // \"#ff000000\" or \"ff000000\"\n // \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n // \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n // \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n // \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n // \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n // \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n // \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n //\n function inputToRGB(color) {\n var rgb = {\n r: 0,\n g: 0,\n b: 0\n };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n if (_typeof(color) == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n a = boundAlpha(a);\n return {\n ok: ok,\n format: color.format || format,\n r: Math.min(255, Math.max(rgb.r, 0)),\n g: Math.min(255, Math.max(rgb.g, 0)),\n b: Math.min(255, Math.max(rgb.b, 0)),\n a: a\n };\n }\n\n // Conversion Functions\n // --------------------\n\n // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n\n // `rgbToRgb`\n // Handle bounds / percentage checking to conform to CSS color spec\n // <http://www.w3.org/TR/css3-color/>\n // *Assumes:* r, g, b in [0, 255] or [0, 1]\n // *Returns:* { r, g, b } in [0, 255]\n function rgbToRgb(r, g, b) {\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n }\n\n // `rgbToHsl`\n // Converts an RGB color value to HSL.\n // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n // *Returns:* { h, s, l } in [0,1]\n function rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n if (max == min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h,\n s: s,\n l: l\n };\n }\n\n // `hslToRgb`\n // Converts an HSL color value to RGB.\n // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n // *Returns:* { r, g, b } in the set [0, 255]\n function hslToRgb(h, s, l) {\n var r, g, b;\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n }\n\n // `rgbToHsv`\n // Converts an RGB color value to HSV\n // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n // *Returns:* { h, s, v } in [0,1]\n function rgbToHsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n v = max;\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n if (max == min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h,\n s: s,\n v: v\n };\n }\n\n // `hsvToRgb`\n // Converts an HSV color value to RGB.\n // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n // *Returns:* { r, g, b } in the set [0, 255]\n function hsvToRgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n }\n\n // `rgbToHex`\n // Converts an RGB color to hex\n // Assumes r, g, and b are contained in the set [0, 255]\n // Returns a 3 or 6 character hex\n function rgbToHex(r, g, b, allow3Char) {\n var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n return hex.join(\"\");\n }\n\n // `rgbaToHex`\n // Converts an RGBA color plus alpha transparency to hex\n // Assumes r, g, b are contained in the set [0, 255] and\n // a in [0, 1]. Returns a 4 or 8 character rgba hex\n function rgbaToHex(r, g, b, a, allow4Char) {\n var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16)), pad2(convertDecimalToHex(a))];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n return hex.join(\"\");\n }\n\n // `rgbaToArgbHex`\n // Converts an RGBA color to an ARGB Hex8 string\n // Rarely used, but required for \"toFilter()\"\n function rgbaToArgbHex(r, g, b, a) {\n var hex = [pad2(convertDecimalToHex(a)), pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n return hex.join(\"\");\n }\n\n // `equals`\n // Can be called with any tinycolor input\n tinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) return false;\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n };\n tinycolor.random = function () {\n return tinycolor.fromRatio({\n r: Math.random(),\n g: Math.random(),\n b: Math.random()\n });\n };\n\n // Modification Functions\n // ----------------------\n // Thanks to less.js for some of the basics here\n // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\n function _desaturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n }\n function _saturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n }\n function _greyscale(color) {\n return tinycolor(color).desaturate(100);\n }\n function _lighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n }\n function _brighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var rgb = tinycolor(color).toRgb();\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n return tinycolor(rgb);\n }\n function _darken(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n }\n\n // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n // Values outside of this range will be wrapped into this range.\n function _spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n }\n\n // Combination Functions\n // ---------------------\n // Thanks to jQuery xColor for some of the ideas behind these\n // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>\n\n function _complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n }\n function polyad(color, number) {\n if (isNaN(number) || number <= 0) {\n throw new Error(\"Argument to polyad must be a positive number\");\n }\n var hsl = tinycolor(color).toHsl();\n var result = [tinycolor(color)];\n var step = 360 / number;\n for (var i = 1; i < number; i++) {\n result.push(tinycolor({\n h: (hsl.h + i * step) % 360,\n s: hsl.s,\n l: hsl.l\n }));\n }\n return result;\n }\n function _splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [tinycolor(color), tinycolor({\n h: (h + 72) % 360,\n s: hsl.s,\n l: hsl.l\n }), tinycolor({\n h: (h + 216) % 360,\n s: hsl.s,\n l: hsl.l\n })];\n }\n function _analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results;) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n }\n function _monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h,\n s = hsv.s,\n v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n while (results--) {\n ret.push(tinycolor({\n h: h,\n s: s,\n v: v\n }));\n v = (v + modification) % 1;\n }\n return ret;\n }\n\n // Utility Functions\n // ---------------------\n\n tinycolor.mix = function (color1, color2, amount) {\n amount = amount === 0 ? 0 : amount || 50;\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n var p = amount / 100;\n var rgba = {\n r: (rgb2.r - rgb1.r) * p + rgb1.r,\n g: (rgb2.g - rgb1.g) * p + rgb1.g,\n b: (rgb2.b - rgb1.b) * p + rgb1.b,\n a: (rgb2.a - rgb1.a) * p + rgb1.a\n };\n return tinycolor(rgba);\n };\n\n // Readability Functions\n // ---------------------\n // <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)\n\n // `contrast`\n // Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)\n tinycolor.readability = function (color1, color2) {\n var c1 = tinycolor(color1);\n var c2 = tinycolor(color2);\n return (Math.max(c1.getLuminance(), c2.getLuminance()) + 0.05) / (Math.min(c1.getLuminance(), c2.getLuminance()) + 0.05);\n };\n\n // `isReadable`\n // Ensure that foreground and background color combinations meet WCAG2 guidelines.\n // The third argument is an optional Object.\n // the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';\n // the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.\n // If the entire object is absent, isReadable defaults to {level:\"AA\",size:\"small\"}.\n\n // *Example*\n // tinycolor.isReadable(\"#000\", \"#111\") => false\n // tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\n tinycolor.isReadable = function (color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n out = false;\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n };\n\n // `mostReadable`\n // Given a base color and a list of possible foreground or background\n // colors for that base, returns the most readable color.\n // Optionally returns Black or White if the most readable color is unreadable.\n // *Example*\n // tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n // tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n // tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n // tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\n tinycolor.mostReadable = function (baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors;\n level = args.level;\n size = args.size;\n for (var i = 0; i < colorList.length; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n if (tinycolor.isReadable(baseColor, bestColor, {\n level: level,\n size: size\n }) || !includeFallbackColors) {\n return bestColor;\n } else {\n args.includeFallbackColors = false;\n return tinycolor.mostReadable(baseColor, [\"#fff\", \"#000\"], args);\n }\n };\n\n // Big List of Colors\n // ------------------\n // <https://www.w3.org/TR/css-color-4/#named-colors>\n var names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n };\n\n // Make it easy to access colors via `hexNames[hex]`\n var hexNames = tinycolor.hexNames = flip(names);\n\n // Utilities\n // ---------\n\n // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\n function flip(o) {\n var flipped = {};\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n }\n\n // Return a valid alpha value [0,1] with all invalid values being set to 1\n function boundAlpha(a) {\n a = parseFloat(a);\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n return a;\n }\n\n // Take input from [0, n] and return it as [0, 1]\n function bound01(n, max) {\n if (isOnePointZero(n)) n = \"100%\";\n var processPercent = isPercentage(n);\n n = Math.min(max, Math.max(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return n % max / parseFloat(max);\n }\n\n // Force a number between 0 and 1\n function clamp01(val) {\n return Math.min(1, Math.max(0, val));\n }\n\n // Parse a base-16 hex value into a base-10 integer\n function parseIntFromHex(val) {\n return parseInt(val, 16);\n }\n\n // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\n function isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf(\".\") != -1 && parseFloat(n) === 1;\n }\n\n // Check to see if string passed in is a percentage\n function isPercentage(n) {\n return typeof n === \"string\" && n.indexOf(\"%\") != -1;\n }\n\n // Force a hex value to have 2 characters\n function pad2(c) {\n return c.length == 1 ? \"0\" + c : \"\" + c;\n }\n\n // Replace a decimal with it's percentage value\n function convertToPercentage(n) {\n if (n <= 1) {\n n = n * 100 + \"%\";\n }\n return n;\n }\n\n // Converts a decimal to a hex value\n function convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n }\n // Converts a hex value to a decimal\n function convertHexToDecimal(h) {\n return parseIntFromHex(h) / 255;\n }\n var matchers = function () {\n // <http://www.w3.org/TR/css3-values/#integers>\n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // <http://www.w3.org/TR/css3-values/#number-value>\n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n }();\n\n // `isValidCSSUnit`\n // Take in a single string / number and check to see if it looks like a CSS unit\n // (see `matchers` above for definition).\n function isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n }\n\n // `stringInputToObject`\n // Permissive string parsing. Take in a number of formats, and output an object\n // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\n function stringInputToObject(color) {\n color = color.replace(trimLeft, \"\").replace(trimRight, \"\").toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n } else if (color == \"transparent\") {\n return {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n format: \"name\"\n };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if (match = matchers.rgb.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3]\n };\n }\n if (match = matchers.rgba.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hsl.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3]\n };\n }\n if (match = matchers.hsla.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hsv.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3]\n };\n }\n if (match = matchers.hsva.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hex8.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if (match = matchers.hex6.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if (match = matchers.hex4.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n a: convertHexToDecimal(match[4] + \"\" + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if (match = matchers.hex3.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n return false;\n }\n function validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\n level: \"AA\",\n size: \"small\"\n };\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\n level: level,\n size: size\n };\n }\n\n return tinycolor;\n\n}));\n","const tinycolor = require('tinycolor2');\n\n/**\n * @typedef {Object} TinyGradient.StopInput\n * @property {ColorInput} color\n * @property {number} pos\n */\n\n/**\n * @typedef {Object} TinyGradient.StepValue\n * @type {number} [r]\n * @type {number} [g]\n * @type {number} [b]\n * @type {number} [h]\n * @type {number} [s]\n * @type {number} [v]\n * @type {number} [a]\n */\n\n/**\n * @type {StepValue}\n */\nconst RGBA_MAX = { r: 256, g: 256, b: 256, a: 1 };\n\n/**\n * @type {StepValue}\n */\nconst HSVA_MAX = { h: 360, s: 1, v: 1, a: 1 };\n\n/**\n * Linearly compute the step size between start and end (not normalized)\n * @param {StepValue} start\n * @param {StepValue} end\n * @param {number} steps - number of desired steps\n * @return {StepValue}\n */\nfunction stepize(start, end, steps) {\n let step = {};\n\n for (let k in start) {\n if (start.hasOwnProperty(k)) {\n step[k] = steps === 0 ? 0 : (end[k] - start[k]) / steps;\n }\n }\n\n return step;\n}\n\n/**\n * Compute the final step color\n * @param {StepValue} step - from `stepize`\n * @param {StepValue} start\n * @param {number} i - color index\n * @param {StepValue} max - rgba or hsva of maximum values for each channel\n * @return {StepValue}\n */\nfunction interpolate(step, start, i, max) {\n let color = {};\n\n for (let k in start) {\n if (start.hasOwnProperty(k)) {\n color[k] = step[k] * i + start[k];\n color[k] = color[k] < 0 ? color[k] + max[k] : (max[k] !== 1 ? color[k] % max[k] : color[k]);\n }\n }\n\n return color;\n}\n\n/**\n * Generate gradient with RGBa interpolation\n * @param {StopInput} stop1\n * @param {StopInput} stop2\n * @param {number} steps\n * @return {tinycolor[]} color1 included, color2 excluded\n */\nfunction interpolateRgb(stop1, stop2, steps) {\n const start = stop1.color.toRgb();\n const end = stop2.color.toRgb();\n const step = stepize(start, end, steps);\n let gradient = [stop1.color];\n\n for (let i = 1; i < steps; i++) {\n const color = interpolate(step, start, i, RGBA_MAX);\n gradient.push(tinycolor(color));\n }\n\n return gradient;\n}\n\n/**\n * Generate gradient with HSVa interpolation\n * @param {StopInput} stop1\n * @param {StopInput} stop2\n * @param {number} steps\n * @param {boolean|'long'|'short'} mode\n * @return {tinycolor[]} color1 included, color2 excluded\n */\nfunction interpolateHsv(stop1, stop2, steps, mode) {\n const start = stop1.color.toHsv();\n const end = stop2.color.toHsv();\n\n // rgb interpolation if one of the steps in grayscale\n if (start.s === 0 || end.s === 0) {\n return interpolateRgb(stop1, stop2, steps);\n }\n\n let trigonometric;\n if (typeof mode === 'boolean') {\n trigonometric = mode;\n }\n else {\n const trigShortest = (start.h < end.h && end.h - start.h < 180) || (start.h > end.h && start.h - end.h > 180);\n trigonometric = (mode === 'long' && trigShortest) || (mode === 'short' && !trigShortest);\n }\n\n const step = stepize(start, end, steps);\n let gradient = [stop1.color];\n\n // recompute hue\n let diff;\n if ((start.h <= end.h && !trigonometric) || (start.h >= end.h && trigonometric)) {\n diff = end.h - start.h;\n }\n else if (trigonometric) {\n diff = 360 - end.h + start.h;\n }\n else {\n diff = 360 - start.h + end.h;\n }\n step.h = Math.pow(-1, trigonometric ? 1 : 0) * Math.abs(diff) / steps;\n\n for (let i = 1; i < steps; i++) {\n const color = interpolate(step, start, i, HSVA_MAX);\n gradient.push(tinycolor(color));\n }\n\n return gradient;\n}\n\n/**\n * Compute substeps between each stops\n * @param {StopInput[]} stops\n * @param {number} steps\n * @return {number[]}\n */\nfunction computeSubsteps(stops, steps) {\n const l = stops.length;\n\n // validation\n steps = parseInt(steps, 10);\n\n if (isNaN(steps) || steps < 2) {\n throw new Error('Invalid number of steps (< 2)');\n }\n if (steps < l) {\n throw new Error('Number of steps cannot be inferior to number of stops');\n }\n\n // compute substeps from stop positions\n let substeps = [];\n\n for (let i = 1; i < l; i++) {\n const step = (steps - 1) * (stops[i].pos - stops[i - 1].pos);\n substeps.push(Math.max(1, Math.round(step)));\n }\n\n // adjust number of steps\n let totalSubsteps = 1;\n for (let n = l - 1; n--;) totalSubsteps += substeps[n];\n\n while (totalSubsteps !== steps) {\n if (totalSubsteps < steps) {\n const min = Math.min.apply(null, substeps);\n substeps[substeps.indexOf(min)]++;\n totalSubsteps++;\n }\n else {\n const max = Math.max.apply(null, substeps);\n substeps[substeps.indexOf(max)]--;\n totalSubsteps--;\n }\n }\n\n return substeps;\n}\n\n/**\n * Compute the color at a specific position\n * @param {StopInput[]} stops\n * @param {number} pos\n * @param {string} method\n * @param {StepValue} max\n * @returns {tinycolor}\n */\nfunction computeAt(stops, pos, method, max) {\n if (pos < 0 || pos > 1) {\n throw new Error('Position must be between 0 and 1');\n }\n\n let start, end;\n for (let i = 0, l = stops.length; i < l - 1; i++) {\n if (pos >= stops[i].pos && pos < stops[i + 1].pos) {\n start = stops[i];\n end = stops[i + 1];\n break;\n }\n }\n\n if (!start) {\n start = end = stops[stops.length - 1];\n }\n\n const step = stepize(start.color[method](), end.color[method](), (end.pos - start.pos) * 100);\n const color = interpolate(step, start.color[method](), (pos - start.pos) * 100, max);\n return tinycolor(color);\n}\n\nclass TinyGradient {\n /**\n * @param {StopInput[]|ColorInput[]} stops\n * @returns {TinyGradient}\n */\n constructor(stops) {\n // validation\n if (stops.length < 2) {\n throw new Error('Invalid number of stops (< 2)');\n }\n\n const havingPositions = stops[0].pos !== undefined;\n let l = stops.length;\n let p = -1;\n let lastColorLess = false;\n // create tinycolor objects and clean positions\n this.stops = stops.map((stop, i) => {\n const hasPosition = stop.pos !== undefined;\n if (havingPositions ^ hasPosition) {\n throw new Error('Cannot mix positionned and not posionned color stops');\n }\n\n if (hasPosition) {\n const hasColor = stop.color !== undefined;\n if (!hasColor && (lastColorLess || i === 0 || i === l - 1)) {\n throw new Error('Cannot define two consecutive position-only stops');\n }\n lastColorLess = !hasColor;\n\n stop = {\n color : hasColor ? tinycolor(stop.color) : null,\n colorLess: !hasColor,\n pos : stop.pos\n };\n\n if (stop.pos < 0 || stop.pos > 1) {\n throw new Error('Color stops positions must be between 0 and 1');\n }\n else if (stop.pos < p) {\n throw new Error('Color stops positions are not ordered');\n }\n p = stop.pos;\n }\n else {\n stop = {\n color: tinycolor(stop.color !== undefined ? stop.color : stop),\n pos : i / (l - 1)\n };\n }\n\n return stop;\n });\n\n if (this.stops[0].pos !== 0) {\n this.stops.unshift({\n color: this.stops[0].color,\n pos : 0\n });\n l++;\n }\n if (this.stops[l - 1].pos !== 1) {\n this.stops.push({\n color: this.stops[l - 1].color,\n pos : 1\n });\n }\n }\n\n /**\n * Return new instance with reversed stops\n * @return {TinyGradient}\n */\n reverse() {\n let stops = [];\n\n this.stops.forEach(function (stop) {\n stops.push({\n color: stop.color,\n pos : 1 - stop.pos\n });\n });\n\n return new TinyGradient(stops.reverse());\n }\n\n /**\n * Return new instance with looped stops\n * @return {TinyGradient}\n */\n loop() {\n let stops1 = [];\n let stops2 = [];\n\n this.stops.forEach((stop) => {\n stops1.push({\n color: stop.color,\n pos : stop.pos / 2\n });\n });\n\n this.stops.slice(0, -1).forEach((stop) => {\n stops2.push({\n color: stop.color,\n pos : 1 - stop.pos / 2\n });\n });\n\n return new TinyGradient(stops1.concat(stops2.reverse()));\n }\n\n /**\n * Generate gradient with RGBa interpolation\n * @param {number} steps\n * @return {tinycolor[]}\n */\n rgb(steps) {\n const substeps = computeSubsteps(this.stops, steps);\n let gradient = [];\n\n this.stops.forEach((stop, i) => {\n if (stop.colorLess) {\n stop.color = interpolateRgb(this.stops[i - 1], this.stops[i + 1], 2)[1];\n }\n });\n\n for (let i = 0, l = this.stops.length; i < l - 1; i++) {\n const rgb = interpolateRgb(this.stops[i], this.stops[i + 1], substeps[i]);\n gradient.splice(gradient.length, 0, ...rgb);\n }\n\n gradient.push(this.stops[this.stops.length - 1].color);\n\n return gradient;\n }\n\n /**\n * Generate gradient with HSVa interpolation\n * @param {number} steps\n * @param {boolean|'long'|'short'} [mode=false]\n * - false to step in clockwise\n * - true to step in trigonometric order\n * - 'short' to use the shortest way\n * - 'long' to use the longest way\n * @return {tinycolor[]}\n */\n hsv(steps, mode) {\n const substeps = computeSubsteps(this.stops, steps);\n let gradient = [];\n\n this.stops.forEach((stop, i) => {\n if (stop.colorLess) {\n stop.color = interpolateHsv(this.stops[i - 1], this.stops[i + 1], 2, mode)[1];\n }\n });\n\n for (let i = 0, l = this.stops.length; i < l - 1; i++) {\n const hsv = interpolateHsv(this.stops[i], this.stops[i + 1], substeps[i], mode);\n gradient.splice(gradient.length, 0, ...hsv);\n }\n\n gradient.push(this.stops[this.stops.length - 1].color);\n\n return gradient;\n }\n\n /**\n * Generate CSS3 command (no prefix) for this gradient\n * @param {String} [mode=linear] - 'linear' or 'radial'\n * @param {String} [direction] - default is 'to right' or 'ellipse at center'\n * @return {String}\n */\n css(mode, direction) {\n mode = mode || 'linear';\n direction = direction || (mode === 'linear' ? 'to right' : 'ellipse at center');\n\n let css = mode + '-gradient(' + direction;\n this.stops.forEach(function (stop) {\n css += ', ' + (stop.colorLess ? '' : stop.color.toRgbString() + ' ') + (stop.pos * 100) + '%';\n });\n css += ')';\n return css;\n }\n\n /**\n * Returns the color at specific position with RGBa interpolation\n * @param {number} pos, between 0 and 1\n * @return {tinycolor}\n */\n rgbAt(pos) {\n return computeAt(this.stops, pos, 'toRgb', RGBA_MAX);\n }\n\n /**\n * Returns the color at specific position with HSVa interpolation\n * @param {number} pos, between 0 and 1\n * @return {tinycolor}\n */\n hsvAt(pos) {\n return computeAt(this.stops, pos, 'toHsv', HSVA_MAX);\n }\n}\n\n/**\n * @param {StopInput[]|ColorInput[]|StopInput...|ColorInput...} stops\n * @returns {TinyGradient}\n */\nmodule.exports = function (stops) {\n // varargs\n if (arguments.length === 1) {\n if (!Array.isArray(arguments[0])) {\n throw new Error('\"stops\" is not an array');\n }\n stops = arguments[0];\n }\n else {\n stops = Array.prototype.slice.call(arguments);\n }\n\n return new TinyGradient(stops);\n};\n","'use strict';\n\nconst chalk = require('chalk');\nconst tinygradient = require('tinygradient');\n\nconst forbiddenChars = /\\s/g;\n\nfunction InitGradient(...args) {\n\tconst grad = tinygradient.apply(this, args);\n\tconst ret = (str, opts) => applyGradient(str ? str.toString() : '', grad, opts);\n\tret.multiline = (str, opts) => multilineGradient(str ? str.toString() : '', grad, opts);\n\treturn ret;\n}\n\nconst getColors = (gradient, options, count) => options.interpolation.toLowerCase() === 'hsv' ?\n\tgradient.hsv(count, options.hsvSpin.toLowerCase()) : gradient.rgb(count);\n\nfunction applyGradient(str, gradient, opts) {\n\tconst options = validateOptions(opts);\n\tconst colorsCount = Math.max(str.replace(forbiddenChars, '').length, gradient.stops.length);\n\tconst colors = getColors(gradient, options, colorsCount);\n\tlet result = '';\n\tfor (const s of str) {\n\t\tresult += s.match(forbiddenChars) ? s : chalk.hex(colors.shift().toHex())(s);\n\t}\n\treturn result;\n}\n\nfunction multilineGradient(str, gradient, opts) {\n\tconst options = validateOptions(opts);\n\tconst lines = str.split('\\n');\n\tconst maxLength = Math.max.apply(null, lines.map(l => l.length).concat([gradient.stops.length]));\n\tconst colors = getColors(gradient, options, maxLength);\n\tconst results = [];\n\tfor (const line of lines) {\n\t\tconst lineColors = colors.slice(0);\n\t\tlet lineResult = '';\n\t\tfor (const l of line) {\n\t\t\tlineResult += chalk.hex(lineColors.shift().toHex())(l);\n\t\t}\n\t\tresults.push(lineResult);\n\t}\n\treturn results.join('\\n');\n}\n\nfunction validateOptions(opts) {\n\tconst options = {interpolation: 'rgb', hsvSpin: 'short', ...opts};\n\tif (opts !== undefined && typeof opts !== 'object') {\n\t\tthrow new TypeError(`Expected \\`options\\` to be an \\`object\\`, got \\`${typeof opts}\\``);\n\t}\n\n\tif (typeof options.interpolation !== 'string') {\n\t\tthrow new TypeError(`Expected \\`options.interpolation\\` to be a \\`string\\`, got \\`${typeof options.interpolation}\\``);\n\t}\n\n\tif (options.interpolation.toLowerCase() === 'hsv' && typeof options.hsvSpin !== 'string') {\n\t\tthrow new TypeError(`Expected \\`options.hsvSpin\\` to be a \\`string\\`, got \\`${typeof options.hsvSpin}\\``);\n\t}\n\treturn options;\n}\n\nconst aliases = {\n\tatlas: {colors: ['#feac5e', '#c779d0', '#4bc0c8'], options: {}},\n\tcristal: {colors: ['#bdfff3', '#4ac29a'], options: {}},\n\tteen: {colors: ['#77a1d3', '#79cbca', '#e684ae'], options: {}},\n\tmind: {colors: ['#473b7b', '#3584a7', '#30d2be'], options: {}},\n\tmorning: {colors: ['#ff5f6d', '#ffc371'], options: {interpolation: 'hsv'}},\n\tvice: {colors: ['#5ee7df', '#b490ca'], options: {interpolation: 'hsv'}},\n\tpassion: {colors: ['#f43b47', '#453a94'], options: {}},\n\tfruit: {colors: ['#ff4e50', '#f9d423'], options: {}},\n\tinstagram: {colors: ['#833ab4', '#fd1d1d', '#fcb045'], options: {}},\n\tretro: {colors: ['#3f51b1', '#5a55ae', '#7b5fac', '#8f6aae', '#a86aa4', '#cc6b8e', '#f18271', '#f3a469', '#f7c978'], options: {}},\n\tsummer: {colors: ['#fdbb2d', '#22c1c3'], options: {}},\n\trainbow: {colors: ['#ff0000', '#ff0100'], options: {interpolation: 'hsv', hsvSpin: 'long'}},\n\tpastel: {colors: ['#74ebd5', '#74ecd5'], options: {interpolation: 'hsv', hsvSpin: 'long'}}\n};\n\nmodule.exports = InitGradient;\nfor (const a in aliases) { // eslint-disable-line guard-for-in\n\tmodule.exports[a] = str => new InitGradient(aliases[a].colors)(str, aliases[a].options);\n\tmodule.exports[a].multiline = str => new InitGradient(aliases[a].colors).multiline(str, aliases[a].options);\n}\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\n\t// OSC sequences only: ESC ] ... ST (non-greedy until the first ST)\n\tconst osc = `(?:\\\\u001B\\\\][\\\\s\\\\S]*?${ST})`;\n\n\t// CSI and related: ESC/C1, optional intermediates, optional params (supports ; and :) then final byte\n\tconst csi = '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:\\\\d{1,4}(?:[;:]\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]';\n\n\tconst pattern = `${osc}|${csi}`;\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","var eaw = {};\n\nif ('undefined' == typeof module) {\n window.eastasianwidth = eaw;\n} else {\n module.exports = eaw;\n}\n\neaw.eastAsianWidth = function(character) {\n var x = character.charCodeAt(0);\n var y = (character.length == 2) ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {\n x &= 0x3FF;\n y &= 0x3FF;\n codePoint = (x << 10) | y;\n codePoint += 0x10000;\n }\n\n if ((0x3000 == codePoint) ||\n (0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {\n return 'F';\n }\n if ((0x20A9 == codePoint) ||\n (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||\n (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||\n (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||\n (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||\n (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||\n (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {\n return 'H';\n }\n if ((0x1100 <= codePoint && codePoint <= 0x115F) ||\n (0x11A3 <= codePoint && codePoint <= 0x11A7) ||\n (0x11FA <= codePoint && codePoint <= 0x11FF) ||\n (0x2329 <= codePoint && codePoint <= 0x232A) ||\n (0x2E80 <= codePoint && codePoint <= 0x2E99) ||\n (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||\n (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||\n (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||\n (0x3001 <= codePoint && codePoint <= 0x303E) ||\n (0x3041 <= codePoint && codePoint <= 0x3096) ||\n (0x3099 <= codePoint && codePoint <= 0x30FF) ||\n (0x3105 <= codePoint && codePoint <= 0x312D) ||\n (0x3131 <= codePoint && codePoint <= 0x318E) ||\n (0x3190 <= codePoint && codePoint <= 0x31BA) ||\n (0x31C0 <= codePoint && codePoint <= 0x31E3) ||\n (0x31F0 <= codePoint && codePoint <= 0x321E) ||\n (0x3220 <= codePoint && codePoint <= 0x3247) ||\n (0x3250 <= codePoint && codePoint <= 0x32FE) ||\n (0x3300 <= codePoint && codePoint <= 0x4DBF) ||\n (0x4E00 <= codePoint && codePoint <= 0xA48C) ||\n (0xA490 <= codePoint && codePoint <= 0xA4C6) ||\n (0xA960 <= codePoint && codePoint <= 0xA97C) ||\n (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||\n (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||\n (0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n (0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n (0xFE30 <= codePoint && codePoint <= 0xFE52) ||\n (0xFE54 <= codePoint && codePoint <= 0xFE66) ||\n (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||\n (0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n (0x1F200 <= codePoint && codePoint <= 0x1F202) ||\n (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||\n (0x1F240 <= codePoint && codePoint <= 0x1F248) ||\n (0x1F250 <= codePoint && codePoint <= 0x1F251) ||\n (0x20000 <= codePoint && codePoint <= 0x2F73F) ||\n (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||\n (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {\n return 'W';\n }\n if ((0x0020 <= codePoint && codePoint <= 0x007E) ||\n (0x00A2 <= codePoint && codePoint <= 0x00A3) ||\n (0x00A5 <= codePoint && codePoint <= 0x00A6) ||\n (0x00AC == codePoint) ||\n (0x00AF == codePoint) ||\n (0x27E6 <= codePoint && codePoint <= 0x27ED) ||\n (0x2985 <= codePoint && codePoint <= 0x2986)) {\n return 'Na';\n }\n if ((0x00A1 == codePoint) ||\n (0x00A4 == codePoint) ||\n (0x00A7 <= codePoint && codePoint <= 0x00A8) ||\n (0x00AA == codePoint) ||\n (0x00AD <= codePoint && codePoint <= 0x00AE) ||\n (0x00B0 <= codePoint && codePoint <= 0x00B4) ||\n (0x00B6 <= codePoint && codePoint <= 0x00BA) ||\n (0x00BC <= codePoint && codePoint <= 0x00BF) ||\n (0x00C6 == codePoint) ||\n (0x00D0 == codePoint) ||\n (0x00D7 <= codePoint && codePoint <= 0x00D8) ||\n (0x00DE <= codePoint && codePoint <= 0x00E1) ||\n (0x00E6 == codePoint) ||\n (0x00E8 <= codePoint && codePoint <= 0x00EA) ||\n (0x00EC <= codePoint && codePoint <= 0x00ED) ||\n (0x00F0 == codePoint) ||\n (0x00F2 <= codePoint && codePoint <= 0x00F3) ||\n (0x00F7 <= codePoint && codePoint <= 0x00FA) ||\n (0x00FC == codePoint) ||\n (0x00FE == codePoint) ||\n (0x0101 == codePoint) ||\n (0x0111 == codePoint) ||\n (0x0113 == codePoint) ||\n (0x011B == codePoint) ||\n (0x0126 <= codePoint && codePoint <= 0x0127) ||\n (0x012B == codePoint) ||\n (0x0131 <= codePoint && codePoint <= 0x0133) ||\n (0x0138 == codePoint) ||\n (0x013F <= codePoint && codePoint <= 0x0142) ||\n (0x0144 == codePoint) ||\n (0x0148 <= codePoint && codePoint <= 0x014B) ||\n (0x014D == codePoint) ||\n (0x0152 <= codePoint && codePoint <= 0x0153) ||\n (0x0166 <= codePoint && codePoint <= 0x0167) ||\n (0x016B == codePoint) ||\n (0x01CE == codePoint) ||\n (0x01D0 == codePoint) ||\n (0x01D2 == codePoint) ||\n (0x01D4 == codePoint) ||\n (0x01D6 == codePoint) ||\n (0x01D8 == codePoint) ||\n (0x01DA == codePoint) ||\n (0x01DC == codePoint) ||\n (0x0251 == codePoint) ||\n (0x0261 == codePoint) ||\n (0x02C4 == codePoint) ||\n (0x02C7 == codePoint) ||\n (0x02C9 <= codePoint && codePoint <= 0x02CB) ||\n (0x02CD == codePoint) ||\n (0x02D0 == codePoint) ||\n (0x02D8 <= codePoint && codePoint <= 0x02DB) ||\n (0x02DD == codePoint) ||\n (0x02DF == codePoint) ||\n (0x0300 <= codePoint && codePoint <= 0x036F) ||\n (0x0391 <= codePoint && codePoint <= 0x03A1) ||\n (0x03A3 <= codePoint && codePoint <= 0x03A9) ||\n (0x03B1 <= codePoint && codePoint <= 0x03C1) ||\n (0x03C3 <= codePoint && codePoint <= 0x03C9) ||\n (0x0401 == codePoint) ||\n (0x0410 <= codePoint && codePoint <= 0x044F) ||\n (0x0451 == codePoint) ||\n (0x2010 == codePoint) ||\n (0x2013 <= codePoint && codePoint <= 0x2016) ||\n (0x2018 <= codePoint && codePoint <= 0x2019) ||\n (0x201C <= codePoint && codePoint <= 0x201D) ||\n (0x2020 <= codePoint && codePoint <= 0x2022) ||\n (0x2024 <= codePoint && codePoint <= 0x2027) ||\n (0x2030 == codePoint) ||\n (0x2032 <= codePoint && codePoint <= 0x2033) ||\n (0x2035 == codePoint) ||\n (0x203B == codePoint) ||\n (0x203E == codePoint) ||\n (0x2074 == codePoint) ||\n (0x207F == codePoint) ||\n (0x2081 <= codePoint && codePoint <= 0x2084) ||\n (0x20AC == codePoint) ||\n (0x2103 == codePoint) ||\n (0x2105 == codePoint) ||\n (0x2109 == codePoint) ||\n (0x2113 == codePoint) ||\n (0x2116 == codePoint) ||\n (0x2121 <= codePoint && codePoint <= 0x2122) ||\n (0x2126 == codePoint) ||\n (0x212B == codePoint) ||\n (0x2153 <= codePoint && codePoint <= 0x2154) ||\n (0x215B <= codePoint && codePoint <= 0x215E) ||\n (0x2160 <= codePoint && codePoint <= 0x216B) ||\n (0x2170 <= codePoint && codePoint <= 0x2179) ||\n (0x2189 == codePoint) ||\n (0x2190 <= codePoint && codePoint <= 0x2199) ||\n (0x21B8 <= codePoint && codePoint <= 0x21B9) ||\n (0x21D2 == codePoint) ||\n (0x21D4 == codePoint) ||\n (0x21E7 == codePoint) ||\n (0x2200 == codePoint) ||\n (0x2202 <= codePoint && codePoint <= 0x2203) ||\n (0x2207 <= codePoint && codePoint <= 0x2208) ||\n (0x220B == codePoint) ||\n (0x220F == codePoint) ||\n (0x2211 == codePoint) ||\n (0x2215 == codePoint) ||\n (0x221A == codePoint) ||\n (0x221D <= codePoint && codePoint <= 0x2220) ||\n (0x2223 == codePoint) ||\n (0x2225 == codePoint) ||\n (0x2227 <= codePoint && codePoint <= 0x222C) ||\n (0x222E == codePoint) ||\n (0x2234 <= codePoint && codePoint <= 0x2237) ||\n (0x223C <= codePoint && codePoint <= 0x223D) ||\n (0x2248 == codePoint) ||\n (0x224C == codePoint) ||\n (0x2252 == codePoint) ||\n (0x2260 <= codePoint && codePoint <= 0x2261) ||\n (0x2264 <= codePoint && codePoint <= 0x2267) ||\n (0x226A <= codePoint && codePoint <= 0x226B) ||\n (0x226E <= codePoint && codePoint <= 0x226F) ||\n (0x2282 <= codePoint && codePoint <= 0x2283) ||\n (0x2286 <= codePoint && codePoint <= 0x2287) ||\n (0x2295 == codePoint) ||\n (0x2299 == codePoint) ||\n (0x22A5 == codePoint) ||\n (0x22BF == codePoint) ||\n (0x2312 == codePoint) ||\n (0x2460 <= codePoint && codePoint <= 0x24E9) ||\n (0x24EB <= codePoint && codePoint <= 0x254B) ||\n (0x2550 <= codePoint && codePoint <= 0x2573) ||\n (0x2580 <= codePoint && codePoint <= 0x258F) ||\n (0x2592 <= codePoint && codePoint <= 0x2595) ||\n (0x25A0 <= codePoint && codePoint <= 0x25A1) ||\n (0x25A3 <= codePoint && codePoint <= 0x25A9) ||\n (0x25B2 <= codePoint && codePoint <= 0x25B3) ||\n (0x25B6 <= codePoint && codePoint <= 0x25B7) ||\n (0x25BC <= codePoint && codePoint <= 0x25BD) ||\n (0x25C0 <= codePoint && codePoint <= 0x25C1) ||\n (0x25C6 <= codePoint && codePoint <= 0x25C8) ||\n (0x25CB == codePoint) ||\n (0x25CE <= codePoint && codePoint <= 0x25D1) ||\n (0x25E2 <= codePoint && codePoint <= 0x25E5) ||\n (0x25EF == codePoint) ||\n (0x2605 <= codePoint && codePoint <= 0x2606) ||\n (0x2609 == codePoint) ||\n (0x260E <= codePoint && codePoint <= 0x260F) ||\n (0x2614 <= codePoint && codePoint <= 0x2615) ||\n (0x261C == codePoint) ||\n (0x261E == codePoint) ||\n (0x2640 == codePoint) ||\n (0x2642 == codePoint) ||\n (0x2660 <= codePoint && codePoint <= 0x2661) ||\n (0x2663 <= codePoint && codePoint <= 0x2665) ||\n (0x2667 <= codePoint && codePoint <= 0x266A) ||\n (0x266C <= codePoint && codePoint <= 0x266D) ||\n (0x266F == codePoint) ||\n (0x269E <= codePoint && codePoint <= 0x269F) ||\n (0x26BE <= codePoint && codePoint <= 0x26BF) ||\n (0x26C4 <= codePoint && codePoint <= 0x26CD) ||\n (0x26CF <= codePoint && codePoint <= 0x26E1) ||\n (0x26E3 == codePoint) ||\n (0x26E8 <= codePoint && codePoint <= 0x26FF) ||\n (0x273D == codePoint) ||\n (0x2757 == codePoint) ||\n (0x2776 <= codePoint && codePoint <= 0x277F) ||\n (0x2B55 <= codePoint && codePoint <= 0x2B59) ||\n (0x3248 <= codePoint && codePoint <= 0x324F) ||\n (0xE000 <= codePoint && codePoint <= 0xF8FF) ||\n (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||\n (0xFFFD == codePoint) ||\n (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||\n (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||\n (0x1F130 <= codePoint && codePoint <= 0x1F169) ||\n (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||\n (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||\n (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||\n (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {\n return 'A';\n }\n\n return 'N';\n};\n\neaw.characterLength = function(character) {\n var code = this.eastAsianWidth(character);\n if (code == 'F' || code == 'W' || code == 'A') {\n return 2;\n } else {\n return 1;\n }\n};\n\n// Split a string considering surrogate-pairs.\nfunction stringToArray(string) {\n return string.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n}\n\neaw.length = function(string) {\n var characters = stringToArray(string);\n var len = 0;\n for (var i = 0; i < characters.length; i++) {\n len = len + this.characterLength(characters[i]);\n }\n return len;\n};\n\neaw.slice = function(text, start, end) {\n textLen = eaw.length(text)\n start = start ? start : 0;\n end = end ? end : 1;\n if (start < 0) {\n start = textLen + start;\n }\n if (end < 0) {\n end = textLen + end;\n }\n var result = '';\n var eawLen = 0;\n var chars = stringToArray(text);\n for (var i = 0; i < chars.length; i++) {\n var char = chars[i];\n var charLen = eaw.length(char);\n if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n if (eawLen + charLen <= end) {\n result += char;\n } else {\n break;\n }\n }\n eawLen += charLen;\n }\n return result;\n};\n","\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","import stripAnsi from 'strip-ansi';\nimport eastAsianWidth from 'eastasianwidth';\nimport emojiRegex from 'emoji-regex';\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\toptions = {\n\t\tambiguousIsNarrow: true,\n\t\t...options\n\t};\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), ' ');\n\n\tconst ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n\tlet width = 0;\n\n\tfor (const character of string) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (codePoint >= 0x300 && codePoint <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst code = eastAsianWidth.eastAsianWidth(character);\n\t\tswitch (code) {\n\t\t\tcase 'F':\n\t\t\tcase 'W':\n\t\t\t\twidth += 2;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\t\twidth += ambiguousCharacterWidth;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twidth += 1;\n\t\t}\n\t}\n\n\treturn width;\n}\n","import stringWidth from 'string-width';\n\nexport default function widestLine(string) {\n\tlet lineWidth = 0;\n\n\tfor (const line of string.split('\\n')) {\n\t\tlineWidth = Math.max(lineWidth, stringWidth(line));\n\t}\n\n\treturn lineWidth;\n}\n","{\n\t\"single\": {\n\t\t\"topLeft\": \"┌\",\n\t\t\"top\": \"─\",\n\t\t\"topRight\": \"┐\",\n\t\t\"right\": \"│\",\n\t\t\"bottomRight\": \"┘\",\n\t\t\"bottom\": \"─\",\n\t\t\"bottomLeft\": \"└\",\n\t\t\"left\": \"│\"\n\t},\n\t\"double\": {\n\t\t\"topLeft\": \"╔\",\n\t\t\"top\": \"═\",\n\t\t\"topRight\": \"╗\",\n\t\t\"right\": \"║\",\n\t\t\"bottomRight\": \"╝\",\n\t\t\"bottom\": \"═\",\n\t\t\"bottomLeft\": \"╚\",\n\t\t\"left\": \"║\"\n\t},\n\t\"round\": {\n\t\t\"topLeft\": \"╭\",\n\t\t\"top\": \"─\",\n\t\t\"topRight\": \"╮\",\n\t\t\"right\": \"│\",\n\t\t\"bottomRight\": \"╯\",\n\t\t\"bottom\": \"─\",\n\t\t\"bottomLeft\": \"╰\",\n\t\t\"left\": \"│\"\n\t},\n\t\"bold\": {\n\t\t\"topLeft\": \"┏\",\n\t\t\"top\": \"━\",\n\t\t\"topRight\": \"┓\",\n\t\t\"right\": \"┃\",\n\t\t\"bottomRight\": \"┛\",\n\t\t\"bottom\": \"━\",\n\t\t\"bottomLeft\": \"┗\",\n\t\t\"left\": \"┃\"\n\t},\n\t\"singleDouble\": {\n\t\t\"topLeft\": \"╓\",\n\t\t\"top\": \"─\",\n\t\t\"topRight\": \"╖\",\n\t\t\"right\": \"║\",\n\t\t\"bottomRight\": \"╜\",\n\t\t\"bottom\": \"─\",\n\t\t\"bottomLeft\": \"╙\",\n\t\t\"left\": \"║\"\n\t},\n\t\"doubleSingle\": {\n\t\t\"topLeft\": \"╒\",\n\t\t\"top\": \"═\",\n\t\t\"topRight\": \"╕\",\n\t\t\"right\": \"│\",\n\t\t\"bottomRight\": \"╛\",\n\t\t\"bottom\": \"═\",\n\t\t\"bottomLeft\": \"╘\",\n\t\t\"left\": \"│\"\n\t},\n\t\"classic\": {\n\t\t\"topLeft\": \"+\",\n\t\t\"top\": \"-\",\n\t\t\"topRight\": \"+\",\n\t\t\"right\": \"|\",\n\t\t\"bottomRight\": \"+\",\n\t\t\"bottom\": \"-\",\n\t\t\"bottomLeft\": \"+\",\n\t\t\"left\": \"|\"\n\t},\n\t\"arrow\": {\n\t\t\"topLeft\": \"↘\",\n\t\t\"top\": \"↓\",\n\t\t\"topRight\": \"↙\",\n\t\t\"right\": \"←\",\n\t\t\"bottomRight\": \"↖\",\n\t\t\"bottom\": \"↑\",\n\t\t\"bottomLeft\": \"↗\",\n\t\t\"left\": \"→\"\n\t}\n}\n","'use strict';\nconst cliBoxes = require('./boxes.json');\n\nmodule.exports = cliBoxes;\n// TODO: Remove this for the next major release\nmodule.exports.default = cliBoxes;\n","const UPPERCASE = /[\\p{Lu}]/u;\nconst LOWERCASE = /[\\p{Ll}]/u;\nconst LEADING_CAPITAL = /^[\\p{Lu}](?![\\p{Lu}])/gu;\nconst IDENTIFIER = /([\\p{Alpha}\\p{N}_]|$)/u;\nconst SEPARATORS = /[_.\\- ]+/;\n\nconst LEADING_SEPARATORS = new RegExp('^' + SEPARATORS.source);\nconst SEPARATORS_AND_IDENTIFIER = new RegExp(SEPARATORS.source + IDENTIFIER.source, 'gu');\nconst NUMBERS_AND_IDENTIFIER = new RegExp('\\\\d+' + IDENTIFIER.source, 'gu');\n\nconst preserveCamelCase = (string, toLowerCase, toUpperCase, preserveConsecutiveUppercase) => {\n\tlet isLastCharLower = false;\n\tlet isLastCharUpper = false;\n\tlet isLastLastCharUpper = false;\n\tlet isLastLastCharPreserved = false;\n\n\tfor (let index = 0; index < string.length; index++) {\n\t\tconst character = string[index];\n\t\tisLastLastCharPreserved = index > 2 ? string[index - 3] === '-' : true;\n\n\t\tif (isLastCharLower && UPPERCASE.test(character)) {\n\t\t\tstring = string.slice(0, index) + '-' + string.slice(index);\n\t\t\tisLastCharLower = false;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = true;\n\t\t\tindex++;\n\t\t} else if (isLastCharUpper && isLastLastCharUpper && LOWERCASE.test(character) && (!isLastLastCharPreserved || preserveConsecutiveUppercase)) {\n\t\t\tstring = string.slice(0, index - 1) + '-' + string.slice(index - 1);\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = false;\n\t\t\tisLastCharLower = true;\n\t\t} else {\n\t\t\tisLastCharLower = toLowerCase(character) === character && toUpperCase(character) !== character;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = toUpperCase(character) === character && toLowerCase(character) !== character;\n\t\t}\n\t}\n\n\treturn string;\n};\n\nconst preserveConsecutiveUppercase = (input, toLowerCase) => {\n\tLEADING_CAPITAL.lastIndex = 0;\n\n\treturn input.replace(LEADING_CAPITAL, m1 => toLowerCase(m1));\n};\n\nconst postProcess = (input, toUpperCase) => {\n\tSEPARATORS_AND_IDENTIFIER.lastIndex = 0;\n\tNUMBERS_AND_IDENTIFIER.lastIndex = 0;\n\n\treturn input.replace(SEPARATORS_AND_IDENTIFIER, (_, identifier) => toUpperCase(identifier))\n\t\t.replace(NUMBERS_AND_IDENTIFIER, m => toUpperCase(m));\n};\n\nexport default function camelCase(input, options) {\n\tif (!(typeof input === 'string' || Array.isArray(input))) {\n\t\tthrow new TypeError('Expected the input to be `string | string[]`');\n\t}\n\n\toptions = {\n\t\tpascalCase: false,\n\t\tpreserveConsecutiveUppercase: false,\n\t\t...options,\n\t};\n\n\tif (Array.isArray(input)) {\n\t\tinput = input.map(x => x.trim())\n\t\t\t.filter(x => x.length)\n\t\t\t.join('-');\n\t} else {\n\t\tinput = input.trim();\n\t}\n\n\tif (input.length === 0) {\n\t\treturn '';\n\t}\n\n\tconst toLowerCase = options.locale === false\n\t\t? string => string.toLowerCase()\n\t\t: string => string.toLocaleLowerCase(options.locale);\n\n\tconst toUpperCase = options.locale === false\n\t\t? string => string.toUpperCase()\n\t\t: string => string.toLocaleUpperCase(options.locale);\n\n\tif (input.length === 1) {\n\t\tif (SEPARATORS.test(input)) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn options.pascalCase ? toUpperCase(input) : toLowerCase(input);\n\t}\n\n\tconst hasUpperCase = input !== toLowerCase(input);\n\n\tif (hasUpperCase) {\n\t\tinput = preserveCamelCase(input, toLowerCase, toUpperCase, options.preserveConsecutiveUppercase);\n\t}\n\n\tinput = input.replace(LEADING_SEPARATORS, '');\n\tinput = options.preserveConsecutiveUppercase ? preserveConsecutiveUppercase(input, toLowerCase) : toLowerCase(input);\n\n\tif (options.pascalCase) {\n\t\tinput = toUpperCase(input.charAt(0)) + input.slice(1);\n\t}\n\n\treturn postProcess(input, toUpperCase);\n}\n","'use strict';\n\nmodule.exports = ({onlyFirst = false} = {}) => {\n\tconst pattern = [\n\t\t'[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n};\n","'use strict';\nconst ansiRegex = require('ansi-regex');\n\nmodule.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;\n","/* eslint-disable yoda */\n'use strict';\n\nconst isFullwidthCodePoint = codePoint => {\n\tif (Number.isNaN(codePoint)) {\n\t\treturn false;\n\t}\n\n\t// Code points are derived from:\n\t// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt\n\tif (\n\t\tcodePoint >= 0x1100 && (\n\t\t\tcodePoint <= 0x115F || // Hangul Jamo\n\t\t\tcodePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET\n\t\t\tcodePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET\n\t\t\t// CJK Radicals Supplement .. Enclosed CJK Letters and Months\n\t\t\t(0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) ||\n\t\t\t// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A\n\t\t\t(0x3250 <= codePoint && codePoint <= 0x4DBF) ||\n\t\t\t// CJK Unified Ideographs .. Yi Radicals\n\t\t\t(0x4E00 <= codePoint && codePoint <= 0xA4C6) ||\n\t\t\t// Hangul Jamo Extended-A\n\t\t\t(0xA960 <= codePoint && codePoint <= 0xA97C) ||\n\t\t\t// Hangul Syllables\n\t\t\t(0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n\t\t\t// CJK Compatibility Ideographs\n\t\t\t(0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n\t\t\t// Vertical Forms\n\t\t\t(0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n\t\t\t// CJK Compatibility Forms .. Small Form Variants\n\t\t\t(0xFE30 <= codePoint && codePoint <= 0xFE6B) ||\n\t\t\t// Halfwidth and Fullwidth Forms\n\t\t\t(0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n\t\t\t(0xFFE0 <= codePoint && codePoint <= 0xFFE6) ||\n\t\t\t// Kana Supplement\n\t\t\t(0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n\t\t\t// Enclosed Ideographic Supplement\n\t\t\t(0x1F200 <= codePoint && codePoint <= 0x1F251) ||\n\t\t\t// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane\n\t\t\t(0x20000 <= codePoint && codePoint <= 0x3FFFD)\n\t\t)\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\nmodule.exports = isFullwidthCodePoint;\nmodule.exports.default = isFullwidthCodePoint;\n","\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F|\\uD83D\\uDC68(?:\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C\\uDFFB|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83D[\\uDC66\\uDC67]|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C[\\uDFFB-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)\\uD83C\\uDFFB|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83D\\uDC69(?:\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|(?:(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)\\uFE0F|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\u200D[\\u2640\\u2642])|\\uD83C\\uDFF4\\u200D\\u2620)\\uFE0F|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83C\\uDDF6\\uD83C\\uDDE6|[#\\*0-9]\\uFE0F\\u20E3|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDB5\\uDDB6\\uDDBB\\uDDD2-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5\\uDEEB\\uDEEC\\uDEF4-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","'use strict';\nconst stripAnsi = require('strip-ansi');\nconst isFullwidthCodePoint = require('is-fullwidth-code-point');\nconst emojiRegex = require('emoji-regex');\n\nconst stringWidth = string => {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), ' ');\n\n\tlet width = 0;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst code = string.codePointAt(i);\n\n\t\t// Ignore control characters\n\t\tif (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (code >= 0x300 && code <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Surrogates\n\t\tif (code > 0xFFFF) {\n\t\t\ti++;\n\t\t}\n\n\t\twidth += isFullwidthCodePoint(code) ? 2 : 1;\n\t}\n\n\treturn width;\n};\n\nmodule.exports = stringWidth;\n// TODO: remove this in the next major version\nmodule.exports.default = stringWidth;\n","'use strict'\n\nconst stringWidth = require('string-width')\n\nfunction ansiAlign (text, opts) {\n if (!text) return text\n\n opts = opts || {}\n const align = opts.align || 'center'\n\n // short-circuit `align: 'left'` as no-op\n if (align === 'left') return text\n\n const split = opts.split || '\\n'\n const pad = opts.pad || ' '\n const widthDiffFn = align !== 'right' ? halfDiff : fullDiff\n\n let returnString = false\n if (!Array.isArray(text)) {\n returnString = true\n text = String(text).split(split)\n }\n\n let width\n let maxWidth = 0\n text = text.map(function (str) {\n str = String(str)\n width = stringWidth(str)\n maxWidth = Math.max(width, maxWidth)\n return {\n str,\n width\n }\n }).map(function (obj) {\n return new Array(widthDiffFn(maxWidth, obj.width) + 1).join(pad) + obj.str\n })\n\n return returnString ? text.join(split) : text\n}\n\nansiAlign.left = function left (text) {\n return ansiAlign(text, { align: 'left' })\n}\n\nansiAlign.center = function center (text) {\n return ansiAlign(text, { align: 'center' })\n}\n\nansiAlign.right = function right (text) {\n return ansiAlign(text, { align: 'right' })\n}\n\nmodule.exports = ansiAlign\n\nfunction halfDiff (maxWidth, curWidth) {\n return Math.floor((maxWidth - curWidth) / 2)\n}\n\nfunction fullDiff (maxWidth, curWidth) {\n return maxWidth - curWidth\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows[rows.length - 1]));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\t\t\tisInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows[rows.length - 1].trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows[rows.length - 1]);\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst pre = [...rows.join('\\n')];\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replace(/\\r\\n/g, '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n","import process from 'node:process';\nimport stringWidth from 'string-width';\nimport chalk from 'chalk';\nimport widestLine from 'widest-line';\nimport cliBoxes from 'cli-boxes';\nimport camelCase from 'camelcase';\nimport ansiAlign from 'ansi-align';\nimport wrapAnsi from 'wrap-ansi';\n\nconst NEWLINE = '\\n';\nconst PAD = ' ';\nconst NONE = 'none';\n\nconst terminalColumns = () => {\n\tconst {env, stdout, stderr} = process;\n\n\tif (stdout?.columns) {\n\t\treturn stdout.columns;\n\t}\n\n\tif (stderr?.columns) {\n\t\treturn stderr.columns;\n\t}\n\n\tif (env.COLUMNS) {\n\t\treturn Number.parseInt(env.COLUMNS, 10);\n\t}\n\n\treturn 80;\n};\n\nconst getObject = detail => typeof detail === 'number' ? {\n\ttop: detail,\n\tright: detail * 3,\n\tbottom: detail,\n\tleft: detail * 3,\n} : {\n\ttop: 0,\n\tright: 0,\n\tbottom: 0,\n\tleft: 0,\n\t...detail,\n};\n\nconst getBorderWidth = borderStyle => borderStyle === NONE ? 0 : 2;\n\nconst getBorderChars = borderStyle => {\n\tconst sides = [\n\t\t'topLeft',\n\t\t'topRight',\n\t\t'bottomRight',\n\t\t'bottomLeft',\n\t\t'left',\n\t\t'right',\n\t\t'top',\n\t\t'bottom',\n\t];\n\n\tlet characters;\n\n\t// Create empty border style\n\tif (borderStyle === NONE) {\n\t\tborderStyle = {};\n\t\tfor (const side of sides) {\n\t\t\tborderStyle[side] = '';\n\t\t}\n\t}\n\n\tif (typeof borderStyle === 'string') {\n\t\tcharacters = cliBoxes[borderStyle];\n\n\t\tif (!characters) {\n\t\t\tthrow new TypeError(`Invalid border style: ${borderStyle}`);\n\t\t}\n\t} else {\n\t\t// Ensure retro-compatibility\n\t\tif (typeof borderStyle?.vertical === 'string') {\n\t\t\tborderStyle.left = borderStyle.vertical;\n\t\t\tborderStyle.right = borderStyle.vertical;\n\t\t}\n\n\t\t// Ensure retro-compatibility\n\t\tif (typeof borderStyle?.horizontal === 'string') {\n\t\t\tborderStyle.top = borderStyle.horizontal;\n\t\t\tborderStyle.bottom = borderStyle.horizontal;\n\t\t}\n\n\t\tfor (const side of sides) {\n\t\t\tif (borderStyle[side] === null || typeof borderStyle[side] !== 'string') {\n\t\t\t\tthrow new TypeError(`Invalid border style: ${side}`);\n\t\t\t}\n\t\t}\n\n\t\tcharacters = borderStyle;\n\t}\n\n\treturn characters;\n};\n\nconst makeTitle = (text, horizontal, alignment) => {\n\tlet title = '';\n\n\tconst textWidth = stringWidth(text);\n\n\tswitch (alignment) {\n\t\tcase 'left': {\n\t\t\ttitle = text + horizontal.slice(textWidth);\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 'right': {\n\t\t\ttitle = horizontal.slice(textWidth) + text;\n\t\t\tbreak;\n\t\t}\n\n\t\tdefault: {\n\t\t\thorizontal = horizontal.slice(textWidth);\n\n\t\t\tif (horizontal.length % 2 === 1) { // This is needed in case the length is odd\n\t\t\t\thorizontal = horizontal.slice(Math.floor(horizontal.length / 2));\n\t\t\t\ttitle = horizontal.slice(1) + text + horizontal; // We reduce the left part of one character to avoid the bar to go beyond its limit\n\t\t\t} else {\n\t\t\t\thorizontal = horizontal.slice(horizontal.length / 2);\n\t\t\t\ttitle = horizontal + text + horizontal;\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn title;\n};\n\nconst makeContentText = (text, {padding, width, textAlignment, height}) => {\n\ttext = ansiAlign(text, {align: textAlignment});\n\tlet lines = text.split(NEWLINE);\n\tconst textWidth = widestLine(text);\n\n\tconst max = width - padding.left - padding.right;\n\n\tif (textWidth > max) {\n\t\tconst newLines = [];\n\t\tfor (const line of lines) {\n\t\t\tconst createdLines = wrapAnsi(line, max, {hard: true});\n\t\t\tconst alignedLines = ansiAlign(createdLines, {align: textAlignment});\n\t\t\tconst alignedLinesArray = alignedLines.split('\\n');\n\t\t\tconst longestLength = Math.max(...alignedLinesArray.map(s => stringWidth(s)));\n\n\t\t\tfor (const alignedLine of alignedLinesArray) {\n\t\t\t\tlet paddedLine;\n\t\t\t\tswitch (textAlignment) {\n\t\t\t\t\tcase 'center': {\n\t\t\t\t\t\tpaddedLine = PAD.repeat((max - longestLength) / 2) + alignedLine;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'right': {\n\t\t\t\t\t\tpaddedLine = PAD.repeat(max - longestLength) + alignedLine;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tpaddedLine = alignedLine;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tnewLines.push(paddedLine);\n\t\t\t}\n\t\t}\n\n\t\tlines = newLines;\n\t}\n\n\tif (textAlignment === 'center' && textWidth < max) {\n\t\tlines = lines.map(line => PAD.repeat((max - textWidth) / 2) + line);\n\t} else if (textAlignment === 'right' && textWidth < max) {\n\t\tlines = lines.map(line => PAD.repeat(max - textWidth) + line);\n\t}\n\n\tconst paddingLeft = PAD.repeat(padding.left);\n\tconst paddingRight = PAD.repeat(padding.right);\n\n\tlines = lines.map(line => paddingLeft + line + paddingRight);\n\n\tlines = lines.map(line => {\n\t\tif (width - stringWidth(line) > 0) {\n\t\t\tswitch (textAlignment) {\n\t\t\t\tcase 'center': {\n\t\t\t\t\treturn line + PAD.repeat(width - stringWidth(line));\n\t\t\t\t}\n\n\t\t\t\tcase 'right': {\n\t\t\t\t\treturn line + PAD.repeat(width - stringWidth(line));\n\t\t\t\t}\n\n\t\t\t\tdefault: {\n\t\t\t\t\treturn line + PAD.repeat(width - stringWidth(line));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn line;\n\t});\n\n\tif (padding.top > 0) {\n\t\tlines = [...Array.from({length: padding.top}).fill(PAD.repeat(width)), ...lines];\n\t}\n\n\tif (padding.bottom > 0) {\n\t\tlines = [...lines, ...Array.from({length: padding.bottom}).fill(PAD.repeat(width))];\n\t}\n\n\tif (height && lines.length > height) {\n\t\tlines = lines.slice(0, height);\n\t} else if (height && lines.length < height) {\n\t\tlines = [...lines, ...Array.from({length: height - lines.length}).fill(PAD.repeat(width))];\n\t}\n\n\treturn lines.join(NEWLINE);\n};\n\nconst boxContent = (content, contentWidth, options) => {\n\tconst colorizeBorder = border => {\n\t\tconst newBorder = options.borderColor ? getColorFn(options.borderColor)(border) : border;\n\t\treturn options.dimBorder ? chalk.dim(newBorder) : newBorder;\n\t};\n\n\tconst colorizeContent = content => options.backgroundColor ? getBGColorFn(options.backgroundColor)(content) : content;\n\n\tconst chars = getBorderChars(options.borderStyle);\n\tconst columns = terminalColumns();\n\tlet marginLeft = PAD.repeat(options.margin.left);\n\n\tif (options.float === 'center') {\n\t\tconst marginWidth = Math.max((columns - contentWidth - getBorderWidth(options.borderStyle)) / 2, 0);\n\t\tmarginLeft = PAD.repeat(marginWidth);\n\t} else if (options.float === 'right') {\n\t\tconst marginWidth = Math.max(columns - contentWidth - options.margin.right - getBorderWidth(options.borderStyle), 0);\n\t\tmarginLeft = PAD.repeat(marginWidth);\n\t}\n\n\tlet result = '';\n\n\tif (options.margin.top) {\n\t\tresult += NEWLINE.repeat(options.margin.top);\n\t}\n\n\tif (options.borderStyle !== NONE || options.title) {\n\t\tresult += colorizeBorder(marginLeft + chars.topLeft + (options.title ? makeTitle(options.title, chars.top.repeat(contentWidth), options.titleAlignment) : chars.top.repeat(contentWidth)) + chars.topRight) + NEWLINE;\n\t}\n\n\tconst lines = content.split(NEWLINE);\n\n\tresult += lines.map(line => marginLeft + colorizeBorder(chars.left) + colorizeContent(line) + colorizeBorder(chars.right)).join(NEWLINE);\n\n\tif (options.borderStyle !== NONE) {\n\t\tresult += NEWLINE + colorizeBorder(marginLeft + chars.bottomLeft + chars.bottom.repeat(contentWidth) + chars.bottomRight);\n\t}\n\n\tif (options.margin.bottom) {\n\t\tresult += NEWLINE.repeat(options.margin.bottom);\n\t}\n\n\treturn result;\n};\n\nconst sanitizeOptions = options => {\n\t// If fullscreen is enabled, max-out unspecified width/height\n\tif (options.fullscreen && process?.stdout) {\n\t\tlet newDimensions = [process.stdout.columns, process.stdout.rows];\n\n\t\tif (typeof options.fullscreen === 'function') {\n\t\t\tnewDimensions = options.fullscreen(...newDimensions);\n\t\t}\n\n\t\tif (!options.width) {\n\t\t\toptions.width = newDimensions[0];\n\t\t}\n\n\t\tif (!options.height) {\n\t\t\toptions.height = newDimensions[1];\n\t\t}\n\t}\n\n\t// If width is provided, make sure it's not below 1\n\tif (options.width) {\n\t\toptions.width = Math.max(1, options.width - getBorderWidth(options.borderStyle));\n\t}\n\n\t// If height is provided, make sure it's not below 1\n\tif (options.height) {\n\t\toptions.height = Math.max(1, options.height - getBorderWidth(options.borderStyle));\n\t}\n\n\treturn options;\n};\n\nconst formatTitle = (title, borderStyle) => borderStyle === NONE ? title : ` ${title} `;\n\nconst determineDimensions = (text, options) => {\n\toptions = sanitizeOptions(options);\n\tconst widthOverride = options.width !== undefined;\n\tconst columns = terminalColumns();\n\tconst borderWidth = getBorderWidth(options.borderStyle);\n\tconst maxWidth = columns - options.margin.left - options.margin.right - borderWidth;\n\n\tconst widest = widestLine(wrapAnsi(text, columns - borderWidth, {hard: true, trim: false})) + options.padding.left + options.padding.right;\n\n\t// If title and width are provided, title adheres to fixed width\n\tif (options.title && widthOverride) {\n\t\toptions.title = options.title.slice(0, Math.max(0, options.width - 2));\n\t\tif (options.title) {\n\t\t\toptions.title = formatTitle(options.title, options.borderStyle);\n\t\t}\n\t} else if (options.title) {\n\t\toptions.title = options.title.slice(0, Math.max(0, maxWidth - 2));\n\n\t\t// Recheck if title isn't empty now\n\t\tif (options.title) {\n\t\t\toptions.title = formatTitle(options.title, options.borderStyle);\n\t\t\t// If the title is larger than content, box adheres to title width\n\t\t\tif (stringWidth(options.title) > widest) {\n\t\t\t\toptions.width = stringWidth(options.title);\n\t\t\t}\n\t\t}\n\t}\n\n\t// If fixed width is provided, use it or content width as reference\n\toptions.width = options.width ? options.width : widest;\n\n\tif (!widthOverride) {\n\t\tif ((options.margin.left && options.margin.right) && options.width > maxWidth) {\n\t\t\t// Let's assume we have margins: left = 3, right = 5, in total = 8\n\t\t\tconst spaceForMargins = columns - options.width - borderWidth;\n\t\t\t// Let's assume we have space = 4\n\t\t\tconst multiplier = spaceForMargins / (options.margin.left + options.margin.right);\n\t\t\t// Here: multiplier = 4/8 = 0.5\n\t\t\toptions.margin.left = Math.max(0, Math.floor(options.margin.left * multiplier));\n\t\t\toptions.margin.right = Math.max(0, Math.floor(options.margin.right * multiplier));\n\t\t\t// Left: 3 * 0.5 = 1.5 -> 1\n\t\t\t// Right: 6 * 0.5 = 3\n\t\t}\n\n\t\t// Re-cap width considering the margins after shrinking\n\t\toptions.width = Math.min(options.width, columns - borderWidth - options.margin.left - options.margin.right);\n\t}\n\n\t// Prevent padding overflow\n\tif (options.width - (options.padding.left + options.padding.right) <= 0) {\n\t\toptions.padding.left = 0;\n\t\toptions.padding.right = 0;\n\t}\n\n\tif (options.height && options.height - (options.padding.top + options.padding.bottom) <= 0) {\n\t\toptions.padding.top = 0;\n\t\toptions.padding.bottom = 0;\n\t}\n\n\treturn options;\n};\n\nconst isHex = color => color.match(/^#(?:[0-f]{3}){1,2}$/i);\nconst isColorValid = color => typeof color === 'string' && (chalk[color] ?? isHex(color));\nconst getColorFn = color => isHex(color) ? chalk.hex(color) : chalk[color];\nconst getBGColorFn = color => isHex(color) ? chalk.bgHex(color) : chalk[camelCase(['bg', color])];\n\nexport default function boxen(text, options) {\n\toptions = {\n\t\tpadding: 0,\n\t\tborderStyle: 'single',\n\t\tdimBorder: false,\n\t\ttextAlignment: 'left',\n\t\tfloat: 'left',\n\t\ttitleAlignment: 'left',\n\t\t...options,\n\t};\n\n\t// This option is deprecated\n\tif (options.align) {\n\t\toptions.textAlignment = options.align;\n\t}\n\n\tif (options.borderColor && !isColorValid(options.borderColor)) {\n\t\tthrow new Error(`${options.borderColor} is not a valid borderColor`);\n\t}\n\n\tif (options.backgroundColor && !isColorValid(options.backgroundColor)) {\n\t\tthrow new Error(`${options.backgroundColor} is not a valid backgroundColor`);\n\t}\n\n\toptions.padding = getObject(options.padding);\n\toptions.margin = getObject(options.margin);\n\n\toptions = determineDimensions(text, options);\n\n\ttext = makeContentText(text, options);\n\n\treturn boxContent(text, options.width, options);\n}\n\nexport {default as _borderStyles} from 'cli-boxes';\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n","import * as tty from \"tty\"\n\nconst {\n env = {},\n argv = [],\n platform = \"\",\n} = typeof process === \"undefined\" ? {} : process\n\nconst isDisabled = \"NO_COLOR\" in env || argv.includes(\"--no-color\")\nconst isForced = \"FORCE_COLOR\" in env || argv.includes(\"--color\")\nconst isWindows = platform === \"win32\"\nconst isDumbTerminal = env.TERM === \"dumb\"\n\nconst isCompatibleTerminal =\n tty && tty.isatty && tty.isatty(1) && env.TERM && !isDumbTerminal\n\nconst isCI =\n \"CI\" in env &&\n (\"GITHUB_ACTIONS\" in env || \"GITLAB_CI\" in env || \"CIRCLECI\" in env)\n\nexport const isColorSupported =\n !isDisabled &&\n (isForced || (isWindows && !isDumbTerminal) || isCompatibleTerminal || isCI)\n\nconst replaceClose = (\n index,\n string,\n close,\n replace,\n head = string.substring(0, index) + replace,\n tail = string.substring(index + close.length),\n next = tail.indexOf(close)\n) => head + (next < 0 ? tail : replaceClose(next, tail, close, replace))\n\nconst clearBleed = (index, string, open, close, replace) =>\n index < 0\n ? open + string + close\n : open + replaceClose(index, string, close, replace) + close\n\nconst filterEmpty =\n (open, close, replace = open, at = open.length + 1) =>\n (string) =>\n string || !(string === \"\" || string === undefined)\n ? clearBleed(\n (\"\" + string).indexOf(close, at),\n string,\n open,\n close,\n replace\n )\n : \"\"\n\nconst init = (open, close, replace) =>\n filterEmpty(`\\x1b[${open}m`, `\\x1b[${close}m`, replace)\n\nconst colors = {\n reset: init(0, 0),\n bold: init(1, 22, \"\\x1b[22m\\x1b[1m\"),\n dim: init(2, 22, \"\\x1b[22m\\x1b[2m\"),\n italic: init(3, 23),\n underline: init(4, 24),\n inverse: init(7, 27),\n hidden: init(8, 28),\n strikethrough: init(9, 29),\n black: init(30, 39),\n red: init(31, 39),\n green: init(32, 39),\n yellow: init(33, 39),\n blue: init(34, 39),\n magenta: init(35, 39),\n cyan: init(36, 39),\n white: init(37, 39),\n gray: init(90, 39),\n bgBlack: init(40, 49),\n bgRed: init(41, 49),\n bgGreen: init(42, 49),\n bgYellow: init(43, 49),\n bgBlue: init(44, 49),\n bgMagenta: init(45, 49),\n bgCyan: init(46, 49),\n bgWhite: init(47, 49),\n blackBright: init(90, 39),\n redBright: init(91, 39),\n greenBright: init(92, 39),\n yellowBright: init(93, 39),\n blueBright: init(94, 39),\n magentaBright: init(95, 39),\n cyanBright: init(96, 39),\n whiteBright: init(97, 39),\n bgBlackBright: init(100, 49),\n bgRedBright: init(101, 49),\n bgGreenBright: init(102, 49),\n bgYellowBright: init(103, 49),\n bgBlueBright: init(104, 49),\n bgMagentaBright: init(105, 49),\n bgCyanBright: init(106, 49),\n bgWhiteBright: init(107, 49),\n}\n\nexport const createColors = ({ useColor = isColorSupported } = {}) =>\n useColor\n ? colors\n : Object.keys(colors).reduce(\n (colors, key) => ({ ...colors, [key]: String }),\n {}\n )\n\nexport const {\n reset,\n bold,\n dim,\n italic,\n underline,\n inverse,\n hidden,\n strikethrough,\n black,\n red,\n green,\n yellow,\n blue,\n magenta,\n cyan,\n white,\n gray,\n bgBlack,\n bgRed,\n bgGreen,\n bgYellow,\n bgBlue,\n bgMagenta,\n bgCyan,\n bgWhite,\n blackBright,\n redBright,\n greenBright,\n yellowBright,\n blueBright,\n magentaBright,\n cyanBright,\n whiteBright,\n bgBlackBright,\n bgRedBright,\n bgGreenBright,\n bgYellowBright,\n bgBlueBright,\n bgMagentaBright,\n bgCyanBright,\n bgWhiteBright,\n} = createColors()\n","'use strict'\nmodule.exports = rfdc\n\nfunction copyBuffer (cur) {\n if (cur instanceof Buffer) {\n return Buffer.from(cur)\n }\n\n return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length)\n}\n\nfunction rfdc (opts) {\n opts = opts || {}\n if (opts.circles) return rfdcCircles(opts)\n\n const constructorHandlers = new Map()\n constructorHandlers.set(Date, (o) => new Date(o))\n constructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn)))\n constructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn)))\n if (opts.constructorHandlers) {\n for (const handler of opts.constructorHandlers) {\n constructorHandlers.set(handler[0], handler[1])\n }\n }\n\n let handler = null\n\n return opts.proto ? cloneProto : clone\n\n function cloneArray (a, fn) {\n const keys = Object.keys(a)\n const a2 = new Array(keys.length)\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i]\n const cur = a[k]\n if (typeof cur !== 'object' || cur === null) {\n a2[k] = cur\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n a2[k] = handler(cur, fn)\n } else if (ArrayBuffer.isView(cur)) {\n a2[k] = copyBuffer(cur)\n } else {\n a2[k] = fn(cur)\n }\n }\n return a2\n }\n\n function clone (o) {\n if (typeof o !== 'object' || o === null) return o\n if (Array.isArray(o)) return cloneArray(o, clone)\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, clone)\n }\n const o2 = {}\n for (const k in o) {\n if (Object.hasOwnProperty.call(o, k) === false) continue\n const cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, clone)\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n o2[k] = clone(cur)\n }\n }\n return o2\n }\n\n function cloneProto (o) {\n if (typeof o !== 'object' || o === null) return o\n if (Array.isArray(o)) return cloneArray(o, cloneProto)\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, cloneProto)\n }\n const o2 = {}\n for (const k in o) {\n const cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, cloneProto)\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n o2[k] = cloneProto(cur)\n }\n }\n return o2\n }\n}\n\nfunction rfdcCircles (opts) {\n const refs = []\n const refsNew = []\n\n const constructorHandlers = new Map()\n constructorHandlers.set(Date, (o) => new Date(o))\n constructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn)))\n constructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn)))\n if (opts.constructorHandlers) {\n for (const handler of opts.constructorHandlers) {\n constructorHandlers.set(handler[0], handler[1])\n }\n }\n\n let handler = null\n return opts.proto ? cloneProto : clone\n\n function cloneArray (a, fn) {\n const keys = Object.keys(a)\n const a2 = new Array(keys.length)\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i]\n const cur = a[k]\n if (typeof cur !== 'object' || cur === null) {\n a2[k] = cur\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n a2[k] = handler(cur, fn)\n } else if (ArrayBuffer.isView(cur)) {\n a2[k] = copyBuffer(cur)\n } else {\n const index = refs.indexOf(cur)\n if (index !== -1) {\n a2[k] = refsNew[index]\n } else {\n a2[k] = fn(cur)\n }\n }\n }\n return a2\n }\n\n function clone (o) {\n if (typeof o !== 'object' || o === null) return o\n if (Array.isArray(o)) return cloneArray(o, clone)\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, clone)\n }\n const o2 = {}\n refs.push(o)\n refsNew.push(o2)\n for (const k in o) {\n if (Object.hasOwnProperty.call(o, k) === false) continue\n const cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, clone)\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n const i = refs.indexOf(cur)\n if (i !== -1) {\n o2[k] = refsNew[i]\n } else {\n o2[k] = clone(cur)\n }\n }\n }\n refs.pop()\n refsNew.pop()\n return o2\n }\n\n function cloneProto (o) {\n if (typeof o !== 'object' || o === null) return o\n if (Array.isArray(o)) return cloneArray(o, cloneProto)\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, cloneProto)\n }\n const o2 = {}\n refs.push(o)\n refsNew.push(o2)\n for (const k in o) {\n const cur = o[k]\n if (typeof cur !== 'object' || cur === null) {\n o2[k] = cur\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, cloneProto)\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur)\n } else {\n const i = refs.indexOf(cur)\n if (i !== -1) {\n o2[k] = refsNew[i]\n } else {\n o2[k] = cloneProto(cur)\n }\n }\n }\n refs.pop()\n refsNew.pop()\n return o2\n }\n}\n","/* globals WorkerGlobalScope, DedicatedWorkerGlobalScope, SharedWorkerGlobalScope, ServiceWorkerGlobalScope */\n\nexport const isBrowser = globalThis.window?.document !== undefined;\n\nexport const isNode = globalThis.process?.versions?.node !== undefined;\n\nexport const isBun = globalThis.process?.versions?.bun !== undefined;\n\nexport const isDeno = globalThis.Deno?.version?.deno !== undefined;\n\nexport const isElectron = globalThis.process?.versions?.electron !== undefined;\n\nexport const isJsDom = globalThis.navigator?.userAgent?.includes('jsdom') === true;\n\nexport const isWebWorker = typeof WorkerGlobalScope !== 'undefined' && globalThis instanceof WorkerGlobalScope;\n\nexport const isDedicatedWorker = typeof DedicatedWorkerGlobalScope !== 'undefined' && globalThis instanceof DedicatedWorkerGlobalScope;\n\nexport const isSharedWorker = typeof SharedWorkerGlobalScope !== 'undefined' && globalThis instanceof SharedWorkerGlobalScope;\n\nexport const isServiceWorker = typeof ServiceWorkerGlobalScope !== 'undefined' && globalThis instanceof ServiceWorkerGlobalScope;\n\n// Note: I'm intentionally not DRYing up the other variables to keep them \"lazy\".\nconst platform = globalThis.navigator?.userAgentData?.platform;\n\nexport const isMacOs = platform === 'macOS'\n\t|| globalThis.navigator?.platform === 'MacIntel' // Even on Apple silicon Macs.\n\t|| globalThis.navigator?.userAgent?.includes(' Mac ') === true\n\t|| globalThis.process?.platform === 'darwin';\n\nexport const isWindows = platform === 'Windows'\n\t|| globalThis.navigator?.platform === 'Win32'\n\t|| globalThis.process?.platform === 'win32';\n\nexport const isLinux = platform === 'Linux'\n\t|| globalThis.navigator?.platform?.startsWith('Linux') === true\n\t|| globalThis.navigator?.userAgent?.includes(' Linux ') === true\n\t|| globalThis.process?.platform === 'linux';\n\nexport const isIos = platform === 'iOS'\n\t|| (globalThis.navigator?.platform === 'MacIntel' && globalThis.navigator?.maxTouchPoints > 1)\n\t|| /iPad|iPhone|iPod/.test(globalThis.navigator?.platform);\n\nexport const isAndroid = platform === 'Android'\n\t|| globalThis.navigator?.platform === 'Android'\n\t|| globalThis.navigator?.userAgent?.includes(' Android ') === true\n\t|| globalThis.process?.platform === 'android';\n","import process from 'node:process';\nimport os from 'node:os';\nimport {isBrowser} from 'environment';\n\nconst ESC = '\\u001B[';\nconst OSC = '\\u001B]';\nconst BEL = '\\u0007';\nconst SEP = ';';\n\nconst isTerminalApp = !isBrowser && process.env.TERM_PROGRAM === 'Apple_Terminal';\nconst isWindows = !isBrowser && process.platform === 'win32';\nconst isTmux = !isBrowser && (process.env.TERM?.startsWith('screen') || process.env.TERM?.startsWith('tmux') || process.env.TMUX !== undefined);\n\nconst cwdFunction = isBrowser ? () => {\n\tthrow new Error('`process.cwd()` only works in Node.js, not the browser.');\n} : process.cwd;\n\nconst wrapOsc = sequence => {\n\tif (isTmux) {\n\t\t// Tmux requires OSC sequences to be wrapped with DCS tmux; <sequence> ST\n\t\t// and all ESCs in <sequence> to be replaced with ESC ESC.\n\t\t// It only accepts ESC backslash for ST.\n\t\treturn '\\u001BPtmux;' + sequence.replaceAll('\\u001B', '\\u001B\\u001B') + '\\u001B\\\\';\n\t}\n\n\treturn sequence;\n};\n\nexport const cursorTo = (x, y) => {\n\tif (typeof x !== 'number') {\n\t\tthrow new TypeError('The `x` argument is required');\n\t}\n\n\tif (typeof y !== 'number') {\n\t\treturn ESC + (x + 1) + 'G';\n\t}\n\n\treturn ESC + (y + 1) + SEP + (x + 1) + 'H';\n};\n\nexport const cursorMove = (x, y) => {\n\tif (typeof x !== 'number') {\n\t\tthrow new TypeError('The `x` argument is required');\n\t}\n\n\tlet returnValue = '';\n\n\tif (x < 0) {\n\t\treturnValue += ESC + (-x) + 'D';\n\t} else if (x > 0) {\n\t\treturnValue += ESC + x + 'C';\n\t}\n\n\tif (y < 0) {\n\t\treturnValue += ESC + (-y) + 'A';\n\t} else if (y > 0) {\n\t\treturnValue += ESC + y + 'B';\n\t}\n\n\treturn returnValue;\n};\n\nexport const cursorUp = (count = 1) => ESC + count + 'A';\nexport const cursorDown = (count = 1) => ESC + count + 'B';\nexport const cursorForward = (count = 1) => ESC + count + 'C';\nexport const cursorBackward = (count = 1) => ESC + count + 'D';\n\nexport const cursorLeft = ESC + 'G';\nexport const cursorSavePosition = isTerminalApp ? '\\u001B7' : ESC + 's';\nexport const cursorRestorePosition = isTerminalApp ? '\\u001B8' : ESC + 'u';\nexport const cursorGetPosition = ESC + '6n';\nexport const cursorNextLine = ESC + 'E';\nexport const cursorPrevLine = ESC + 'F';\nexport const cursorHide = ESC + '?25l';\nexport const cursorShow = ESC + '?25h';\n\nexport const eraseLines = count => {\n\tlet clear = '';\n\n\tfor (let i = 0; i < count; i++) {\n\t\tclear += eraseLine + (i < count - 1 ? cursorUp() : '');\n\t}\n\n\tif (count) {\n\t\tclear += cursorLeft;\n\t}\n\n\treturn clear;\n};\n\nexport const eraseEndLine = ESC + 'K';\nexport const eraseStartLine = ESC + '1K';\nexport const eraseLine = ESC + '2K';\nexport const eraseDown = ESC + 'J';\nexport const eraseUp = ESC + '1J';\nexport const eraseScreen = ESC + '2J';\nexport const scrollUp = ESC + 'S';\nexport const scrollDown = ESC + 'T';\n\nexport const clearScreen = '\\u001Bc';\n\nexport const clearViewport = `${eraseScreen}${ESC}H`;\n\nconst isOldWindows = () => {\n\tif (isBrowser || !isWindows) {\n\t\treturn false;\n\t}\n\n\tconst parts = os.release().split('.');\n\tconst major = Number(parts[0]);\n\tconst build = Number(parts[2] ?? 0);\n\n\tif (major < 10) {\n\t\treturn true;\n\t}\n\n\tif (major === 10 && build < 10_586) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\nexport const clearTerminal = isOldWindows()\n\t? `${eraseScreen}${ESC}0f`\n\t// 1. Erases the screen (Only done in case `2` is not supported)\n\t// 2. Erases the whole screen including scrollback buffer\n\t// 3. Moves cursor to the top-left position\n\t// More info: https://www.real-world-systems.com/docs/ANSIcode.html\n\t: `${eraseScreen}${ESC}3J${ESC}H`;\n\nexport const enterAlternativeScreen = ESC + '?1049h';\nexport const exitAlternativeScreen = ESC + '?1049l';\n\nexport const beginSynchronizedOutput = ESC + '?2026h';\nexport const endSynchronizedOutput = ESC + '?2026l';\nexport const synchronizedOutput = text => beginSynchronizedOutput + text + endSynchronizedOutput;\n\nexport const beep = BEL;\n\nexport const link = (text, url) => {\n\tconst openLink = wrapOsc(`${OSC}8${SEP}${SEP}${url}${BEL}`);\n\tconst closeLink = wrapOsc(`${OSC}8${SEP}${SEP}${BEL}`);\n\treturn openLink + text + closeLink;\n};\n\nexport const image = (data, options = {}) => {\n\tlet returnValue = `${OSC}1337;File=inline=1`;\n\n\tif (options.width) {\n\t\treturnValue += `;width=${options.width}`;\n\t}\n\n\tif (options.height) {\n\t\treturnValue += `;height=${options.height}`;\n\t}\n\n\tif (options.preserveAspectRatio === false) {\n\t\treturnValue += ';preserveAspectRatio=0';\n\t}\n\n\tconst imageBuffer = Buffer.from(data);\n\n\t// `size` is optional in the spec, but xterm.js requires it.\n\treturn wrapOsc(returnValue + `;size=${imageBuffer.byteLength}` + ':' + imageBuffer.toString('base64') + BEL);\n};\n\nexport const iTerm = {\n\tsetCwd: (cwd = cwdFunction()) => wrapOsc(`${OSC}50;CurrentDir=${cwd}${BEL}`),\n\n\tannotation(message, options = {}) {\n\t\tlet returnValue = `${OSC}1337;`;\n\n\t\tconst hasX = options.x !== undefined;\n\t\tconst hasY = options.y !== undefined;\n\t\tif ((hasX || hasY) && !(hasX && hasY && options.length !== undefined)) {\n\t\t\tthrow new Error('`x`, `y` and `length` must be defined when `x` or `y` is defined');\n\t\t}\n\n\t\tmessage = message.replaceAll('|', '');\n\n\t\treturnValue += options.isHidden ? 'AddHiddenAnnotation=' : 'AddAnnotation=';\n\n\t\tif (options.length > 0) {\n\t\t\treturnValue += (\n\t\t\t\thasX\n\t\t\t\t\t? [message, options.length, options.x, options.y]\n\t\t\t\t\t: [options.length, message]\n\t\t\t).join('|');\n\t\t} else {\n\t\t\treturnValue += message;\n\t\t}\n\n\t\treturn wrapOsc(returnValue + BEL);\n\t},\n};\n\nexport const ConEmu = {\n\tsetCwd: (cwd = cwdFunction()) => wrapOsc(`${OSC}9;9;${cwd}${BEL}`),\n};\n\nexport const setCwd = (cwd = cwdFunction()) => iTerm.setCwd(cwd) + ConEmu.setCwd(cwd);\n","export * from './base.js';\nexport * as default from './base.js';\n","const copyProperty = (to, from, property, ignoreNonConfigurable) => {\n\t// `Function#length` should reflect the parameters of `to` not `from` since we keep its body.\n\t// `Function#prototype` is non-writable and non-configurable so can never be modified.\n\tif (property === 'length' || property === 'prototype') {\n\t\treturn;\n\t}\n\n\t// `Function#arguments` and `Function#caller` should not be copied. They were reported to be present in `Reflect.ownKeys` for some devices in React Native (#41), so we explicitly ignore them here.\n\tif (property === 'arguments' || property === 'caller') {\n\t\treturn;\n\t}\n\n\tconst toDescriptor = Object.getOwnPropertyDescriptor(to, property);\n\tconst fromDescriptor = Object.getOwnPropertyDescriptor(from, property);\n\n\tif (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {\n\t\treturn;\n\t}\n\n\tObject.defineProperty(to, property, fromDescriptor);\n};\n\n// `Object.defineProperty()` throws if the property exists, is not configurable and either:\n// - one its descriptors is changed\n// - it is non-writable and its value is changed\nconst canCopyProperty = function (toDescriptor, fromDescriptor) {\n\treturn toDescriptor === undefined || toDescriptor.configurable || (\n\t\ttoDescriptor.writable === fromDescriptor.writable\n\t\t&& toDescriptor.enumerable === fromDescriptor.enumerable\n\t\t&& toDescriptor.configurable === fromDescriptor.configurable\n\t\t&& (toDescriptor.writable || toDescriptor.value === fromDescriptor.value)\n\t);\n};\n\nconst changePrototype = (to, from) => {\n\tconst fromPrototype = Object.getPrototypeOf(from);\n\tif (fromPrototype === Object.getPrototypeOf(to)) {\n\t\treturn;\n\t}\n\n\tObject.setPrototypeOf(to, fromPrototype);\n};\n\nconst wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/\\n${fromBody}`;\n\nconst toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, 'toString');\nconst toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, 'name');\n\n// We call `from.toString()` early (not lazily) to ensure `from` can be garbage collected.\n// We use `bind()` instead of a closure for the same reason.\n// Calling `from.toString()` early also allows caching it in case `to.toString()` is called several times.\nconst changeToString = (to, from, name) => {\n\tconst withName = name === '' ? '' : `with ${name.trim()}() `;\n\tconst newToString = wrappedToString.bind(null, withName, from.toString());\n\t// Ensure `to.toString.toString` is non-enumerable and has the same `same`\n\tObject.defineProperty(newToString, 'name', toStringName);\n\tconst {writable, enumerable, configurable} = toStringDescriptor; // We destructue to avoid a potential `get` descriptor.\n\tObject.defineProperty(to, 'toString', {value: newToString, writable, enumerable, configurable});\n};\n\nexport default function mimicFunction(to, from, {ignoreNonConfigurable = false} = {}) {\n\tconst {name} = to;\n\n\tfor (const property of Reflect.ownKeys(from)) {\n\t\tcopyProperty(to, from, property, ignoreNonConfigurable);\n\t}\n\n\tchangePrototype(to, from);\n\tchangeToString(to, from, name);\n\n\treturn to;\n}\n","import mimicFunction from 'mimic-function';\n\nconst calledFunctions = new WeakMap();\n\nconst onetime = (function_, options = {}) => {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError('Expected a function');\n\t}\n\n\tlet returnValue;\n\tlet callCount = 0;\n\tconst functionName = function_.displayName || function_.name || '<anonymous>';\n\n\tconst onetime = function (...arguments_) {\n\t\tcalledFunctions.set(onetime, ++callCount);\n\n\t\tif (callCount === 1) {\n\t\t\treturnValue = function_.apply(this, arguments_);\n\t\t\tfunction_ = undefined;\n\t\t} else if (options.throw === true) {\n\t\t\tthrow new Error(`Function \\`${functionName}\\` can only be called once`);\n\t\t}\n\n\t\treturn returnValue;\n\t};\n\n\tmimicFunction(onetime, function_);\n\tcalledFunctions.set(onetime, callCount);\n\n\treturn onetime;\n};\n\nonetime.callCount = function_ => {\n\tif (!calledFunctions.has(function_)) {\n\t\tthrow new Error(`The given function \\`${function_.name}\\` is not wrapped by the \\`onetime\\` package`);\n\t}\n\n\treturn calledFunctions.get(function_);\n};\n\nexport default onetime;\n","/**\n * This is not the set of all possible signals.\n *\n * It IS, however, the set of all signals that trigger\n * an exit on either Linux or BSD systems. Linux is a\n * superset of the signal names supported on BSD, and\n * the unknown signals just fail to register, so we can\n * catch that easily enough.\n *\n * Windows signals are a different set, since there are\n * signals that terminate Windows processes, but don't\n * terminate (or don't even exist) on Posix systems.\n *\n * Don't bother with SIGKILL. It's uncatchable, which\n * means that we can't fire any callbacks anyway.\n *\n * If a user does happen to register a handler on a non-\n * fatal signal like SIGWINCH or something, and then\n * exit, it'll end up firing `process.emit('exit')`, so\n * the handler will be fired anyway.\n *\n * SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n * artificially, inherently leave the process in a\n * state from which it is not safe to try and enter JS\n * listeners.\n */\nexport const signals: NodeJS.Signals[] = []\nsignals.push('SIGHUP', 'SIGINT', 'SIGTERM')\n\nif (process.platform !== 'win32') {\n signals.push(\n 'SIGALRM',\n 'SIGABRT',\n 'SIGVTALRM',\n 'SIGXCPU',\n 'SIGXFSZ',\n 'SIGUSR2',\n 'SIGTRAP',\n 'SIGSYS',\n 'SIGQUIT',\n 'SIGIOT'\n // should detect profiler and enable/disable accordingly.\n // see #21\n // 'SIGPROF'\n )\n}\n\nif (process.platform === 'linux') {\n signals.push('SIGIO', 'SIGPOLL', 'SIGPWR', 'SIGSTKFLT')\n}\n","// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nimport { signals } from './signals.js'\nexport { signals }\n\n// just a loosened process type so we can do some evil things\ntype ProcessRE = NodeJS.Process & {\n reallyExit: (code?: number | undefined | null) => any\n emit: (ev: string, ...a: any[]) => any\n}\n\nconst processOk = (process: any): process is ProcessRE =>\n !!process &&\n typeof process === 'object' &&\n typeof process.removeListener === 'function' &&\n typeof process.emit === 'function' &&\n typeof process.reallyExit === 'function' &&\n typeof process.listeners === 'function' &&\n typeof process.kill === 'function' &&\n typeof process.pid === 'number' &&\n typeof process.on === 'function'\n\nconst kExitEmitter = Symbol.for('signal-exit emitter')\nconst global: typeof globalThis & { [kExitEmitter]?: Emitter } = globalThis\nconst ObjectDefineProperty = Object.defineProperty.bind(Object)\n\n/**\n * A function that takes an exit code and signal as arguments\n *\n * In the case of signal exits *only*, a return value of true\n * will indicate that the signal is being handled, and we should\n * not synthetically exit with the signal we received. Regardless\n * of the handler return value, the handler is unloaded when an\n * otherwise fatal signal is received, so you get exactly 1 shot\n * at it, unless you add another onExit handler at that point.\n *\n * In the case of numeric code exits, we may already have committed\n * to exiting the process, for example via a fatal exception or\n * unhandled promise rejection, so it is impossible to stop safely.\n */\nexport type Handler = (\n code: number | null | undefined,\n signal: NodeJS.Signals | null\n) => true | void\ntype ExitEvent = 'afterExit' | 'exit'\ntype Emitted = { [k in ExitEvent]: boolean }\ntype Listeners = { [k in ExitEvent]: Handler[] }\n\n// teeny special purpose ee\nclass Emitter {\n emitted: Emitted = {\n afterExit: false,\n exit: false,\n }\n\n listeners: Listeners = {\n afterExit: [],\n exit: [],\n }\n\n count: number = 0\n id: number = Math.random()\n\n constructor() {\n if (global[kExitEmitter]) {\n return global[kExitEmitter]\n }\n ObjectDefineProperty(global, kExitEmitter, {\n value: this,\n writable: false,\n enumerable: false,\n configurable: false,\n })\n }\n\n on(ev: ExitEvent, fn: Handler) {\n this.listeners[ev].push(fn)\n }\n\n removeListener(ev: ExitEvent, fn: Handler) {\n const list = this.listeners[ev]\n const i = list.indexOf(fn)\n /* c8 ignore start */\n if (i === -1) {\n return\n }\n /* c8 ignore stop */\n if (i === 0 && list.length === 1) {\n list.length = 0\n } else {\n list.splice(i, 1)\n }\n }\n\n emit(\n ev: ExitEvent,\n code: number | null | undefined,\n signal: NodeJS.Signals | null\n ): boolean {\n if (this.emitted[ev]) {\n return false\n }\n this.emitted[ev] = true\n let ret: boolean = false\n for (const fn of this.listeners[ev]) {\n ret = fn(code, signal) === true || ret\n }\n if (ev === 'exit') {\n ret = this.emit('afterExit', code, signal) || ret\n }\n return ret\n }\n}\n\nabstract class SignalExitBase {\n abstract onExit(cb: Handler, opts?: { alwaysLast?: boolean }): () => void\n abstract load(): void\n abstract unload(): void\n}\n\nconst signalExitWrap = <T extends SignalExitBase>(handler: T) => {\n return {\n onExit(cb: Handler, opts?: { alwaysLast?: boolean }) {\n return handler.onExit(cb, opts)\n },\n load() {\n return handler.load()\n },\n unload() {\n return handler.unload()\n },\n }\n}\n\nclass SignalExitFallback extends SignalExitBase {\n onExit() {\n return () => {}\n }\n load() {}\n unload() {}\n}\n\nclass SignalExit extends SignalExitBase {\n // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n // so use a supported signal instead\n /* c8 ignore start */\n #hupSig = process.platform === 'win32' ? 'SIGINT' : 'SIGHUP'\n /* c8 ignore stop */\n #emitter = new Emitter()\n #process: ProcessRE\n #originalProcessEmit: ProcessRE['emit']\n #originalProcessReallyExit: ProcessRE['reallyExit']\n\n #sigListeners: { [k in NodeJS.Signals]?: () => void } = {}\n #loaded: boolean = false\n\n constructor(process: ProcessRE) {\n super()\n this.#process = process\n // { <signal>: <listener fn>, ... }\n this.#sigListeners = {}\n for (const sig of signals) {\n this.#sigListeners[sig] = () => {\n // If there are no other listeners, an exit is coming!\n // Simplest way: remove us and then re-send the signal.\n // We know that this will kill the process, so we can\n // safely emit now.\n const listeners = this.#process.listeners(sig)\n let { count } = this.#emitter\n // This is a workaround for the fact that signal-exit v3 and signal\n // exit v4 are not aware of each other, and each will attempt to let\n // the other handle it, so neither of them do. To correct this, we\n // detect if we're the only handler *except* for previous versions\n // of signal-exit, and increment by the count of listeners it has\n // created.\n /* c8 ignore start */\n const p = process as unknown as {\n __signal_exit_emitter__?: { count: number }\n }\n if (\n typeof p.__signal_exit_emitter__ === 'object' &&\n typeof p.__signal_exit_emitter__.count === 'number'\n ) {\n count += p.__signal_exit_emitter__.count\n }\n /* c8 ignore stop */\n if (listeners.length === count) {\n this.unload()\n const ret = this.#emitter.emit('exit', null, sig)\n /* c8 ignore start */\n const s = sig === 'SIGHUP' ? this.#hupSig : sig\n if (!ret) process.kill(process.pid, s)\n /* c8 ignore stop */\n }\n }\n }\n\n this.#originalProcessReallyExit = process.reallyExit\n this.#originalProcessEmit = process.emit\n }\n\n onExit(cb: Handler, opts?: { alwaysLast?: boolean }) {\n /* c8 ignore start */\n if (!processOk(this.#process)) {\n return () => {}\n }\n /* c8 ignore stop */\n\n if (this.#loaded === false) {\n this.load()\n }\n\n const ev = opts?.alwaysLast ? 'afterExit' : 'exit'\n this.#emitter.on(ev, cb)\n return () => {\n this.#emitter.removeListener(ev, cb)\n if (\n this.#emitter.listeners['exit'].length === 0 &&\n this.#emitter.listeners['afterExit'].length === 0\n ) {\n this.unload()\n }\n }\n }\n\n load() {\n if (this.#loaded) {\n return\n }\n this.#loaded = true\n\n // This is the number of onSignalExit's that are in play.\n // It's important so that we can count the correct number of\n // listeners on signals, and don't wait for the other one to\n // handle it instead of us.\n this.#emitter.count += 1\n\n for (const sig of signals) {\n try {\n const fn = this.#sigListeners[sig]\n if (fn) this.#process.on(sig, fn)\n } catch (_) {}\n }\n\n this.#process.emit = (ev: string, ...a: any[]) => {\n return this.#processEmit(ev, ...a)\n }\n this.#process.reallyExit = (code?: number | null | undefined) => {\n return this.#processReallyExit(code)\n }\n }\n\n unload() {\n if (!this.#loaded) {\n return\n }\n this.#loaded = false\n\n signals.forEach(sig => {\n const listener = this.#sigListeners[sig]\n /* c8 ignore start */\n if (!listener) {\n throw new Error('Listener not defined for signal: ' + sig)\n }\n /* c8 ignore stop */\n try {\n this.#process.removeListener(sig, listener)\n /* c8 ignore start */\n } catch (_) {}\n /* c8 ignore stop */\n })\n this.#process.emit = this.#originalProcessEmit\n this.#process.reallyExit = this.#originalProcessReallyExit\n this.#emitter.count -= 1\n }\n\n #processReallyExit(code?: number | null | undefined) {\n /* c8 ignore start */\n if (!processOk(this.#process)) {\n return 0\n }\n this.#process.exitCode = code || 0\n /* c8 ignore stop */\n\n this.#emitter.emit('exit', this.#process.exitCode, null)\n return this.#originalProcessReallyExit.call(\n this.#process,\n this.#process.exitCode\n )\n }\n\n #processEmit(ev: string, ...args: any[]): any {\n const og = this.#originalProcessEmit\n if (ev === 'exit' && processOk(this.#process)) {\n if (typeof args[0] === 'number') {\n this.#process.exitCode = args[0]\n /* c8 ignore start */\n }\n /* c8 ignore start */\n const ret = og.call(this.#process, ev, ...args)\n /* c8 ignore start */\n this.#emitter.emit('exit', this.#process.exitCode, null)\n /* c8 ignore stop */\n return ret\n } else {\n return og.call(this.#process, ev, ...args)\n }\n }\n}\n\nconst process = globalThis.process\n// wrap so that we call the method on the actual handler, without\n// exporting it directly.\nexport const {\n /**\n * Called when the process is exiting, whether via signal, explicit\n * exit, or running out of stuff to do.\n *\n * If the global process object is not suitable for instrumentation,\n * then this will be a no-op.\n *\n * Returns a function that may be used to unload signal-exit.\n */\n onExit,\n\n /**\n * Load the listeners. Likely you never need to call this, unless\n * doing a rather deep integration with signal-exit functionality.\n * Mostly exposed for the benefit of testing.\n *\n * @internal\n */\n load,\n\n /**\n * Unload the listeners. Likely you never need to call this, unless\n * doing a rather deep integration with signal-exit functionality.\n * Mostly exposed for the benefit of testing.\n *\n * @internal\n */\n unload,\n} = signalExitWrap(\n processOk(process) ? new SignalExit(process) : new SignalExitFallback()\n)\n","import process from 'node:process';\nimport onetime from 'onetime';\nimport {onExit} from 'signal-exit';\n\nconst terminal = process.stderr.isTTY\n\t? process.stderr\n\t: (process.stdout.isTTY ? process.stdout : undefined);\n\nconst restoreCursor = terminal ? onetime(() => {\n\tonExit(() => {\n\t\tterminal.write('\\u001B[?25h');\n\t}, {alwaysLast: true});\n}) : () => {};\n\nexport default restoreCursor;\n","import process from 'node:process';\nimport restoreCursor from 'restore-cursor';\n\nlet isHidden = false;\n\nconst cliCursor = {};\n\ncliCursor.show = (writableStream = process.stderr) => {\n\tif (!writableStream.isTTY) {\n\t\treturn;\n\t}\n\n\tisHidden = false;\n\twritableStream.write('\\u001B[?25h');\n};\n\ncliCursor.hide = (writableStream = process.stderr) => {\n\tif (!writableStream.isTTY) {\n\t\treturn;\n\t}\n\n\trestoreCursor();\n\tisHidden = true;\n\twritableStream.write('\\u001B[?25l');\n};\n\ncliCursor.toggle = (force, writableStream) => {\n\tif (force !== undefined) {\n\t\tisHidden = force;\n\t}\n\n\tif (isHidden) {\n\t\tcliCursor.show(writableStream);\n\t} else {\n\t\tcliCursor.hide(writableStream);\n\t}\n};\n\nexport default cliCursor;\n","// Generated by scripts/build.js\n\nexport const ambiguousMinimalCodePoint = 161;\nexport const ambiguousMaximumCodePoint = 1114109;\nexport const ambiguousRanges = [161, 161, 164, 164, 167, 168, 170, 170, 173, 174, 176, 180, 182, 186, 188, 191, 198, 198, 208, 208, 215, 216, 222, 225, 230, 230, 232, 234, 236, 237, 240, 240, 242, 243, 247, 250, 252, 252, 254, 254, 257, 257, 273, 273, 275, 275, 283, 283, 294, 295, 299, 299, 305, 307, 312, 312, 319, 322, 324, 324, 328, 331, 333, 333, 338, 339, 358, 359, 363, 363, 462, 462, 464, 464, 466, 466, 468, 468, 470, 470, 472, 472, 474, 474, 476, 476, 593, 593, 609, 609, 708, 708, 711, 711, 713, 715, 717, 717, 720, 720, 728, 731, 733, 733, 735, 735, 768, 879, 913, 929, 931, 937, 945, 961, 963, 969, 1025, 1025, 1040, 1103, 1105, 1105, 8208, 8208, 8211, 8214, 8216, 8217, 8220, 8221, 8224, 8226, 8228, 8231, 8240, 8240, 8242, 8243, 8245, 8245, 8251, 8251, 8254, 8254, 8308, 8308, 8319, 8319, 8321, 8324, 8364, 8364, 8451, 8451, 8453, 8453, 8457, 8457, 8467, 8467, 8470, 8470, 8481, 8482, 8486, 8486, 8491, 8491, 8531, 8532, 8539, 8542, 8544, 8555, 8560, 8569, 8585, 8585, 8592, 8601, 8632, 8633, 8658, 8658, 8660, 8660, 8679, 8679, 8704, 8704, 8706, 8707, 8711, 8712, 8715, 8715, 8719, 8719, 8721, 8721, 8725, 8725, 8730, 8730, 8733, 8736, 8739, 8739, 8741, 8741, 8743, 8748, 8750, 8750, 8756, 8759, 8764, 8765, 8776, 8776, 8780, 8780, 8786, 8786, 8800, 8801, 8804, 8807, 8810, 8811, 8814, 8815, 8834, 8835, 8838, 8839, 8853, 8853, 8857, 8857, 8869, 8869, 8895, 8895, 8978, 8978, 9312, 9449, 9451, 9547, 9552, 9587, 9600, 9615, 9618, 9621, 9632, 9633, 9635, 9641, 9650, 9651, 9654, 9655, 9660, 9661, 9664, 9665, 9670, 9672, 9675, 9675, 9678, 9681, 9698, 9701, 9711, 9711, 9733, 9734, 9737, 9737, 9742, 9743, 9756, 9756, 9758, 9758, 9792, 9792, 9794, 9794, 9824, 9825, 9827, 9829, 9831, 9834, 9836, 9837, 9839, 9839, 9886, 9887, 9919, 9919, 9926, 9933, 9935, 9939, 9941, 9953, 9955, 9955, 9960, 9961, 9963, 9969, 9972, 9972, 9974, 9977, 9979, 9980, 9982, 9983, 10045, 10045, 10102, 10111, 11094, 11097, 12872, 12879, 57344, 63743, 65024, 65039, 65533, 65533, 127232, 127242, 127248, 127277, 127280, 127337, 127344, 127373, 127375, 127376, 127387, 127404, 917760, 917999, 983040, 1048573, 1048576, 1114109];\n\nexport const fullwidthMinimalCodePoint = 12288;\nexport const fullwidthMaximumCodePoint = 65510;\nexport const fullwidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];\n\nexport const halfwidthMinimalCodePoint = 8361;\nexport const halfwidthMaximumCodePoint = 65518;\nexport const halfwidthRanges = [8361, 8361, 65377, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65512, 65518];\n\nexport const narrowMinimalCodePoint = 32;\nexport const narrowMaximumCodePoint = 10630;\nexport const narrowRanges = [32, 126, 162, 163, 165, 166, 172, 172, 175, 175, 10214, 10221, 10629, 10630];\n\nexport const wideMinimalCodePoint = 4352;\nexport const wideMaximumCodePoint = 262141;\nexport const wideRanges = [4352, 4447, 8986, 8987, 9001, 9002, 9193, 9196, 9200, 9200, 9203, 9203, 9725, 9726, 9748, 9749, 9776, 9783, 9800, 9811, 9855, 9855, 9866, 9871, 9875, 9875, 9889, 9889, 9898, 9899, 9917, 9918, 9924, 9925, 9934, 9934, 9940, 9940, 9962, 9962, 9970, 9971, 9973, 9973, 9978, 9978, 9981, 9981, 9989, 9989, 9994, 9995, 10024, 10024, 10060, 10060, 10062, 10062, 10067, 10069, 10071, 10071, 10133, 10135, 10160, 10160, 10175, 10175, 11035, 11036, 11088, 11088, 11093, 11093, 11904, 11929, 11931, 12019, 12032, 12245, 12272, 12287, 12289, 12350, 12353, 12438, 12441, 12543, 12549, 12591, 12593, 12686, 12688, 12773, 12783, 12830, 12832, 12871, 12880, 42124, 42128, 42182, 43360, 43388, 44032, 55203, 63744, 64255, 65040, 65049, 65072, 65106, 65108, 65126, 65128, 65131, 94176, 94180, 94192, 94198, 94208, 101589, 101631, 101662, 101760, 101874, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 119552, 119638, 119648, 119670, 126980, 126980, 127183, 127183, 127374, 127374, 127377, 127386, 127488, 127490, 127504, 127547, 127552, 127560, 127568, 127569, 127584, 127589, 127744, 127776, 127789, 127797, 127799, 127868, 127870, 127891, 127904, 127946, 127951, 127955, 127968, 127984, 127988, 127988, 127992, 128062, 128064, 128064, 128066, 128252, 128255, 128317, 128331, 128334, 128336, 128359, 128378, 128378, 128405, 128406, 128420, 128420, 128507, 128591, 128640, 128709, 128716, 128716, 128720, 128722, 128725, 128728, 128732, 128735, 128747, 128748, 128756, 128764, 128992, 129003, 129008, 129008, 129292, 129338, 129340, 129349, 129351, 129535, 129648, 129660, 129664, 129674, 129678, 129734, 129736, 129736, 129741, 129756, 129759, 129770, 129775, 129784, 131072, 196605, 196608, 262141];\n","/**\nBinary search on a sorted flat array of [start, end] pairs.\n\n@param {number[]} ranges - Flat array of inclusive [start, end] range pairs, e.g. [0, 5, 10, 20].\n@param {number} codePoint - The value to search for.\n@returns {boolean} Whether the value falls within any of the ranges.\n*/\nexport const isInRange = (ranges, codePoint) => {\n\tlet low = 0;\n\tlet high = Math.floor(ranges.length / 2) - 1;\n\twhile (low <= high) {\n\t\tconst mid = Math.floor((low + high) / 2);\n\t\tconst i = mid * 2;\n\t\tif (codePoint < ranges[i]) {\n\t\t\thigh = mid - 1;\n\t\t} else if (codePoint > ranges[i + 1]) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n};\n","import {\n\tambiguousMinimalCodePoint,\n\tambiguousMaximumCodePoint,\n\tambiguousRanges,\n\n\tfullwidthMinimalCodePoint,\n\tfullwidthMaximumCodePoint,\n\tfullwidthRanges,\n\n\thalfwidthMinimalCodePoint,\n\thalfwidthMaximumCodePoint,\n\thalfwidthRanges,\n\n\tnarrowMinimalCodePoint,\n\tnarrowMaximumCodePoint,\n\tnarrowRanges,\n\n\twideMinimalCodePoint,\n\twideMaximumCodePoint,\n\twideRanges,\n} from './lookup-data.js';\nimport {isInRange} from './utilities.js';\n\nconst commonCjkCodePoint = 0x4E_00;\nconst [wideFastPathStart, wideFastPathEnd] = /* #__PURE__ */ findWideFastPathRange(wideRanges);\n\n// Use a hot-path range so common `isWide` calls can skip binary search.\n// The range containing U+4E00 covers common CJK ideographs;\n// fallback to the largest range for resilience to Unicode table changes.\nfunction findWideFastPathRange(ranges) {\n\tlet fastPathStart = ranges[0];\n\tlet fastPathEnd = ranges[1];\n\n\tfor (let index = 0; index < ranges.length; index += 2) {\n\t\tconst start = ranges[index];\n\t\tconst end = ranges[index + 1];\n\n\t\tif (\n\t\t\tcommonCjkCodePoint >= start\n\t\t\t&& commonCjkCodePoint <= end\n\t\t) {\n\t\t\treturn [start, end];\n\t\t}\n\n\t\tif ((end - start) > (fastPathEnd - fastPathStart)) {\n\t\t\tfastPathStart = start;\n\t\t\tfastPathEnd = end;\n\t\t}\n\t}\n\n\treturn [fastPathStart, fastPathEnd];\n}\n\nexport const isAmbiguous = codePoint => {\n\tif (\n\t\tcodePoint < ambiguousMinimalCodePoint\n\t\t|| codePoint > ambiguousMaximumCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(ambiguousRanges, codePoint);\n};\n\nexport const isFullWidth = codePoint => {\n\tif (\n\t\tcodePoint < fullwidthMinimalCodePoint\n\t\t|| codePoint > fullwidthMaximumCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(fullwidthRanges, codePoint);\n};\n\nconst isHalfWidth = codePoint => {\n\tif (\n\t\tcodePoint < halfwidthMinimalCodePoint\n\t\t|| codePoint > halfwidthMaximumCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(halfwidthRanges, codePoint);\n};\n\nconst isNarrow = codePoint => {\n\tif (\n\t\tcodePoint < narrowMinimalCodePoint\n\t\t|| codePoint > narrowMaximumCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(narrowRanges, codePoint);\n};\n\nexport const isWide = codePoint => {\n\tif (\n\t\tcodePoint >= wideFastPathStart\n\t\t&& codePoint <= wideFastPathEnd\n\t) {\n\t\treturn true;\n\t}\n\n\tif (\n\t\tcodePoint < wideMinimalCodePoint\n\t\t|| codePoint > wideMaximumCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(wideRanges, codePoint);\n};\n\nexport function getCategory(codePoint) {\n\tif (isAmbiguous(codePoint)) {\n\t\treturn 'ambiguous';\n\t}\n\n\tif (isFullWidth(codePoint)) {\n\t\treturn 'fullwidth';\n\t}\n\n\tif (isHalfWidth(codePoint)) {\n\t\treturn 'halfwidth';\n\t}\n\n\tif (isNarrow(codePoint)) {\n\t\treturn 'narrow';\n\t}\n\n\tif (isWide(codePoint)) {\n\t\treturn 'wide';\n\t}\n\n\treturn 'neutral';\n}\n","import {getCategory, isAmbiguous, isFullWidth, isWide} from './lookup.js';\n\nfunction validate(codePoint) {\n\tif (!Number.isSafeInteger(codePoint)) {\n\t\tthrow new TypeError(`Expected a code point, got \\`${typeof codePoint}\\`.`);\n\t}\n}\n\nexport function eastAsianWidthType(codePoint) {\n\tvalidate(codePoint);\n\n\treturn getCategory(codePoint);\n}\n\nexport function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {\n\tvalidate(codePoint);\n\n\tif (\n\t\tisFullWidth(codePoint)\n\t\t|| isWide(codePoint)\n\t\t|| (ambiguousAsWide && isAmbiguous(codePoint))\n\t) {\n\t\treturn 2;\n\t}\n\n\treturn 1;\n}\n\n// Private exports for https://github.com/sindresorhus/is-fullwidth-code-point\nexport {isFullWidth as _isFullWidth, isWide as _isWide} from './lookup.js';\n","export default () => {\n\t// https://mths.be/emoji\n\treturn /[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26D3\\uFE0F?(?:\\u200D\\uD83D\\uDCA5)?|\\u26F9(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF43\\uDF45-\\uDF4A\\uDF4C-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDF44(?:\\u200D\\uD83D\\uDFEB)?|\\uDF4B(?:\\u200D\\uD83D\\uDFE9)?|\\uDFC3(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E-\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4\\uDEB5](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE41\\uDE43\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED8\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC08(?:\\u200D\\u2B1B)?|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC26(?:\\u200D(?:\\u2B1B|\\uD83D\\uDD25))?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDD75(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?|\\uDE42(?:\\u200D[\\u2194\\u2195]\\uFE0F?)?|\\uDEB6(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3C-\\uDD3E\\uDDB8\\uDDB9\\uDDCD\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE8A\\uDE8E-\\uDEC2\\uDEC6\\uDEC8\\uDECD-\\uDEDC\\uDEDF-\\uDEEA\\uDEEF]|\\uDDCE(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1|\\uDDD1\\u200D\\uD83E\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?|\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;\n};\n","import stripAnsi from 'strip-ansi';\nimport {eastAsianWidth} from 'get-east-asian-width';\nimport emojiRegex from 'emoji-regex';\n\nconst segmenter = new Intl.Segmenter();\n\nconst defaultIgnorableCodePointRegex = /^\\p{Default_Ignorable_Code_Point}$/u;\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst {\n\t\tambiguousIsNarrow = true,\n\t\tcountAnsiEscapeCodes = false,\n\t} = options;\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tlet width = 0;\n\tconst eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};\n\n\tfor (const {segment: character} of segmenter.segment(string)) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore zero-width characters\n\t\tif (\n\t\t\t(codePoint >= 0x20_0B && codePoint <= 0x20_0F) // Zero-width space, non-joiner, joiner, left-to-right mark, right-to-left mark\n\t\t\t|| codePoint === 0xFE_FF // Zero-width no-break space\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (\n\t\t\t(codePoint >= 0x3_00 && codePoint <= 0x3_6F) // Combining diacritical marks\n\t\t\t|| (codePoint >= 0x1A_B0 && codePoint <= 0x1A_FF) // Combining diacritical marks extended\n\t\t\t|| (codePoint >= 0x1D_C0 && codePoint <= 0x1D_FF) // Combining diacritical marks supplement\n\t\t\t|| (codePoint >= 0x20_D0 && codePoint <= 0x20_FF) // Combining diacritical marks for symbols\n\t\t\t|| (codePoint >= 0xFE_20 && codePoint <= 0xFE_2F) // Combining half marks\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore surrogate pairs\n\t\tif (codePoint >= 0xD8_00 && codePoint <= 0xDF_FF) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore variation selectors\n\t\tif (codePoint >= 0xFE_00 && codePoint <= 0xFE_0F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// This covers some of the above cases, but we still keep them for performance reasons.\n\t\tif (defaultIgnorableCodePointRegex.test(character)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// TODO: Use `/\\p{RGI_Emoji}/v` when targeting Node.js 20.\n\t\tif (emojiRegex().test(character)) {\n\t\t\twidth += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\twidth += eastAsianWidth(codePoint, eastAsianWidthOptions);\n\t}\n\n\treturn width;\n}\n","import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = url => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${url}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows.at(-1)));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\n\t\t\tconst ansiEscapeLinkCandidate = characters.slice(index + 1, index + 1 + ANSI_ESCAPE_LINK.length).join('');\n\t\t\tisInsideLinkEscape = ansiEscapeLinkCandidate === ANSI_ESCAPE_LINK;\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows.at(-1).length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode.\n//\n// 'hard' will never allow a string to take up more than columns characters.\n//\n// 'soft' allows long words to expand past the column length.\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows.at(-1).trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows.at(-1));\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst preString = rows.join('\\n');\n\tconst pre = [...preString];\n\n\t// We need to keep a separate index as `String#slice()` works on Unicode code units, while `pre` is an array of codepoints.\n\tlet preStringIndex = 0;\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(preString.slice(preStringIndex)) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\n\t\tpreStringIndex += character.length;\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replaceAll('\\r\\n', '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n","import {\n\t_isFullWidth as isFullWidth,\n\t_isWide as isWide,\n} from 'get-east-asian-width';\n\nexport default function isFullwidthCodePoint(codePoint) {\n\tif (!Number.isInteger(codePoint)) {\n\t\treturn false;\n\t}\n\n\treturn isFullWidth(codePoint) || isWide(codePoint);\n}\n","import ansiStyles from 'ansi-styles';\nimport isFullwidthCodePoint from 'is-fullwidth-code-point';\n\n// \\x1b and \\x9b\nconst ESCAPES = new Set([27, 155]);\n\nconst CODE_POINT_0 = '0'.codePointAt(0);\nconst CODE_POINT_9 = '9'.codePointAt(0);\n\nconst MAX_ANSI_SEQUENCE_LENGTH = 19;\n\nconst endCodesSet = new Set();\nconst endCodesMap = new Map();\nfor (const [start, end] of ansiStyles.codes) {\n\tendCodesSet.add(ansiStyles.color.ansi(end));\n\tendCodesMap.set(ansiStyles.color.ansi(start), ansiStyles.color.ansi(end));\n}\n\nfunction getEndCode(code) {\n\tif (endCodesSet.has(code)) {\n\t\treturn code;\n\t}\n\n\tif (endCodesMap.has(code)) {\n\t\treturn endCodesMap.get(code);\n\t}\n\n\tcode = code.slice(2);\n\tif (code.includes(';')) {\n\t\tcode = code[0] + '0';\n\t}\n\n\tconst returnValue = ansiStyles.codes.get(Number.parseInt(code, 10));\n\tif (returnValue) {\n\t\treturn ansiStyles.color.ansi(returnValue);\n\t}\n\n\treturn ansiStyles.reset.open;\n}\n\nfunction findNumberIndex(string) {\n\tfor (let index = 0; index < string.length; index++) {\n\t\tconst codePoint = string.codePointAt(index);\n\t\tif (codePoint >= CODE_POINT_0 && codePoint <= CODE_POINT_9) {\n\t\t\treturn index;\n\t\t}\n\t}\n\n\treturn -1;\n}\n\nfunction parseAnsiCode(string, offset) {\n\tstring = string.slice(offset, offset + MAX_ANSI_SEQUENCE_LENGTH);\n\tconst startIndex = findNumberIndex(string);\n\tif (startIndex !== -1) {\n\t\tlet endIndex = string.indexOf('m', startIndex);\n\t\tif (endIndex === -1) {\n\t\t\tendIndex = string.length;\n\t\t}\n\n\t\treturn string.slice(0, endIndex + 1);\n\t}\n}\n\nfunction tokenize(string, endCharacter = Number.POSITIVE_INFINITY) {\n\tconst returnValue = [];\n\n\tlet index = 0;\n\tlet visibleCount = 0;\n\twhile (index < string.length) {\n\t\tconst codePoint = string.codePointAt(index);\n\n\t\tif (ESCAPES.has(codePoint)) {\n\t\t\tconst code = parseAnsiCode(string, index);\n\t\t\tif (code) {\n\t\t\t\treturnValue.push({\n\t\t\t\t\ttype: 'ansi',\n\t\t\t\t\tcode,\n\t\t\t\t\tendCode: getEndCode(code),\n\t\t\t\t});\n\t\t\t\tindex += code.length;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tconst isFullWidth = isFullwidthCodePoint(codePoint);\n\t\tconst character = String.fromCodePoint(codePoint);\n\n\t\treturnValue.push({\n\t\t\ttype: 'character',\n\t\t\tvalue: character,\n\t\t\tisFullWidth,\n\t\t});\n\n\t\tindex += character.length;\n\t\tvisibleCount += isFullWidth ? 2 : character.length;\n\n\t\tif (visibleCount >= endCharacter) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn returnValue;\n}\n\nfunction reduceAnsiCodes(codes) {\n\tlet returnValue = [];\n\n\tfor (const code of codes) {\n\t\tif (code.code === ansiStyles.reset.open) {\n\t\t\t// Reset code, disable all codes\n\t\t\treturnValue = [];\n\t\t} else if (endCodesSet.has(code.code)) {\n\t\t\t// This is an end code, disable all matching start codes\n\t\t\treturnValue = returnValue.filter(returnValueCode => returnValueCode.endCode !== code.code);\n\t\t} else {\n\t\t\t// This is a start code. Disable all styles this \"overrides\", then enable it\n\t\t\treturnValue = returnValue.filter(returnValueCode => returnValueCode.endCode !== code.endCode);\n\t\t\treturnValue.push(code);\n\t\t}\n\t}\n\n\treturn returnValue;\n}\n\nfunction undoAnsiCodes(codes) {\n\tconst reduced = reduceAnsiCodes(codes);\n\tconst endCodes = reduced.map(({endCode}) => endCode);\n\treturn endCodes.reverse().join('');\n}\n\nexport default function sliceAnsi(string, start, end) {\n\tconst tokens = tokenize(string, end);\n\tlet activeCodes = [];\n\tlet position = 0;\n\tlet returnValue = '';\n\tlet include = false;\n\n\tfor (const token of tokens) {\n\t\tif (end !== undefined && position >= end) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (token.type === 'ansi') {\n\t\t\tactiveCodes.push(token);\n\t\t\tif (include) {\n\t\t\t\treturnValue += token.code;\n\t\t\t}\n\t\t} else {\n\t\t\t// Character\n\t\t\tif (!include && position >= start) {\n\t\t\t\tinclude = true;\n\t\t\t\t// Simplify active codes\n\t\t\t\tactiveCodes = reduceAnsiCodes(activeCodes);\n\t\t\t\treturnValue = activeCodes.map(({code}) => code).join('');\n\t\t\t}\n\n\t\t\tif (include) {\n\t\t\t\treturnValue += token.value;\n\t\t\t}\n\n\t\t\tposition += token.isFullWidth ? 2 : token.value.length;\n\t\t}\n\t}\n\n\t// Disable active codes at the end\n\treturnValue += undoAnsiCodes(activeCodes);\n\treturn returnValue;\n}\n","import process from 'node:process';\nimport ansiEscapes from 'ansi-escapes';\nimport cliCursor from 'cli-cursor';\nimport wrapAnsi from 'wrap-ansi';\nimport sliceAnsi from 'slice-ansi';\nimport stripAnsi from 'strip-ansi';\n\nconst defaultTerminalHeight = 24;\n\nconst getWidth = ({columns = 80}) => columns;\n\nconst fitToTerminalHeight = (stream, text) => {\n\tconst terminalHeight = stream.rows ?? defaultTerminalHeight;\n\tconst lines = text.split('\\n');\n\tconst toRemove = Math.max(0, lines.length - terminalHeight);\n\treturn toRemove ? sliceAnsi(text, stripAnsi(lines.slice(0, toRemove).join('\\n')).length + 1) : text;\n};\n\nexport function createLogUpdate(stream, {showCursor = false} = {}) {\n\tlet previousLineCount = 0;\n\tlet previousWidth = getWidth(stream);\n\tlet previousOutput = '';\n\n\tconst reset = () => {\n\t\tpreviousOutput = '';\n\t\tpreviousWidth = getWidth(stream);\n\t\tpreviousLineCount = 0;\n\t};\n\n\tconst render = (...arguments_) => {\n\t\tif (!showCursor) {\n\t\t\tcliCursor.hide();\n\t\t}\n\n\t\tlet output = fitToTerminalHeight(stream, arguments_.join(' ') + '\\n');\n\t\tconst width = getWidth(stream);\n\n\t\tif (output === previousOutput && previousWidth === width) {\n\t\t\treturn;\n\t\t}\n\n\t\tpreviousOutput = output;\n\t\tpreviousWidth = width;\n\t\toutput = wrapAnsi(output, width, {trim: false, hard: true, wordWrap: false});\n\n\t\tstream.write(ansiEscapes.eraseLines(previousLineCount) + output);\n\t\tpreviousLineCount = output.split('\\n').length;\n\t};\n\n\trender.clear = () => {\n\t\tstream.write(ansiEscapes.eraseLines(previousLineCount));\n\t\treset();\n\t};\n\n\trender.done = () => {\n\t\treset();\n\t\tif (!showCursor) {\n\t\t\tcliCursor.show();\n\t\t}\n\t};\n\n\treturn render;\n}\n\nconst logUpdate = createLogUpdate(process.stdout);\nexport default logUpdate;\n\nexport const logUpdateStderr = createLogUpdate(process.stderr);\n","/* eslint-disable yoda */\n\nexport default function isFullwidthCodePoint(codePoint) {\n\tif (!Number.isInteger(codePoint)) {\n\t\treturn false;\n\t}\n\n\t// Code points are derived from:\n\t// https://unicode.org/Public/UNIDATA/EastAsianWidth.txt\n\treturn codePoint >= 0x1100 && (\n\t\tcodePoint <= 0x115F || // Hangul Jamo\n\t\tcodePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET\n\t\tcodePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET\n\t\t// CJK Radicals Supplement .. Enclosed CJK Letters and Months\n\t\t(0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) ||\n\t\t// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A\n\t\t(0x3250 <= codePoint && codePoint <= 0x4DBF) ||\n\t\t// CJK Unified Ideographs .. Yi Radicals\n\t\t(0x4E00 <= codePoint && codePoint <= 0xA4C6) ||\n\t\t// Hangul Jamo Extended-A\n\t\t(0xA960 <= codePoint && codePoint <= 0xA97C) ||\n\t\t// Hangul Syllables\n\t\t(0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n\t\t// CJK Compatibility Ideographs\n\t\t(0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n\t\t// Vertical Forms\n\t\t(0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n\t\t// CJK Compatibility Forms .. Small Form Variants\n\t\t(0xFE30 <= codePoint && codePoint <= 0xFE6B) ||\n\t\t// Halfwidth and Fullwidth Forms\n\t\t(0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n\t\t(0xFFE0 <= codePoint && codePoint <= 0xFFE6) ||\n\t\t// Kana Supplement\n\t\t(0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n\t\t// Enclosed Ideographic Supplement\n\t\t(0x1F200 <= codePoint && codePoint <= 0x1F251) ||\n\t\t// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane\n\t\t(0x20000 <= codePoint && codePoint <= 0x3FFFD)\n\t);\n}\n","import isFullwidthCodePoint from 'is-fullwidth-code-point';\nimport ansiStyles from 'ansi-styles';\n\nconst astralRegex = /^[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]$/;\n\nconst ESCAPES = [\n\t'\\u001B',\n\t'\\u009B'\n];\n\nconst wrapAnsi = code => `${ESCAPES[0]}[${code}m`;\n\nconst checkAnsi = (ansiCodes, isEscapes, endAnsiCode) => {\n\tlet output = [];\n\tansiCodes = [...ansiCodes];\n\n\tfor (let ansiCode of ansiCodes) {\n\t\tconst ansiCodeOrigin = ansiCode;\n\t\tif (ansiCode.includes(';')) {\n\t\t\tansiCode = ansiCode.split(';')[0][0] + '0';\n\t\t}\n\n\t\tconst item = ansiStyles.codes.get(Number.parseInt(ansiCode, 10));\n\t\tif (item) {\n\t\t\tconst indexEscape = ansiCodes.indexOf(item.toString());\n\t\t\tif (indexEscape === -1) {\n\t\t\t\toutput.push(wrapAnsi(isEscapes ? item : ansiCodeOrigin));\n\t\t\t} else {\n\t\t\t\tansiCodes.splice(indexEscape, 1);\n\t\t\t}\n\t\t} else if (isEscapes) {\n\t\t\toutput.push(wrapAnsi(0));\n\t\t\tbreak;\n\t\t} else {\n\t\t\toutput.push(wrapAnsi(ansiCodeOrigin));\n\t\t}\n\t}\n\n\tif (isEscapes) {\n\t\toutput = output.filter((element, index) => output.indexOf(element) === index);\n\n\t\tif (endAnsiCode !== undefined) {\n\t\t\tconst fistEscapeCode = wrapAnsi(ansiStyles.codes.get(Number.parseInt(endAnsiCode, 10)));\n\t\t\t// TODO: Remove the use of `.reduce` here.\n\t\t\t// eslint-disable-next-line unicorn/no-array-reduce\n\t\t\toutput = output.reduce((current, next) => next === fistEscapeCode ? [next, ...current] : [...current, next], []);\n\t\t}\n\t}\n\n\treturn output.join('');\n};\n\nexport default function sliceAnsi(string, begin, end) {\n\tconst characters = [...string];\n\tconst ansiCodes = [];\n\n\tlet stringEnd = typeof end === 'number' ? end : characters.length;\n\tlet isInsideEscape = false;\n\tlet ansiCode;\n\tlet visible = 0;\n\tlet output = '';\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tlet leftEscape = false;\n\n\t\tif (ESCAPES.includes(character)) {\n\t\t\tconst code = /\\d[^m]*/.exec(string.slice(index, index + 18));\n\t\t\tansiCode = code && code.length > 0 ? code[0] : undefined;\n\n\t\t\tif (visible < stringEnd) {\n\t\t\t\tisInsideEscape = true;\n\n\t\t\t\tif (ansiCode !== undefined) {\n\t\t\t\t\tansiCodes.push(ansiCode);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (isInsideEscape && character === 'm') {\n\t\t\tisInsideEscape = false;\n\t\t\tleftEscape = true;\n\t\t}\n\n\t\tif (!isInsideEscape && !leftEscape) {\n\t\t\tvisible++;\n\t\t}\n\n\t\tif (!astralRegex.test(character) && isFullwidthCodePoint(character.codePointAt())) {\n\t\t\tvisible++;\n\n\t\t\tif (typeof end !== 'number') {\n\t\t\t\tstringEnd++;\n\t\t\t}\n\t\t}\n\n\t\tif (visible > begin && visible <= stringEnd) {\n\t\t\toutput += character;\n\t\t} else if (visible === begin && !isInsideEscape && ansiCode !== undefined) {\n\t\t\toutput = checkAnsi(ansiCodes);\n\t\t} else if (visible >= stringEnd) {\n\t\t\toutput += checkAnsi(ansiCodes, true, ansiCode);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn output;\n}\n","import sliceAnsi from 'slice-ansi';\nimport stringWidth from 'string-width';\n\nfunction getIndexOfNearestSpace(string, wantedIndex, shouldSearchRight) {\n\tif (string.charAt(wantedIndex) === ' ') {\n\t\treturn wantedIndex;\n\t}\n\n\tconst direction = shouldSearchRight ? 1 : -1;\n\n\tfor (let index = 0; index <= 3; index++) {\n\t\tconst finalIndex = wantedIndex + (index * direction);\n\t\tif (string.charAt(finalIndex) === ' ') {\n\t\t\treturn finalIndex;\n\t\t}\n\t}\n\n\treturn wantedIndex;\n}\n\nexport default function cliTruncate(text, columns, options = {}) {\n\tconst {\n\t\tposition = 'end',\n\t\tspace = false,\n\t\tpreferTruncationOnSpace = false,\n\t} = options;\n\n\tlet {truncationCharacter = '…'} = options;\n\n\tif (typeof text !== 'string') {\n\t\tthrow new TypeError(`Expected \\`input\\` to be a string, got ${typeof text}`);\n\t}\n\n\tif (typeof columns !== 'number') {\n\t\tthrow new TypeError(`Expected \\`columns\\` to be a number, got ${typeof columns}`);\n\t}\n\n\tif (columns < 1) {\n\t\treturn '';\n\t}\n\n\tif (columns === 1) {\n\t\treturn truncationCharacter;\n\t}\n\n\tconst length = stringWidth(text);\n\n\tif (length <= columns) {\n\t\treturn text;\n\t}\n\n\tif (position === 'start') {\n\t\tif (preferTruncationOnSpace) {\n\t\t\tconst nearestSpace = getIndexOfNearestSpace(text, length - columns + 1, true);\n\t\t\treturn truncationCharacter + sliceAnsi(text, nearestSpace, length).trim();\n\t\t}\n\n\t\tif (space === true) {\n\t\t\ttruncationCharacter += ' ';\n\t\t}\n\n\t\treturn truncationCharacter + sliceAnsi(text, length - columns + stringWidth(truncationCharacter), length);\n\t}\n\n\tif (position === 'middle') {\n\t\tif (space === true) {\n\t\t\ttruncationCharacter = ` ${truncationCharacter} `;\n\t\t}\n\n\t\tconst half = Math.floor(columns / 2);\n\n\t\tif (preferTruncationOnSpace) {\n\t\t\tconst spaceNearFirstBreakPoint = getIndexOfNearestSpace(text, half);\n\t\t\tconst spaceNearSecondBreakPoint = getIndexOfNearestSpace(text, length - (columns - half) + 1, true);\n\t\t\treturn sliceAnsi(text, 0, spaceNearFirstBreakPoint) + truncationCharacter + sliceAnsi(text, spaceNearSecondBreakPoint, length).trim();\n\t\t}\n\n\t\treturn (\n\t\t\tsliceAnsi(text, 0, half)\n\t\t\t\t+ truncationCharacter\n\t\t\t\t+ sliceAnsi(text, length - (columns - half) + stringWidth(truncationCharacter), length)\n\t\t);\n\t}\n\n\tif (position === 'end') {\n\t\tif (preferTruncationOnSpace) {\n\t\t\tconst nearestSpace = getIndexOfNearestSpace(text, columns - 1);\n\t\t\treturn sliceAnsi(text, 0, nearestSpace) + truncationCharacter;\n\t\t}\n\n\t\tif (space === true) {\n\t\t\ttruncationCharacter = ` ${truncationCharacter}`;\n\t\t}\n\n\t\treturn sliceAnsi(text, 0, columns - stringWidth(truncationCharacter)) + truncationCharacter;\n\t}\n\n\tthrow new Error(`Expected \\`options.position\\` to be either \\`start\\`, \\`middle\\` or \\`end\\`, got ${position}`);\n}\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/constants/ansi-escape-codes.constants.ts\nvar ANSI_ESCAPE = \"\\x1B[\";\nvar ANSI_ESCAPE_CODES = {\n CURSOR_HIDE: ANSI_ESCAPE + \"?25l\",\n CURSOR_SHOW: ANSI_ESCAPE + \"?25h\"\n};\n\n// src/constants/environment-variables.constants.ts\nvar ListrEnvironmentVariables = /* @__PURE__ */ ((ListrEnvironmentVariables2) => {\n ListrEnvironmentVariables2[\"FORCE_UNICODE\"] = \"LISTR_FORCE_UNICODE\";\n ListrEnvironmentVariables2[\"FORCE_TTY\"] = \"LISTR_FORCE_TTY\";\n ListrEnvironmentVariables2[\"DISABLE_COLOR\"] = \"NO_COLOR\";\n ListrEnvironmentVariables2[\"FORCE_COLOR\"] = \"FORCE_COLOR\";\n return ListrEnvironmentVariables2;\n})(ListrEnvironmentVariables || {});\n\n// src/constants/listr-error.constants.ts\nvar ListrErrorTypes = /* @__PURE__ */ ((ListrErrorTypes2) => {\n ListrErrorTypes2[\"WILL_RETRY\"] = \"WILL_RETRY\";\n ListrErrorTypes2[\"WILL_ROLLBACK\"] = \"WILL_ROLLBACK\";\n ListrErrorTypes2[\"HAS_FAILED_TO_ROLLBACK\"] = \"HAS_FAILED_TO_ROLLBACK\";\n ListrErrorTypes2[\"HAS_FAILED\"] = \"HAS_FAILED\";\n ListrErrorTypes2[\"HAS_FAILED_WITHOUT_ERROR\"] = \"HAS_FAILED_WITHOUT_ERROR\";\n return ListrErrorTypes2;\n})(ListrErrorTypes || {});\n\n// src/constants/listr-events.constants.ts\nvar ListrEventType = /* @__PURE__ */ ((ListrEventType2) => {\n ListrEventType2[\"SHOULD_REFRESH_RENDER\"] = \"SHOUD_REFRESH_RENDER\";\n return ListrEventType2;\n})(ListrEventType || {});\n\n// src/constants/listr-renderer.constants.ts\nvar ListrRendererSelection = /* @__PURE__ */ ((ListrRendererSelection2) => {\n ListrRendererSelection2[\"PRIMARY\"] = \"PRIMARY\";\n ListrRendererSelection2[\"SECONDARY\"] = \"SECONDARY\";\n ListrRendererSelection2[\"SILENT\"] = \"SILENT\";\n return ListrRendererSelection2;\n})(ListrRendererSelection || {});\n\n// src/constants/listr-task-events.constants.ts\nvar ListrTaskEventType = /* @__PURE__ */ ((ListrTaskEventType2) => {\n ListrTaskEventType2[\"TITLE\"] = \"TITLE\";\n ListrTaskEventType2[\"STATE\"] = \"STATE\";\n ListrTaskEventType2[\"ENABLED\"] = \"ENABLED\";\n ListrTaskEventType2[\"SUBTASK\"] = \"SUBTASK\";\n ListrTaskEventType2[\"PROMPT\"] = \"PROMPT\";\n ListrTaskEventType2[\"OUTPUT\"] = \"OUTPUT\";\n ListrTaskEventType2[\"MESSAGE\"] = \"MESSAGE\";\n ListrTaskEventType2[\"CLOSED\"] = \"CLOSED\";\n return ListrTaskEventType2;\n})(ListrTaskEventType || {});\n\n// src/constants/listr-task-state.constants.ts\nvar ListrTaskState = /* @__PURE__ */ ((ListrTaskState2) => {\n ListrTaskState2[\"WAITING\"] = \"WAITING\";\n ListrTaskState2[\"STARTED\"] = \"STARTED\";\n ListrTaskState2[\"COMPLETED\"] = \"COMPLETED\";\n ListrTaskState2[\"FAILED\"] = \"FAILED\";\n ListrTaskState2[\"SKIPPED\"] = \"SKIPPED\";\n ListrTaskState2[\"ROLLING_BACK\"] = \"ROLLING_BACK\";\n ListrTaskState2[\"ROLLED_BACK\"] = \"ROLLED_BACK\";\n ListrTaskState2[\"RETRY\"] = \"RETRY\";\n ListrTaskState2[\"PAUSED\"] = \"PAUSED\";\n ListrTaskState2[\"PROMPT\"] = \"PROMPT\";\n ListrTaskState2[\"PROMPT_COMPLETED\"] = \"PROMPT_COMPLETED\";\n ListrTaskState2[\"PROMPT_FAILED\"] = \"PROMPT_FAILED\";\n return ListrTaskState2;\n})(ListrTaskState || {});\n\n// src/lib/event-manager.ts\nimport EventEmitter from \"eventemitter3\";\nvar EventManager = class {\n static {\n __name(this, \"EventManager\");\n }\n emitter = new EventEmitter();\n emit(dispatch, args) {\n this.emitter.emit(dispatch, args);\n }\n on(dispatch, handler) {\n this.emitter.addListener(dispatch, handler);\n }\n once(dispatch, handler) {\n this.emitter.once(dispatch, handler);\n }\n off(dispatch, handler) {\n this.emitter.off(dispatch, handler);\n }\n complete() {\n this.emitter.removeAllListeners();\n }\n};\n\n// src/interfaces/event.interface.ts\nvar BaseEventMap = class {\n static {\n __name(this, \"BaseEventMap\");\n }\n};\n\n// src/utils/environment/is-observable.ts\nfunction isObservable(obj) {\n return !!obj && typeof obj.lift === \"function\" && typeof obj.subscribe === \"function\";\n}\n__name(isObservable, \"isObservable\");\n\n// src/utils/environment/is-unicode-supported.ts\nfunction isUnicodeSupported() {\n return !!process.env[\"LISTR_FORCE_UNICODE\" /* FORCE_UNICODE */] || process.platform !== \"win32\" || !!process.env.CI || !!process.env.WT_SESSION || process.env.TERM_PROGRAM === \"vscode\" || process.env.TERM === \"xterm-256color\" || process.env.TERM === \"alacritty\";\n}\n__name(isUnicodeSupported, \"isUnicodeSupported\");\n\n// src/utils/format/cleanse-ansi.constants.ts\nvar CLEAR_LINE_REGEX = \"(?:\\\\u001b|\\\\u009b)\\\\[[\\\\=><~/#&.:=?%@~_-]*[0-9]*[\\\\a-ln-tqyz=><~/#&.:=?%@~_-]+\";\nvar BELL_REGEX = /\\u0007/;\n\n// src/utils/format/cleanse-ansi.ts\nfunction cleanseAnsi(chunk) {\n return String(chunk).replace(new RegExp(CLEAR_LINE_REGEX, \"gmi\"), \"\").replace(new RegExp(BELL_REGEX, \"gmi\"), \"\").trim();\n}\n__name(cleanseAnsi, \"cleanseAnsi\");\n\n// src/utils/format/color.ts\nimport { createColors } from \"colorette\";\nvar color = createColors();\n\n// src/utils/format/indent.ts\nfunction indent(string, count) {\n return string.replace(/^(?!\\s*$)/gm, \" \".repeat(count));\n}\n__name(indent, \"indent\");\n\n// src/utils/format/figures.ts\nvar FIGURES_MAIN = {\n warning: \"\\u26A0\",\n cross: \"\\u2716\",\n arrowDown: \"\\u2193\",\n tick: \"\\u2714\",\n arrowRight: \"\\u2192\",\n pointer: \"\\u276F\",\n checkboxOn: \"\\u2612\",\n arrowLeft: \"\\u2190\",\n squareSmallFilled: \"\\u25FC\",\n pointerSmall: \"\\u203A\"\n};\nvar FIGURES_FALLBACK = {\n ...FIGURES_MAIN,\n warning: \"\\u203C\",\n cross: \"\\xD7\",\n tick: \"\\u221A\",\n pointer: \">\",\n checkboxOn: \"[\\xD7]\",\n squareSmallFilled: \"\\u25A0\"\n};\nvar figures = isUnicodeSupported() ? FIGURES_MAIN : FIGURES_FALLBACK;\n\n// src/utils/format/splat.ts\nimport { format } from \"util\";\nfunction splat(message, ...splat2) {\n return format(String(message), ...splat2);\n}\n__name(splat, \"splat\");\n\n// src/utils/logger/logger.constants.ts\nvar ListrLogLevels = /* @__PURE__ */ ((ListrLogLevels2) => {\n ListrLogLevels2[\"STARTED\"] = \"STARTED\";\n ListrLogLevels2[\"COMPLETED\"] = \"COMPLETED\";\n ListrLogLevels2[\"FAILED\"] = \"FAILED\";\n ListrLogLevels2[\"SKIPPED\"] = \"SKIPPED\";\n ListrLogLevels2[\"OUTPUT\"] = \"OUTPUT\";\n ListrLogLevels2[\"TITLE\"] = \"TITLE\";\n ListrLogLevels2[\"ROLLBACK\"] = \"ROLLBACK\";\n ListrLogLevels2[\"RETRY\"] = \"RETRY\";\n ListrLogLevels2[\"PROMPT\"] = \"PROMPT\";\n ListrLogLevels2[\"PAUSED\"] = \"PAUSED\";\n return ListrLogLevels2;\n})(ListrLogLevels || {});\nvar LISTR_LOGGER_STYLE = {\n icon: {\n [\"STARTED\" /* STARTED */]: figures.pointer,\n [\"FAILED\" /* FAILED */]: figures.cross,\n [\"SKIPPED\" /* SKIPPED */]: figures.arrowDown,\n [\"COMPLETED\" /* COMPLETED */]: figures.tick,\n [\"OUTPUT\" /* OUTPUT */]: figures.pointerSmall,\n [\"TITLE\" /* TITLE */]: figures.arrowRight,\n [\"RETRY\" /* RETRY */]: figures.warning,\n [\"ROLLBACK\" /* ROLLBACK */]: figures.arrowLeft,\n [\"PAUSED\" /* PAUSED */]: figures.squareSmallFilled\n },\n color: {\n [\"STARTED\" /* STARTED */]: color.yellow,\n [\"FAILED\" /* FAILED */]: color.red,\n [\"SKIPPED\" /* SKIPPED */]: color.yellow,\n [\"COMPLETED\" /* COMPLETED */]: color.green,\n [\"RETRY\" /* RETRY */]: color.yellowBright,\n [\"ROLLBACK\" /* ROLLBACK */]: color.redBright,\n [\"PAUSED\" /* PAUSED */]: color.yellowBright\n }\n};\nvar LISTR_LOGGER_STDERR_LEVELS = [\"RETRY\" /* RETRY */, \"ROLLBACK\" /* ROLLBACK */, \"FAILED\" /* FAILED */];\n\n// src/utils/logger/logger.ts\nimport { EOL } from \"os\";\nvar ListrLogger = class {\n constructor(options) {\n this.options = options;\n this.options = {\n useIcons: true,\n toStderr: [],\n ...options ?? {}\n };\n this.options.fields ??= {};\n this.options.fields.prefix ??= [];\n this.options.fields.suffix ??= [];\n this.process = this.options.processOutput ?? new ProcessOutput();\n }\n static {\n __name(this, \"ListrLogger\");\n }\n process;\n log(level, message, options) {\n const output = this.format(level, message, options);\n if (this.options.toStderr.includes(level)) {\n this.process.toStderr(output);\n return;\n }\n this.process.toStdout(output);\n }\n toStdout(message, options, eol = true) {\n this.process.toStdout(this.format(null, message, options), eol);\n }\n toStderr(message, options, eol = true) {\n this.process.toStderr(this.format(null, message, options), eol);\n }\n wrap(message, options) {\n if (!message) {\n return message;\n }\n return this.applyFormat(`[${message}]`, options);\n }\n splat(...args) {\n const message = args.shift() ?? \"\";\n return args.length === 0 ? message : splat(message, args);\n }\n suffix(message, ...suffixes) {\n suffixes.filter(Boolean).forEach((suffix) => {\n message += this.spacing(message);\n if (typeof suffix === \"string\") {\n message += this.wrap(suffix);\n } else if (typeof suffix === \"object\") {\n suffix.args ??= [];\n if (typeof suffix.condition === \"function\" ? !suffix.condition(...suffix.args) : !(suffix.condition ?? true)) {\n return message;\n }\n message += this.wrap(typeof suffix.field === \"function\" ? suffix.field(...suffix.args) : suffix.field, {\n format: suffix?.format(...suffix.args)\n });\n }\n });\n return message;\n }\n prefix(message, ...prefixes) {\n prefixes.filter(Boolean).forEach((prefix) => {\n message = this.spacing(message) + message;\n if (typeof prefix === \"string\") {\n message = this.wrap(prefix) + message;\n } else if (typeof prefix === \"object\") {\n prefix.args ??= [];\n if (typeof prefix.condition === \"function\" ? !prefix.condition(...prefix.args) : !(prefix.condition ?? true)) {\n return message;\n }\n message = this.wrap(typeof prefix.field === \"function\" ? prefix.field(...prefix.args) : prefix.field, {\n format: prefix?.format()\n }) + message;\n }\n });\n return message;\n }\n fields(message, options) {\n if (this.options?.fields?.prefix) {\n message = this.prefix(message, ...this.options.fields.prefix);\n }\n if (options?.prefix) {\n message = this.prefix(message, ...options.prefix);\n }\n if (options?.suffix) {\n message = this.suffix(message, ...options.suffix);\n }\n if (this.options?.fields?.suffix) {\n message = this.suffix(message, ...this.options.fields.suffix);\n }\n return message;\n }\n icon(level, icon) {\n if (!level) {\n return null;\n }\n icon ||= this.options.icon?.[level];\n const coloring = this.options.color?.[level];\n if (icon && coloring) {\n icon = coloring(icon);\n }\n return icon;\n }\n format(level, message, options) {\n if (!Array.isArray(message)) {\n message = [message];\n }\n message = this.splat(message.shift(), ...message).toString().split(EOL).filter((m) => !m || m.trim() !== \"\").map((m) => {\n return this.style(\n level,\n this.fields(m, {\n prefix: Array.isArray(options?.prefix) ? options.prefix : [options?.prefix],\n suffix: Array.isArray(options?.suffix) ? options.suffix : [options?.suffix]\n })\n );\n }).join(EOL);\n return message;\n }\n style(level, message) {\n if (!level || !message) {\n return message;\n }\n const icon = this.icon(level, !this.options.useIcons && this.wrap(level));\n if (icon) {\n message = icon + \" \" + message;\n }\n return message;\n }\n applyFormat(message, options) {\n if (options?.format) {\n return options.format(message);\n }\n return message;\n }\n spacing(message) {\n return typeof message === \"undefined\" || message.trim() === \"\" ? \"\" : \" \";\n }\n};\n\n// src/utils/process-output/process-output-buffer.ts\nimport { StringDecoder } from \"string_decoder\";\nvar ProcessOutputBuffer = class {\n constructor(options) {\n this.options = options;\n }\n static {\n __name(this, \"ProcessOutputBuffer\");\n }\n buffer = [];\n decoder = new StringDecoder();\n get all() {\n return this.buffer;\n }\n get last() {\n return this.buffer.at(-1);\n }\n get length() {\n return this.buffer.length;\n }\n write(data, ...args) {\n const callback = args[args.length - 1];\n this.buffer.push({\n time: Date.now(),\n stream: this.options?.stream,\n entry: this.decoder.write(typeof data === \"string\" ? Buffer.from(data, typeof args[0] === \"string\" ? args[0] : void 0) : Buffer.from(data))\n });\n if (this.options?.limit) {\n this.buffer = this.buffer.slice(-this.options.limit);\n }\n if (typeof callback === \"function\") {\n callback();\n }\n return true;\n }\n reset() {\n this.buffer = [];\n }\n};\n\n// src/utils/process-output/process-output-stream.ts\nvar ProcessOutputStream = class {\n constructor(stream) {\n this.stream = stream;\n this.method = stream.write;\n this.buffer = new ProcessOutputBuffer({ stream });\n }\n static {\n __name(this, \"ProcessOutputStream\");\n }\n method;\n buffer;\n get out() {\n return Object.assign({}, this.stream, {\n write: this.write.bind(this)\n });\n }\n hijack() {\n this.stream.write = this.buffer.write.bind(this.buffer);\n }\n release() {\n this.stream.write = this.method;\n const buffer = [...this.buffer.all];\n this.buffer.reset();\n return buffer;\n }\n write(...args) {\n return this.method.apply(this.stream, args);\n }\n};\n\n// src/utils/process-output/process-output.ts\nimport { EOL as EOL2 } from \"os\";\nvar ProcessOutput = class {\n constructor(stdout, stderr, options) {\n this.options = options;\n this.stream = {\n stdout: new ProcessOutputStream(stdout ?? process.stdout),\n stderr: new ProcessOutputStream(stderr ?? process.stderr)\n };\n this.options = {\n dump: [\"stdout\", \"stderr\"],\n leaveEmptyLine: true,\n ...options\n };\n }\n static {\n __name(this, \"ProcessOutput\");\n }\n stream;\n active;\n get stdout() {\n return this.stream.stdout.out;\n }\n get stderr() {\n return this.stream.stderr.out;\n }\n hijack() {\n if (this.active) {\n throw new Error(\"ProcessOutput has been already hijacked!\");\n }\n this.stream.stdout.write(ANSI_ESCAPE_CODES.CURSOR_HIDE);\n Object.values(this.stream).forEach((stream) => stream.hijack());\n this.active = true;\n }\n release() {\n const output = Object.entries(this.stream).map(([name, stream]) => ({ name, buffer: stream.release() })).filter((output2) => this.options.dump.includes(output2.name)).flatMap((output2) => output2.buffer).sort((a, b) => a.time - b.time).map((message) => {\n return {\n ...message,\n entry: cleanseAnsi(message.entry)\n };\n }).filter((message) => message.entry);\n if (output.length > 0) {\n if (this.options.leaveEmptyLine) {\n this.stdout.write(EOL2);\n }\n output.forEach((message) => {\n const stream = message.stream ?? this.stdout;\n stream.write(message.entry + EOL2);\n });\n }\n this.stream.stdout.write(ANSI_ESCAPE_CODES.CURSOR_SHOW);\n this.active = false;\n }\n toStdout(buffer, eol = true) {\n if (eol) {\n buffer = buffer + EOL2;\n }\n return this.stream.stdout.write(buffer);\n }\n toStderr(buffer, eol = true) {\n if (eol) {\n buffer = buffer + EOL2;\n }\n return this.stream.stderr.write(buffer);\n }\n};\n\n// src/utils/process-output/writable.ts\nimport { Writable } from \"stream\";\nfunction createWritable(cb) {\n const writable = new Writable();\n writable.write = (chunk) => {\n cb(chunk.toString());\n return true;\n };\n return writable;\n}\n__name(createWritable, \"createWritable\");\n\n// src/utils/prompts/adapter.ts\nvar ListrPromptAdapter = class {\n constructor(task, wrapper) {\n this.task = task;\n this.wrapper = wrapper;\n }\n static {\n __name(this, \"ListrPromptAdapter\");\n }\n state;\n reportStarted() {\n this.state = this.task.state;\n if (this.task.prompt) {\n throw new PromptError(\"There is already an active prompt attached to this task which may not be cleaned up properly.\");\n }\n this.task.prompt = this;\n this.task.state$ = \"PROMPT\" /* PROMPT */;\n }\n reportFailed() {\n this.task.state$ = \"PROMPT_FAILED\" /* PROMPT_FAILED */;\n this.restoreState();\n }\n reportCompleted() {\n this.task.state$ = \"PROMPT_COMPLETED\" /* PROMPT_COMPLETED */;\n this.restoreState();\n }\n restoreState() {\n this.task.prompt = void 0;\n if (this.state) {\n this.task.state = this.state;\n }\n }\n};\n\n// src/utils/ui/spinner.ts\nvar Spinner = class {\n static {\n __name(this, \"Spinner\");\n }\n spinner = !isUnicodeSupported() ? [\"-\", \"\\\\\", \"|\", \"/\"] : [\"\\u280B\", \"\\u2819\", \"\\u2839\", \"\\u2838\", \"\\u283C\", \"\\u2834\", \"\\u2826\", \"\\u2827\", \"\\u2807\", \"\\u280F\"];\n id;\n spinnerPosition = 0;\n spin() {\n this.spinnerPosition = ++this.spinnerPosition % this.spinner.length;\n }\n fetch() {\n return this.spinner[this.spinnerPosition];\n }\n isRunning() {\n return !!this.id;\n }\n start(cb, interval = 100) {\n this.id = setInterval(() => {\n this.spin();\n if (cb) {\n cb();\n }\n }, interval);\n }\n stop() {\n clearInterval(this.id);\n }\n};\n\n// src/renderer/default/renderer.constants.ts\nvar ListrDefaultRendererLogLevels = /* @__PURE__ */ ((ListrDefaultRendererLogLevels2) => {\n ListrDefaultRendererLogLevels2[\"SKIPPED_WITH_COLLAPSE\"] = \"SKIPPED_WITH_COLLAPSE\";\n ListrDefaultRendererLogLevels2[\"SKIPPED_WITHOUT_COLLAPSE\"] = \"SKIPPED_WITHOUT_COLLAPSE\";\n ListrDefaultRendererLogLevels2[\"OUTPUT\"] = \"OUTPUT\";\n ListrDefaultRendererLogLevels2[\"OUTPUT_WITH_BOTTOMBAR\"] = \"OUTPUT_WITH_BOTTOMBAR\";\n ListrDefaultRendererLogLevels2[\"PENDING\"] = \"PENDING\";\n ListrDefaultRendererLogLevels2[\"COMPLETED\"] = \"COMPLETED\";\n ListrDefaultRendererLogLevels2[\"COMPLETED_WITH_FAILED_SUBTASKS\"] = \"COMPLETED_WITH_FAILED_SUBTASKS\";\n ListrDefaultRendererLogLevels2[\"COMPLETED_WITH_FAILED_SISTER_TASKS\"] = \"COMPLETED_WITH_SISTER_TASKS_FAILED\";\n ListrDefaultRendererLogLevels2[\"RETRY\"] = \"RETRY\";\n ListrDefaultRendererLogLevels2[\"ROLLING_BACK\"] = \"ROLLING_BACK\";\n ListrDefaultRendererLogLevels2[\"ROLLED_BACK\"] = \"ROLLED_BACK\";\n ListrDefaultRendererLogLevels2[\"FAILED\"] = \"FAILED\";\n ListrDefaultRendererLogLevels2[\"FAILED_WITH_FAILED_SUBTASKS\"] = \"FAILED_WITH_SUBTASKS\";\n ListrDefaultRendererLogLevels2[\"WAITING\"] = \"WAITING\";\n ListrDefaultRendererLogLevels2[\"PAUSED\"] = \"PAUSED\";\n return ListrDefaultRendererLogLevels2;\n})(ListrDefaultRendererLogLevels || {});\nvar LISTR_DEFAULT_RENDERER_STYLE = {\n icon: {\n [\"SKIPPED_WITH_COLLAPSE\" /* SKIPPED_WITH_COLLAPSE */]: figures.arrowDown,\n [\"SKIPPED_WITHOUT_COLLAPSE\" /* SKIPPED_WITHOUT_COLLAPSE */]: figures.warning,\n [\"OUTPUT\" /* OUTPUT */]: figures.pointerSmall,\n [\"OUTPUT_WITH_BOTTOMBAR\" /* OUTPUT_WITH_BOTTOMBAR */]: figures.pointerSmall,\n [\"PENDING\" /* PENDING */]: figures.pointer,\n [\"COMPLETED\" /* COMPLETED */]: figures.tick,\n [\"COMPLETED_WITH_FAILED_SUBTASKS\" /* COMPLETED_WITH_FAILED_SUBTASKS */]: figures.warning,\n [\"COMPLETED_WITH_SISTER_TASKS_FAILED\" /* COMPLETED_WITH_FAILED_SISTER_TASKS */]: figures.squareSmallFilled,\n [\"RETRY\" /* RETRY */]: figures.warning,\n [\"ROLLING_BACK\" /* ROLLING_BACK */]: figures.warning,\n [\"ROLLED_BACK\" /* ROLLED_BACK */]: figures.arrowLeft,\n [\"FAILED\" /* FAILED */]: figures.cross,\n [\"FAILED_WITH_SUBTASKS\" /* FAILED_WITH_FAILED_SUBTASKS */]: figures.pointer,\n [\"WAITING\" /* WAITING */]: figures.squareSmallFilled,\n [\"PAUSED\" /* PAUSED */]: figures.squareSmallFilled\n },\n color: {\n [\"SKIPPED_WITH_COLLAPSE\" /* SKIPPED_WITH_COLLAPSE */]: color.yellow,\n [\"SKIPPED_WITHOUT_COLLAPSE\" /* SKIPPED_WITHOUT_COLLAPSE */]: color.yellow,\n [\"PENDING\" /* PENDING */]: color.yellow,\n [\"COMPLETED\" /* COMPLETED */]: color.green,\n [\"COMPLETED_WITH_FAILED_SUBTASKS\" /* COMPLETED_WITH_FAILED_SUBTASKS */]: color.yellow,\n [\"COMPLETED_WITH_SISTER_TASKS_FAILED\" /* COMPLETED_WITH_FAILED_SISTER_TASKS */]: color.red,\n [\"RETRY\" /* RETRY */]: color.yellowBright,\n [\"ROLLING_BACK\" /* ROLLING_BACK */]: color.redBright,\n [\"ROLLED_BACK\" /* ROLLED_BACK */]: color.redBright,\n [\"FAILED\" /* FAILED */]: color.red,\n [\"FAILED_WITH_SUBTASKS\" /* FAILED_WITH_FAILED_SUBTASKS */]: color.red,\n [\"WAITING\" /* WAITING */]: color.dim,\n [\"PAUSED\" /* PAUSED */]: color.yellowBright\n }\n};\n\n// src/renderer/default/renderer.ts\nimport { EOL as EOL3 } from \"os\";\n\n// src/presets/timer/parser.ts\nfunction parseTimer(duration) {\n const seconds = Math.floor(duration / 1e3);\n const minutes = Math.floor(seconds / 60);\n let parsedTime;\n if (seconds === 0 && minutes === 0) {\n parsedTime = `0.${Math.floor(duration / 100)}s`;\n }\n if (seconds > 0) {\n parsedTime = `${seconds % 60}s`;\n }\n if (minutes > 0) {\n parsedTime = `${minutes}m${parsedTime}`;\n }\n return parsedTime;\n}\n__name(parseTimer, \"parseTimer\");\n\n// src/presets/timer/preset.ts\nvar PRESET_TIMER = {\n condition: true,\n field: parseTimer,\n format: () => color.dim\n};\n\n// src/presets/timestamp/parser.ts\nfunction parseTimestamp() {\n const now = /* @__PURE__ */ new Date();\n return String(now.getHours()).padStart(2, \"0\") + \":\" + String(now.getMinutes()).padStart(2, \"0\") + \":\" + String(now.getSeconds()).padStart(2, \"0\");\n}\n__name(parseTimestamp, \"parseTimestamp\");\n\n// src/presets/timestamp/preset.ts\nvar PRESET_TIMESTAMP = {\n condition: true,\n field: parseTimestamp,\n format: () => color.dim\n};\n\n// src/renderer/default/renderer.ts\nvar DefaultRenderer = class _DefaultRenderer {\n constructor(tasks, options, events) {\n this.tasks = tasks;\n this.options = options;\n this.events = events;\n this.options = {\n ..._DefaultRenderer.rendererOptions,\n ...this.options,\n icon: {\n ...LISTR_DEFAULT_RENDERER_STYLE.icon,\n ...options?.icon ?? {}\n },\n color: {\n ...LISTR_DEFAULT_RENDERER_STYLE.color,\n ...options?.color ?? {}\n }\n };\n this.spinner = this.options.spinner ?? new Spinner();\n this.logger = this.options.logger ?? new ListrLogger({ useIcons: true, toStderr: [] });\n this.logger.options.icon = this.options.icon;\n this.logger.options.color = this.options.color;\n }\n static {\n __name(this, \"DefaultRenderer\");\n }\n static nonTTY = false;\n static rendererOptions = {\n indentation: 2,\n clearOutput: false,\n showSubtasks: true,\n collapseSubtasks: true,\n collapseSkips: true,\n showSkipMessage: true,\n suffixSkips: false,\n collapseErrors: true,\n showErrorMessage: true,\n suffixRetries: true,\n lazy: false,\n removeEmptyLines: true,\n formatOutput: \"wrap\",\n pausedTimer: {\n ...PRESET_TIMER,\n format: () => color.yellowBright\n }\n };\n static rendererTaskOptions = {\n outputBar: true\n };\n prompt;\n activePrompt;\n spinner;\n logger;\n updater;\n truncate;\n wrap;\n buffer = {\n output: /* @__PURE__ */ new Map(),\n bottom: /* @__PURE__ */ new Map()\n };\n cache = {\n render: /* @__PURE__ */ new Map(),\n rendererOptions: /* @__PURE__ */ new Map(),\n rendererTaskOptions: /* @__PURE__ */ new Map()\n };\n async render() {\n const { createLogUpdate } = await import(\"log-update\");\n const { default: truncate } = await import(\"cli-truncate\");\n const { default: wrap } = await import(\"wrap-ansi\");\n this.updater = createLogUpdate(this.logger.process.stdout);\n this.truncate = truncate;\n this.wrap = wrap;\n this.logger.process.hijack();\n if (!this.options?.lazy) {\n this.spinner.start(() => {\n this.update();\n });\n }\n this.events.on(\"SHOUD_REFRESH_RENDER\" /* SHOULD_REFRESH_RENDER */, () => {\n this.update();\n });\n }\n update() {\n this.updater(this.create());\n }\n end() {\n this.spinner.stop();\n this.updater.clear();\n this.updater.done();\n if (!this.options.clearOutput) {\n this.logger.process.toStdout(this.create({ prompt: false }));\n }\n this.logger.process.release();\n }\n create(options) {\n options = {\n tasks: true,\n bottomBar: true,\n prompt: true,\n ...options\n };\n const render = [];\n const renderTasks = this.renderer(this.tasks);\n const renderBottomBar = this.renderBottomBar();\n const renderPrompt = this.renderPrompt();\n if (options.tasks && renderTasks.length > 0) {\n render.push(...renderTasks);\n }\n if (options.bottomBar && renderBottomBar.length > 0) {\n if (render.length > 0) {\n render.push(\"\");\n }\n render.push(...renderBottomBar);\n }\n if (options.prompt && renderPrompt.length > 0) {\n if (render.length > 0) {\n render.push(\"\");\n }\n render.push(...renderPrompt);\n }\n return render.join(EOL3);\n }\n // eslint-disable-next-line complexity\n style(task, output = false) {\n const rendererOptions = this.cache.rendererOptions.get(task.id);\n if (task.isSkipped()) {\n if (output || rendererOptions.collapseSkips) {\n return this.logger.icon(\"SKIPPED_WITH_COLLAPSE\" /* SKIPPED_WITH_COLLAPSE */);\n } else if (rendererOptions.collapseSkips === false) {\n return this.logger.icon(\"SKIPPED_WITHOUT_COLLAPSE\" /* SKIPPED_WITHOUT_COLLAPSE */);\n }\n }\n if (output) {\n if (this.shouldOutputToBottomBar(task)) {\n return this.logger.icon(\"OUTPUT_WITH_BOTTOMBAR\" /* OUTPUT_WITH_BOTTOMBAR */);\n }\n return this.logger.icon(\"OUTPUT\" /* OUTPUT */);\n }\n if (task.hasSubtasks()) {\n if (task.isStarted() || task.isPrompt() && rendererOptions.showSubtasks !== false && !task.subtasks.every((subtask) => !subtask.hasTitle())) {\n return this.logger.icon(\"PENDING\" /* PENDING */);\n } else if (task.isCompleted() && task.subtasks.some((subtask) => subtask.hasFailed())) {\n return this.logger.icon(\"COMPLETED_WITH_FAILED_SUBTASKS\" /* COMPLETED_WITH_FAILED_SUBTASKS */);\n } else if (task.hasFailed()) {\n return this.logger.icon(\"FAILED_WITH_SUBTASKS\" /* FAILED_WITH_FAILED_SUBTASKS */);\n }\n }\n if (task.isStarted() || task.isPrompt()) {\n return this.logger.icon(\"PENDING\" /* PENDING */, !this.options?.lazy && this.spinner.fetch());\n } else if (task.isCompleted()) {\n return this.logger.icon(\"COMPLETED\" /* COMPLETED */);\n } else if (task.isRetrying()) {\n return this.logger.icon(\"RETRY\" /* RETRY */, !this.options?.lazy && this.spinner.fetch());\n } else if (task.isRollingBack()) {\n return this.logger.icon(\"ROLLING_BACK\" /* ROLLING_BACK */, !this.options?.lazy && this.spinner.fetch());\n } else if (task.hasRolledBack()) {\n return this.logger.icon(\"ROLLED_BACK\" /* ROLLED_BACK */);\n } else if (task.hasFailed()) {\n return this.logger.icon(\"FAILED\" /* FAILED */);\n } else if (task.isPaused()) {\n return this.logger.icon(\"PAUSED\" /* PAUSED */);\n }\n return this.logger.icon(\"WAITING\" /* WAITING */);\n }\n format(message, icon, level) {\n if (message.trim() === \"\") {\n return [];\n }\n if (icon) {\n message = icon + \" \" + message;\n }\n let parsed;\n const columns = (process.stdout.columns ?? 80) - level * this.options.indentation - 2;\n switch (this.options.formatOutput) {\n case \"truncate\":\n parsed = message.split(EOL3).map((s, i) => {\n return this.truncate(this.indent(s, i), columns);\n });\n break;\n case \"wrap\":\n parsed = this.wrap(message, columns, { hard: true }).split(EOL3).map((s, i) => this.indent(s, i));\n break;\n default:\n throw new ListrRendererError(\"Format option for the renderer is wrong.\");\n }\n if (this.options.removeEmptyLines) {\n parsed = parsed.filter(Boolean);\n }\n return parsed.map((str) => indent(str, level * this.options.indentation));\n }\n shouldOutputToOutputBar(task) {\n const outputBar = this.cache.rendererTaskOptions.get(task.id).outputBar;\n return typeof outputBar === \"number\" && outputBar !== 0 || typeof outputBar === \"boolean\" && outputBar !== false;\n }\n shouldOutputToBottomBar(task) {\n const bottomBar = this.cache.rendererTaskOptions.get(task.id).bottomBar;\n return typeof bottomBar === \"number\" && bottomBar !== 0 || typeof bottomBar === \"boolean\" && bottomBar !== false || !task.hasTitle();\n }\n renderer(tasks, level = 0) {\n return tasks.flatMap((task) => {\n if (!task.isEnabled()) {\n return [];\n }\n if (this.cache.render.has(task.id)) {\n return this.cache.render.get(task.id);\n }\n this.calculate(task);\n this.setupBuffer(task);\n const rendererOptions = this.cache.rendererOptions.get(task.id);\n const rendererTaskOptions = this.cache.rendererTaskOptions.get(task.id);\n const output = [];\n if (task.isPrompt()) {\n if (this.activePrompt && this.activePrompt !== task.id) {\n throw new ListrRendererError(\"Only one prompt can be active at the given time, please re-evaluate your task design.\");\n } else if (!this.activePrompt) {\n task.on(\"PROMPT\" /* PROMPT */, (prompt) => {\n const cleansed = cleanseAnsi(prompt);\n if (cleansed) {\n this.prompt = cleansed;\n }\n });\n task.on(\"STATE\" /* STATE */, (state) => {\n if (state === \"PROMPT_COMPLETED\" /* PROMPT_COMPLETED */ || task.hasFinalized() || task.hasReset()) {\n this.prompt = null;\n this.activePrompt = null;\n task.off(\"PROMPT\" /* PROMPT */);\n }\n });\n this.activePrompt = task.id;\n }\n }\n if (task.hasTitle()) {\n if (!(tasks.some((task2) => task2.hasFailed()) && !task.hasFailed() && task.options.exitOnError !== false && !(task.isCompleted() || task.isSkipped()))) {\n if (task.hasFailed() && rendererOptions.collapseErrors) {\n output.push(...this.format(!task.hasSubtasks() && task.message.error && rendererOptions.showErrorMessage ? task.message.error : task.title, this.style(task), level));\n } else if (task.isSkipped() && rendererOptions.collapseSkips) {\n output.push(\n ...this.format(\n this.logger.suffix(task.message.skip && rendererOptions.showSkipMessage ? task.message.skip : task.title, {\n field: \"SKIPPED\" /* SKIPPED */,\n condition: rendererOptions.suffixSkips,\n format: () => color.dim\n }),\n this.style(task),\n level\n )\n );\n } else if (task.isRetrying()) {\n output.push(\n ...this.format(\n this.logger.suffix(task.title, {\n field: `${\"RETRY\" /* RETRY */}:${task.message.retry.count}`,\n format: () => color.yellow,\n condition: rendererOptions.suffixRetries\n }),\n this.style(task),\n level\n )\n );\n } else if (task.isCompleted() && task.hasTitle() && assertFunctionOrSelf(rendererTaskOptions.timer?.condition, task.message.duration)) {\n output.push(\n ...this.format(\n this.logger.suffix(task?.title, {\n ...rendererTaskOptions.timer,\n args: [task.message.duration]\n }),\n this.style(task),\n level\n )\n );\n } else if (task.isPaused()) {\n output.push(\n ...this.format(\n this.logger.suffix(task.title, {\n ...rendererOptions.pausedTimer,\n args: [task.message.paused - Date.now()]\n }),\n this.style(task),\n level\n )\n );\n } else {\n output.push(...this.format(task.title, this.style(task), level));\n }\n } else {\n output.push(...this.format(task.title, this.logger.icon(\"COMPLETED_WITH_SISTER_TASKS_FAILED\" /* COMPLETED_WITH_FAILED_SISTER_TASKS */), level));\n }\n }\n if (!task.hasSubtasks() || !rendererOptions.showSubtasks) {\n if (task.hasFailed() && rendererOptions.collapseErrors === false && (rendererOptions.showErrorMessage || !rendererOptions.showSubtasks)) {\n output.push(...this.dump(task, level, \"FAILED\" /* FAILED */));\n } else if (task.isSkipped() && rendererOptions.collapseSkips === false && (rendererOptions.showSkipMessage || !rendererOptions.showSubtasks)) {\n output.push(...this.dump(task, level, \"SKIPPED\" /* SKIPPED */));\n }\n }\n if (task.isPending() || rendererTaskOptions.persistentOutput) {\n output.push(...this.renderOutputBar(task, level));\n }\n if (\n // check if renderer option is on first\n rendererOptions.showSubtasks !== false && // if it doesnt have subtasks no need to check\n task.hasSubtasks() && (task.isPending() || task.hasFinalized() && !task.hasTitle() || // have to be completed and have subtasks\n task.isCompleted() && rendererOptions.collapseSubtasks === false && !task.subtasks.some((subtask) => this.cache.rendererOptions.get(subtask.id)?.collapseSubtasks === true) || // if any of the subtasks have the collapse option of\n task.subtasks.some((subtask) => this.cache.rendererOptions.get(subtask.id)?.collapseSubtasks === false) || // if any of the subtasks has failed\n task.subtasks.some((subtask) => subtask.hasFailed()) || // if any of the subtasks rolled back\n task.subtasks.some((subtask) => subtask.hasRolledBack()))\n ) {\n const subtaskLevel = !task.hasTitle() ? level : level + 1;\n const subtaskRender = this.renderer(task.subtasks, subtaskLevel);\n output.push(...subtaskRender);\n }\n if (task.hasFinalized()) {\n if (!rendererTaskOptions.persistentOutput) {\n this.buffer.bottom.delete(task.id);\n this.buffer.output.delete(task.id);\n }\n }\n if (task.isClosed()) {\n this.cache.render.set(task.id, output);\n this.reset(task);\n }\n return output;\n });\n }\n renderOutputBar(task, level) {\n const output = this.buffer.output.get(task.id);\n if (!output) {\n return [];\n }\n return output.all.flatMap((o) => this.dump(task, level, \"OUTPUT\" /* OUTPUT */, o.entry));\n }\n renderBottomBar() {\n if (this.buffer.bottom.size === 0) {\n return [];\n }\n return Array.from(this.buffer.bottom.values()).flatMap((output) => output.all).sort((a, b) => a.time - b.time).map((output) => output.entry);\n }\n renderPrompt() {\n if (!this.prompt) {\n return [];\n }\n return [this.prompt];\n }\n calculate(task) {\n if (this.cache.rendererOptions.has(task.id) && this.cache.rendererTaskOptions.has(task.id)) {\n return;\n }\n const rendererOptions = {\n ...this.options,\n ...task.rendererOptions\n };\n this.cache.rendererOptions.set(task.id, rendererOptions);\n this.cache.rendererTaskOptions.set(task.id, {\n ..._DefaultRenderer.rendererTaskOptions,\n timer: rendererOptions.timer,\n ...task.rendererTaskOptions\n });\n }\n setupBuffer(task) {\n if (this.buffer.bottom.has(task.id) || this.buffer.output.has(task.id)) {\n return;\n }\n const rendererTaskOptions = this.cache.rendererTaskOptions.get(task.id);\n if (this.shouldOutputToBottomBar(task) && !this.buffer.bottom.has(task.id)) {\n this.buffer.bottom.set(task.id, new ProcessOutputBuffer({ limit: typeof rendererTaskOptions.bottomBar === \"number\" ? rendererTaskOptions.bottomBar : 1 }));\n task.on(\"OUTPUT\" /* OUTPUT */, (output) => {\n const data = this.dump(task, -1, \"OUTPUT\" /* OUTPUT */, output);\n this.buffer.bottom.get(task.id).write(data.join(EOL3));\n });\n task.on(\"STATE\" /* STATE */, (state) => {\n switch (state) {\n case (\"RETRY\" /* RETRY */ || \"ROLLING_BACK\" /* ROLLING_BACK */):\n this.buffer.bottom.delete(task.id);\n break;\n }\n });\n } else if (this.shouldOutputToOutputBar(task) && !this.buffer.output.has(task.id)) {\n this.buffer.output.set(task.id, new ProcessOutputBuffer({ limit: typeof rendererTaskOptions.outputBar === \"number\" ? rendererTaskOptions.outputBar : 1 }));\n task.on(\"OUTPUT\" /* OUTPUT */, (output) => {\n this.buffer.output.get(task.id).write(output);\n });\n task.on(\"STATE\" /* STATE */, (state) => {\n switch (state) {\n case (\"RETRY\" /* RETRY */ || \"ROLLING_BACK\" /* ROLLING_BACK */):\n this.buffer.output.delete(task.id);\n break;\n }\n });\n }\n }\n reset(task) {\n this.cache.rendererOptions.delete(task.id);\n this.cache.rendererTaskOptions.delete(task.id);\n this.buffer.output.delete(task.id);\n }\n dump(task, level, source = \"OUTPUT\" /* OUTPUT */, data) {\n if (!data) {\n switch (source) {\n case \"OUTPUT\" /* OUTPUT */:\n data = task.output;\n break;\n case \"SKIPPED\" /* SKIPPED */:\n data = task.message.skip;\n break;\n case \"FAILED\" /* FAILED */:\n data = task.message.error;\n break;\n }\n }\n if (task.hasTitle() && source === \"FAILED\" /* FAILED */ && data === task.title || typeof data !== \"string\") {\n return [];\n }\n if (source === \"OUTPUT\" /* OUTPUT */) {\n data = cleanseAnsi(data);\n }\n return this.format(data, this.style(task, true), level + 1);\n }\n indent(str, i) {\n return i > 0 ? indent(str.trim(), this.options.indentation) : str.trim();\n }\n};\n\n// src/renderer/silent/renderer.ts\nvar SilentRenderer = class {\n constructor(tasks, options) {\n this.tasks = tasks;\n this.options = options;\n }\n static {\n __name(this, \"SilentRenderer\");\n }\n static nonTTY = true;\n static rendererOptions;\n static rendererTaskOptions;\n render() {\n return;\n }\n end() {\n return;\n }\n};\n\n// src/renderer/simple/renderer.ts\nvar SimpleRenderer = class _SimpleRenderer {\n constructor(tasks, options) {\n this.tasks = tasks;\n this.options = options;\n this.options = {\n ..._SimpleRenderer.rendererOptions,\n ...options,\n icon: {\n ...LISTR_LOGGER_STYLE.icon,\n ...options?.icon ?? {}\n },\n color: {\n ...LISTR_LOGGER_STYLE.color,\n ...options?.color ?? {}\n }\n };\n this.logger = this.options.logger ?? new ListrLogger({ useIcons: true, toStderr: LISTR_LOGGER_STDERR_LEVELS });\n this.logger.options.icon = this.options.icon;\n this.logger.options.color = this.options.color;\n if (this.options.timestamp) {\n this.logger.options.fields.prefix.unshift(this.options.timestamp);\n }\n }\n static {\n __name(this, \"SimpleRenderer\");\n }\n static nonTTY = true;\n static rendererOptions = {\n pausedTimer: {\n ...PRESET_TIMER,\n field: (time) => `${\"PAUSED\" /* PAUSED */}:${time}`,\n format: () => color.yellowBright\n }\n };\n static rendererTaskOptions = {};\n logger;\n cache = {\n rendererOptions: /* @__PURE__ */ new Map(),\n rendererTaskOptions: /* @__PURE__ */ new Map()\n };\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n end() {\n }\n render() {\n this.renderer(this.tasks);\n }\n renderer(tasks) {\n tasks.forEach((task) => {\n this.calculate(task);\n task.once(\"CLOSED\" /* CLOSED */, () => {\n this.reset(task);\n });\n const rendererOptions = this.cache.rendererOptions.get(task.id);\n const rendererTaskOptions = this.cache.rendererTaskOptions.get(task.id);\n task.on(\"SUBTASK\" /* SUBTASK */, (subtasks) => {\n this.renderer(subtasks);\n });\n task.on(\"STATE\" /* STATE */, (state) => {\n if (!task.hasTitle()) {\n return;\n }\n if (state === \"STARTED\" /* STARTED */) {\n this.logger.log(\"STARTED\" /* STARTED */, task.title);\n } else if (state === \"COMPLETED\" /* COMPLETED */) {\n const timer = rendererTaskOptions?.timer;\n this.logger.log(\n \"COMPLETED\" /* COMPLETED */,\n task.title,\n timer && {\n suffix: {\n ...timer,\n condition: !!task.message?.duration && timer.condition,\n args: [task.message.duration]\n }\n }\n );\n } else if (state === \"PROMPT\" /* PROMPT */) {\n this.logger.process.hijack();\n task.on(\"PROMPT\" /* PROMPT */, (prompt) => {\n this.logger.process.toStderr(prompt, false);\n });\n } else if (state === \"PROMPT_COMPLETED\" /* PROMPT_COMPLETED */) {\n task.off(\"PROMPT\" /* PROMPT */);\n this.logger.process.release();\n }\n });\n task.on(\"OUTPUT\" /* OUTPUT */, (output) => {\n this.logger.log(\"OUTPUT\" /* OUTPUT */, output);\n });\n task.on(\"MESSAGE\" /* MESSAGE */, (message) => {\n if (message.error) {\n this.logger.log(\"FAILED\" /* FAILED */, task.title, {\n suffix: {\n field: `${\"FAILED\" /* FAILED */}: ${message.error}`,\n format: () => color.red\n }\n });\n } else if (message.skip) {\n this.logger.log(\"SKIPPED\" /* SKIPPED */, task.title, {\n suffix: {\n field: `${\"SKIPPED\" /* SKIPPED */}: ${message.skip}`,\n format: () => color.yellow\n }\n });\n } else if (message.rollback) {\n this.logger.log(\"ROLLBACK\" /* ROLLBACK */, task.title, {\n suffix: {\n field: `${\"ROLLBACK\" /* ROLLBACK */}: ${message.rollback}`,\n format: () => color.red\n }\n });\n } else if (message.retry) {\n this.logger.log(\"RETRY\" /* RETRY */, task.title, {\n suffix: {\n field: `${\"RETRY\" /* RETRY */}:${message.retry.count}`,\n format: () => color.red\n }\n });\n } else if (message.paused) {\n const timer = rendererOptions?.pausedTimer;\n this.logger.log(\n \"PAUSED\" /* PAUSED */,\n task.title,\n timer && {\n suffix: {\n ...timer,\n condition: !!message?.paused && timer.condition,\n args: [message.paused - Date.now()]\n }\n }\n );\n }\n });\n });\n }\n calculate(task) {\n if (this.cache.rendererOptions.has(task.id) && this.cache.rendererTaskOptions.has(task.id)) {\n return;\n }\n const rendererOptions = {\n ...this.options,\n ...task.rendererOptions\n };\n this.cache.rendererOptions.set(task.id, rendererOptions);\n this.cache.rendererTaskOptions.set(task.id, {\n ..._SimpleRenderer.rendererTaskOptions,\n timer: rendererOptions.timer,\n ...task.rendererTaskOptions\n });\n }\n reset(task) {\n this.cache.rendererOptions.delete(task.id);\n this.cache.rendererTaskOptions.delete(task.id);\n }\n};\n\n// src/renderer/test/serializer.ts\nvar TestRendererSerializer = class {\n constructor(options) {\n this.options = options;\n }\n static {\n __name(this, \"TestRendererSerializer\");\n }\n serialize(event, data, task) {\n return JSON.stringify(this.generate(event, data, task));\n }\n generate(event, data, task) {\n const output = {\n event,\n data\n };\n if (typeof this.options?.task !== \"boolean\") {\n const t = Object.fromEntries(\n this.options.task.map((entity) => {\n const property = task[entity];\n if (typeof property === \"function\") {\n return [entity, property.call(task)];\n }\n return [entity, property];\n })\n );\n if (Object.keys(task).length > 0) {\n output.task = t;\n }\n }\n return output;\n }\n};\n\n// src/renderer/test/renderer.ts\nvar TestRenderer = class _TestRenderer {\n constructor(tasks, options) {\n this.tasks = tasks;\n this.options = options;\n this.options = { ..._TestRenderer.rendererOptions, ...this.options };\n this.logger = this.options.logger ?? new ListrLogger({ useIcons: false });\n this.serializer = new TestRendererSerializer(this.options);\n }\n static {\n __name(this, \"TestRenderer\");\n }\n static nonTTY = true;\n static rendererOptions = {\n subtasks: true,\n state: Object.values(ListrTaskState),\n output: true,\n prompt: true,\n title: true,\n messages: [\"skip\", \"error\", \"retry\", \"rollback\", \"paused\"],\n messagesToStderr: [\"error\", \"rollback\", \"retry\"],\n task: [\n \"hasRolledBack\",\n \"isRollingBack\",\n \"isCompleted\",\n \"isSkipped\",\n \"hasFinalized\",\n \"hasSubtasks\",\n \"title\",\n \"hasReset\",\n \"hasTitle\",\n \"isPrompt\",\n \"isPaused\",\n \"isPending\",\n \"isSkipped\",\n \"isStarted\",\n \"hasFailed\",\n \"isEnabled\",\n \"isRetrying\",\n \"path\"\n ]\n };\n static rendererTaskOptions;\n logger;\n serializer;\n render() {\n this.renderer(this.tasks);\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n end() {\n }\n // verbose renderer multi-level\n renderer(tasks) {\n tasks.forEach((task) => {\n if (this.options.subtasks) {\n task.on(\"SUBTASK\" /* SUBTASK */, (subtasks) => {\n this.renderer(subtasks);\n });\n }\n if (this.options.state) {\n task.on(\"STATE\" /* STATE */, (state) => {\n this.logger.toStdout(this.serializer.serialize(\"STATE\" /* STATE */, state, task));\n });\n }\n if (this.options.output) {\n task.on(\"OUTPUT\" /* OUTPUT */, (data) => {\n this.logger.toStdout(this.serializer.serialize(\"OUTPUT\" /* OUTPUT */, data, task));\n });\n }\n if (this.options.prompt) {\n task.on(\"PROMPT\" /* PROMPT */, (prompt) => {\n this.logger.toStdout(this.serializer.serialize(\"PROMPT\" /* PROMPT */, prompt, task));\n });\n }\n if (this.options.title) {\n task.on(\"TITLE\" /* TITLE */, (title) => {\n this.logger.toStdout(this.serializer.serialize(\"TITLE\" /* TITLE */, title, task));\n });\n }\n task.on(\"MESSAGE\" /* MESSAGE */, (message) => {\n const parsed = Object.fromEntries(\n Object.entries(message).map(([key, value]) => {\n if (this.options.messages.includes(key)) {\n return [key, value];\n }\n }).filter(Boolean)\n );\n if (Object.keys(parsed).length > 0) {\n const output = this.serializer.serialize(\"MESSAGE\" /* MESSAGE */, parsed, task);\n if (this.options.messagesToStderr.some((state) => Object.keys(parsed).includes(state))) {\n this.logger.toStderr(output);\n } else {\n this.logger.toStdout(output);\n }\n }\n });\n });\n }\n};\n\n// src/renderer/verbose/renderer.ts\nvar VerboseRenderer = class _VerboseRenderer {\n constructor(tasks, options) {\n this.tasks = tasks;\n this.options = options;\n this.options = {\n ..._VerboseRenderer.rendererOptions,\n ...this.options,\n icon: {\n ...LISTR_LOGGER_STYLE.icon,\n ...options?.icon ?? {}\n },\n color: {\n ...LISTR_LOGGER_STYLE.color,\n ...options?.color ?? {}\n }\n };\n this.logger = this.options.logger ?? new ListrLogger({ useIcons: false, toStderr: LISTR_LOGGER_STDERR_LEVELS });\n this.logger.options.icon = this.options.icon;\n this.logger.options.color = this.options.color;\n if (this.options.timestamp) {\n this.logger.options.fields.prefix.unshift(this.options.timestamp);\n }\n }\n static {\n __name(this, \"VerboseRenderer\");\n }\n static nonTTY = true;\n static rendererOptions = {\n logTitleChange: false,\n pausedTimer: {\n ...PRESET_TIMER,\n format: () => color.yellowBright\n }\n };\n static rendererTaskOptions;\n logger;\n cache = {\n rendererOptions: /* @__PURE__ */ new Map(),\n rendererTaskOptions: /* @__PURE__ */ new Map()\n };\n render() {\n this.renderer(this.tasks);\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n end() {\n }\n renderer(tasks) {\n tasks.forEach((task) => {\n this.calculate(task);\n task.once(\"CLOSED\" /* CLOSED */, () => {\n this.reset(task);\n });\n const rendererOptions = this.cache.rendererOptions.get(task.id);\n const rendererTaskOptions = this.cache.rendererTaskOptions.get(task.id);\n task.on(\"SUBTASK\" /* SUBTASK */, (subtasks) => {\n this.renderer(subtasks);\n });\n task.on(\"STATE\" /* STATE */, (state) => {\n if (!task.hasTitle()) {\n return;\n }\n if (state === \"STARTED\" /* STARTED */) {\n this.logger.log(\"STARTED\" /* STARTED */, task.title);\n } else if (state === \"COMPLETED\" /* COMPLETED */) {\n const timer = rendererTaskOptions.timer;\n this.logger.log(\n \"COMPLETED\" /* COMPLETED */,\n task.title,\n timer && {\n suffix: {\n ...timer,\n condition: !!task.message?.duration && timer.condition,\n args: [task.message.duration]\n }\n }\n );\n }\n });\n task.on(\"OUTPUT\" /* OUTPUT */, (data) => {\n this.logger.log(\"OUTPUT\" /* OUTPUT */, data);\n });\n task.on(\"PROMPT\" /* PROMPT */, (prompt) => {\n const cleansed = cleanseAnsi(prompt);\n if (cleansed) {\n this.logger.log(\"PROMPT\" /* PROMPT */, cleansed);\n }\n });\n if (this.options?.logTitleChange !== false) {\n task.on(\"TITLE\" /* TITLE */, (title) => {\n this.logger.log(\"TITLE\" /* TITLE */, title);\n });\n }\n task.on(\"MESSAGE\" /* MESSAGE */, (message) => {\n if (message?.error) {\n this.logger.log(\"FAILED\" /* FAILED */, message.error);\n } else if (message?.skip) {\n this.logger.log(\"SKIPPED\" /* SKIPPED */, message.skip);\n } else if (message?.rollback) {\n this.logger.log(\"ROLLBACK\" /* ROLLBACK */, message.rollback);\n } else if (message?.retry) {\n this.logger.log(\"RETRY\" /* RETRY */, task.title, { suffix: message.retry.count.toString() });\n } else if (message?.paused) {\n const timer = rendererOptions?.pausedTimer;\n this.logger.log(\n \"PAUSED\" /* PAUSED */,\n task.title,\n timer && {\n suffix: {\n ...timer,\n condition: !!message?.paused && timer.condition,\n args: [message.paused - Date.now()]\n }\n }\n );\n }\n });\n });\n }\n calculate(task) {\n if (this.cache.rendererOptions.has(task.id) && this.cache.rendererTaskOptions.has(task.id)) {\n return;\n }\n const rendererOptions = {\n ...this.options,\n ...task.rendererOptions\n };\n this.cache.rendererOptions.set(task.id, rendererOptions);\n this.cache.rendererTaskOptions.set(task.id, {\n ..._VerboseRenderer.rendererTaskOptions,\n timer: rendererOptions.timer,\n ...task.rendererTaskOptions\n });\n }\n reset(task) {\n this.cache.rendererOptions.delete(task.id);\n this.cache.rendererTaskOptions.delete(task.id);\n }\n};\n\n// src/utils/ui/renderer.ts\nvar RENDERERS = {\n default: DefaultRenderer,\n simple: SimpleRenderer,\n verbose: VerboseRenderer,\n test: TestRenderer,\n silent: SilentRenderer\n};\nfunction isRendererSupported(renderer) {\n return process.stdout.isTTY === true || renderer.nonTTY === true;\n}\n__name(isRendererSupported, \"isRendererSupported\");\nfunction getRendererClass(renderer) {\n if (typeof renderer === \"string\") {\n return RENDERERS[renderer] ?? RENDERERS.default;\n }\n return typeof renderer === \"function\" ? renderer : RENDERERS.default;\n}\n__name(getRendererClass, \"getRendererClass\");\nfunction getRenderer(options) {\n if (assertFunctionOrSelf(options?.silentRendererCondition)) {\n return { renderer: getRendererClass(\"silent\"), selection: \"SILENT\" /* SILENT */ };\n }\n const r = {\n renderer: getRendererClass(options.renderer),\n options: options.rendererOptions,\n selection: \"PRIMARY\" /* PRIMARY */\n };\n if (!isRendererSupported(r.renderer) || assertFunctionOrSelf(options?.fallbackRendererCondition)) {\n return {\n renderer: getRendererClass(options.fallbackRenderer),\n options: options.fallbackRendererOptions,\n selection: \"SECONDARY\" /* SECONDARY */\n };\n }\n return r;\n}\n__name(getRenderer, \"getRenderer\");\n\n// src/utils/assert.ts\nfunction assertFunctionOrSelf(functionOrSelf, ...args) {\n if (typeof functionOrSelf === \"function\") {\n return functionOrSelf(...args);\n } else {\n return functionOrSelf;\n }\n}\n__name(assertFunctionOrSelf, \"assertFunctionOrSelf\");\n\n// src/utils/clone.ts\nimport rfdc from \"rfdc\";\nvar clone = rfdc({ circles: true });\nfunction cloneObject(obj) {\n return clone(obj);\n}\n__name(cloneObject, \"cloneObject\");\n\n// src/utils/concurrency.ts\nvar Concurrency = class {\n static {\n __name(this, \"Concurrency\");\n }\n concurrency;\n count;\n queue;\n constructor(options) {\n this.concurrency = options.concurrency;\n this.count = 0;\n this.queue = /* @__PURE__ */ new Set();\n }\n add(fn) {\n if (this.count < this.concurrency) {\n return this.run(fn);\n }\n return new Promise((resolve) => {\n const callback = /* @__PURE__ */ __name(() => resolve(this.run(fn)), \"callback\");\n this.queue.add(callback);\n });\n }\n flush() {\n for (const callback of this.queue) {\n if (this.count >= this.concurrency) {\n break;\n }\n this.queue.delete(callback);\n callback();\n }\n }\n run(fn) {\n this.count++;\n const promise = fn();\n const cleanup = /* @__PURE__ */ __name(() => {\n this.count--;\n this.flush();\n }, \"cleanup\");\n promise.then(cleanup, () => {\n this.queue.clear();\n });\n return promise;\n }\n};\n\n// src/utils/delay.ts\nfunction delay(time) {\n return new Promise((resolve) => {\n setTimeout(resolve, time);\n });\n}\n__name(delay, \"delay\");\n\n// src/interfaces/listr-error.interface.ts\nvar ListrError = class extends Error {\n constructor(error, type, task) {\n super(error.message);\n this.error = error;\n this.type = type;\n this.task = task;\n this.name = \"ListrError\";\n this.path = task.path;\n if (task?.options.collectErrors === \"full\") {\n this.task = cloneObject(task);\n this.ctx = cloneObject(task.listr.ctx);\n }\n this.stack = error?.stack;\n }\n static {\n __name(this, \"ListrError\");\n }\n path;\n ctx;\n};\n\n// src/interfaces/listr-renderer-error.interface.ts\nvar ListrRendererError = class extends Error {\n static {\n __name(this, \"ListrRendererError\");\n }\n};\n\n// src/interfaces/prompt-error.interface.ts\nvar PromptError = class extends Error {\n static {\n __name(this, \"PromptError\");\n }\n};\n\n// src/lib/task-wrapper.ts\nvar TaskWrapper = class {\n constructor(task) {\n this.task = task;\n }\n static {\n __name(this, \"TaskWrapper\");\n }\n /* istanbul ignore next */\n get title() {\n return this.task.title;\n }\n /**\n * Title of the current task.\n *\n * @see {@link https://listr2.kilic.dev/task/title.html}\n */\n set title(title) {\n title = Array.isArray(title) ? title : [title];\n this.task.title$ = splat(title.shift(), ...title);\n }\n /* istanbul ignore next */\n get output() {\n return this.task.output;\n }\n /* istanbul ignore next */\n /**\n * Send output from the current task to the renderer.\n *\n * @see {@link https://listr2.kilic.dev/task/output.html}\n */\n set output(output) {\n output = Array.isArray(output) ? output : [output];\n this.task.output$ = splat(output.shift(), ...output);\n }\n /* istanbul ignore next */\n /** Send an output to the output channel as prompt. */\n set promptOutput(output) {\n this.task.promptOutput$ = output;\n }\n /**\n * Creates a new set of Listr subtasks.\n *\n * @see {@link https://listr2.kilic.dev/task/subtasks.html}\n */\n newListr(task, options) {\n let tasks;\n if (typeof task === \"function\") {\n tasks = task(this);\n } else {\n tasks = task;\n }\n return new Listr(tasks, options, this.task);\n }\n /**\n * Report an error that has to be collected and handled.\n *\n * @see {@link https://listr2.kilic.dev/task/error-handling.html}\n */\n report(error, type) {\n if (this.task.options.collectErrors !== false) {\n this.task.listr.errors.push(new ListrError(error, type, this.task));\n }\n this.task.message$ = { error: error.message ?? this.task?.title };\n }\n /**\n * Skip the current task.\n *\n * @see {@link https://listr2.kilic.dev/task/skip.html}\n */\n skip(message, ...metadata) {\n this.task.state$ = \"SKIPPED\" /* SKIPPED */;\n if (message) {\n this.task.message$ = { skip: message ? splat(message, ...metadata) : this.task?.title };\n }\n }\n /**\n * Check whether this task is currently in a retry state.\n *\n * @see {@link https://listr2.kilic.dev/task/retry.html}\n */\n isRetrying() {\n return this.task.isRetrying() ? this.task.retry : { count: 0 };\n }\n /* istanbul ignore next */\n /**\n * Create a new prompt for getting user input through the prompt adapter.\n * This will create a new prompt through the adapter if the task is not currently rendering a prompt or will return the active instance.\n *\n * This part of the application requires optional peer dependencies, please refer to documentation.\n *\n * @see {@link https://listr2.kilic.dev/task/prompt.html}\n */\n prompt(adapter) {\n if (this.task.prompt) {\n return this.task.prompt;\n }\n return new adapter(this.task, this);\n }\n /* istanbul ignore next */\n /**\n * Generates a fake stdout for your use case, where it will be tunnelled through Listr to handle the rendering process.\n *\n * @see {@link https://listr2.kilic.dev/renderer/process-output.html}\n */\n stdout(type) {\n return createWritable((chunk) => {\n switch (type) {\n case \"PROMPT\" /* PROMPT */:\n this.promptOutput = chunk;\n break;\n default:\n this.output = chunk;\n }\n });\n }\n /** Run this task. */\n run(ctx) {\n return this.task.run(ctx, this);\n }\n};\n\n// src/lib/task.ts\nimport { randomUUID } from \"crypto\";\nimport { Readable } from \"stream\";\n\n// src/lib/listr-task-event-manager.ts\nvar ListrTaskEventManager = class extends EventManager {\n static {\n __name(this, \"ListrTaskEventManager\");\n }\n};\n\n// src/lib/task.ts\nvar Task = class extends ListrTaskEventManager {\n constructor(listr, task, options, rendererOptions, rendererTaskOptions) {\n super();\n this.listr = listr;\n this.task = task;\n this.options = options;\n this.rendererOptions = rendererOptions;\n this.rendererTaskOptions = rendererTaskOptions;\n if (task.title) {\n const title = Array.isArray(task?.title) ? task.title : [task.title];\n this.title = splat(title.shift(), ...title);\n this.initialTitle = this.title;\n }\n this.taskFn = task.task;\n this.parent = listr.parentTask;\n }\n static {\n __name(this, \"Task\");\n }\n /** Unique id per task, can be used for identifying a Task. */\n id = randomUUID();\n /** The current state of the task. */\n state = \"WAITING\" /* WAITING */;\n /** Subtasks of the current task. */\n subtasks;\n /** Title of the task. */\n title;\n /** Initial/Untouched version of the title for using whenever task has a reset. */\n initialTitle;\n /** Output channel for the task. */\n output;\n /** Current state of the retry process whenever the task is retrying. */\n retry;\n /**\n * A channel for messages.\n *\n * This requires a separate channel for messages like error, skip or runtime messages to further utilize in the renderers.\n */\n message = {};\n /** Current prompt instance or prompt error whenever the task is prompting. */\n prompt;\n /** Parent task of the current task. */\n parent;\n /** Enable flag of this task. */\n enabled;\n /** User provided Task callback function to run. */\n taskFn;\n /** Marks the task as closed. This is different from finalized since this is not really related to task itself. */\n closed;\n /**\n * Update the current state of the Task and emit the neccassary events.\n */\n set state$(state) {\n this.state = state;\n this.emit(\"STATE\" /* STATE */, state);\n if (this.hasSubtasks() && this.hasFailed()) {\n for (const subtask of this.subtasks) {\n if (subtask.state === \"STARTED\" /* STARTED */) {\n subtask.state$ = \"FAILED\" /* FAILED */;\n }\n }\n }\n this.listr.events.emit(\"SHOUD_REFRESH_RENDER\" /* SHOULD_REFRESH_RENDER */);\n }\n /**\n * Update the current output of the Task and emit the neccassary events.\n */\n set output$(data) {\n this.output = data;\n this.emit(\"OUTPUT\" /* OUTPUT */, data);\n this.listr.events.emit(\"SHOUD_REFRESH_RENDER\" /* SHOULD_REFRESH_RENDER */);\n }\n /**\n * Update the current prompt output of the Task and emit the neccassary events.\n */\n set promptOutput$(data) {\n this.emit(\"PROMPT\" /* PROMPT */, data);\n if (cleanseAnsi(data)) {\n this.listr.events.emit(\"SHOUD_REFRESH_RENDER\" /* SHOULD_REFRESH_RENDER */);\n }\n }\n /**\n * Update or extend the current message of the Task and emit the neccassary events.\n */\n set message$(data) {\n this.message = { ...this.message, ...data };\n this.emit(\"MESSAGE\" /* MESSAGE */, data);\n this.listr.events.emit(\"SHOUD_REFRESH_RENDER\" /* SHOULD_REFRESH_RENDER */);\n }\n /**\n * Update the current title of the Task and emit the neccassary events.\n */\n set title$(title) {\n this.title = title;\n this.emit(\"TITLE\" /* TITLE */, title);\n this.listr.events.emit(\"SHOUD_REFRESH_RENDER\" /* SHOULD_REFRESH_RENDER */);\n }\n /**\n * Current task path in the hierarchy.\n */\n get path() {\n return [...this.listr.path, this.initialTitle];\n }\n /**\n * Checks whether the current task with the given context should be set as enabled.\n */\n async check(ctx) {\n if (this.state === \"WAITING\" /* WAITING */) {\n this.enabled = await assertFunctionOrSelf(this.task?.enabled ?? true, ctx);\n this.emit(\"ENABLED\" /* ENABLED */, this.enabled);\n this.listr.events.emit(\"SHOUD_REFRESH_RENDER\" /* SHOULD_REFRESH_RENDER */);\n }\n return this.enabled;\n }\n /** Returns whether this task has subtasks. */\n hasSubtasks() {\n return this.subtasks?.length > 0;\n }\n /** Returns whether this task is finalized in someform. */\n hasFinalized() {\n return this.isCompleted() || this.hasFailed() || this.isSkipped() || this.hasRolledBack();\n }\n /** Returns whether this task is in progress. */\n isPending() {\n return this.isStarted() || this.isPrompt() || this.hasReset();\n }\n /** Returns whether this task has started. */\n isStarted() {\n return this.state === \"STARTED\" /* STARTED */;\n }\n /** Returns whether this task is skipped. */\n isSkipped() {\n return this.state === \"SKIPPED\" /* SKIPPED */;\n }\n /** Returns whether this task has been completed. */\n isCompleted() {\n return this.state === \"COMPLETED\" /* COMPLETED */;\n }\n /** Returns whether this task has been failed. */\n hasFailed() {\n return this.state === \"FAILED\" /* FAILED */;\n }\n /** Returns whether this task has an active rollback task going on. */\n isRollingBack() {\n return this.state === \"ROLLING_BACK\" /* ROLLING_BACK */;\n }\n /** Returns whether the rollback action was successful. */\n hasRolledBack() {\n return this.state === \"ROLLED_BACK\" /* ROLLED_BACK */;\n }\n /** Returns whether this task has an actively retrying task going on. */\n isRetrying() {\n return this.state === \"RETRY\" /* RETRY */;\n }\n /** Returns whether this task has some kind of reset like retry and rollback going on. */\n hasReset() {\n return this.state === \"RETRY\" /* RETRY */ || this.state === \"ROLLING_BACK\" /* ROLLING_BACK */;\n }\n /** Returns whether enabled function resolves to true. */\n isEnabled() {\n return this.enabled;\n }\n /** Returns whether this task actually has a title. */\n hasTitle() {\n return typeof this?.title === \"string\";\n }\n /** Returns whether this task has a prompt inside. */\n isPrompt() {\n return this.state === \"PROMPT\" /* PROMPT */ || this.state === \"PROMPT_COMPLETED\" /* PROMPT_COMPLETED */;\n }\n /** Returns whether this task is currently paused. */\n isPaused() {\n return this.state === \"PAUSED\" /* PAUSED */;\n }\n /** Returns whether this task is closed. */\n isClosed() {\n return this.closed;\n }\n /** Pause the given task for certain time. */\n async pause(time) {\n const state = this.state;\n this.state$ = \"PAUSED\" /* PAUSED */;\n this.message$ = {\n paused: Date.now() + time\n };\n await delay(time);\n this.state$ = state;\n this.message$ = {\n paused: null\n };\n }\n /** Run the current task. */\n async run(context, wrapper) {\n const handleResult = /* @__PURE__ */ __name((result) => {\n if (result instanceof Listr) {\n result.options = { ...this.options, ...result.options };\n result.rendererClass = getRendererClass(\"silent\");\n this.subtasks = result.tasks;\n result.errors = this.listr.errors;\n this.emit(\"SUBTASK\" /* SUBTASK */, this.subtasks);\n result = result.run(context);\n } else if (result instanceof Promise) {\n result = result.then(handleResult);\n } else if (result instanceof Readable) {\n result = new Promise((resolve, reject) => {\n result.on(\"data\", (data) => {\n this.output$ = data.toString();\n });\n result.on(\"error\", (error) => reject(error));\n result.on(\"end\", () => resolve(null));\n });\n } else if (isObservable(result)) {\n result = new Promise((resolve, reject) => {\n result.subscribe({\n next: (data) => {\n this.output$ = data;\n },\n error: reject,\n complete: resolve\n });\n });\n }\n return result;\n }, \"handleResult\");\n const startTime = Date.now();\n this.state$ = \"STARTED\" /* STARTED */;\n const skipped = await assertFunctionOrSelf(this.task?.skip ?? false, context);\n if (skipped) {\n if (typeof skipped === \"string\") {\n this.message$ = { skip: skipped };\n } else if (this.hasTitle()) {\n this.message$ = { skip: this.title };\n } else {\n this.message$ = { skip: \"Skipped task without a title.\" };\n }\n this.state$ = \"SKIPPED\" /* SKIPPED */;\n return;\n }\n try {\n const retryCount = typeof this.task?.retry === \"number\" && this.task.retry > 0 ? this.task.retry + 1 : typeof this.task?.retry === \"object\" && this.task.retry.tries > 0 ? this.task.retry.tries + 1 : 1;\n const retryDelay = typeof this.task.retry === \"object\" && this.task.retry.delay;\n for (let retries = 1; retries <= retryCount; retries++) {\n try {\n await handleResult(this.taskFn(context, wrapper));\n break;\n } catch (err) {\n if (retries !== retryCount) {\n this.retry = { count: retries, error: err };\n this.message$ = { retry: this.retry };\n this.title$ = this.initialTitle;\n this.output = void 0;\n wrapper.report(err, \"WILL_RETRY\" /* WILL_RETRY */);\n this.state$ = \"RETRY\" /* RETRY */;\n if (retryDelay) {\n await this.pause(retryDelay);\n }\n } else {\n throw err;\n }\n }\n }\n if (this.isStarted() || this.isRetrying()) {\n this.message$ = { duration: Date.now() - startTime };\n this.state$ = \"COMPLETED\" /* COMPLETED */;\n }\n } catch (error) {\n if (this.prompt instanceof PromptError) {\n error = this.prompt;\n }\n if (this.task?.rollback) {\n wrapper.report(error, \"WILL_ROLLBACK\" /* WILL_ROLLBACK */);\n try {\n this.state$ = \"ROLLING_BACK\" /* ROLLING_BACK */;\n await this.task.rollback(context, wrapper);\n this.message$ = { rollback: this.title };\n this.state$ = \"ROLLED_BACK\" /* ROLLED_BACK */;\n } catch (err) {\n this.state$ = \"FAILED\" /* FAILED */;\n wrapper.report(err, \"HAS_FAILED_TO_ROLLBACK\" /* HAS_FAILED_TO_ROLLBACK */);\n this.close();\n throw err;\n }\n if (this.listr.options?.exitAfterRollback !== false) {\n this.close();\n throw error;\n }\n } else {\n this.state$ = \"FAILED\" /* FAILED */;\n if (this.listr.options.exitOnError !== false && await assertFunctionOrSelf(this.task?.exitOnError, context) !== false) {\n wrapper.report(error, \"HAS_FAILED\" /* HAS_FAILED */);\n this.close();\n throw error;\n } else if (!this.hasSubtasks()) {\n wrapper.report(error, \"HAS_FAILED_WITHOUT_ERROR\" /* HAS_FAILED_WITHOUT_ERROR */);\n }\n }\n } finally {\n this.close();\n }\n }\n close() {\n this.emit(\"CLOSED\" /* CLOSED */);\n this.listr.events.emit(\"SHOUD_REFRESH_RENDER\" /* SHOULD_REFRESH_RENDER */);\n this.complete();\n }\n};\n\n// src/lib/listr-event-manager.ts\nvar ListrEventManager = class extends EventManager {\n static {\n __name(this, \"ListrEventManager\");\n }\n};\n\n// src/listr.ts\nvar Listr = class {\n constructor(task, options, parentTask) {\n this.task = task;\n this.options = options;\n this.parentTask = parentTask;\n this.options = {\n concurrent: false,\n renderer: \"default\",\n fallbackRenderer: \"simple\",\n exitOnError: true,\n exitAfterRollback: true,\n collectErrors: false,\n registerSignalListeners: true,\n ...this.parentTask?.options ?? {},\n ...options\n };\n if (this.options.concurrent === true) {\n this.options.concurrent = Infinity;\n } else if (typeof this.options.concurrent !== \"number\") {\n this.options.concurrent = 1;\n }\n this.concurrency = new Concurrency({ concurrency: this.options.concurrent });\n if (parentTask) {\n this.path = [...parentTask.listr.path, parentTask.title];\n this.errors = parentTask.listr.errors;\n }\n if (this.parentTask?.listr.events instanceof ListrEventManager) {\n this.events = this.parentTask.listr.events;\n } else {\n this.events = new ListrEventManager();\n }\n const renderer = getRenderer({\n renderer: this.options.renderer,\n rendererOptions: this.options.rendererOptions,\n fallbackRenderer: this.options.fallbackRenderer,\n fallbackRendererOptions: this.options.fallbackRendererOptions,\n fallbackRendererCondition: this.options?.fallbackRendererCondition,\n silentRendererCondition: this.options?.silentRendererCondition\n });\n this.rendererClass = renderer.renderer;\n this.rendererClassOptions = renderer.options;\n this.rendererSelection = renderer.selection;\n this.add(task ?? []);\n if (this.options.registerSignalListeners) {\n process.once(\"SIGINT\", () => {\n this.tasks.forEach(async (task2) => {\n if (task2.isPending()) {\n task2.state$ = \"FAILED\" /* FAILED */;\n }\n });\n this.renderer.end(new Error(\"Interrupted.\"));\n process.exit(127);\n }).setMaxListeners(0);\n }\n if (this.options?.forceTTY || process.env[\"LISTR_FORCE_TTY\" /* FORCE_TTY */]) {\n process.stdout.isTTY = true;\n process.stderr.isTTY = true;\n }\n if (this.options?.forceUnicode) {\n process.env[\"LISTR_FORCE_UNICODE\" /* FORCE_UNICODE */] = \"1\";\n }\n }\n static {\n __name(this, \"Listr\");\n }\n tasks = [];\n errors = [];\n ctx;\n events;\n path = [];\n rendererClass;\n rendererClassOptions;\n rendererSelection;\n concurrency;\n renderer;\n add(tasks) {\n this.tasks.push(...this.generate(tasks));\n }\n async run(context) {\n if (!this.renderer) {\n this.renderer = new this.rendererClass(this.tasks, this.rendererClassOptions, this.events);\n }\n await this.renderer.render();\n this.ctx = this.options?.ctx ?? context ?? {};\n await Promise.all(this.tasks.map((task) => task.check(this.ctx)));\n try {\n await Promise.all(this.tasks.map((task) => this.concurrency.add(() => this.runTask(task))));\n this.renderer.end();\n } catch (err) {\n if (this.options.exitOnError !== false) {\n this.renderer.end(err);\n throw err;\n }\n }\n return this.ctx;\n }\n generate(tasks) {\n tasks = Array.isArray(tasks) ? tasks : [tasks];\n return tasks.map((task) => {\n let rendererTaskOptions;\n if (this.rendererSelection === \"PRIMARY\" /* PRIMARY */) {\n rendererTaskOptions = task.rendererOptions;\n } else if (this.rendererSelection === \"SECONDARY\" /* SECONDARY */) {\n rendererTaskOptions = task.fallbackRendererOptions;\n }\n return new Task(\n this,\n task,\n this.options,\n this.rendererClassOptions,\n rendererTaskOptions\n );\n });\n }\n async runTask(task) {\n if (!await task.check(this.ctx)) {\n return;\n }\n return new TaskWrapper(task).run(this.ctx);\n }\n};\nexport {\n ANSI_ESCAPE,\n ANSI_ESCAPE_CODES,\n BaseEventMap,\n Concurrency,\n DefaultRenderer,\n EventManager,\n LISTR_DEFAULT_RENDERER_STYLE,\n LISTR_LOGGER_STDERR_LEVELS,\n LISTR_LOGGER_STYLE,\n Listr,\n ListrDefaultRendererLogLevels,\n ListrEnvironmentVariables,\n ListrError,\n ListrErrorTypes,\n ListrEventManager,\n ListrEventType,\n ListrLogLevels,\n ListrLogger,\n ListrPromptAdapter,\n ListrRendererError,\n ListrRendererSelection,\n ListrTaskEventManager,\n ListrTaskEventType,\n ListrTaskState,\n PRESET_TIMER,\n PRESET_TIMESTAMP,\n ProcessOutput,\n ProcessOutputBuffer,\n ProcessOutputStream,\n PromptError,\n SilentRenderer,\n SimpleRenderer,\n Spinner,\n TestRenderer,\n TestRendererSerializer,\n VerboseRenderer,\n assertFunctionOrSelf,\n cleanseAnsi,\n cloneObject,\n color,\n createWritable,\n delay,\n figures,\n getRenderer,\n getRendererClass,\n indent,\n isObservable,\n isUnicodeSupported,\n parseTimer,\n parseTimestamp,\n splat\n};\n","'use strict';\n\nconst { FORCE_COLOR, NODE_DISABLE_COLORS, TERM } = process.env;\n\nconst $ = {\n\tenabled: !NODE_DISABLE_COLORS && TERM !== 'dumb' && FORCE_COLOR !== '0',\n\n\t// modifiers\n\treset: init(0, 0),\n\tbold: init(1, 22),\n\tdim: init(2, 22),\n\titalic: init(3, 23),\n\tunderline: init(4, 24),\n\tinverse: init(7, 27),\n\thidden: init(8, 28),\n\tstrikethrough: init(9, 29),\n\n\t// colors\n\tblack: init(30, 39),\n\tred: init(31, 39),\n\tgreen: init(32, 39),\n\tyellow: init(33, 39),\n\tblue: init(34, 39),\n\tmagenta: init(35, 39),\n\tcyan: init(36, 39),\n\twhite: init(37, 39),\n\tgray: init(90, 39),\n\tgrey: init(90, 39),\n\n\t// background colors\n\tbgBlack: init(40, 49),\n\tbgRed: init(41, 49),\n\tbgGreen: init(42, 49),\n\tbgYellow: init(43, 49),\n\tbgBlue: init(44, 49),\n\tbgMagenta: init(45, 49),\n\tbgCyan: init(46, 49),\n\tbgWhite: init(47, 49)\n};\n\nfunction run(arr, str) {\n\tlet i=0, tmp, beg='', end='';\n\tfor (; i < arr.length; i++) {\n\t\ttmp = arr[i];\n\t\tbeg += tmp.open;\n\t\tend += tmp.close;\n\t\tif (str.includes(tmp.close)) {\n\t\t\tstr = str.replace(tmp.rgx, tmp.close + tmp.open);\n\t\t}\n\t}\n\treturn beg + str + end;\n}\n\nfunction chain(has, keys) {\n\tlet ctx = { has, keys };\n\n\tctx.reset = $.reset.bind(ctx);\n\tctx.bold = $.bold.bind(ctx);\n\tctx.dim = $.dim.bind(ctx);\n\tctx.italic = $.italic.bind(ctx);\n\tctx.underline = $.underline.bind(ctx);\n\tctx.inverse = $.inverse.bind(ctx);\n\tctx.hidden = $.hidden.bind(ctx);\n\tctx.strikethrough = $.strikethrough.bind(ctx);\n\n\tctx.black = $.black.bind(ctx);\n\tctx.red = $.red.bind(ctx);\n\tctx.green = $.green.bind(ctx);\n\tctx.yellow = $.yellow.bind(ctx);\n\tctx.blue = $.blue.bind(ctx);\n\tctx.magenta = $.magenta.bind(ctx);\n\tctx.cyan = $.cyan.bind(ctx);\n\tctx.white = $.white.bind(ctx);\n\tctx.gray = $.gray.bind(ctx);\n\tctx.grey = $.grey.bind(ctx);\n\n\tctx.bgBlack = $.bgBlack.bind(ctx);\n\tctx.bgRed = $.bgRed.bind(ctx);\n\tctx.bgGreen = $.bgGreen.bind(ctx);\n\tctx.bgYellow = $.bgYellow.bind(ctx);\n\tctx.bgBlue = $.bgBlue.bind(ctx);\n\tctx.bgMagenta = $.bgMagenta.bind(ctx);\n\tctx.bgCyan = $.bgCyan.bind(ctx);\n\tctx.bgWhite = $.bgWhite.bind(ctx);\n\n\treturn ctx;\n}\n\nfunction init(open, close) {\n\tlet blk = {\n\t\topen: `\\x1b[${open}m`,\n\t\tclose: `\\x1b[${close}m`,\n\t\trgx: new RegExp(`\\\\x1b\\\\[${close}m`, 'g')\n\t};\n\treturn function (txt) {\n\t\tif (this !== void 0 && this.has !== void 0) {\n\t\t\tthis.has.includes(open) || (this.has.push(open),this.keys.push(blk));\n\t\t\treturn txt === void 0 ? this : $.enabled ? run(this.keys, txt+'') : txt+'';\n\t\t}\n\t\treturn txt === void 0 ? chain([open], [blk]) : $.enabled ? run([blk], txt+'') : txt+'';\n\t};\n}\n\nmodule.exports = $;\n","'use strict';\n\nmodule.exports = (key, isSelect) => {\n if (key.meta && key.name !== 'escape') return;\n\n if (key.ctrl) {\n if (key.name === 'a') return 'first';\n if (key.name === 'c') return 'abort';\n if (key.name === 'd') return 'abort';\n if (key.name === 'e') return 'last';\n if (key.name === 'g') return 'reset';\n }\n\n if (isSelect) {\n if (key.name === 'j') return 'down';\n if (key.name === 'k') return 'up';\n }\n\n if (key.name === 'return') return 'submit';\n if (key.name === 'enter') return 'submit'; // ctrl + J\n\n if (key.name === 'backspace') return 'delete';\n if (key.name === 'delete') return 'deleteForward';\n if (key.name === 'abort') return 'abort';\n if (key.name === 'escape') return 'exit';\n if (key.name === 'tab') return 'next';\n if (key.name === 'pagedown') return 'nextPage';\n if (key.name === 'pageup') return 'prevPage'; // TODO create home() in prompt types (e.g. TextPrompt)\n\n if (key.name === 'home') return 'home'; // TODO create end() in prompt types (e.g. TextPrompt)\n\n if (key.name === 'end') return 'end';\n if (key.name === 'up') return 'up';\n if (key.name === 'down') return 'down';\n if (key.name === 'right') return 'right';\n if (key.name === 'left') return 'left';\n return false;\n};","'use strict';\n\nmodule.exports = str => {\n const pattern = ['[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)', '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PRZcf-ntqry=><~]))'].join('|');\n const RGX = new RegExp(pattern, 'g');\n return typeof str === 'string' ? str.replace(RGX, '') : str;\n};","'use strict';\n\nconst ESC = '\\x1B';\nconst CSI = `${ESC}[`;\nconst beep = '\\u0007';\n\nconst cursor = {\n to(x, y) {\n if (!y) return `${CSI}${x + 1}G`;\n return `${CSI}${y + 1};${x + 1}H`;\n },\n move(x, y) {\n let ret = '';\n\n if (x < 0) ret += `${CSI}${-x}D`;\n else if (x > 0) ret += `${CSI}${x}C`;\n\n if (y < 0) ret += `${CSI}${-y}A`;\n else if (y > 0) ret += `${CSI}${y}B`;\n\n return ret;\n },\n up: (count = 1) => `${CSI}${count}A`,\n down: (count = 1) => `${CSI}${count}B`,\n forward: (count = 1) => `${CSI}${count}C`,\n backward: (count = 1) => `${CSI}${count}D`,\n nextLine: (count = 1) => `${CSI}E`.repeat(count),\n prevLine: (count = 1) => `${CSI}F`.repeat(count),\n left: `${CSI}G`,\n hide: `${CSI}?25l`,\n show: `${CSI}?25h`,\n save: `${ESC}7`,\n restore: `${ESC}8`\n}\n\nconst scroll = {\n up: (count = 1) => `${CSI}S`.repeat(count),\n down: (count = 1) => `${CSI}T`.repeat(count)\n}\n\nconst erase = {\n screen: `${CSI}2J`,\n up: (count = 1) => `${CSI}1J`.repeat(count),\n down: (count = 1) => `${CSI}J`.repeat(count),\n line: `${CSI}2K`,\n lineEnd: `${CSI}K`,\n lineStart: `${CSI}1K`,\n lines(count) {\n let clear = '';\n for (let i = 0; i < count; i++)\n clear += this.line + (i < count - 1 ? cursor.up() : '');\n if (count)\n clear += cursor.left;\n return clear;\n }\n}\n\nmodule.exports = { cursor, scroll, erase, beep };\n","'use strict';\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n\nconst strip = require('./strip');\n\nconst _require = require('sisteransi'),\n erase = _require.erase,\n cursor = _require.cursor;\n\nconst width = str => [...strip(str)].length;\n/**\n * @param {string} prompt\n * @param {number} perLine\n */\n\n\nmodule.exports = function (prompt, perLine) {\n if (!perLine) return erase.line + cursor.to(0);\n let rows = 0;\n const lines = prompt.split(/\\r?\\n/);\n\n var _iterator = _createForOfIteratorHelper(lines),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n let line = _step.value;\n rows += 1 + Math.floor(Math.max(width(line) - 1, 0) / perLine);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return erase.lines(rows);\n};","'use strict';\n\nconst main = {\n arrowUp: '↑',\n arrowDown: '↓',\n arrowLeft: '←',\n arrowRight: '→',\n radioOn: '◉',\n radioOff: '◯',\n tick: '✔',\n cross: '✖',\n ellipsis: '…',\n pointerSmall: '›',\n line: '─',\n pointer: '❯'\n};\nconst win = {\n arrowUp: main.arrowUp,\n arrowDown: main.arrowDown,\n arrowLeft: main.arrowLeft,\n arrowRight: main.arrowRight,\n radioOn: '(*)',\n radioOff: '( )',\n tick: '√',\n cross: '×',\n ellipsis: '...',\n pointerSmall: '»',\n line: '─',\n pointer: '>'\n};\nconst figures = process.platform === 'win32' ? win : main;\nmodule.exports = figures;","'use strict';\n\nconst c = require('kleur');\n\nconst figures = require('./figures'); // rendering user input.\n\n\nconst styles = Object.freeze({\n password: {\n scale: 1,\n render: input => '*'.repeat(input.length)\n },\n emoji: {\n scale: 2,\n render: input => '😃'.repeat(input.length)\n },\n invisible: {\n scale: 0,\n render: input => ''\n },\n default: {\n scale: 1,\n render: input => `${input}`\n }\n});\n\nconst render = type => styles[type] || styles.default; // icon to signalize a prompt.\n\n\nconst symbols = Object.freeze({\n aborted: c.red(figures.cross),\n done: c.green(figures.tick),\n exited: c.yellow(figures.cross),\n default: c.cyan('?')\n});\n\nconst symbol = (done, aborted, exited) => aborted ? symbols.aborted : exited ? symbols.exited : done ? symbols.done : symbols.default; // between the question and the user's input.\n\n\nconst delimiter = completing => c.gray(completing ? figures.ellipsis : figures.pointerSmall);\n\nconst item = (expandable, expanded) => c.gray(expandable ? expanded ? figures.pointerSmall : '+' : figures.line);\n\nmodule.exports = {\n styles,\n render,\n symbols,\n symbol,\n delimiter,\n item\n};","'use strict';\n\nconst strip = require('./strip');\n/**\n * @param {string} msg\n * @param {number} perLine\n */\n\n\nmodule.exports = function (msg, perLine) {\n let lines = String(strip(msg) || '').split(/\\r?\\n/);\n if (!perLine) return lines.length;\n return lines.map(l => Math.ceil(l.length / perLine)).reduce((a, b) => a + b);\n};","'use strict';\n/**\n * @param {string} msg The message to wrap\n * @param {object} opts\n * @param {number|string} [opts.margin] Left margin\n * @param {number} opts.width Maximum characters per line including the margin\n */\n\nmodule.exports = (msg, opts = {}) => {\n const tab = Number.isSafeInteger(parseInt(opts.margin)) ? new Array(parseInt(opts.margin)).fill(' ').join('') : opts.margin || '';\n const width = opts.width;\n return (msg || '').split(/\\r?\\n/g).map(line => line.split(/\\s+/g).reduce((arr, w) => {\n if (w.length + tab.length >= width || arr[arr.length - 1].length + w.length + 1 < width) arr[arr.length - 1] += ` ${w}`;else arr.push(`${tab}${w}`);\n return arr;\n }, [tab]).join('\\n')).join('\\n');\n};","'use strict';\n/**\n * Determine what entries should be displayed on the screen, based on the\n * currently selected index and the maximum visible. Used in list-based\n * prompts like `select` and `multiselect`.\n *\n * @param {number} cursor the currently selected entry\n * @param {number} total the total entries available to display\n * @param {number} [maxVisible] the number of entries that can be displayed\n */\n\nmodule.exports = (cursor, total, maxVisible) => {\n maxVisible = maxVisible || total;\n let startIndex = Math.min(total - maxVisible, cursor - Math.floor(maxVisible / 2));\n if (startIndex < 0) startIndex = 0;\n let endIndex = Math.min(startIndex + maxVisible, total);\n return {\n startIndex,\n endIndex\n };\n};","'use strict';\n\nmodule.exports = {\n action: require('./action'),\n clear: require('./clear'),\n style: require('./style'),\n strip: require('./strip'),\n figures: require('./figures'),\n lines: require('./lines'),\n wrap: require('./wrap'),\n entriesToDisplay: require('./entriesToDisplay')\n};","'use strict';\n\nconst readline = require('readline');\n\nconst _require = require('../util'),\n action = _require.action;\n\nconst EventEmitter = require('events');\n\nconst _require2 = require('sisteransi'),\n beep = _require2.beep,\n cursor = _require2.cursor;\n\nconst color = require('kleur');\n/**\n * Base prompt skeleton\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass Prompt extends EventEmitter {\n constructor(opts = {}) {\n super();\n this.firstRender = true;\n this.in = opts.stdin || process.stdin;\n this.out = opts.stdout || process.stdout;\n\n this.onRender = (opts.onRender || (() => void 0)).bind(this);\n\n const rl = readline.createInterface({\n input: this.in,\n escapeCodeTimeout: 50\n });\n readline.emitKeypressEvents(this.in, rl);\n if (this.in.isTTY) this.in.setRawMode(true);\n const isSelect = ['SelectPrompt', 'MultiselectPrompt'].indexOf(this.constructor.name) > -1;\n\n const keypress = (str, key) => {\n let a = action(key, isSelect);\n\n if (a === false) {\n this._ && this._(str, key);\n } else if (typeof this[a] === 'function') {\n this[a](key);\n } else {\n this.bell();\n }\n };\n\n this.close = () => {\n this.out.write(cursor.show);\n this.in.removeListener('keypress', keypress);\n if (this.in.isTTY) this.in.setRawMode(false);\n rl.close();\n this.emit(this.aborted ? 'abort' : this.exited ? 'exit' : 'submit', this.value);\n this.closed = true;\n };\n\n this.in.on('keypress', keypress);\n }\n\n fire() {\n this.emit('state', {\n value: this.value,\n aborted: !!this.aborted,\n exited: !!this.exited\n });\n }\n\n bell() {\n this.out.write(beep);\n }\n\n render() {\n this.onRender(color);\n if (this.firstRender) this.firstRender = false;\n }\n\n}\n\nmodule.exports = Prompt;","\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('sisteransi'),\n erase = _require.erase,\n cursor = _require.cursor;\n\nconst _require2 = require('../util'),\n style = _require2.style,\n clear = _require2.clear,\n lines = _require2.lines,\n figures = _require2.figures;\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.initial] Default value\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\n\n\nclass TextPrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.transform = style.render(opts.style);\n this.scale = this.transform.scale;\n this.msg = opts.message;\n this.initial = opts.initial || ``;\n\n this.validator = opts.validate || (() => true);\n\n this.value = ``;\n this.errorMsg = opts.error || `Please Enter A Valid Value`;\n this.cursor = Number(!!this.initial);\n this.cursorOffset = 0;\n this.clear = clear(``, this.out.columns);\n this.render();\n }\n\n set value(v) {\n if (!v && this.initial) {\n this.placeholder = true;\n this.rendered = color.gray(this.transform.render(this.initial));\n } else {\n this.placeholder = false;\n this.rendered = this.transform.render(v);\n }\n\n this._value = v;\n this.fire();\n }\n\n get value() {\n return this._value;\n }\n\n reset() {\n this.value = ``;\n this.cursor = Number(!!this.initial);\n this.cursorOffset = 0;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.value = this.value || this.initial;\n this.done = this.aborted = true;\n this.error = false;\n this.red = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n validate() {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n let valid = yield _this.validator(_this.value);\n\n if (typeof valid === `string`) {\n _this.errorMsg = valid;\n valid = false;\n }\n\n _this.error = !valid;\n })();\n }\n\n submit() {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n _this2.value = _this2.value || _this2.initial;\n _this2.cursorOffset = 0;\n _this2.cursor = _this2.rendered.length;\n yield _this2.validate();\n\n if (_this2.error) {\n _this2.red = true;\n\n _this2.fire();\n\n _this2.render();\n\n return;\n }\n\n _this2.done = true;\n _this2.aborted = false;\n\n _this2.fire();\n\n _this2.render();\n\n _this2.out.write('\\n');\n\n _this2.close();\n })();\n }\n\n next() {\n if (!this.placeholder) return this.bell();\n this.value = this.initial;\n this.cursor = this.rendered.length;\n this.fire();\n this.render();\n }\n\n moveCursor(n) {\n if (this.placeholder) return;\n this.cursor = this.cursor + n;\n this.cursorOffset += n;\n }\n\n _(c, key) {\n let s1 = this.value.slice(0, this.cursor);\n let s2 = this.value.slice(this.cursor);\n this.value = `${s1}${c}${s2}`;\n this.red = false;\n this.cursor = this.placeholder ? 0 : s1.length + 1;\n this.render();\n }\n\n delete() {\n if (this.isCursorAtStart()) return this.bell();\n let s1 = this.value.slice(0, this.cursor - 1);\n let s2 = this.value.slice(this.cursor);\n this.value = `${s1}${s2}`;\n this.red = false;\n\n if (this.isCursorAtStart()) {\n this.cursorOffset = 0;\n } else {\n this.cursorOffset++;\n this.moveCursor(-1);\n }\n\n this.render();\n }\n\n deleteForward() {\n if (this.cursor * this.scale >= this.rendered.length || this.placeholder) return this.bell();\n let s1 = this.value.slice(0, this.cursor);\n let s2 = this.value.slice(this.cursor + 1);\n this.value = `${s1}${s2}`;\n this.red = false;\n\n if (this.isCursorAtEnd()) {\n this.cursorOffset = 0;\n } else {\n this.cursorOffset++;\n }\n\n this.render();\n }\n\n first() {\n this.cursor = 0;\n this.render();\n }\n\n last() {\n this.cursor = this.value.length;\n this.render();\n }\n\n left() {\n if (this.cursor <= 0 || this.placeholder) return this.bell();\n this.moveCursor(-1);\n this.render();\n }\n\n right() {\n if (this.cursor * this.scale >= this.rendered.length || this.placeholder) return this.bell();\n this.moveCursor(1);\n this.render();\n }\n\n isCursorAtStart() {\n return this.cursor === 0 || this.placeholder && this.cursor === 1;\n }\n\n isCursorAtEnd() {\n return this.cursor === this.rendered.length || this.placeholder && this.cursor === this.rendered.length + 1;\n }\n\n render() {\n if (this.closed) return;\n\n if (!this.firstRender) {\n if (this.outputError) this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n this.out.write(clear(this.outputText, this.out.columns));\n }\n\n super.render();\n this.outputError = '';\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), this.red ? color.red(this.rendered) : this.rendered].join(` `);\n\n if (this.error) {\n this.outputError += this.errorMsg.split(`\\n`).reduce((a, l, i) => a + `\\n${i ? ' ' : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore + cursor.move(this.cursorOffset, 0));\n }\n\n}\n\nmodule.exports = TextPrompt;","'use strict';\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n style = _require.style,\n clear = _require.clear,\n figures = _require.figures,\n wrap = _require.wrap,\n entriesToDisplay = _require.entriesToDisplay;\n\nconst _require2 = require('sisteransi'),\n cursor = _require2.cursor;\n/**\n * SelectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {Number} [opts.initial] Index of default value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n */\n\n\nclass SelectPrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.hint = opts.hint || '- Use arrow-keys. Return to submit.';\n this.warn = opts.warn || '- This option is disabled';\n this.cursor = opts.initial || 0;\n this.choices = opts.choices.map((ch, idx) => {\n if (typeof ch === 'string') ch = {\n title: ch,\n value: idx\n };\n return {\n title: ch && (ch.title || ch.value || ch),\n value: ch && (ch.value === undefined ? idx : ch.value),\n description: ch && ch.description,\n selected: ch && ch.selected,\n disabled: ch && ch.disabled\n };\n });\n this.optionsPerPage = opts.optionsPerPage || 10;\n this.value = (this.choices[this.cursor] || {}).value;\n this.clear = clear('', this.out.columns);\n this.render();\n }\n\n moveCursor(n) {\n this.cursor = n;\n this.value = this.choices[n].value;\n this.fire();\n }\n\n reset() {\n this.moveCursor(0);\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n if (!this.selection.disabled) {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n } else this.bell();\n }\n\n first() {\n this.moveCursor(0);\n this.render();\n }\n\n last() {\n this.moveCursor(this.choices.length - 1);\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.moveCursor(this.choices.length - 1);\n } else {\n this.moveCursor(this.cursor - 1);\n }\n\n this.render();\n }\n\n down() {\n if (this.cursor === this.choices.length - 1) {\n this.moveCursor(0);\n } else {\n this.moveCursor(this.cursor + 1);\n }\n\n this.render();\n }\n\n next() {\n this.moveCursor((this.cursor + 1) % this.choices.length);\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') return this.submit();\n }\n\n get selection() {\n return this.choices[this.cursor];\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n let _entriesToDisplay = entriesToDisplay(this.cursor, this.choices.length, this.optionsPerPage),\n startIndex = _entriesToDisplay.startIndex,\n endIndex = _entriesToDisplay.endIndex; // Print prompt\n\n\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.done ? this.selection.title : this.selection.disabled ? color.yellow(this.warn) : color.gray(this.hint)].join(' '); // Print choices\n\n if (!this.done) {\n this.outputText += '\\n';\n\n for (let i = startIndex; i < endIndex; i++) {\n let title,\n prefix,\n desc = '',\n v = this.choices[i]; // Determine whether to display \"more choices\" indicators\n\n if (i === startIndex && startIndex > 0) {\n prefix = figures.arrowUp;\n } else if (i === endIndex - 1 && endIndex < this.choices.length) {\n prefix = figures.arrowDown;\n } else {\n prefix = ' ';\n }\n\n if (v.disabled) {\n title = this.cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n prefix = (this.cursor === i ? color.bold().gray(figures.pointer) + ' ' : ' ') + prefix;\n } else {\n title = this.cursor === i ? color.cyan().underline(v.title) : v.title;\n prefix = (this.cursor === i ? color.cyan(figures.pointer) + ' ' : ' ') + prefix;\n\n if (v.description && this.cursor === i) {\n desc = ` - ${v.description}`;\n\n if (prefix.length + title.length + desc.length >= this.out.columns || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, {\n margin: 3,\n width: this.out.columns\n });\n }\n }\n }\n\n this.outputText += `${prefix} ${title}${color.gray(desc)}\\n`;\n }\n }\n\n this.out.write(this.outputText);\n }\n\n}\n\nmodule.exports = SelectPrompt;","\"use strict\";\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n style = _require.style,\n clear = _require.clear;\n\nconst _require2 = require('sisteransi'),\n cursor = _require2.cursor,\n erase = _require2.erase;\n/**\n * TogglePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial=false] Default value\n * @param {String} [opts.active='no'] Active label\n * @param {String} [opts.inactive='off'] Inactive label\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass TogglePrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.value = !!opts.initial;\n this.active = opts.active || 'on';\n this.inactive = opts.inactive || 'off';\n this.initialValue = this.value;\n this.render();\n }\n\n reset() {\n this.value = this.initialValue;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n deactivate() {\n if (this.value === false) return this.bell();\n this.value = false;\n this.render();\n }\n\n activate() {\n if (this.value === true) return this.bell();\n this.value = true;\n this.render();\n }\n\n delete() {\n this.deactivate();\n }\n\n left() {\n this.deactivate();\n }\n\n right() {\n this.activate();\n }\n\n down() {\n this.deactivate();\n }\n\n up() {\n this.activate();\n }\n\n next() {\n this.value = !this.value;\n this.fire();\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.value = !this.value;\n } else if (c === '1') {\n this.value = true;\n } else if (c === '0') {\n this.value = false;\n } else return this.bell();\n\n this.render();\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), this.value ? this.inactive : color.cyan().underline(this.inactive), color.gray('/'), this.value ? color.cyan().underline(this.active) : this.active].join(' ');\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n\n}\n\nmodule.exports = TogglePrompt;","'use strict';\n\nclass DatePart {\n constructor({\n token,\n date,\n parts,\n locales\n }) {\n this.token = token;\n this.date = date || new Date();\n this.parts = parts || [this];\n this.locales = locales || {};\n }\n\n up() {}\n\n down() {}\n\n next() {\n const currentIdx = this.parts.indexOf(this);\n return this.parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n }\n\n setTo(val) {}\n\n prev() {\n let parts = [].concat(this.parts).reverse();\n const currentIdx = parts.indexOf(this);\n return parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n }\n\n toString() {\n return String(this.date);\n }\n\n}\n\nmodule.exports = DatePart;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Meridiem extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setHours((this.date.getHours() + 12) % 24);\n }\n\n down() {\n this.up();\n }\n\n toString() {\n let meridiem = this.date.getHours() > 12 ? 'pm' : 'am';\n return /\\A/.test(this.token) ? meridiem.toUpperCase() : meridiem;\n }\n\n}\n\nmodule.exports = Meridiem;","'use strict';\n\nconst DatePart = require('./datepart');\n\nconst pos = n => {\n n = n % 10;\n return n === 1 ? 'st' : n === 2 ? 'nd' : n === 3 ? 'rd' : 'th';\n};\n\nclass Day extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setDate(this.date.getDate() + 1);\n }\n\n down() {\n this.date.setDate(this.date.getDate() - 1);\n }\n\n setTo(val) {\n this.date.setDate(parseInt(val.substr(-2)));\n }\n\n toString() {\n let date = this.date.getDate();\n let day = this.date.getDay();\n return this.token === 'DD' ? String(date).padStart(2, '0') : this.token === 'Do' ? date + pos(date) : this.token === 'd' ? day + 1 : this.token === 'ddd' ? this.locales.weekdaysShort[day] : this.token === 'dddd' ? this.locales.weekdays[day] : date;\n }\n\n}\n\nmodule.exports = Day;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Hours extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setHours(this.date.getHours() + 1);\n }\n\n down() {\n this.date.setHours(this.date.getHours() - 1);\n }\n\n setTo(val) {\n this.date.setHours(parseInt(val.substr(-2)));\n }\n\n toString() {\n let hours = this.date.getHours();\n if (/h/.test(this.token)) hours = hours % 12 || 12;\n return this.token.length > 1 ? String(hours).padStart(2, '0') : hours;\n }\n\n}\n\nmodule.exports = Hours;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Milliseconds extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setMilliseconds(this.date.getMilliseconds() + 1);\n }\n\n down() {\n this.date.setMilliseconds(this.date.getMilliseconds() - 1);\n }\n\n setTo(val) {\n this.date.setMilliseconds(parseInt(val.substr(-this.token.length)));\n }\n\n toString() {\n return String(this.date.getMilliseconds()).padStart(4, '0').substr(0, this.token.length);\n }\n\n}\n\nmodule.exports = Milliseconds;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Minutes extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setMinutes(this.date.getMinutes() + 1);\n }\n\n down() {\n this.date.setMinutes(this.date.getMinutes() - 1);\n }\n\n setTo(val) {\n this.date.setMinutes(parseInt(val.substr(-2)));\n }\n\n toString() {\n let m = this.date.getMinutes();\n return this.token.length > 1 ? String(m).padStart(2, '0') : m;\n }\n\n}\n\nmodule.exports = Minutes;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Month extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setMonth(this.date.getMonth() + 1);\n }\n\n down() {\n this.date.setMonth(this.date.getMonth() - 1);\n }\n\n setTo(val) {\n val = parseInt(val.substr(-2)) - 1;\n this.date.setMonth(val < 0 ? 0 : val);\n }\n\n toString() {\n let month = this.date.getMonth();\n let tl = this.token.length;\n return tl === 2 ? String(month + 1).padStart(2, '0') : tl === 3 ? this.locales.monthsShort[month] : tl === 4 ? this.locales.months[month] : String(month + 1);\n }\n\n}\n\nmodule.exports = Month;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Seconds extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setSeconds(this.date.getSeconds() + 1);\n }\n\n down() {\n this.date.setSeconds(this.date.getSeconds() - 1);\n }\n\n setTo(val) {\n this.date.setSeconds(parseInt(val.substr(-2)));\n }\n\n toString() {\n let s = this.date.getSeconds();\n return this.token.length > 1 ? String(s).padStart(2, '0') : s;\n }\n\n}\n\nmodule.exports = Seconds;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Year extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setFullYear(this.date.getFullYear() + 1);\n }\n\n down() {\n this.date.setFullYear(this.date.getFullYear() - 1);\n }\n\n setTo(val) {\n this.date.setFullYear(val.substr(-4));\n }\n\n toString() {\n let year = String(this.date.getFullYear()).padStart(4, '0');\n return this.token.length === 2 ? year.substr(-2) : year;\n }\n\n}\n\nmodule.exports = Year;","'use strict';\n\nmodule.exports = {\n DatePart: require('./datepart'),\n Meridiem: require('./meridiem'),\n Day: require('./day'),\n Hours: require('./hours'),\n Milliseconds: require('./milliseconds'),\n Minutes: require('./minutes'),\n Month: require('./month'),\n Seconds: require('./seconds'),\n Year: require('./year')\n};","'use strict';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n style = _require.style,\n clear = _require.clear,\n figures = _require.figures;\n\nconst _require2 = require('sisteransi'),\n erase = _require2.erase,\n cursor = _require2.cursor;\n\nconst _require3 = require('../dateparts'),\n DatePart = _require3.DatePart,\n Meridiem = _require3.Meridiem,\n Day = _require3.Day,\n Hours = _require3.Hours,\n Milliseconds = _require3.Milliseconds,\n Minutes = _require3.Minutes,\n Month = _require3.Month,\n Seconds = _require3.Seconds,\n Year = _require3.Year;\n\nconst regex = /\\\\(.)|\"((?:\\\\[\"\\\\]|[^\"])+)\"|(D[Do]?|d{3,4}|d)|(M{1,4})|(YY(?:YY)?)|([aA])|([Hh]{1,2})|(m{1,2})|(s{1,2})|(S{1,4})|./g;\nconst regexGroups = {\n 1: ({\n token\n }) => token.replace(/\\\\(.)/g, '$1'),\n 2: opts => new Day(opts),\n // Day // TODO\n 3: opts => new Month(opts),\n // Month\n 4: opts => new Year(opts),\n // Year\n 5: opts => new Meridiem(opts),\n // AM/PM // TODO (special)\n 6: opts => new Hours(opts),\n // Hours\n 7: opts => new Minutes(opts),\n // Minutes\n 8: opts => new Seconds(opts),\n // Seconds\n 9: opts => new Milliseconds(opts) // Fractional seconds\n\n};\nconst dfltLocales = {\n months: 'January,February,March,April,May,June,July,August,September,October,November,December'.split(','),\n monthsShort: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n weekdays: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n weekdaysShort: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(',')\n};\n/**\n * DatePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Number} [opts.initial] Index of default value\n * @param {String} [opts.mask] The format mask\n * @param {object} [opts.locales] The date locales\n * @param {String} [opts.error] The error message shown on invalid value\n * @param {Function} [opts.validate] Function to validate the submitted value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\nclass DatePrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.cursor = 0;\n this.typed = '';\n this.locales = Object.assign(dfltLocales, opts.locales);\n this._date = opts.initial || new Date();\n this.errorMsg = opts.error || 'Please Enter A Valid Value';\n\n this.validator = opts.validate || (() => true);\n\n this.mask = opts.mask || 'YYYY-MM-DD HH:mm:ss';\n this.clear = clear('', this.out.columns);\n this.render();\n }\n\n get value() {\n return this.date;\n }\n\n get date() {\n return this._date;\n }\n\n set date(date) {\n if (date) this._date.setTime(date.getTime());\n }\n\n set mask(mask) {\n let result;\n this.parts = [];\n\n while (result = regex.exec(mask)) {\n let match = result.shift();\n let idx = result.findIndex(gr => gr != null);\n this.parts.push(idx in regexGroups ? regexGroups[idx]({\n token: result[idx] || match,\n date: this.date,\n parts: this.parts,\n locales: this.locales\n }) : result[idx] || match);\n }\n\n let parts = this.parts.reduce((arr, i) => {\n if (typeof i === 'string' && typeof arr[arr.length - 1] === 'string') arr[arr.length - 1] += i;else arr.push(i);\n return arr;\n }, []);\n this.parts.splice(0);\n this.parts.push(...parts);\n this.reset();\n }\n\n moveCursor(n) {\n this.typed = '';\n this.cursor = n;\n this.fire();\n }\n\n reset() {\n this.moveCursor(this.parts.findIndex(p => p instanceof DatePart));\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.error = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n validate() {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n let valid = yield _this.validator(_this.value);\n\n if (typeof valid === 'string') {\n _this.errorMsg = valid;\n valid = false;\n }\n\n _this.error = !valid;\n })();\n }\n\n submit() {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n yield _this2.validate();\n\n if (_this2.error) {\n _this2.color = 'red';\n\n _this2.fire();\n\n _this2.render();\n\n return;\n }\n\n _this2.done = true;\n _this2.aborted = false;\n\n _this2.fire();\n\n _this2.render();\n\n _this2.out.write('\\n');\n\n _this2.close();\n })();\n }\n\n up() {\n this.typed = '';\n this.parts[this.cursor].up();\n this.render();\n }\n\n down() {\n this.typed = '';\n this.parts[this.cursor].down();\n this.render();\n }\n\n left() {\n let prev = this.parts[this.cursor].prev();\n if (prev == null) return this.bell();\n this.moveCursor(this.parts.indexOf(prev));\n this.render();\n }\n\n right() {\n let next = this.parts[this.cursor].next();\n if (next == null) return this.bell();\n this.moveCursor(this.parts.indexOf(next));\n this.render();\n }\n\n next() {\n let next = this.parts[this.cursor].next();\n this.moveCursor(next ? this.parts.indexOf(next) : this.parts.findIndex(part => part instanceof DatePart));\n this.render();\n }\n\n _(c) {\n if (/\\d/.test(c)) {\n this.typed += c;\n this.parts[this.cursor].setTo(this.typed);\n this.render();\n }\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n super.render(); // Print prompt\n\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.parts.reduce((arr, p, idx) => arr.concat(idx === this.cursor && !this.done ? color.cyan().underline(p.toString()) : p), []).join('')].join(' '); // Print error\n\n if (this.error) {\n this.outputText += this.errorMsg.split('\\n').reduce((a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n\n}\n\nmodule.exports = DatePrompt;","\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('sisteransi'),\n cursor = _require.cursor,\n erase = _require.erase;\n\nconst _require2 = require('../util'),\n style = _require2.style,\n figures = _require2.figures,\n clear = _require2.clear,\n lines = _require2.lines;\n\nconst isNumber = /[0-9]/;\n\nconst isDef = any => any !== undefined;\n\nconst round = (number, precision) => {\n let factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n};\n/**\n * NumberPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {Number} [opts.initial] Default value\n * @param {Number} [opts.max=+Infinity] Max value\n * @param {Number} [opts.min=-Infinity] Min value\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\n\n\nclass NumberPrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.transform = style.render(opts.style);\n this.msg = opts.message;\n this.initial = isDef(opts.initial) ? opts.initial : '';\n this.float = !!opts.float;\n this.round = opts.round || 2;\n this.inc = opts.increment || 1;\n this.min = isDef(opts.min) ? opts.min : -Infinity;\n this.max = isDef(opts.max) ? opts.max : Infinity;\n this.errorMsg = opts.error || `Please Enter A Valid Value`;\n\n this.validator = opts.validate || (() => true);\n\n this.color = `cyan`;\n this.value = ``;\n this.typed = ``;\n this.lastHit = 0;\n this.render();\n }\n\n set value(v) {\n if (!v && v !== 0) {\n this.placeholder = true;\n this.rendered = color.gray(this.transform.render(`${this.initial}`));\n this._value = ``;\n } else {\n this.placeholder = false;\n this.rendered = this.transform.render(`${round(v, this.round)}`);\n this._value = round(v, this.round);\n }\n\n this.fire();\n }\n\n get value() {\n return this._value;\n }\n\n parse(x) {\n return this.float ? parseFloat(x) : parseInt(x);\n }\n\n valid(c) {\n return c === `-` || c === `.` && this.float || isNumber.test(c);\n }\n\n reset() {\n this.typed = ``;\n this.value = ``;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n let x = this.value;\n this.value = x !== `` ? x : this.initial;\n this.done = this.aborted = true;\n this.error = false;\n this.fire();\n this.render();\n this.out.write(`\\n`);\n this.close();\n }\n\n validate() {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n let valid = yield _this.validator(_this.value);\n\n if (typeof valid === `string`) {\n _this.errorMsg = valid;\n valid = false;\n }\n\n _this.error = !valid;\n })();\n }\n\n submit() {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n yield _this2.validate();\n\n if (_this2.error) {\n _this2.color = `red`;\n\n _this2.fire();\n\n _this2.render();\n\n return;\n }\n\n let x = _this2.value;\n _this2.value = x !== `` ? x : _this2.initial;\n _this2.done = true;\n _this2.aborted = false;\n _this2.error = false;\n\n _this2.fire();\n\n _this2.render();\n\n _this2.out.write(`\\n`);\n\n _this2.close();\n })();\n }\n\n up() {\n this.typed = ``;\n\n if (this.value === '') {\n this.value = this.min - this.inc;\n }\n\n if (this.value >= this.max) return this.bell();\n this.value += this.inc;\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n down() {\n this.typed = ``;\n\n if (this.value === '') {\n this.value = this.min + this.inc;\n }\n\n if (this.value <= this.min) return this.bell();\n this.value -= this.inc;\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n delete() {\n let val = this.value.toString();\n if (val.length === 0) return this.bell();\n this.value = this.parse(val = val.slice(0, -1)) || ``;\n\n if (this.value !== '' && this.value < this.min) {\n this.value = this.min;\n }\n\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n next() {\n this.value = this.initial;\n this.fire();\n this.render();\n }\n\n _(c, key) {\n if (!this.valid(c)) return this.bell();\n const now = Date.now();\n if (now - this.lastHit > 1000) this.typed = ``; // 1s elapsed\n\n this.typed += c;\n this.lastHit = now;\n this.color = `cyan`;\n if (c === `.`) return this.fire();\n this.value = Math.min(this.parse(this.typed), this.max);\n if (this.value > this.max) this.value = this.max;\n if (this.value < this.min) this.value = this.min;\n this.fire();\n this.render();\n }\n\n render() {\n if (this.closed) return;\n\n if (!this.firstRender) {\n if (this.outputError) this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n this.out.write(clear(this.outputText, this.out.columns));\n }\n\n super.render();\n this.outputError = ''; // Print prompt\n\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), !this.done || !this.done && !this.placeholder ? color[this.color]().underline(this.rendered) : this.rendered].join(` `); // Print error\n\n if (this.error) {\n this.outputError += this.errorMsg.split(`\\n`).reduce((a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore);\n }\n\n}\n\nmodule.exports = NumberPrompt;","'use strict';\n\nconst color = require('kleur');\n\nconst _require = require('sisteransi'),\n cursor = _require.cursor;\n\nconst Prompt = require('./prompt');\n\nconst _require2 = require('../util'),\n clear = _require2.clear,\n figures = _require2.figures,\n style = _require2.style,\n wrap = _require2.wrap,\n entriesToDisplay = _require2.entriesToDisplay;\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass MultiselectPrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.cursor = opts.cursor || 0;\n this.scrollIndex = opts.cursor || 0;\n this.hint = opts.hint || '';\n this.warn = opts.warn || '- This option is disabled -';\n this.minSelected = opts.min;\n this.showMinError = false;\n this.maxChoices = opts.max;\n this.instructions = opts.instructions;\n this.optionsPerPage = opts.optionsPerPage || 10;\n this.value = opts.choices.map((ch, idx) => {\n if (typeof ch === 'string') ch = {\n title: ch,\n value: idx\n };\n return {\n title: ch && (ch.title || ch.value || ch),\n description: ch && ch.description,\n value: ch && (ch.value === undefined ? idx : ch.value),\n selected: ch && ch.selected,\n disabled: ch && ch.disabled\n };\n });\n this.clear = clear('', this.out.columns);\n\n if (!opts.overrideRender) {\n this.render();\n }\n }\n\n reset() {\n this.value.map(v => !v.selected);\n this.cursor = 0;\n this.fire();\n this.render();\n }\n\n selected() {\n return this.value.filter(v => v.selected);\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n const selected = this.value.filter(e => e.selected);\n\n if (this.minSelected && selected.length < this.minSelected) {\n this.showMinError = true;\n this.render();\n } else {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n }\n\n first() {\n this.cursor = 0;\n this.render();\n }\n\n last() {\n this.cursor = this.value.length - 1;\n this.render();\n }\n\n next() {\n this.cursor = (this.cursor + 1) % this.value.length;\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.cursor = this.value.length - 1;\n } else {\n this.cursor--;\n }\n\n this.render();\n }\n\n down() {\n if (this.cursor === this.value.length - 1) {\n this.cursor = 0;\n } else {\n this.cursor++;\n }\n\n this.render();\n }\n\n left() {\n this.value[this.cursor].selected = false;\n this.render();\n }\n\n right() {\n if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n this.value[this.cursor].selected = true;\n this.render();\n }\n\n handleSpaceToggle() {\n const v = this.value[this.cursor];\n\n if (v.selected) {\n v.selected = false;\n this.render();\n } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n return this.bell();\n } else {\n v.selected = true;\n this.render();\n }\n }\n\n toggleAll() {\n if (this.maxChoices !== undefined || this.value[this.cursor].disabled) {\n return this.bell();\n }\n\n const newSelected = !this.value[this.cursor].selected;\n this.value.filter(v => !v.disabled).forEach(v => v.selected = newSelected);\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.handleSpaceToggle();\n } else if (c === 'a') {\n this.toggleAll();\n } else {\n return this.bell();\n }\n }\n\n renderInstructions() {\n if (this.instructions === undefined || this.instructions) {\n if (typeof this.instructions === 'string') {\n return this.instructions;\n }\n\n return '\\nInstructions:\\n' + ` ${figures.arrowUp}/${figures.arrowDown}: Highlight option\\n` + ` ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\\n` + (this.maxChoices === undefined ? ` a: Toggle all\\n` : '') + ` enter/return: Complete answer`;\n }\n\n return '';\n }\n\n renderOption(cursor, v, i, arrowIndicator) {\n const prefix = (v.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + arrowIndicator + ' ';\n let title, desc;\n\n if (v.disabled) {\n title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n } else {\n title = cursor === i ? color.cyan().underline(v.title) : v.title;\n\n if (cursor === i && v.description) {\n desc = ` - ${v.description}`;\n\n if (prefix.length + title.length + desc.length >= this.out.columns || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, {\n margin: prefix.length,\n width: this.out.columns\n });\n }\n }\n }\n\n return prefix + title + color.gray(desc || '');\n } // shared with autocompleteMultiselect\n\n\n paginateOptions(options) {\n if (options.length === 0) {\n return color.red('No matches for this query.');\n }\n\n let _entriesToDisplay = entriesToDisplay(this.cursor, options.length, this.optionsPerPage),\n startIndex = _entriesToDisplay.startIndex,\n endIndex = _entriesToDisplay.endIndex;\n\n let prefix,\n styledOptions = [];\n\n for (let i = startIndex; i < endIndex; i++) {\n if (i === startIndex && startIndex > 0) {\n prefix = figures.arrowUp;\n } else if (i === endIndex - 1 && endIndex < options.length) {\n prefix = figures.arrowDown;\n } else {\n prefix = ' ';\n }\n\n styledOptions.push(this.renderOption(this.cursor, options[i], i, prefix));\n }\n\n return '\\n' + styledOptions.join('\\n');\n } // shared with autocomleteMultiselect\n\n\n renderOptions(options) {\n if (!this.done) {\n return this.paginateOptions(options);\n }\n\n return '';\n }\n\n renderDoneOrInstructions() {\n if (this.done) {\n return this.value.filter(e => e.selected).map(v => v.title).join(', ');\n }\n\n const output = [color.gray(this.hint), this.renderInstructions()];\n\n if (this.value[this.cursor].disabled) {\n output.push(color.yellow(this.warn));\n }\n\n return output.join(' ');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n super.render(); // print prompt\n\n let prompt = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.renderDoneOrInstructions()].join(' ');\n\n if (this.showMinError) {\n prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n this.showMinError = false;\n }\n\n prompt += this.renderOptions(this.value);\n this.out.write(this.clear + prompt);\n this.clear = clear(prompt, this.out.columns);\n }\n\n}\n\nmodule.exports = MultiselectPrompt;","'use strict';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('sisteransi'),\n erase = _require.erase,\n cursor = _require.cursor;\n\nconst _require2 = require('../util'),\n style = _require2.style,\n clear = _require2.clear,\n figures = _require2.figures,\n wrap = _require2.wrap,\n entriesToDisplay = _require2.entriesToDisplay;\n\nconst getVal = (arr, i) => arr[i] && (arr[i].value || arr[i].title || arr[i]);\n\nconst getTitle = (arr, i) => arr[i] && (arr[i].title || arr[i].value || arr[i]);\n\nconst getIndex = (arr, valOrTitle) => {\n const index = arr.findIndex(el => el.value === valOrTitle || el.title === valOrTitle);\n return index > -1 ? index : undefined;\n};\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of auto-complete choices objects\n * @param {Function} [opts.suggest] Filter function. Defaults to sort by title\n * @param {Number} [opts.limit=10] Max number of results to show\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.fallback] Fallback message - initial to default value\n * @param {String} [opts.initial] Index of the default value\n * @param {Boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.noMatches] The no matches found label\n */\n\n\nclass AutocompletePrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.suggest = opts.suggest;\n this.choices = opts.choices;\n this.initial = typeof opts.initial === 'number' ? opts.initial : getIndex(opts.choices, opts.initial);\n this.select = this.initial || opts.cursor || 0;\n this.i18n = {\n noMatches: opts.noMatches || 'no matches found'\n };\n this.fallback = opts.fallback || this.initial;\n this.clearFirst = opts.clearFirst || false;\n this.suggestions = [];\n this.input = '';\n this.limit = opts.limit || 10;\n this.cursor = 0;\n this.transform = style.render(opts.style);\n this.scale = this.transform.scale;\n this.render = this.render.bind(this);\n this.complete = this.complete.bind(this);\n this.clear = clear('', this.out.columns);\n this.complete(this.render);\n this.render();\n }\n\n set fallback(fb) {\n this._fb = Number.isSafeInteger(parseInt(fb)) ? parseInt(fb) : fb;\n }\n\n get fallback() {\n let choice;\n if (typeof this._fb === 'number') choice = this.choices[this._fb];else if (typeof this._fb === 'string') choice = {\n title: this._fb\n };\n return choice || this._fb || {\n title: this.i18n.noMatches\n };\n }\n\n moveSelect(i) {\n this.select = i;\n if (this.suggestions.length > 0) this.value = getVal(this.suggestions, i);else this.value = this.fallback.value;\n this.fire();\n }\n\n complete(cb) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n const p = _this.completing = _this.suggest(_this.input, _this.choices);\n\n const suggestions = yield p;\n if (_this.completing !== p) return;\n _this.suggestions = suggestions.map((s, i, arr) => ({\n title: getTitle(arr, i),\n value: getVal(arr, i),\n description: s.description\n }));\n _this.completing = false;\n const l = Math.max(suggestions.length - 1, 0);\n\n _this.moveSelect(Math.min(l, _this.select));\n\n cb && cb();\n })();\n }\n\n reset() {\n this.input = '';\n this.complete(() => {\n this.moveSelect(this.initial !== void 0 ? this.initial : 0);\n this.render();\n });\n this.render();\n }\n\n exit() {\n if (this.clearFirst && this.input.length > 0) {\n this.reset();\n } else {\n this.done = this.exited = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n }\n\n abort() {\n this.done = this.aborted = true;\n this.exited = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.done = true;\n this.aborted = this.exited = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n _(c, key) {\n let s1 = this.input.slice(0, this.cursor);\n let s2 = this.input.slice(this.cursor);\n this.input = `${s1}${c}${s2}`;\n this.cursor = s1.length + 1;\n this.complete(this.render);\n this.render();\n }\n\n delete() {\n if (this.cursor === 0) return this.bell();\n let s1 = this.input.slice(0, this.cursor - 1);\n let s2 = this.input.slice(this.cursor);\n this.input = `${s1}${s2}`;\n this.complete(this.render);\n this.cursor = this.cursor - 1;\n this.render();\n }\n\n deleteForward() {\n if (this.cursor * this.scale >= this.rendered.length) return this.bell();\n let s1 = this.input.slice(0, this.cursor);\n let s2 = this.input.slice(this.cursor + 1);\n this.input = `${s1}${s2}`;\n this.complete(this.render);\n this.render();\n }\n\n first() {\n this.moveSelect(0);\n this.render();\n }\n\n last() {\n this.moveSelect(this.suggestions.length - 1);\n this.render();\n }\n\n up() {\n if (this.select === 0) {\n this.moveSelect(this.suggestions.length - 1);\n } else {\n this.moveSelect(this.select - 1);\n }\n\n this.render();\n }\n\n down() {\n if (this.select === this.suggestions.length - 1) {\n this.moveSelect(0);\n } else {\n this.moveSelect(this.select + 1);\n }\n\n this.render();\n }\n\n next() {\n if (this.select === this.suggestions.length - 1) {\n this.moveSelect(0);\n } else this.moveSelect(this.select + 1);\n\n this.render();\n }\n\n nextPage() {\n this.moveSelect(Math.min(this.select + this.limit, this.suggestions.length - 1));\n this.render();\n }\n\n prevPage() {\n this.moveSelect(Math.max(this.select - this.limit, 0));\n this.render();\n }\n\n left() {\n if (this.cursor <= 0) return this.bell();\n this.cursor = this.cursor - 1;\n this.render();\n }\n\n right() {\n if (this.cursor * this.scale >= this.rendered.length) return this.bell();\n this.cursor = this.cursor + 1;\n this.render();\n }\n\n renderOption(v, hovered, isStart, isEnd) {\n let desc;\n let prefix = isStart ? figures.arrowUp : isEnd ? figures.arrowDown : ' ';\n let title = hovered ? color.cyan().underline(v.title) : v.title;\n prefix = (hovered ? color.cyan(figures.pointer) + ' ' : ' ') + prefix;\n\n if (v.description) {\n desc = ` - ${v.description}`;\n\n if (prefix.length + title.length + desc.length >= this.out.columns || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, {\n margin: 3,\n width: this.out.columns\n });\n }\n }\n\n return prefix + ' ' + title + color.gray(desc || '');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n let _entriesToDisplay = entriesToDisplay(this.select, this.choices.length, this.limit),\n startIndex = _entriesToDisplay.startIndex,\n endIndex = _entriesToDisplay.endIndex;\n\n this.outputText = [style.symbol(this.done, this.aborted, this.exited), color.bold(this.msg), style.delimiter(this.completing), this.done && this.suggestions[this.select] ? this.suggestions[this.select].title : this.rendered = this.transform.render(this.input)].join(' ');\n\n if (!this.done) {\n const suggestions = this.suggestions.slice(startIndex, endIndex).map((item, i) => this.renderOption(item, this.select === i + startIndex, i === 0 && startIndex > 0, i + startIndex === endIndex - 1 && endIndex < this.choices.length)).join('\\n');\n this.outputText += `\\n` + (suggestions || color.gray(this.fallback.title));\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n\n}\n\nmodule.exports = AutocompletePrompt;","'use strict';\n\nconst color = require('kleur');\n\nconst _require = require('sisteransi'),\n cursor = _require.cursor;\n\nconst MultiselectPrompt = require('./multiselect');\n\nconst _require2 = require('../util'),\n clear = _require2.clear,\n style = _require2.style,\n figures = _require2.figures;\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass AutocompleteMultiselectPrompt extends MultiselectPrompt {\n constructor(opts = {}) {\n opts.overrideRender = true;\n super(opts);\n this.inputValue = '';\n this.clear = clear('', this.out.columns);\n this.filteredOptions = this.value;\n this.render();\n }\n\n last() {\n this.cursor = this.filteredOptions.length - 1;\n this.render();\n }\n\n next() {\n this.cursor = (this.cursor + 1) % this.filteredOptions.length;\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.cursor = this.filteredOptions.length - 1;\n } else {\n this.cursor--;\n }\n\n this.render();\n }\n\n down() {\n if (this.cursor === this.filteredOptions.length - 1) {\n this.cursor = 0;\n } else {\n this.cursor++;\n }\n\n this.render();\n }\n\n left() {\n this.filteredOptions[this.cursor].selected = false;\n this.render();\n }\n\n right() {\n if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n this.filteredOptions[this.cursor].selected = true;\n this.render();\n }\n\n delete() {\n if (this.inputValue.length) {\n this.inputValue = this.inputValue.substr(0, this.inputValue.length - 1);\n this.updateFilteredOptions();\n }\n }\n\n updateFilteredOptions() {\n const currentHighlight = this.filteredOptions[this.cursor];\n this.filteredOptions = this.value.filter(v => {\n if (this.inputValue) {\n if (typeof v.title === 'string') {\n if (v.title.toLowerCase().includes(this.inputValue.toLowerCase())) {\n return true;\n }\n }\n\n if (typeof v.value === 'string') {\n if (v.value.toLowerCase().includes(this.inputValue.toLowerCase())) {\n return true;\n }\n }\n\n return false;\n }\n\n return true;\n });\n const newHighlightIndex = this.filteredOptions.findIndex(v => v === currentHighlight);\n this.cursor = newHighlightIndex < 0 ? 0 : newHighlightIndex;\n this.render();\n }\n\n handleSpaceToggle() {\n const v = this.filteredOptions[this.cursor];\n\n if (v.selected) {\n v.selected = false;\n this.render();\n } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n return this.bell();\n } else {\n v.selected = true;\n this.render();\n }\n }\n\n handleInputChange(c) {\n this.inputValue = this.inputValue + c;\n this.updateFilteredOptions();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.handleSpaceToggle();\n } else {\n this.handleInputChange(c);\n }\n }\n\n renderInstructions() {\n if (this.instructions === undefined || this.instructions) {\n if (typeof this.instructions === 'string') {\n return this.instructions;\n }\n\n return `\nInstructions:\n ${figures.arrowUp}/${figures.arrowDown}: Highlight option\n ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\n [a,b,c]/delete: Filter choices\n enter/return: Complete answer\n`;\n }\n\n return '';\n }\n\n renderCurrentInput() {\n return `\nFiltered results for: ${this.inputValue ? this.inputValue : color.gray('Enter something to filter')}\\n`;\n }\n\n renderOption(cursor, v, i) {\n let title;\n if (v.disabled) title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);else title = cursor === i ? color.cyan().underline(v.title) : v.title;\n return (v.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + title;\n }\n\n renderDoneOrInstructions() {\n if (this.done) {\n return this.value.filter(e => e.selected).map(v => v.title).join(', ');\n }\n\n const output = [color.gray(this.hint), this.renderInstructions(), this.renderCurrentInput()];\n\n if (this.filteredOptions.length && this.filteredOptions[this.cursor].disabled) {\n output.push(color.yellow(this.warn));\n }\n\n return output.join(' ');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n super.render(); // print prompt\n\n let prompt = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.renderDoneOrInstructions()].join(' ');\n\n if (this.showMinError) {\n prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n this.showMinError = false;\n }\n\n prompt += this.renderOptions(this.filteredOptions);\n this.out.write(this.clear + prompt);\n this.clear = clear(prompt, this.out.columns);\n }\n\n}\n\nmodule.exports = AutocompleteMultiselectPrompt;","\"use strict\";\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n style = _require.style,\n clear = _require.clear;\n\nconst _require2 = require('sisteransi'),\n erase = _require2.erase,\n cursor = _require2.cursor;\n/**\n * ConfirmPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial] Default value (true/false)\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.yes] The \"Yes\" label\n * @param {String} [opts.yesOption] The \"Yes\" option when choosing between yes/no\n * @param {String} [opts.no] The \"No\" label\n * @param {String} [opts.noOption] The \"No\" option when choosing between yes/no\n */\n\n\nclass ConfirmPrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.value = opts.initial;\n this.initialValue = !!opts.initial;\n this.yesMsg = opts.yes || 'yes';\n this.yesOption = opts.yesOption || '(Y/n)';\n this.noMsg = opts.no || 'no';\n this.noOption = opts.noOption || '(y/N)';\n this.render();\n }\n\n reset() {\n this.value = this.initialValue;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.value = this.value || false;\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n _(c, key) {\n if (c.toLowerCase() === 'y') {\n this.value = true;\n return this.submit();\n }\n\n if (c.toLowerCase() === 'n') {\n this.value = false;\n return this.submit();\n }\n\n return this.bell();\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), this.done ? this.value ? this.yesMsg : this.noMsg : color.gray(this.initialValue ? this.yesOption : this.noOption)].join(' ');\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n\n}\n\nmodule.exports = ConfirmPrompt;","'use strict';\n\nmodule.exports = {\n TextPrompt: require('./text'),\n SelectPrompt: require('./select'),\n TogglePrompt: require('./toggle'),\n DatePrompt: require('./date'),\n NumberPrompt: require('./number'),\n MultiselectPrompt: require('./multiselect'),\n AutocompletePrompt: require('./autocomplete'),\n AutocompleteMultiselectPrompt: require('./autocompleteMultiselect'),\n ConfirmPrompt: require('./confirm')\n};","'use strict';\n\nconst $ = exports;\n\nconst el = require('./elements');\n\nconst noop = v => v;\n\nfunction toPrompt(type, args, opts = {}) {\n return new Promise((res, rej) => {\n const p = new el[type](args);\n const onAbort = opts.onAbort || noop;\n const onSubmit = opts.onSubmit || noop;\n const onExit = opts.onExit || noop;\n p.on('state', args.onState || noop);\n p.on('submit', x => res(onSubmit(x)));\n p.on('exit', x => res(onExit(x)));\n p.on('abort', x => rej(onAbort(x)));\n });\n}\n/**\n * Text prompt\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.text = args => toPrompt('TextPrompt', args);\n/**\n * Password prompt with masked input\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.password = args => {\n args.style = 'password';\n return $.text(args);\n};\n/**\n * Prompt where input is invisible, like sudo\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.invisible = args => {\n args.style = 'invisible';\n return $.text(args);\n};\n/**\n * Number prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.number = args => toPrompt('NumberPrompt', args);\n/**\n * Date prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.date = args => toPrompt('DatePrompt', args);\n/**\n * Classic yes/no prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.confirm = args => toPrompt('ConfirmPrompt', args);\n/**\n * List prompt, split intput string by `seperator`\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {string} [args.separator] String separator\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input, in form of an `Array`\n */\n\n\n$.list = args => {\n const sep = args.separator || ',';\n return toPrompt('TextPrompt', args, {\n onSubmit: str => str.split(sep).map(s => s.trim())\n });\n};\n/**\n * Toggle/switch prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {string} [args.active=\"on\"] Text for `active` state\n * @param {string} [args.inactive=\"off\"] Text for `inactive` state\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.toggle = args => toPrompt('TogglePrompt', args);\n/**\n * Interactive select prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value }, ...]`\n * @param {number} [args.initial] Index of default value\n * @param {String} [args.hint] Hint to display\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.select = args => toPrompt('SelectPrompt', args);\n/**\n * Interactive multi-select / autocompleteMultiselect prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value, [selected] }, ...]`\n * @param {number} [args.max] Max select\n * @param {string} [args.hint] Hint to display user\n * @param {Number} [args.cursor=0] Cursor start position\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.multiselect = args => {\n args.choices = [].concat(args.choices || []);\n\n const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n\n return toPrompt('MultiselectPrompt', args, {\n onAbort: toSelected,\n onSubmit: toSelected\n });\n};\n\n$.autocompleteMultiselect = args => {\n args.choices = [].concat(args.choices || []);\n\n const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n\n return toPrompt('AutocompleteMultiselectPrompt', args, {\n onAbort: toSelected,\n onSubmit: toSelected\n });\n};\n\nconst byTitle = (input, choices) => Promise.resolve(choices.filter(item => item.title.slice(0, input.length).toLowerCase() === input.toLowerCase()));\n/**\n * Interactive auto-complete prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of auto-complete choices objects `[{ title, value }, ...]`\n * @param {Function} [args.suggest] Function to filter results based on user input. Defaults to sort by `title`\n * @param {number} [args.limit=10] Max number of results to show\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {String} [args.initial] Index of the default value\n * @param {boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {String} [args.fallback] Fallback message - defaults to initial value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.autocomplete = args => {\n args.suggest = args.suggest || byTitle;\n args.choices = [].concat(args.choices || []);\n return toPrompt('AutocompletePrompt', args);\n};","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst prompts = require('./prompts');\n\nconst passOn = ['suggest', 'format', 'onState', 'validate', 'onRender', 'type'];\n\nconst noop = () => {};\n/**\n * Prompt for a series of questions\n * @param {Array|Object} questions Single question object or Array of question objects\n * @param {Function} [onSubmit] Callback function called on prompt submit\n * @param {Function} [onCancel] Callback function called on cancel/abort\n * @returns {Object} Object with values from user input\n */\n\n\nfunction prompt() {\n return _prompt.apply(this, arguments);\n}\n\nfunction _prompt() {\n _prompt = _asyncToGenerator(function* (questions = [], {\n onSubmit = noop,\n onCancel = noop\n } = {}) {\n const answers = {};\n const override = prompt._override || {};\n questions = [].concat(questions);\n let answer, question, quit, name, type, lastPrompt;\n\n const getFormattedAnswer = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (question, answer, skipValidation = false) {\n if (!skipValidation && question.validate && question.validate(answer) !== true) {\n return;\n }\n\n return question.format ? yield question.format(answer, answers) : answer;\n });\n\n return function getFormattedAnswer(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }();\n\n var _iterator = _createForOfIteratorHelper(questions),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n question = _step.value;\n var _question = question;\n name = _question.name;\n type = _question.type;\n\n // evaluate type first and skip if type is a falsy value\n if (typeof type === 'function') {\n type = yield type(answer, _objectSpread({}, answers), question);\n question['type'] = type;\n }\n\n if (!type) continue; // if property is a function, invoke it unless it's a special function\n\n for (let key in question) {\n if (passOn.includes(key)) continue;\n let value = question[key];\n question[key] = typeof value === 'function' ? yield value(answer, _objectSpread({}, answers), lastPrompt) : value;\n }\n\n lastPrompt = question;\n\n if (typeof question.message !== 'string') {\n throw new Error('prompt message is required');\n } // update vars in case they changed\n\n\n var _question2 = question;\n name = _question2.name;\n type = _question2.type;\n\n if (prompts[type] === void 0) {\n throw new Error(`prompt type (${type}) is not defined`);\n }\n\n if (override[question.name] !== undefined) {\n answer = yield getFormattedAnswer(question, override[question.name]);\n\n if (answer !== undefined) {\n answers[name] = answer;\n continue;\n }\n }\n\n try {\n // Get the injected answer if there is one or prompt the user\n answer = prompt._injected ? getInjectedAnswer(prompt._injected, question.initial) : yield prompts[type](question);\n answers[name] = answer = yield getFormattedAnswer(question, answer, true);\n quit = yield onSubmit(question, answer, answers);\n } catch (err) {\n quit = !(yield onCancel(question, answers));\n }\n\n if (quit) return answers;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return answers;\n });\n return _prompt.apply(this, arguments);\n}\n\nfunction getInjectedAnswer(injected, deafultValue) {\n const answer = injected.shift();\n\n if (answer instanceof Error) {\n throw answer;\n }\n\n return answer === undefined ? deafultValue : answer;\n}\n\nfunction inject(answers) {\n prompt._injected = (prompt._injected || []).concat(answers);\n}\n\nfunction override(answers) {\n prompt._override = Object.assign({}, answers);\n}\n\nmodule.exports = Object.assign(prompt, {\n prompt,\n prompts,\n inject,\n override\n});","'use strict';\n\nmodule.exports = (key, isSelect) => {\n if (key.meta && key.name !== 'escape') return;\n \n if (key.ctrl) {\n if (key.name === 'a') return 'first';\n if (key.name === 'c') return 'abort';\n if (key.name === 'd') return 'abort';\n if (key.name === 'e') return 'last';\n if (key.name === 'g') return 'reset';\n }\n \n if (isSelect) {\n if (key.name === 'j') return 'down';\n if (key.name === 'k') return 'up';\n }\n\n if (key.name === 'return') return 'submit';\n if (key.name === 'enter') return 'submit'; // ctrl + J\n if (key.name === 'backspace') return 'delete';\n if (key.name === 'delete') return 'deleteForward';\n if (key.name === 'abort') return 'abort';\n if (key.name === 'escape') return 'exit';\n if (key.name === 'tab') return 'next';\n if (key.name === 'pagedown') return 'nextPage';\n if (key.name === 'pageup') return 'prevPage';\n // TODO create home() in prompt types (e.g. TextPrompt)\n if (key.name === 'home') return 'home';\n // TODO create end() in prompt types (e.g. TextPrompt)\n if (key.name === 'end') return 'end';\n\n if (key.name === 'up') return 'up';\n if (key.name === 'down') return 'down';\n if (key.name === 'right') return 'right';\n if (key.name === 'left') return 'left';\n\n return false;\n};\n","'use strict';\n\nmodule.exports = str => {\n const pattern = [\n '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PRZcf-ntqry=><~]))'\n ].join('|');\n\n const RGX = new RegExp(pattern, 'g');\n return typeof str === 'string' ? str.replace(RGX, '') : str;\n};\n","'use strict';\n\nconst strip = require('./strip');\nconst { erase, cursor } = require('sisteransi');\n\nconst width = str => [...strip(str)].length;\n\n/**\n * @param {string} prompt\n * @param {number} perLine\n */\nmodule.exports = function(prompt, perLine) {\n if (!perLine) return erase.line + cursor.to(0);\n\n let rows = 0;\n const lines = prompt.split(/\\r?\\n/);\n for (let line of lines) {\n rows += 1 + Math.floor(Math.max(width(line) - 1, 0) / perLine);\n }\n\n return erase.lines(rows);\n};\n","'use strict';\t\n\n const main = {\n arrowUp: '↑',\n arrowDown: '↓',\n arrowLeft: '←',\n arrowRight: '→',\n radioOn: '◉',\n radioOff: '◯',\n tick: '✔',\t\n cross: '✖',\t\n ellipsis: '…',\t\n pointerSmall: '›',\t\n line: '─',\t\n pointer: '❯'\t\n};\t\nconst win = {\n arrowUp: main.arrowUp,\n arrowDown: main.arrowDown,\n arrowLeft: main.arrowLeft,\n arrowRight: main.arrowRight,\n radioOn: '(*)',\n radioOff: '( )',\t\n tick: '√',\t\n cross: '×',\t\n ellipsis: '...',\t\n pointerSmall: '»',\t\n line: '─',\t\n pointer: '>'\t\n};\t\nconst figures = process.platform === 'win32' ? win : main;\t\n\n module.exports = figures;\n","'use strict';\n\nconst c = require('kleur');\nconst figures = require('./figures');\n\n// rendering user input.\nconst styles = Object.freeze({\n password: { scale: 1, render: input => '*'.repeat(input.length) },\n emoji: { scale: 2, render: input => '😃'.repeat(input.length) },\n invisible: { scale: 0, render: input => '' },\n default: { scale: 1, render: input => `${input}` }\n});\nconst render = type => styles[type] || styles.default;\n\n// icon to signalize a prompt.\nconst symbols = Object.freeze({\n aborted: c.red(figures.cross),\n done: c.green(figures.tick),\n exited: c.yellow(figures.cross),\n default: c.cyan('?')\n});\n\nconst symbol = (done, aborted, exited) =>\n aborted ? symbols.aborted : exited ? symbols.exited : done ? symbols.done : symbols.default;\n\n// between the question and the user's input.\nconst delimiter = completing =>\n c.gray(completing ? figures.ellipsis : figures.pointerSmall);\n\nconst item = (expandable, expanded) =>\n c.gray(expandable ? (expanded ? figures.pointerSmall : '+') : figures.line);\n\nmodule.exports = {\n styles,\n render,\n symbols,\n symbol,\n delimiter,\n item\n};\n","'use strict';\n\nconst strip = require('./strip');\n\n/**\n * @param {string} msg\n * @param {number} perLine\n */\nmodule.exports = function (msg, perLine) {\n let lines = String(strip(msg) || '').split(/\\r?\\n/);\n\n if (!perLine) return lines.length;\n return lines.map(l => Math.ceil(l.length / perLine))\n .reduce((a, b) => a + b);\n};\n","'use strict';\n\n/**\n * @param {string} msg The message to wrap\n * @param {object} opts\n * @param {number|string} [opts.margin] Left margin\n * @param {number} opts.width Maximum characters per line including the margin\n */\nmodule.exports = (msg, opts = {}) => {\n const tab = Number.isSafeInteger(parseInt(opts.margin))\n ? new Array(parseInt(opts.margin)).fill(' ').join('')\n : (opts.margin || '');\n\n const width = opts.width;\n\n return (msg || '').split(/\\r?\\n/g)\n .map(line => line\n .split(/\\s+/g)\n .reduce((arr, w) => {\n if (w.length + tab.length >= width || arr[arr.length - 1].length + w.length + 1 < width)\n arr[arr.length - 1] += ` ${w}`;\n else arr.push(`${tab}${w}`);\n return arr;\n }, [ tab ])\n .join('\\n'))\n .join('\\n');\n};\n","'use strict';\n\n/**\n * Determine what entries should be displayed on the screen, based on the\n * currently selected index and the maximum visible. Used in list-based\n * prompts like `select` and `multiselect`.\n *\n * @param {number} cursor the currently selected entry\n * @param {number} total the total entries available to display\n * @param {number} [maxVisible] the number of entries that can be displayed\n */\nmodule.exports = (cursor, total, maxVisible) => {\n maxVisible = maxVisible || total;\n\n let startIndex = Math.min(total- maxVisible, cursor - Math.floor(maxVisible / 2));\n if (startIndex < 0) startIndex = 0;\n\n let endIndex = Math.min(startIndex + maxVisible, total);\n\n return { startIndex, endIndex };\n};\n","'use strict';\n\nmodule.exports = {\n action: require('./action'),\n clear: require('./clear'),\n style: require('./style'),\n strip: require('./strip'),\n figures: require('./figures'),\n lines: require('./lines'),\n wrap: require('./wrap'),\n entriesToDisplay: require('./entriesToDisplay')\n};\n","'use strict';\n\nconst readline = require('readline');\nconst { action } = require('../util');\nconst EventEmitter = require('events');\nconst { beep, cursor } = require('sisteransi');\nconst color = require('kleur');\n\n/**\n * Base prompt skeleton\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass Prompt extends EventEmitter {\n constructor(opts={}) {\n super();\n\n this.firstRender = true;\n this.in = opts.stdin || process.stdin;\n this.out = opts.stdout || process.stdout;\n this.onRender = (opts.onRender || (() => void 0)).bind(this);\n const rl = readline.createInterface({ input:this.in, escapeCodeTimeout:50 });\n readline.emitKeypressEvents(this.in, rl);\n\n if (this.in.isTTY) this.in.setRawMode(true);\n const isSelect = [ 'SelectPrompt', 'MultiselectPrompt' ].indexOf(this.constructor.name) > -1;\n const keypress = (str, key) => {\n let a = action(key, isSelect);\n if (a === false) {\n this._ && this._(str, key);\n } else if (typeof this[a] === 'function') {\n this[a](key);\n } else {\n this.bell();\n }\n };\n\n this.close = () => {\n this.out.write(cursor.show);\n this.in.removeListener('keypress', keypress);\n if (this.in.isTTY) this.in.setRawMode(false);\n rl.close();\n this.emit(this.aborted ? 'abort' : this.exited ? 'exit' : 'submit', this.value);\n this.closed = true;\n };\n\n this.in.on('keypress', keypress);\n }\n\n fire() {\n this.emit('state', {\n value: this.value,\n aborted: !!this.aborted,\n exited: !!this.exited\n });\n }\n\n bell() {\n this.out.write(beep);\n }\n\n render() {\n this.onRender(color);\n if (this.firstRender) this.firstRender = false;\n }\n}\n\nmodule.exports = Prompt;\n","const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { erase, cursor } = require('sisteransi');\nconst { style, clear, lines, figures } = require('../util');\n\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.initial] Default value\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\nclass TextPrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.transform = style.render(opts.style);\n this.scale = this.transform.scale;\n this.msg = opts.message;\n this.initial = opts.initial || ``;\n this.validator = opts.validate || (() => true);\n this.value = ``;\n this.errorMsg = opts.error || `Please Enter A Valid Value`;\n this.cursor = Number(!!this.initial);\n this.cursorOffset = 0;\n this.clear = clear(``, this.out.columns);\n this.render();\n }\n\n set value(v) {\n if (!v && this.initial) {\n this.placeholder = true;\n this.rendered = color.gray(this.transform.render(this.initial));\n } else {\n this.placeholder = false;\n this.rendered = this.transform.render(v);\n }\n this._value = v;\n this.fire();\n }\n\n get value() {\n return this._value;\n }\n\n reset() {\n this.value = ``;\n this.cursor = Number(!!this.initial);\n this.cursorOffset = 0;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.value = this.value || this.initial;\n this.done = this.aborted = true;\n this.error = false;\n this.red = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n async validate() {\n let valid = await this.validator(this.value);\n if (typeof valid === `string`) {\n this.errorMsg = valid;\n valid = false;\n }\n this.error = !valid;\n }\n\n async submit() {\n this.value = this.value || this.initial;\n this.cursorOffset = 0;\n this.cursor = this.rendered.length;\n await this.validate();\n if (this.error) {\n this.red = true;\n this.fire();\n this.render();\n return;\n }\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n next() {\n if (!this.placeholder) return this.bell();\n this.value = this.initial;\n this.cursor = this.rendered.length;\n this.fire();\n this.render();\n }\n\n moveCursor(n) {\n if (this.placeholder) return;\n this.cursor = this.cursor+n;\n this.cursorOffset += n;\n }\n\n _(c, key) {\n let s1 = this.value.slice(0, this.cursor);\n let s2 = this.value.slice(this.cursor);\n this.value = `${s1}${c}${s2}`;\n this.red = false;\n this.cursor = this.placeholder ? 0 : s1.length+1;\n this.render();\n }\n\n delete() {\n if (this.isCursorAtStart()) return this.bell();\n let s1 = this.value.slice(0, this.cursor-1);\n let s2 = this.value.slice(this.cursor);\n this.value = `${s1}${s2}`;\n this.red = false;\n if (this.isCursorAtStart()) {\n this.cursorOffset = 0\n } else {\n this.cursorOffset++;\n this.moveCursor(-1);\n }\n this.render();\n }\n\n deleteForward() {\n if(this.cursor*this.scale >= this.rendered.length || this.placeholder) return this.bell();\n let s1 = this.value.slice(0, this.cursor);\n let s2 = this.value.slice(this.cursor+1);\n this.value = `${s1}${s2}`;\n this.red = false;\n if (this.isCursorAtEnd()) {\n this.cursorOffset = 0;\n } else {\n this.cursorOffset++;\n }\n this.render();\n }\n\n first() {\n this.cursor = 0;\n this.render();\n }\n\n last() {\n this.cursor = this.value.length;\n this.render();\n }\n\n left() {\n if (this.cursor <= 0 || this.placeholder) return this.bell();\n this.moveCursor(-1);\n this.render();\n }\n\n right() {\n if (this.cursor*this.scale >= this.rendered.length || this.placeholder) return this.bell();\n this.moveCursor(1);\n this.render();\n }\n\n isCursorAtStart() {\n return this.cursor === 0 || (this.placeholder && this.cursor === 1);\n }\n\n isCursorAtEnd() {\n return this.cursor === this.rendered.length || (this.placeholder && this.cursor === this.rendered.length + 1)\n }\n\n render() {\n if (this.closed) return;\n if (!this.firstRender) {\n if (this.outputError)\n this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n this.out.write(clear(this.outputText, this.out.columns));\n }\n super.render();\n this.outputError = '';\n\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(this.done),\n this.red ? color.red(this.rendered) : this.rendered\n ].join(` `);\n\n if (this.error) {\n this.outputError += this.errorMsg.split(`\\n`)\n .reduce((a, l, i) => a + `\\n${i ? ' ' : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore + cursor.move(this.cursorOffset, 0));\n }\n}\n\nmodule.exports = TextPrompt;","'use strict';\n\nconst color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear, figures, wrap, entriesToDisplay } = require('../util');\nconst { cursor } = require('sisteransi');\n\n/**\n * SelectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {Number} [opts.initial] Index of default value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n */\nclass SelectPrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.hint = opts.hint || '- Use arrow-keys. Return to submit.';\n this.warn = opts.warn || '- This option is disabled';\n this.cursor = opts.initial || 0;\n this.choices = opts.choices.map((ch, idx) => {\n if (typeof ch === 'string')\n ch = {title: ch, value: idx};\n return {\n title: ch && (ch.title || ch.value || ch),\n value: ch && (ch.value === undefined ? idx : ch.value),\n description: ch && ch.description,\n selected: ch && ch.selected,\n disabled: ch && ch.disabled\n };\n });\n this.optionsPerPage = opts.optionsPerPage || 10;\n this.value = (this.choices[this.cursor] || {}).value;\n this.clear = clear('', this.out.columns);\n this.render();\n }\n\n moveCursor(n) {\n this.cursor = n;\n this.value = this.choices[n].value;\n this.fire();\n }\n\n reset() {\n this.moveCursor(0);\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n if (!this.selection.disabled) {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n } else\n this.bell();\n }\n\n first() {\n this.moveCursor(0);\n this.render();\n }\n\n last() {\n this.moveCursor(this.choices.length - 1);\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.moveCursor(this.choices.length - 1);\n } else {\n this.moveCursor(this.cursor - 1);\n }\n this.render();\n }\n\n down() {\n if (this.cursor === this.choices.length - 1) {\n this.moveCursor(0);\n } else {\n this.moveCursor(this.cursor + 1);\n }\n this.render();\n }\n\n next() {\n this.moveCursor((this.cursor + 1) % this.choices.length);\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') return this.submit();\n }\n\n get selection() {\n return this.choices[this.cursor];\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n let { startIndex, endIndex } = entriesToDisplay(this.cursor, this.choices.length, this.optionsPerPage);\n\n // Print prompt\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(false),\n this.done ? this.selection.title : this.selection.disabled\n ? color.yellow(this.warn) : color.gray(this.hint)\n ].join(' ');\n\n // Print choices\n if (!this.done) {\n this.outputText += '\\n';\n for (let i = startIndex; i < endIndex; i++) {\n let title, prefix, desc = '', v = this.choices[i];\n\n // Determine whether to display \"more choices\" indicators\n if (i === startIndex && startIndex > 0) {\n prefix = figures.arrowUp;\n } else if (i === endIndex - 1 && endIndex < this.choices.length) {\n prefix = figures.arrowDown;\n } else {\n prefix = ' ';\n }\n\n if (v.disabled) {\n title = this.cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n prefix = (this.cursor === i ? color.bold().gray(figures.pointer) + ' ' : ' ') + prefix;\n } else {\n title = this.cursor === i ? color.cyan().underline(v.title) : v.title;\n prefix = (this.cursor === i ? color.cyan(figures.pointer) + ' ' : ' ') + prefix;\n if (v.description && this.cursor === i) {\n desc = ` - ${v.description}`;\n if (prefix.length + title.length + desc.length >= this.out.columns\n || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, { margin: 3, width: this.out.columns });\n }\n }\n }\n\n this.outputText += `${prefix} ${title}${color.gray(desc)}\\n`;\n }\n }\n\n this.out.write(this.outputText);\n }\n}\n\nmodule.exports = SelectPrompt;\n","const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear } = require('../util');\nconst { cursor, erase } = require('sisteransi');\n\n/**\n * TogglePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial=false] Default value\n * @param {String} [opts.active='no'] Active label\n * @param {String} [opts.inactive='off'] Inactive label\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass TogglePrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.value = !!opts.initial;\n this.active = opts.active || 'on';\n this.inactive = opts.inactive || 'off';\n this.initialValue = this.value;\n this.render();\n }\n\n reset() {\n this.value = this.initialValue;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n deactivate() {\n if (this.value === false) return this.bell();\n this.value = false;\n this.render();\n }\n\n activate() {\n if (this.value === true) return this.bell();\n this.value = true;\n this.render();\n }\n\n delete() {\n this.deactivate();\n }\n left() {\n this.deactivate();\n }\n right() {\n this.activate();\n }\n down() {\n this.deactivate();\n }\n up() {\n this.activate();\n }\n\n next() {\n this.value = !this.value;\n this.fire();\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.value = !this.value;\n } else if (c === '1') {\n this.value = true;\n } else if (c === '0') {\n this.value = false;\n } else return this.bell();\n this.render();\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(this.done),\n this.value ? this.inactive : color.cyan().underline(this.inactive),\n color.gray('/'),\n this.value ? color.cyan().underline(this.active) : this.active\n ].join(' ');\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n}\n\nmodule.exports = TogglePrompt;\n","'use strict';\n\nclass DatePart {\n constructor({token, date, parts, locales}) {\n this.token = token;\n this.date = date || new Date();\n this.parts = parts || [this];\n this.locales = locales || {};\n }\n\n up() {}\n\n down() {}\n\n next() {\n const currentIdx = this.parts.indexOf(this);\n return this.parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n }\n\n setTo(val) {}\n\n prev() {\n let parts = [].concat(this.parts).reverse();\n const currentIdx = parts.indexOf(this);\n return parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n }\n\n toString() {\n return String(this.date);\n }\n}\n\nmodule.exports = DatePart;\n\n\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Meridiem extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setHours((this.date.getHours() + 12) % 24);\n }\n\n down() {\n this.up();\n }\n\n toString() {\n let meridiem = this.date.getHours() > 12 ? 'pm' : 'am';\n return /\\A/.test(this.token) ? meridiem.toUpperCase() : meridiem;\n }\n}\n\nmodule.exports = Meridiem;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nconst pos = n => {\n n = n % 10;\n return n === 1 ? 'st'\n : n === 2 ? 'nd'\n : n === 3 ? 'rd'\n : 'th';\n}\n\nclass Day extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setDate(this.date.getDate() + 1);\n }\n\n down() {\n this.date.setDate(this.date.getDate() - 1);\n }\n\n setTo(val) {\n this.date.setDate(parseInt(val.substr(-2)));\n }\n\n toString() {\n let date = this.date.getDate();\n let day = this.date.getDay();\n return this.token === 'DD' ? String(date).padStart(2, '0')\n : this.token === 'Do' ? date + pos(date)\n : this.token === 'd' ? day + 1\n : this.token === 'ddd' ? this.locales.weekdaysShort[day]\n : this.token === 'dddd' ? this.locales.weekdays[day]\n : date;\n }\n}\n\nmodule.exports = Day;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Hours extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setHours(this.date.getHours() + 1);\n }\n\n down() {\n this.date.setHours(this.date.getHours() - 1);\n }\n\n setTo(val) {\n this.date.setHours(parseInt(val.substr(-2)));\n }\n\n toString() {\n let hours = this.date.getHours();\n if (/h/.test(this.token))\n hours = (hours % 12) || 12;\n return this.token.length > 1 ? String(hours).padStart(2, '0') : hours;\n }\n}\n\nmodule.exports = Hours;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Milliseconds extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setMilliseconds(this.date.getMilliseconds() + 1);\n }\n\n down() {\n this.date.setMilliseconds(this.date.getMilliseconds() - 1);\n }\n\n setTo(val) {\n this.date.setMilliseconds(parseInt(val.substr(-(this.token.length))));\n }\n\n toString() {\n return String(this.date.getMilliseconds()).padStart(4, '0')\n .substr(0, this.token.length);\n }\n}\n\nmodule.exports = Milliseconds;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Minutes extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setMinutes(this.date.getMinutes() + 1);\n }\n\n down() {\n this.date.setMinutes(this.date.getMinutes() - 1);\n }\n\n setTo(val) {\n this.date.setMinutes(parseInt(val.substr(-2)));\n }\n\n toString() {\n let m = this.date.getMinutes();\n return this.token.length > 1 ? String(m).padStart(2, '0') : m;\n }\n}\n\nmodule.exports = Minutes;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Month extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setMonth(this.date.getMonth() + 1);\n }\n\n down() {\n this.date.setMonth(this.date.getMonth() - 1);\n }\n\n setTo(val) {\n val = parseInt(val.substr(-2)) - 1;\n this.date.setMonth(val < 0 ? 0 : val);\n }\n\n toString() {\n let month = this.date.getMonth();\n let tl = this.token.length;\n return tl === 2 ? String(month + 1).padStart(2, '0')\n : tl === 3 ? this.locales.monthsShort[month]\n : tl === 4 ? this.locales.months[month]\n : String(month + 1);\n }\n}\n\nmodule.exports = Month;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Seconds extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setSeconds(this.date.getSeconds() + 1);\n }\n\n down() {\n this.date.setSeconds(this.date.getSeconds() - 1);\n }\n\n setTo(val) {\n this.date.setSeconds(parseInt(val.substr(-2)));\n }\n\n toString() {\n let s = this.date.getSeconds();\n return this.token.length > 1 ? String(s).padStart(2, '0') : s;\n }\n}\n\nmodule.exports = Seconds;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Year extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setFullYear(this.date.getFullYear() + 1);\n }\n\n down() {\n this.date.setFullYear(this.date.getFullYear() - 1);\n }\n\n setTo(val) {\n this.date.setFullYear(val.substr(-4));\n }\n\n toString() {\n let year = String(this.date.getFullYear()).padStart(4, '0');\n return this.token.length === 2 ? year.substr(-2) : year;\n }\n}\n\nmodule.exports = Year;\n","'use strict';\n\nmodule.exports = {\n DatePart: require('./datepart'),\n Meridiem: require('./meridiem'),\n Day: require('./day'),\n Hours: require('./hours'),\n Milliseconds: require('./milliseconds'),\n Minutes: require('./minutes'),\n Month: require('./month'),\n Seconds: require('./seconds'),\n Year: require('./year'),\n}\n","'use strict';\n\nconst color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear, figures } = require('../util');\nconst { erase, cursor } = require('sisteransi');\nconst { DatePart, Meridiem, Day, Hours, Milliseconds, Minutes, Month, Seconds, Year } = require('../dateparts');\n\nconst regex = /\\\\(.)|\"((?:\\\\[\"\\\\]|[^\"])+)\"|(D[Do]?|d{3,4}|d)|(M{1,4})|(YY(?:YY)?)|([aA])|([Hh]{1,2})|(m{1,2})|(s{1,2})|(S{1,4})|./g;\nconst regexGroups = {\n 1: ({token}) => token.replace(/\\\\(.)/g, '$1'),\n 2: (opts) => new Day(opts), // Day // TODO\n 3: (opts) => new Month(opts), // Month\n 4: (opts) => new Year(opts), // Year\n 5: (opts) => new Meridiem(opts), // AM/PM // TODO (special)\n 6: (opts) => new Hours(opts), // Hours\n 7: (opts) => new Minutes(opts), // Minutes\n 8: (opts) => new Seconds(opts), // Seconds\n 9: (opts) => new Milliseconds(opts), // Fractional seconds\n}\n\nconst dfltLocales = {\n months: 'January,February,March,April,May,June,July,August,September,October,November,December'.split(','),\n monthsShort: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n weekdays: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n weekdaysShort: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(',')\n}\n\n\n/**\n * DatePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Number} [opts.initial] Index of default value\n * @param {String} [opts.mask] The format mask\n * @param {object} [opts.locales] The date locales\n * @param {String} [opts.error] The error message shown on invalid value\n * @param {Function} [opts.validate] Function to validate the submitted value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass DatePrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.cursor = 0;\n this.typed = '';\n this.locales = Object.assign(dfltLocales, opts.locales);\n this._date = opts.initial || new Date();\n this.errorMsg = opts.error || 'Please Enter A Valid Value';\n this.validator = opts.validate || (() => true);\n this.mask = opts.mask || 'YYYY-MM-DD HH:mm:ss';\n this.clear = clear('', this.out.columns);\n this.render();\n }\n\n get value() {\n return this.date\n }\n\n get date() {\n return this._date;\n }\n\n set date(date) {\n if (date) this._date.setTime(date.getTime());\n }\n\n set mask(mask) {\n let result;\n this.parts = [];\n while(result = regex.exec(mask)) {\n let match = result.shift();\n let idx = result.findIndex(gr => gr != null);\n this.parts.push(idx in regexGroups\n ? regexGroups[idx]({ token: result[idx] || match, date: this.date, parts: this.parts, locales: this.locales })\n : result[idx] || match);\n }\n\n let parts = this.parts.reduce((arr, i) => {\n if (typeof i === 'string' && typeof arr[arr.length - 1] === 'string')\n arr[arr.length - 1] += i;\n else arr.push(i);\n return arr;\n }, []);\n\n this.parts.splice(0);\n this.parts.push(...parts);\n this.reset();\n }\n\n moveCursor(n) {\n this.typed = '';\n this.cursor = n;\n this.fire();\n }\n\n reset() {\n this.moveCursor(this.parts.findIndex(p => p instanceof DatePart));\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.error = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n async validate() {\n let valid = await this.validator(this.value);\n if (typeof valid === 'string') {\n this.errorMsg = valid;\n valid = false;\n }\n this.error = !valid;\n }\n\n async submit() {\n await this.validate();\n if (this.error) {\n this.color = 'red';\n this.fire();\n this.render();\n return;\n }\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n up() {\n this.typed = '';\n this.parts[this.cursor].up();\n this.render();\n }\n\n down() {\n this.typed = '';\n this.parts[this.cursor].down();\n this.render();\n }\n\n left() {\n let prev = this.parts[this.cursor].prev();\n if (prev == null) return this.bell();\n this.moveCursor(this.parts.indexOf(prev));\n this.render();\n }\n\n right() {\n let next = this.parts[this.cursor].next();\n if (next == null) return this.bell();\n this.moveCursor(this.parts.indexOf(next));\n this.render();\n }\n\n next() {\n let next = this.parts[this.cursor].next();\n this.moveCursor(next\n ? this.parts.indexOf(next)\n : this.parts.findIndex((part) => part instanceof DatePart));\n this.render();\n }\n\n _(c) {\n if (/\\d/.test(c)) {\n this.typed += c;\n this.parts[this.cursor].setTo(this.typed);\n this.render();\n }\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n // Print prompt\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(false),\n this.parts.reduce((arr, p, idx) => arr.concat(idx === this.cursor && !this.done ? color.cyan().underline(p.toString()) : p), [])\n .join('')\n ].join(' ');\n\n // Print error\n if (this.error) {\n this.outputText += this.errorMsg.split('\\n').reduce(\n (a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n}\n\nmodule.exports = DatePrompt;\n","const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { cursor, erase } = require('sisteransi');\nconst { style, figures, clear, lines } = require('../util');\n\nconst isNumber = /[0-9]/;\nconst isDef = any => any !== undefined;\nconst round = (number, precision) => {\n let factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n}\n\n/**\n * NumberPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {Number} [opts.initial] Default value\n * @param {Number} [opts.max=+Infinity] Max value\n * @param {Number} [opts.min=-Infinity] Min value\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\nclass NumberPrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.transform = style.render(opts.style);\n this.msg = opts.message;\n this.initial = isDef(opts.initial) ? opts.initial : '';\n this.float = !!opts.float;\n this.round = opts.round || 2;\n this.inc = opts.increment || 1;\n this.min = isDef(opts.min) ? opts.min : -Infinity;\n this.max = isDef(opts.max) ? opts.max : Infinity;\n this.errorMsg = opts.error || `Please Enter A Valid Value`;\n this.validator = opts.validate || (() => true);\n this.color = `cyan`;\n this.value = ``;\n this.typed = ``;\n this.lastHit = 0;\n this.render();\n }\n\n set value(v) {\n if (!v && v !== 0) {\n this.placeholder = true;\n this.rendered = color.gray(this.transform.render(`${this.initial}`));\n this._value = ``;\n } else {\n this.placeholder = false;\n this.rendered = this.transform.render(`${round(v, this.round)}`);\n this._value = round(v, this.round);\n }\n this.fire();\n }\n\n get value() {\n return this._value;\n }\n\n parse(x) {\n return this.float ? parseFloat(x) : parseInt(x);\n }\n\n valid(c) {\n return c === `-` || c === `.` && this.float || isNumber.test(c)\n }\n\n reset() {\n this.typed = ``;\n this.value = ``;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n let x = this.value;\n this.value = x !== `` ? x : this.initial;\n this.done = this.aborted = true;\n this.error = false;\n this.fire();\n this.render();\n this.out.write(`\\n`);\n this.close();\n }\n\n async validate() {\n let valid = await this.validator(this.value);\n if (typeof valid === `string`) {\n this.errorMsg = valid;\n valid = false;\n }\n this.error = !valid;\n }\n\n async submit() {\n await this.validate();\n if (this.error) {\n this.color = `red`;\n this.fire();\n this.render();\n return;\n }\n let x = this.value;\n this.value = x !== `` ? x : this.initial;\n this.done = true;\n this.aborted = false;\n this.error = false;\n this.fire();\n this.render();\n this.out.write(`\\n`);\n this.close();\n }\n\n up() {\n this.typed = ``;\n if(this.value === '') {\n this.value = this.min - this.inc;\n }\n if (this.value >= this.max) return this.bell();\n this.value += this.inc;\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n down() {\n this.typed = ``;\n if(this.value === '') {\n this.value = this.min + this.inc;\n }\n if (this.value <= this.min) return this.bell();\n this.value -= this.inc;\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n delete() {\n let val = this.value.toString();\n if (val.length === 0) return this.bell();\n this.value = this.parse((val = val.slice(0, -1))) || ``;\n if (this.value !== '' && this.value < this.min) {\n this.value = this.min;\n }\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n next() {\n this.value = this.initial;\n this.fire();\n this.render();\n }\n\n _(c, key) {\n if (!this.valid(c)) return this.bell();\n\n const now = Date.now();\n if (now - this.lastHit > 1000) this.typed = ``; // 1s elapsed\n this.typed += c;\n this.lastHit = now;\n this.color = `cyan`;\n\n if (c === `.`) return this.fire();\n\n this.value = Math.min(this.parse(this.typed), this.max);\n if (this.value > this.max) this.value = this.max;\n if (this.value < this.min) this.value = this.min;\n this.fire();\n this.render();\n }\n\n render() {\n if (this.closed) return;\n if (!this.firstRender) {\n if (this.outputError)\n this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n this.out.write(clear(this.outputText, this.out.columns));\n }\n super.render();\n this.outputError = '';\n\n // Print prompt\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(this.done),\n !this.done || (!this.done && !this.placeholder)\n ? color[this.color]().underline(this.rendered) : this.rendered\n ].join(` `);\n\n // Print error\n if (this.error) {\n this.outputError += this.errorMsg.split(`\\n`)\n .reduce((a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore);\n }\n}\n\nmodule.exports = NumberPrompt;\n","'use strict';\n\nconst color = require('kleur');\nconst { cursor } = require('sisteransi');\nconst Prompt = require('./prompt');\nconst { clear, figures, style, wrap, entriesToDisplay } = require('../util');\n\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass MultiselectPrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.cursor = opts.cursor || 0;\n this.scrollIndex = opts.cursor || 0;\n this.hint = opts.hint || '';\n this.warn = opts.warn || '- This option is disabled -';\n this.minSelected = opts.min;\n this.showMinError = false;\n this.maxChoices = opts.max;\n this.instructions = opts.instructions;\n this.optionsPerPage = opts.optionsPerPage || 10;\n this.value = opts.choices.map((ch, idx) => {\n if (typeof ch === 'string')\n ch = {title: ch, value: idx};\n return {\n title: ch && (ch.title || ch.value || ch),\n description: ch && ch.description,\n value: ch && (ch.value === undefined ? idx : ch.value),\n selected: ch && ch.selected,\n disabled: ch && ch.disabled\n };\n });\n this.clear = clear('', this.out.columns);\n if (!opts.overrideRender) {\n this.render();\n }\n }\n\n reset() {\n this.value.map(v => !v.selected);\n this.cursor = 0;\n this.fire();\n this.render();\n }\n\n selected() {\n return this.value.filter(v => v.selected);\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n const selected = this.value\n .filter(e => e.selected);\n if (this.minSelected && selected.length < this.minSelected) {\n this.showMinError = true;\n this.render();\n } else {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n }\n\n first() {\n this.cursor = 0;\n this.render();\n }\n\n last() {\n this.cursor = this.value.length - 1;\n this.render();\n }\n next() {\n this.cursor = (this.cursor + 1) % this.value.length;\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.cursor = this.value.length - 1;\n } else {\n this.cursor--;\n }\n this.render();\n }\n\n down() {\n if (this.cursor === this.value.length - 1) {\n this.cursor = 0;\n } else {\n this.cursor++;\n }\n this.render();\n }\n\n left() {\n this.value[this.cursor].selected = false;\n this.render();\n }\n\n right() {\n if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n this.value[this.cursor].selected = true;\n this.render();\n }\n\n handleSpaceToggle() {\n const v = this.value[this.cursor];\n\n if (v.selected) {\n v.selected = false;\n this.render();\n } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n return this.bell();\n } else {\n v.selected = true;\n this.render();\n }\n }\n\n toggleAll() {\n if (this.maxChoices !== undefined || this.value[this.cursor].disabled) {\n return this.bell();\n }\n\n const newSelected = !this.value[this.cursor].selected;\n this.value.filter(v => !v.disabled).forEach(v => v.selected = newSelected);\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.handleSpaceToggle();\n } else if (c === 'a') {\n this.toggleAll();\n } else {\n return this.bell();\n }\n }\n\n renderInstructions() {\n if (this.instructions === undefined || this.instructions) {\n if (typeof this.instructions === 'string') {\n return this.instructions;\n }\n return '\\nInstructions:\\n'\n + ` ${figures.arrowUp}/${figures.arrowDown}: Highlight option\\n`\n + ` ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\\n`\n + (this.maxChoices === undefined ? ` a: Toggle all\\n` : '')\n + ` enter/return: Complete answer`;\n }\n return '';\n }\n\n renderOption(cursor, v, i, arrowIndicator) {\n const prefix = (v.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + arrowIndicator + ' ';\n let title, desc;\n\n if (v.disabled) {\n title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n } else {\n title = cursor === i ? color.cyan().underline(v.title) : v.title;\n if (cursor === i && v.description) {\n desc = ` - ${v.description}`;\n if (prefix.length + title.length + desc.length >= this.out.columns\n || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, { margin: prefix.length, width: this.out.columns });\n }\n }\n }\n\n return prefix + title + color.gray(desc || '');\n }\n\n // shared with autocompleteMultiselect\n paginateOptions(options) {\n if (options.length === 0) {\n return color.red('No matches for this query.');\n }\n\n let { startIndex, endIndex } = entriesToDisplay(this.cursor, options.length, this.optionsPerPage);\n let prefix, styledOptions = [];\n\n for (let i = startIndex; i < endIndex; i++) {\n if (i === startIndex && startIndex > 0) {\n prefix = figures.arrowUp;\n } else if (i === endIndex - 1 && endIndex < options.length) {\n prefix = figures.arrowDown;\n } else {\n prefix = ' ';\n }\n styledOptions.push(this.renderOption(this.cursor, options[i], i, prefix));\n }\n\n return '\\n' + styledOptions.join('\\n');\n }\n\n // shared with autocomleteMultiselect\n renderOptions(options) {\n if (!this.done) {\n return this.paginateOptions(options);\n }\n return '';\n }\n\n renderDoneOrInstructions() {\n if (this.done) {\n return this.value\n .filter(e => e.selected)\n .map(v => v.title)\n .join(', ');\n }\n\n const output = [color.gray(this.hint), this.renderInstructions()];\n\n if (this.value[this.cursor].disabled) {\n output.push(color.yellow(this.warn));\n }\n return output.join(' ');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n super.render();\n\n // print prompt\n let prompt = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(false),\n this.renderDoneOrInstructions()\n ].join(' ');\n if (this.showMinError) {\n prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n this.showMinError = false;\n }\n prompt += this.renderOptions(this.value);\n\n this.out.write(this.clear + prompt);\n this.clear = clear(prompt, this.out.columns);\n }\n}\n\nmodule.exports = MultiselectPrompt;\n","'use strict';\n\nconst color = require('kleur');\nconst Prompt = require('./prompt');\nconst { erase, cursor } = require('sisteransi');\nconst { style, clear, figures, wrap, entriesToDisplay } = require('../util');\n\nconst getVal = (arr, i) => arr[i] && (arr[i].value || arr[i].title || arr[i]);\nconst getTitle = (arr, i) => arr[i] && (arr[i].title || arr[i].value || arr[i]);\nconst getIndex = (arr, valOrTitle) => {\n const index = arr.findIndex(el => el.value === valOrTitle || el.title === valOrTitle);\n return index > -1 ? index : undefined;\n};\n\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of auto-complete choices objects\n * @param {Function} [opts.suggest] Filter function. Defaults to sort by title\n * @param {Number} [opts.limit=10] Max number of results to show\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.fallback] Fallback message - initial to default value\n * @param {String} [opts.initial] Index of the default value\n * @param {Boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.noMatches] The no matches found label\n */\nclass AutocompletePrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.suggest = opts.suggest;\n this.choices = opts.choices;\n this.initial = typeof opts.initial === 'number'\n ? opts.initial\n : getIndex(opts.choices, opts.initial);\n this.select = this.initial || opts.cursor || 0;\n this.i18n = { noMatches: opts.noMatches || 'no matches found' };\n this.fallback = opts.fallback || this.initial;\n this.clearFirst = opts.clearFirst || false;\n this.suggestions = [];\n this.input = '';\n this.limit = opts.limit || 10;\n this.cursor = 0;\n this.transform = style.render(opts.style);\n this.scale = this.transform.scale;\n this.render = this.render.bind(this);\n this.complete = this.complete.bind(this);\n this.clear = clear('', this.out.columns);\n this.complete(this.render);\n this.render();\n }\n\n set fallback(fb) {\n this._fb = Number.isSafeInteger(parseInt(fb)) ? parseInt(fb) : fb;\n }\n\n get fallback() {\n let choice;\n if (typeof this._fb === 'number')\n choice = this.choices[this._fb];\n else if (typeof this._fb === 'string')\n choice = { title: this._fb };\n return choice || this._fb || { title: this.i18n.noMatches };\n }\n\n moveSelect(i) {\n this.select = i;\n if (this.suggestions.length > 0)\n this.value = getVal(this.suggestions, i);\n else this.value = this.fallback.value;\n this.fire();\n }\n\n async complete(cb) {\n const p = (this.completing = this.suggest(this.input, this.choices));\n const suggestions = await p;\n\n if (this.completing !== p) return;\n this.suggestions = suggestions\n .map((s, i, arr) => ({ title: getTitle(arr, i), value: getVal(arr, i), description: s.description }));\n this.completing = false;\n const l = Math.max(suggestions.length - 1, 0);\n this.moveSelect(Math.min(l, this.select));\n\n cb && cb();\n }\n\n reset() {\n this.input = '';\n this.complete(() => {\n this.moveSelect(this.initial !== void 0 ? this.initial : 0);\n this.render();\n });\n this.render();\n }\n\n exit() {\n if (this.clearFirst && this.input.length > 0) {\n this.reset();\n } else {\n this.done = this.exited = true; \n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n }\n\n abort() {\n this.done = this.aborted = true;\n this.exited = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.done = true;\n this.aborted = this.exited = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n _(c, key) {\n let s1 = this.input.slice(0, this.cursor);\n let s2 = this.input.slice(this.cursor);\n this.input = `${s1}${c}${s2}`;\n this.cursor = s1.length+1;\n this.complete(this.render);\n this.render();\n }\n\n delete() {\n if (this.cursor === 0) return this.bell();\n let s1 = this.input.slice(0, this.cursor-1);\n let s2 = this.input.slice(this.cursor);\n this.input = `${s1}${s2}`;\n this.complete(this.render);\n this.cursor = this.cursor-1;\n this.render();\n }\n\n deleteForward() {\n if(this.cursor*this.scale >= this.rendered.length) return this.bell();\n let s1 = this.input.slice(0, this.cursor);\n let s2 = this.input.slice(this.cursor+1);\n this.input = `${s1}${s2}`;\n this.complete(this.render);\n this.render();\n }\n\n first() {\n this.moveSelect(0);\n this.render();\n }\n\n last() {\n this.moveSelect(this.suggestions.length - 1);\n this.render();\n }\n\n up() {\n if (this.select === 0) {\n this.moveSelect(this.suggestions.length - 1);\n } else {\n this.moveSelect(this.select - 1);\n }\n this.render();\n }\n\n down() {\n if (this.select === this.suggestions.length - 1) {\n this.moveSelect(0);\n } else {\n this.moveSelect(this.select + 1);\n }\n this.render();\n }\n\n next() {\n if (this.select === this.suggestions.length - 1) {\n this.moveSelect(0);\n } else this.moveSelect(this.select + 1);\n this.render();\n }\n\n nextPage() {\n this.moveSelect(Math.min(this.select + this.limit, this.suggestions.length - 1));\n this.render();\n }\n\n prevPage() {\n this.moveSelect(Math.max(this.select - this.limit, 0));\n this.render();\n }\n\n left() {\n if (this.cursor <= 0) return this.bell();\n this.cursor = this.cursor-1;\n this.render();\n }\n\n right() {\n if (this.cursor*this.scale >= this.rendered.length) return this.bell();\n this.cursor = this.cursor+1;\n this.render();\n }\n\n renderOption(v, hovered, isStart, isEnd) {\n let desc;\n let prefix = isStart ? figures.arrowUp : isEnd ? figures.arrowDown : ' ';\n let title = hovered ? color.cyan().underline(v.title) : v.title;\n prefix = (hovered ? color.cyan(figures.pointer) + ' ' : ' ') + prefix;\n if (v.description) {\n desc = ` - ${v.description}`;\n if (prefix.length + title.length + desc.length >= this.out.columns\n || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, { margin: 3, width: this.out.columns })\n }\n }\n return prefix + ' ' + title + color.gray(desc || '');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n let { startIndex, endIndex } = entriesToDisplay(this.select, this.choices.length, this.limit);\n\n this.outputText = [\n style.symbol(this.done, this.aborted, this.exited),\n color.bold(this.msg),\n style.delimiter(this.completing),\n this.done && this.suggestions[this.select]\n ? this.suggestions[this.select].title\n : this.rendered = this.transform.render(this.input)\n ].join(' ');\n\n if (!this.done) {\n const suggestions = this.suggestions\n .slice(startIndex, endIndex)\n .map((item, i) => this.renderOption(item,\n this.select === i + startIndex,\n i === 0 && startIndex > 0,\n i + startIndex === endIndex - 1 && endIndex < this.choices.length))\n .join('\\n');\n this.outputText += `\\n` + (suggestions || color.gray(this.fallback.title));\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n}\n\nmodule.exports = AutocompletePrompt;\n","'use strict';\n\nconst color = require('kleur');\nconst { cursor } = require('sisteransi');\nconst MultiselectPrompt = require('./multiselect');\nconst { clear, style, figures } = require('../util');\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass AutocompleteMultiselectPrompt extends MultiselectPrompt {\n constructor(opts={}) {\n opts.overrideRender = true;\n super(opts);\n this.inputValue = '';\n this.clear = clear('', this.out.columns);\n this.filteredOptions = this.value;\n this.render();\n }\n\n last() {\n this.cursor = this.filteredOptions.length - 1;\n this.render();\n }\n next() {\n this.cursor = (this.cursor + 1) % this.filteredOptions.length;\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.cursor = this.filteredOptions.length - 1;\n } else {\n this.cursor--;\n }\n this.render();\n }\n\n down() {\n if (this.cursor === this.filteredOptions.length - 1) {\n this.cursor = 0;\n } else {\n this.cursor++;\n }\n this.render();\n }\n\n left() {\n this.filteredOptions[this.cursor].selected = false;\n this.render();\n }\n\n right() {\n if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n this.filteredOptions[this.cursor].selected = true;\n this.render();\n }\n\n delete() {\n if (this.inputValue.length) {\n this.inputValue = this.inputValue.substr(0, this.inputValue.length - 1);\n this.updateFilteredOptions();\n }\n }\n\n updateFilteredOptions() {\n const currentHighlight = this.filteredOptions[this.cursor];\n this.filteredOptions = this.value\n .filter(v => {\n if (this.inputValue) {\n if (typeof v.title === 'string') {\n if (v.title.toLowerCase().includes(this.inputValue.toLowerCase())) {\n return true;\n }\n }\n if (typeof v.value === 'string') {\n if (v.value.toLowerCase().includes(this.inputValue.toLowerCase())) {\n return true;\n }\n }\n return false;\n }\n return true;\n });\n const newHighlightIndex = this.filteredOptions.findIndex(v => v === currentHighlight)\n this.cursor = newHighlightIndex < 0 ? 0 : newHighlightIndex;\n this.render();\n }\n\n handleSpaceToggle() {\n const v = this.filteredOptions[this.cursor];\n\n if (v.selected) {\n v.selected = false;\n this.render();\n } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n return this.bell();\n } else {\n v.selected = true;\n this.render();\n }\n }\n\n handleInputChange(c) {\n this.inputValue = this.inputValue + c;\n this.updateFilteredOptions();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.handleSpaceToggle();\n } else {\n this.handleInputChange(c);\n }\n }\n\n renderInstructions() {\n if (this.instructions === undefined || this.instructions) {\n if (typeof this.instructions === 'string') {\n return this.instructions;\n }\n return `\nInstructions:\n ${figures.arrowUp}/${figures.arrowDown}: Highlight option\n ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\n [a,b,c]/delete: Filter choices\n enter/return: Complete answer\n`;\n }\n return '';\n }\n\n renderCurrentInput() {\n return `\nFiltered results for: ${this.inputValue ? this.inputValue : color.gray('Enter something to filter')}\\n`;\n }\n\n renderOption(cursor, v, i) {\n let title;\n if (v.disabled) title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n else title = cursor === i ? color.cyan().underline(v.title) : v.title;\n return (v.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + title\n }\n\n renderDoneOrInstructions() {\n if (this.done) {\n return this.value\n .filter(e => e.selected)\n .map(v => v.title)\n .join(', ');\n }\n\n const output = [color.gray(this.hint), this.renderInstructions(), this.renderCurrentInput()];\n\n if (this.filteredOptions.length && this.filteredOptions[this.cursor].disabled) {\n output.push(color.yellow(this.warn));\n }\n return output.join(' ');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n super.render();\n\n // print prompt\n\n let prompt = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(false),\n this.renderDoneOrInstructions()\n ].join(' ');\n\n if (this.showMinError) {\n prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n this.showMinError = false;\n }\n prompt += this.renderOptions(this.filteredOptions);\n\n this.out.write(this.clear + prompt);\n this.clear = clear(prompt, this.out.columns);\n }\n}\n\nmodule.exports = AutocompleteMultiselectPrompt;\n","const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear } = require('../util');\nconst { erase, cursor } = require('sisteransi');\n\n/**\n * ConfirmPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial] Default value (true/false)\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.yes] The \"Yes\" label\n * @param {String} [opts.yesOption] The \"Yes\" option when choosing between yes/no\n * @param {String} [opts.no] The \"No\" label\n * @param {String} [opts.noOption] The \"No\" option when choosing between yes/no\n */\nclass ConfirmPrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.value = opts.initial;\n this.initialValue = !!opts.initial;\n this.yesMsg = opts.yes || 'yes';\n this.yesOption = opts.yesOption || '(Y/n)';\n this.noMsg = opts.no || 'no';\n this.noOption = opts.noOption || '(y/N)';\n this.render();\n }\n\n reset() {\n this.value = this.initialValue;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.value = this.value || false;\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n _(c, key) {\n if (c.toLowerCase() === 'y') {\n this.value = true;\n return this.submit();\n }\n if (c.toLowerCase() === 'n') {\n this.value = false;\n return this.submit();\n }\n return this.bell();\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(this.done),\n this.done ? (this.value ? this.yesMsg : this.noMsg)\n : color.gray(this.initialValue ? this.yesOption : this.noOption)\n ].join(' ');\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n}\n\nmodule.exports = ConfirmPrompt;\n","'use strict';\n\nmodule.exports = {\n TextPrompt: require('./text'),\n SelectPrompt: require('./select'),\n TogglePrompt: require('./toggle'),\n DatePrompt: require('./date'),\n NumberPrompt: require('./number'),\n MultiselectPrompt: require('./multiselect'),\n AutocompletePrompt: require('./autocomplete'),\n AutocompleteMultiselectPrompt: require('./autocompleteMultiselect'),\n ConfirmPrompt: require('./confirm')\n};\n","'use strict';\nconst $ = exports;\nconst el = require('./elements');\nconst noop = v => v;\n\nfunction toPrompt(type, args, opts={}) {\n return new Promise((res, rej) => {\n const p = new el[type](args);\n const onAbort = opts.onAbort || noop;\n const onSubmit = opts.onSubmit || noop;\n const onExit = opts.onExit || noop;\n p.on('state', args.onState || noop);\n p.on('submit', x => res(onSubmit(x)));\n p.on('exit', x => res(onExit(x)));\n p.on('abort', x => rej(onAbort(x)));\n });\n}\n\n/**\n * Text prompt\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.text = args => toPrompt('TextPrompt', args);\n\n/**\n * Password prompt with masked input\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.password = args => {\n args.style = 'password';\n return $.text(args);\n};\n\n/**\n * Prompt where input is invisible, like sudo\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.invisible = args => {\n args.style = 'invisible';\n return $.text(args);\n};\n\n/**\n * Number prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.number = args => toPrompt('NumberPrompt', args);\n\n/**\n * Date prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.date = args => toPrompt('DatePrompt', args);\n\n/**\n * Classic yes/no prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.confirm = args => toPrompt('ConfirmPrompt', args);\n\n/**\n * List prompt, split intput string by `seperator`\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {string} [args.separator] String separator\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input, in form of an `Array`\n */\n$.list = args => {\n const sep = args.separator || ',';\n return toPrompt('TextPrompt', args, {\n onSubmit: str => str.split(sep).map(s => s.trim())\n });\n};\n\n/**\n * Toggle/switch prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {string} [args.active=\"on\"] Text for `active` state\n * @param {string} [args.inactive=\"off\"] Text for `inactive` state\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.toggle = args => toPrompt('TogglePrompt', args);\n\n/**\n * Interactive select prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value }, ...]`\n * @param {number} [args.initial] Index of default value\n * @param {String} [args.hint] Hint to display\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.select = args => toPrompt('SelectPrompt', args);\n\n/**\n * Interactive multi-select / autocompleteMultiselect prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value, [selected] }, ...]`\n * @param {number} [args.max] Max select\n * @param {string} [args.hint] Hint to display user\n * @param {Number} [args.cursor=0] Cursor start position\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.multiselect = args => {\n args.choices = [].concat(args.choices || []);\n const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n return toPrompt('MultiselectPrompt', args, {\n onAbort: toSelected,\n onSubmit: toSelected\n });\n};\n\n$.autocompleteMultiselect = args => {\n args.choices = [].concat(args.choices || []);\n const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n return toPrompt('AutocompleteMultiselectPrompt', args, {\n onAbort: toSelected,\n onSubmit: toSelected\n });\n};\n\nconst byTitle = (input, choices) => Promise.resolve(\n choices.filter(item => item.title.slice(0, input.length).toLowerCase() === input.toLowerCase())\n);\n\n/**\n * Interactive auto-complete prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of auto-complete choices objects `[{ title, value }, ...]`\n * @param {Function} [args.suggest] Function to filter results based on user input. Defaults to sort by `title`\n * @param {number} [args.limit=10] Max number of results to show\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {String} [args.initial] Index of the default value\n * @param {boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {String} [args.fallback] Fallback message - defaults to initial value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.autocomplete = args => {\n args.suggest = args.suggest || byTitle;\n args.choices = [].concat(args.choices || []);\n return toPrompt('AutocompletePrompt', args);\n};\n","'use strict';\n\nconst prompts = require('./prompts');\n\nconst passOn = ['suggest', 'format', 'onState', 'validate', 'onRender', 'type'];\nconst noop = () => {};\n\n/**\n * Prompt for a series of questions\n * @param {Array|Object} questions Single question object or Array of question objects\n * @param {Function} [onSubmit] Callback function called on prompt submit\n * @param {Function} [onCancel] Callback function called on cancel/abort\n * @returns {Object} Object with values from user input\n */\nasync function prompt(questions=[], { onSubmit=noop, onCancel=noop }={}) {\n const answers = {};\n const override = prompt._override || {};\n questions = [].concat(questions);\n let answer, question, quit, name, type, lastPrompt;\n\n const getFormattedAnswer = async (question, answer, skipValidation = false) => {\n if (!skipValidation && question.validate && question.validate(answer) !== true) {\n return;\n }\n return question.format ? await question.format(answer, answers) : answer\n };\n\n for (question of questions) {\n ({ name, type } = question);\n\n // evaluate type first and skip if type is a falsy value\n if (typeof type === 'function') {\n type = await type(answer, { ...answers }, question)\n question['type'] = type\n }\n if (!type) continue;\n\n // if property is a function, invoke it unless it's a special function\n for (let key in question) {\n if (passOn.includes(key)) continue;\n let value = question[key];\n question[key] = typeof value === 'function' ? await value(answer, { ...answers }, lastPrompt) : value;\n }\n\n lastPrompt = question;\n\n if (typeof question.message !== 'string') {\n throw new Error('prompt message is required');\n }\n\n // update vars in case they changed\n ({ name, type } = question);\n\n if (prompts[type] === void 0) {\n throw new Error(`prompt type (${type}) is not defined`);\n }\n\n if (override[question.name] !== undefined) {\n answer = await getFormattedAnswer(question, override[question.name]);\n if (answer !== undefined) {\n answers[name] = answer;\n continue;\n }\n }\n\n try {\n // Get the injected answer if there is one or prompt the user\n answer = prompt._injected ? getInjectedAnswer(prompt._injected, question.initial) : await prompts[type](question);\n answers[name] = answer = await getFormattedAnswer(question, answer, true);\n quit = await onSubmit(question, answer, answers);\n } catch (err) {\n quit = !(await onCancel(question, answers));\n }\n\n if (quit) return answers;\n }\n\n return answers;\n}\n\nfunction getInjectedAnswer(injected, deafultValue) {\n const answer = injected.shift();\n if (answer instanceof Error) {\n throw answer;\n }\n\n return (answer === undefined) ? deafultValue : answer;\n}\n\nfunction inject(answers) {\n prompt._injected = (prompt._injected || []).concat(answers);\n}\n\nfunction override(answers) {\n prompt._override = Object.assign({}, answers);\n}\n\nmodule.exports = Object.assign(prompt, { prompt, prompts, inject, override });\n","function isNodeLT(tar) {\n tar = (Array.isArray(tar) ? tar : tar.split('.')).map(Number);\n let i=0, src=process.versions.node.split('.').map(Number);\n for (; i < tar.length; i++) {\n if (src[i] > tar[i]) return false;\n if (tar[i] > src[i]) return true;\n }\n return false;\n}\n\nmodule.exports =\n isNodeLT('8.6.0')\n ? require('./dist/index.js')\n : require('./lib/index.js');\n","const ESC = '\\u001B[';\nconst OSC = '\\u001B]';\nconst BEL = '\\u0007';\nconst SEP = ';';\nconst isTerminalApp = process.env.TERM_PROGRAM === 'Apple_Terminal';\n\nconst ansiEscapes = {};\n\nansiEscapes.cursorTo = (x, y) => {\n\tif (typeof x !== 'number') {\n\t\tthrow new TypeError('The `x` argument is required');\n\t}\n\n\tif (typeof y !== 'number') {\n\t\treturn ESC + (x + 1) + 'G';\n\t}\n\n\treturn ESC + (y + 1) + ';' + (x + 1) + 'H';\n};\n\nansiEscapes.cursorMove = (x, y) => {\n\tif (typeof x !== 'number') {\n\t\tthrow new TypeError('The `x` argument is required');\n\t}\n\n\tlet returnValue = '';\n\n\tif (x < 0) {\n\t\treturnValue += ESC + (-x) + 'D';\n\t} else if (x > 0) {\n\t\treturnValue += ESC + x + 'C';\n\t}\n\n\tif (y < 0) {\n\t\treturnValue += ESC + (-y) + 'A';\n\t} else if (y > 0) {\n\t\treturnValue += ESC + y + 'B';\n\t}\n\n\treturn returnValue;\n};\n\nansiEscapes.cursorUp = (count = 1) => ESC + count + 'A';\nansiEscapes.cursorDown = (count = 1) => ESC + count + 'B';\nansiEscapes.cursorForward = (count = 1) => ESC + count + 'C';\nansiEscapes.cursorBackward = (count = 1) => ESC + count + 'D';\n\nansiEscapes.cursorLeft = ESC + 'G';\nansiEscapes.cursorSavePosition = isTerminalApp ? '\\u001B7' : ESC + 's';\nansiEscapes.cursorRestorePosition = isTerminalApp ? '\\u001B8' : ESC + 'u';\nansiEscapes.cursorGetPosition = ESC + '6n';\nansiEscapes.cursorNextLine = ESC + 'E';\nansiEscapes.cursorPrevLine = ESC + 'F';\nansiEscapes.cursorHide = ESC + '?25l';\nansiEscapes.cursorShow = ESC + '?25h';\n\nansiEscapes.eraseLines = count => {\n\tlet clear = '';\n\n\tfor (let i = 0; i < count; i++) {\n\t\tclear += ansiEscapes.eraseLine + (i < count - 1 ? ansiEscapes.cursorUp() : '');\n\t}\n\n\tif (count) {\n\t\tclear += ansiEscapes.cursorLeft;\n\t}\n\n\treturn clear;\n};\n\nansiEscapes.eraseEndLine = ESC + 'K';\nansiEscapes.eraseStartLine = ESC + '1K';\nansiEscapes.eraseLine = ESC + '2K';\nansiEscapes.eraseDown = ESC + 'J';\nansiEscapes.eraseUp = ESC + '1J';\nansiEscapes.eraseScreen = ESC + '2J';\nansiEscapes.scrollUp = ESC + 'S';\nansiEscapes.scrollDown = ESC + 'T';\n\nansiEscapes.clearScreen = '\\u001Bc';\n\nansiEscapes.clearTerminal = process.platform === 'win32' ?\n\t`${ansiEscapes.eraseScreen}${ESC}0f` :\n\t// 1. Erases the screen (Only done in case `2` is not supported)\n\t// 2. Erases the whole screen including scrollback buffer\n\t// 3. Moves cursor to the top-left position\n\t// More info: https://www.real-world-systems.com/docs/ANSIcode.html\n\t`${ansiEscapes.eraseScreen}${ESC}3J${ESC}H`;\n\nansiEscapes.beep = BEL;\n\nansiEscapes.link = (text, url) => {\n\treturn [\n\t\tOSC,\n\t\t'8',\n\t\tSEP,\n\t\tSEP,\n\t\turl,\n\t\tBEL,\n\t\ttext,\n\t\tOSC,\n\t\t'8',\n\t\tSEP,\n\t\tSEP,\n\t\tBEL\n\t].join('');\n};\n\nansiEscapes.image = (buffer, options = {}) => {\n\tlet returnValue = `${OSC}1337;File=inline=1`;\n\n\tif (options.width) {\n\t\treturnValue += `;width=${options.width}`;\n\t}\n\n\tif (options.height) {\n\t\treturnValue += `;height=${options.height}`;\n\t}\n\n\tif (options.preserveAspectRatio === false) {\n\t\treturnValue += ';preserveAspectRatio=0';\n\t}\n\n\treturn returnValue + ':' + buffer.toString('base64') + BEL;\n};\n\nansiEscapes.iTerm = {\n\tsetCwd: (cwd = process.cwd()) => `${OSC}50;CurrentDir=${cwd}${BEL}`,\n\n\tannotation: (message, options = {}) => {\n\t\tlet returnValue = `${OSC}1337;`;\n\n\t\tconst hasX = typeof options.x !== 'undefined';\n\t\tconst hasY = typeof options.y !== 'undefined';\n\t\tif ((hasX || hasY) && !(hasX && hasY && typeof options.length !== 'undefined')) {\n\t\t\tthrow new Error('`x`, `y` and `length` must be defined when `x` or `y` is defined');\n\t\t}\n\n\t\tmessage = message.replace(/\\|/g, '');\n\n\t\treturnValue += options.isHidden ? 'AddHiddenAnnotation=' : 'AddAnnotation=';\n\n\t\tif (options.length > 0) {\n\t\t\treturnValue +=\n\t\t\t\t\t(hasX ?\n\t\t\t\t\t\t[message, options.length, options.x, options.y] :\n\t\t\t\t\t\t[options.length, message]).join('|');\n\t\t} else {\n\t\t\treturnValue += message;\n\t\t}\n\n\t\treturn returnValue + BEL;\n\t}\n};\n\nexport default ansiEscapes;\n","'use strict';\nconst supportsColor = require('supports-color');\nconst hasFlag = require('has-flag');\n\nfunction parseVersion(versionString) {\n\tif (/^\\d{3,4}$/.test(versionString)) {\n\t\t// Env var doesn't always use dots. example: 4601 => 46.1.0\n\t\tconst m = /(\\d{1,2})(\\d{2})/.exec(versionString);\n\t\treturn {\n\t\t\tmajor: 0,\n\t\t\tminor: parseInt(m[1], 10),\n\t\t\tpatch: parseInt(m[2], 10)\n\t\t};\n\t}\n\n\tconst versions = (versionString || '').split('.').map(n => parseInt(n, 10));\n\treturn {\n\t\tmajor: versions[0],\n\t\tminor: versions[1],\n\t\tpatch: versions[2]\n\t};\n}\n\nfunction supportsHyperlink(stream) {\n\tconst {env} = process;\n\n\tif ('FORCE_HYPERLINK' in env) {\n\t\treturn !(env.FORCE_HYPERLINK.length > 0 && parseInt(env.FORCE_HYPERLINK, 10) === 0);\n\t}\n\n\tif (hasFlag('no-hyperlink') || hasFlag('no-hyperlinks') || hasFlag('hyperlink=false') || hasFlag('hyperlink=never')) {\n\t\treturn false;\n\t}\n\n\tif (hasFlag('hyperlink=true') || hasFlag('hyperlink=always')) {\n\t\treturn true;\n\t}\n\n\t// Netlify does not run a TTY, it does not need `supportsColor` check\n\tif ('NETLIFY' in env) {\n\t\treturn true;\n\t}\n\n\t// If they specify no colors, they probably don't want hyperlinks.\n\tif (!supportsColor.supportsColor(stream)) {\n\t\treturn false;\n\t}\n\n\tif (stream && !stream.isTTY) {\n\t\treturn false;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\treturn false;\n\t}\n\n\tif ('CI' in env) {\n\t\treturn false;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn false;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseVersion(env.TERM_PROGRAM_VERSION);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\tif (version.major === 3) {\n\t\t\t\t\treturn version.minor >= 1;\n\t\t\t\t}\n\n\t\t\t\treturn version.major > 3;\n\t\t\tcase 'WezTerm':\n\t\t\t\treturn version.major >= 20200620;\n\t\t\tcase 'vscode':\n\t\t\t\treturn version.major > 1 || version.major === 1 && version.minor >= 72;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif ('VTE_VERSION' in env) {\n\t\t// 0.50.0 was supposed to support hyperlinks, but throws a segfault\n\t\tif (env.VTE_VERSION === '0.50.0') {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst version = parseVersion(env.VTE_VERSION);\n\t\treturn version.major > 0 || version.minor >= 50;\n\t}\n\n\treturn false;\n}\n\nmodule.exports = {\n\tsupportsHyperlink,\n\tstdout: supportsHyperlink(process.stdout),\n\tstderr: supportsHyperlink(process.stderr)\n};\n","import ansiEscapes from 'ansi-escapes';\nimport supportsHyperlinks from 'supports-hyperlinks';\n\nexport default function terminalLink(text, url, {target = 'stdout', ...options} = {}) {\n\tif (!supportsHyperlinks[target]) {\n\t\t// If the fallback has been explicitly disabled, don't modify the text itself.\n\t\tif (options.fallback === false) {\n\t\t\treturn text;\n\t\t}\n\n\t\treturn typeof options.fallback === 'function' ? options.fallback(text, url) : `${text} (\\u200B${url}\\u200B)`;\n\t}\n\n\treturn ansiEscapes.link(text, url);\n}\n\nterminalLink.isSupported = supportsHyperlinks.stdout;\nterminalLink.stderr = (text, url, options = {}) => terminalLink(text, url, {target: 'stderr', ...options});\nterminalLink.stderr.isSupported = supportsHyperlinks.stderr;\n","#!/usr/bin/env node\r\n\r\nimport { createRequire } from 'node:module';\r\nimport process from 'node:process';\r\nimport { Command } from 'commander';\r\nimport { registerInitCommand } from './commands/init.js';\r\nimport { registerAddCommand } from './commands/add.js';\r\nimport { registerListCommand } from './commands/list.js';\r\nimport { registerInfoCommand } from './commands/info.js';\r\nimport { registerUpdateCommand } from './commands/update.js';\r\nimport { registerRestoreCommand } from './commands/restore.js';\r\nimport { registerDoctorCommand } from './commands/doctor.js';\r\nimport { registerTelemetryCommand } from './commands/telemetry.js';\r\nimport { setVerbose, setQuiet } from './utils/logger.js';\r\n\r\n// Node version check\r\nconst major = parseInt(process.versions.node.split('.')[0], 10);\r\nif (major < 18) {\r\n process.stderr.write(\r\n '[KK001] kiro-kit requires Node.js >= 18. ' +\r\n `Current version: ${process.version}. ` +\r\n 'Please upgrade Node.js.\\n',\r\n );\r\n process.exit(1);\r\n}\r\n\r\nconst require = createRequire(import.meta.url);\r\nconst pkg = require('../package.json') as { version: string };\r\n\r\nconst program = new Command();\r\n\r\nprogram\r\n .name('kiro-kit')\r\n .description('CLI tool for bootstrapping engineer-grade Kiro IDE workspaces.')\r\n .version(pkg.version, '-v, --version');\r\n\r\n// Global flags\r\nprogram.option('--verbose', 'Enable verbose output');\r\nprogram.option('--quiet', 'Suppress non-essential output');\r\nprogram.option('--no-color', 'Disable colored output');\r\n\r\n// Wire all commands\r\nregisterInitCommand(program);\r\nregisterAddCommand(program);\r\nregisterListCommand(program);\r\nregisterInfoCommand(program);\r\nregisterUpdateCommand(program);\r\nregisterRestoreCommand(program);\r\nregisterDoctorCommand(program);\r\nregisterTelemetryCommand(program);\r\n\r\n// Apply global flags before command execution\r\nprogram.hook('preAction', (thisCommand) => {\r\n const opts = thisCommand.opts();\r\n if (opts['verbose']) setVerbose(true);\r\n if (opts['quiet']) setQuiet(true);\r\n});\r\n\r\nprogram.parse(process.argv);\r\n","/**\r\n * init.ts — The `kiro-kit init` command.\r\n *\r\n * Orchestrates the full init flow by bridging Core modules with the UI layer.\r\n * This file is the ONLY place that imports from both src/core/* and src/ui/*.\r\n *\r\n * Flow:\r\n * 1. Detect capability + build UI objects (theme, screens, prompt, runner)\r\n * 2. Render welcome screen\r\n * 3. Resolve preset selection (flag or interactive prompt)\r\n * 4. Confirm file count (unless --yes)\r\n * 5. Run TaskRunner with 5 tasks: Load → Plan → Write → Powers → Metadata\r\n * 6. Render summary screen\r\n * 7. On error: render error box + exit 1\r\n * 8. On SIGINT: cleanup + exit 130\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport process from 'node:process';\r\nimport crypto from 'node:crypto';\r\n\r\n// Core modules (business logic — unchanged)\r\nimport { load, loadAll, listAvailable } from '../core/PresetLoader.js';\r\nimport {\r\n resolve as resolveConflict,\r\n type ConflictMode,\r\n type SessionState,\r\n} from '../core/ConflictResolver.js';\r\nimport { backup } from '../core/BackupManager.js';\r\nimport * as TrackingStore from '../core/TrackingStore.js';\r\nimport * as MetadataWriter from '../core/MetadataWriter.js';\r\nimport * as StatuslineSelector from '../core/StatuslineSelector.js';\r\nimport { mergeMCP, type MCPConfig } from '../core/merge/mergeMCP.js';\r\nimport { mergeSettings, type SettingsConfig } from '../core/merge/mergeSettings.js';\r\nimport { showDiff } from '../prompts/DiffViewer.js';\r\nimport { atomicWrite } from '../utils/fs-safe.js';\r\nimport { logger } from '../utils/logger.js';\r\nimport { safePathInside } from '../utils/paths.js';\r\n\r\n// Powers integration modules\r\nimport { loadPowers, mergePowers, filterByTier } from '../core/PowersLoader.js';\r\nimport {\r\n getMCPConfig,\r\n mergeMCPConfig,\r\n writeMCPConfig,\r\n type MCPServerEntry,\r\n type MCPPresetConfig,\r\n} from '../core/MCPConfigurator.js';\r\nimport { generateSetupGuide, writeSetupGuide } from '../core/SetupGuideGenerator.js';\r\nimport {\r\n collectEnvVars,\r\n generateEnvTemplate,\r\n readExistingEnv,\r\n writeEnvTemplate,\r\n} from '../core/EnvTemplateGenerator.js';\r\nimport {\r\n promptPowersTier,\r\n displayPowersRecommendations,\r\n} from '../prompts/PowersPrompter.js';\r\n\r\n// UI layer — presentation only, no core imports inside these modules\r\nimport { detectCapability } from '../ui/capability.js';\r\nimport { createTheme } from '../ui/theme.js';\r\nimport { createInitScreens } from '../ui/screens/InitScreens.js';\r\nimport { createPrompt } from '../ui/ThemedPrompt.js';\r\nimport { createTaskRunner, type TaskDef } from '../ui/TaskRunner.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\ninterface InitOptions {\r\n yes?: boolean;\r\n preset?: string[];\r\n force?: boolean;\r\n skipExisting?: boolean;\r\n color?: boolean;\r\n powers?: string;\r\n quiet?: boolean;\r\n}\r\n\r\n/**\r\n * Shared mutable context threaded through all TaskRunner tasks.\r\n * Tasks read from and write to this object to communicate results.\r\n */\r\ninterface InitTaskContext {\r\n workspaceRoot: string;\r\n selectedNames: string[];\r\n opts: InitOptions;\r\n timestamp: string;\r\n mode: ConflictMode;\r\n sessionState: SessionState;\r\n allTrackedFiles: TrackingStore.TrackedFile[];\r\n filesWritten: number;\r\n filesSkipped: number;\r\n setupGuideWritten: boolean;\r\n envExampleWritten: boolean;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction collectPreset(value: string, previous: string[]): string[] {\r\n return [...previous, value];\r\n}\r\n\r\nfunction sha256(data: Buffer): string {\r\n return crypto.createHash('sha256').update(data).digest('hex');\r\n}\r\n\r\nfunction generateTimestamp(): string {\r\n const now = new Date();\r\n const y = now.getFullYear();\r\n const mo = String(now.getMonth() + 1).padStart(2, '0');\r\n const d = String(now.getDate()).padStart(2, '0');\r\n const h = String(now.getHours()).padStart(2, '0');\r\n const mi = String(now.getMinutes()).padStart(2, '0');\r\n const s = String(now.getSeconds()).padStart(2, '0');\r\n const ms = String(now.getMilliseconds()).padStart(3, '0');\r\n return `${y}${mo}${d}-${h}${mi}${s}-${ms}`;\r\n}\r\n\r\nfunction getKitVersion(): string {\r\n try {\r\n const pkgPath = new URL('../package.json', import.meta.url);\r\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')) as { version: string };\r\n return pkg.version;\r\n } catch {\r\n return '0.1.0';\r\n }\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Task definitions\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Build the ordered list of TaskDef objects for the init flow.\r\n * Each task receives the shared InitTaskContext and mutates it.\r\n *\r\n * @param presets - Pre-loaded preset objects (from loadAll)\r\n * @param opts - CLI options\r\n * @param promptFn - ThemedPrompt instance for interactive conflict resolution\r\n */\r\nfunction buildInitTasks(\r\n presets: ReturnType<typeof loadAll>,\r\n opts: InitOptions,\r\n promptFn: Awaited<ReturnType<typeof createPrompt>>,\r\n): TaskDef<InitTaskContext>[] {\r\n return [\r\n // ------------------------------------------------------------------\r\n // Task 1: Loading presets\r\n // ------------------------------------------------------------------\r\n {\r\n title: 'Loading presets',\r\n run: async (ctx, helpers) => {\r\n helpers.setOutput(`${presets.length} preset(s) selected`);\r\n // Presets are already loaded — this task just confirms them in context\r\n helpers.setTitle(`Loading presets (${presets.length} selected)`);\r\n },\r\n },\r\n\r\n // ------------------------------------------------------------------\r\n // Task 2: Planning operations\r\n // ------------------------------------------------------------------\r\n {\r\n title: 'Planning operations',\r\n run: async (ctx, helpers) => {\r\n let totalFiles = 0;\r\n for (const preset of presets) {\r\n totalFiles += preset.manifest.files.length;\r\n }\r\n helpers.setTitle(`Planning operations (${totalFiles} files)`);\r\n helpers.setOutput(`${totalFiles} files to process across ${presets.length} preset(s)`);\r\n },\r\n },\r\n\r\n // ------------------------------------------------------------------\r\n // Task 3: Writing workspace files\r\n // ------------------------------------------------------------------\r\n {\r\n title: 'Writing workspace files',\r\n run: async (ctx, helpers) => {\r\n for (const preset of presets) {\r\n const { manifest, dir: presetDir } = preset;\r\n\r\n // Separate files by type for special handling\r\n const regularFiles = manifest.files.filter(\r\n (f) => !['mcp', 'settings', 'statusline'].includes(f.type),\r\n );\r\n const mcpFiles = manifest.files.filter((f) => f.type === 'mcp');\r\n const settingsFiles = manifest.files.filter((f) => f.type === 'settings');\r\n const statuslineFiles = manifest.files.filter((f) => f.type === 'statusline');\r\n\r\n // Process regular files\r\n for (const fileEntry of regularFiles) {\r\n const sourcePath = path.join(presetDir, fileEntry.source);\r\n const targetPath = path.resolve(ctx.workspaceRoot, fileEntry.target);\r\n\r\n // Safety check — skip paths that escape the workspace root\r\n if (!safePathInside(ctx.workspaceRoot, fileEntry.target)) {\r\n logger.warn(`Skipping unsafe path: ${fileEntry.target}`);\r\n ctx.filesSkipped++;\r\n continue;\r\n }\r\n\r\n if (!fs.existsSync(sourcePath)) {\r\n logger.debug(`Source file missing: ${sourcePath}`);\r\n continue;\r\n }\r\n\r\n const sourceContent = fs.readFileSync(sourcePath);\r\n\r\n const action = await resolveConflict({\r\n target: targetPath,\r\n sourceContent,\r\n mode: ctx.mode,\r\n sessionState: ctx.sessionState,\r\n prompt: (target) => promptFn.conflictChoice(path.relative(ctx.workspaceRoot, target)),\r\n showDiff: (t, s) => showDiff(t, s),\r\n });\r\n\r\n switch (action) {\r\n case 'WRITE_NEW':\r\n fs.mkdirSync(path.dirname(targetPath), { recursive: true });\r\n atomicWrite(targetPath, sourceContent.toString('utf-8'));\r\n if (fileEntry.executable && process.platform !== 'win32') {\r\n try { fs.chmodSync(targetPath, 0o755); } catch { /* non-critical */ }\r\n }\r\n ctx.filesWritten++;\r\n break;\r\n case 'OVERWRITE_WITH_BACKUP':\r\n backup(ctx.workspaceRoot, targetPath, ctx.timestamp);\r\n atomicWrite(targetPath, sourceContent.toString('utf-8'));\r\n if (fileEntry.executable && process.platform !== 'win32') {\r\n try { fs.chmodSync(targetPath, 0o755); } catch { /* non-critical */ }\r\n }\r\n ctx.filesWritten++;\r\n break;\r\n case 'SKIP':\r\n ctx.filesSkipped++;\r\n break;\r\n case 'NO_OP':\r\n // File already identical — no action needed\r\n break;\r\n }\r\n\r\n // Track the file for the tracking store (skip SKIP actions)\r\n if (action !== 'SKIP') {\r\n ctx.allTrackedFiles.push({\r\n target: fileEntry.target,\r\n sourcePreset: manifest.name,\r\n contentHash: sha256(sourceContent),\r\n installedAt: new Date().toISOString(),\r\n });\r\n }\r\n }\r\n\r\n // Process statusline files via StatuslineSelector\r\n if (statuslineFiles.length > 0) {\r\n const installed = StatuslineSelector.install(presetDir, ctx.workspaceRoot);\r\n ctx.filesWritten += installed.length;\r\n for (const f of installed) {\r\n ctx.allTrackedFiles.push({\r\n target: f,\r\n sourcePreset: manifest.name,\r\n contentHash: '',\r\n installedAt: new Date().toISOString(),\r\n });\r\n }\r\n }\r\n\r\n // Process MCP merge\r\n if (mcpFiles.length > 0 && manifest.mcpServers) {\r\n const mcpPath = path.join(ctx.workspaceRoot, '.kiro/settings/mcp.json');\r\n let existingMcp: MCPConfig | null = null;\r\n if (fs.existsSync(mcpPath)) {\r\n try {\r\n existingMcp = JSON.parse(fs.readFileSync(mcpPath, 'utf-8')) as MCPConfig;\r\n } catch {\r\n existingMcp = null;\r\n }\r\n }\r\n const merged = mergeMCP(existingMcp, manifest.mcpServers, manifest.name);\r\n fs.mkdirSync(path.dirname(mcpPath), { recursive: true });\r\n atomicWrite(mcpPath, JSON.stringify(merged, null, 2) + '\\n');\r\n ctx.filesWritten++;\r\n }\r\n\r\n // Process settings merge\r\n if (settingsFiles.length > 0) {\r\n const settingsPath = path.join(ctx.workspaceRoot, '.kiro/settings.json');\r\n let existingSettings: SettingsConfig | null = null;\r\n if (fs.existsSync(settingsPath)) {\r\n try {\r\n existingSettings = JSON.parse(\r\n fs.readFileSync(settingsPath, 'utf-8'),\r\n ) as SettingsConfig;\r\n } catch {\r\n existingSettings = null;\r\n }\r\n }\r\n\r\n const presetSettingsPath = path.join(presetDir, 'settings.json');\r\n if (fs.existsSync(presetSettingsPath)) {\r\n const presetSettings = JSON.parse(\r\n fs.readFileSync(presetSettingsPath, 'utf-8'),\r\n ) as SettingsConfig;\r\n\r\n const resolvedSettings = StatuslineSelector.resolveSettingsCommand(\r\n presetSettings as Record<string, unknown>,\r\n ) as SettingsConfig;\r\n\r\n const merged = mergeSettings(existingSettings, resolvedSettings);\r\n fs.mkdirSync(path.dirname(settingsPath), { recursive: true });\r\n atomicWrite(settingsPath, JSON.stringify(merged, null, 2) + '\\n');\r\n ctx.filesWritten++;\r\n }\r\n }\r\n\r\n // Copy .mcp.json.example if present in preset\r\n const mcpExampleSource = path.join(presetDir, '.mcp.json.example');\r\n if (fs.existsSync(mcpExampleSource)) {\r\n const mcpExampleTarget = path.join(ctx.workspaceRoot, '.kiro/.mcp.json.example');\r\n if (!fs.existsSync(mcpExampleTarget)) {\r\n fs.mkdirSync(path.dirname(mcpExampleTarget), { recursive: true });\r\n fs.copyFileSync(mcpExampleSource, mcpExampleTarget);\r\n }\r\n }\r\n }\r\n\r\n helpers.setTitle(\r\n `Writing workspace files — ${ctx.filesWritten} written, ${ctx.filesSkipped} skipped`,\r\n );\r\n },\r\n },\r\n\r\n // ------------------------------------------------------------------\r\n // Task 4: Configuring Powers\r\n // ------------------------------------------------------------------\r\n {\r\n title: 'Configuring Powers',\r\n skip: (ctx) => {\r\n if (ctx.opts.powers === 'none') return 'powers disabled';\r\n return false;\r\n },\r\n run: async (ctx, helpers) => {\r\n try {\r\n const allPowerEntries = presets.map((p) => {\r\n const result = loadPowers(p.dir);\r\n if (!result.ok) {\r\n logger.warn(`Powers: ${result.error}`);\r\n }\r\n return result.powers;\r\n });\r\n\r\n const mergedPowers = mergePowers(allPowerEntries);\r\n\r\n if (mergedPowers.length === 0) {\r\n helpers.setOutput('No powers found in selected presets');\r\n return;\r\n }\r\n\r\n helpers.setOutput(`Found ${mergedPowers.length} power(s)`);\r\n\r\n // Powers tier selection\r\n const promptResult = await promptPowersTier(mergedPowers, {\r\n powersFlag: ctx.opts.powers,\r\n yes: ctx.opts.yes,\r\n });\r\n\r\n const filteredPowers =\r\n promptResult.selectedTiers.length > 0\r\n ? filterByTier(mergedPowers, promptResult.selectedTiers)\r\n : [];\r\n\r\n // MCP auto-configuration\r\n if (promptResult.confirmMCP) {\r\n try {\r\n const presetMCPConfigs = presets.map((p) => getMCPConfig(p.manifest.name));\r\n let combinedMCP: Record<string, unknown> | null = null;\r\n const mcpJsonPath = path.join(ctx.workspaceRoot, '.mcp.json');\r\n\r\n if (fs.existsSync(mcpJsonPath)) {\r\n try {\r\n combinedMCP = JSON.parse(\r\n fs.readFileSync(mcpJsonPath, 'utf-8'),\r\n ) as Record<string, unknown>;\r\n } catch {\r\n logger.warn('Existing .mcp.json is invalid JSON, will create fresh.');\r\n combinedMCP = null;\r\n }\r\n }\r\n\r\n for (const mcpConfig of presetMCPConfigs) {\r\n combinedMCP = mergeMCPConfig(combinedMCP, mcpConfig);\r\n }\r\n\r\n // Confirm MCP write (skip if --yes)\r\n let confirmWrite = true;\r\n if (!ctx.opts.yes) {\r\n confirmWrite = await promptFn.confirm(\r\n 'Configure MCP servers in .mcp.json?',\r\n true,\r\n );\r\n }\r\n\r\n if (confirmWrite && combinedMCP) {\r\n writeMCPConfig(ctx.workspaceRoot, combinedMCP);\r\n if (!ctx.opts.quiet) {\r\n helpers.setOutput('MCP servers configured in .mcp.json');\r\n }\r\n }\r\n } catch (err) {\r\n logger.warn(\r\n `MCP configuration failed: ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n }\r\n }\r\n\r\n // Display Powers recommendations\r\n displayPowersRecommendations(filteredPowers, ctx.opts.quiet ?? false);\r\n\r\n // Generate setup guide\r\n try {\r\n const mcpServersForGuide = presets.reduce(\r\n (acc, p) => ({ ...acc, ...getMCPConfig(p.manifest.name).servers }),\r\n {} as Record<string, MCPServerEntry>,\r\n );\r\n\r\n const guideContent = generateSetupGuide({\r\n powers: filteredPowers,\r\n presetNames: ctx.selectedNames,\r\n mcpServers: mcpServersForGuide,\r\n });\r\n writeSetupGuide(ctx.workspaceRoot, guideContent);\r\n ctx.setupGuideWritten = true;\r\n if (!ctx.opts.quiet) {\r\n helpers.setOutput('Setup guide written to .kiro/POWERS-SETUP.md');\r\n }\r\n } catch (err) {\r\n logger.warn(\r\n `Setup guide generation failed: ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n }\r\n\r\n // Generate/update .env.example\r\n try {\r\n const mcpConfigForEnv = presets.reduce(\r\n (acc, p) => {\r\n const cfg = getMCPConfig(p.manifest.name);\r\n return { servers: { ...acc.servers, ...cfg.servers } };\r\n },\r\n { servers: {} } as MCPPresetConfig,\r\n );\r\n\r\n const envVars = collectEnvVars(mcpConfigForEnv, filteredPowers);\r\n if (envVars.length > 0) {\r\n const existingEnv = readExistingEnv(ctx.workspaceRoot);\r\n const envContent = generateEnvTemplate(existingEnv, envVars);\r\n if (envContent.trim().length > 0) {\r\n writeEnvTemplate(ctx.workspaceRoot, envContent);\r\n ctx.envExampleWritten = true;\r\n if (!ctx.opts.quiet) {\r\n helpers.setOutput('Environment template updated in .env.example');\r\n }\r\n }\r\n }\r\n } catch (err) {\r\n logger.warn(\r\n `Env template generation failed: ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n }\r\n } catch (err) {\r\n // Powers integration is non-blocking — log warning and continue\r\n logger.warn(\r\n `Powers integration failed: ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n }\r\n },\r\n },\r\n\r\n // ------------------------------------------------------------------\r\n // Task 5: Writing tracking metadata\r\n // ------------------------------------------------------------------\r\n {\r\n title: 'Writing tracking metadata',\r\n run: async (ctx, helpers) => {\r\n const kitVersion = getKitVersion();\r\n const presetMetas = presets.map((p) => ({\r\n name: p.manifest.name,\r\n version: p.manifest.version,\r\n }));\r\n\r\n // Write metadata.json\r\n const existingMeta = MetadataWriter.read(ctx.workspaceRoot);\r\n const metadata = existingMeta\r\n ? MetadataWriter.mergePresets(existingMeta, presetMetas)\r\n : MetadataWriter.compose({\r\n kitVersion,\r\n repository: 'https://github.com/ihatesea69/kiro-kit.git',\r\n presets: presetMetas,\r\n });\r\n MetadataWriter.write(ctx.workspaceRoot, metadata);\r\n\r\n // Write tracking store\r\n let trackingData =\r\n TrackingStore.read(ctx.workspaceRoot) ??\r\n TrackingStore.createInitial(kitVersion);\r\n\r\n for (const preset of presets) {\r\n const presetFiles = ctx.allTrackedFiles.filter(\r\n (f) => f.sourcePreset === preset.manifest.name,\r\n );\r\n const trackedPreset: TrackingStore.TrackedPreset = {\r\n name: preset.manifest.name,\r\n version: preset.manifest.version,\r\n installedAt: new Date().toISOString(),\r\n files: presetFiles,\r\n };\r\n trackingData = TrackingStore.upsertPreset(trackingData, trackedPreset);\r\n }\r\n\r\n trackingData.kitVersion = kitVersion;\r\n TrackingStore.write(ctx.workspaceRoot, trackingData);\r\n\r\n helpers.setOutput(`Metadata written (kit v${kitVersion})`);\r\n },\r\n },\r\n ];\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Core runInit function\r\n// ---------------------------------------------------------------------------\r\n\r\nasync function runInit(opts: InitOptions): Promise<void> {\r\n const workspaceRoot = process.cwd();\r\n const cliVersion = getKitVersion();\r\n\r\n // -------------------------------------------------------------------------\r\n // 1. Build UI objects\r\n // -------------------------------------------------------------------------\r\n const capability = detectCapability(process.env, process.argv, process.stdout);\r\n const theme = await createTheme(capability);\r\n const screens = await createInitScreens({ capability, theme, cliVersion });\r\n const prompt = await createPrompt(capability, theme);\r\n\r\n // -------------------------------------------------------------------------\r\n // 2. Render welcome screen\r\n // -------------------------------------------------------------------------\r\n screens.welcome({\r\n cliVersion,\r\n tipText:\r\n 'You can rerun init anytime — existing files are backed up before overwrite.',\r\n commands: [\r\n { name: 'init', description: 'bootstrap a workspace with presets' },\r\n { name: 'add', description: 'add a preset to an existing workspace' },\r\n { name: 'list', description: 'list installed presets' },\r\n { name: 'doctor', description: 'verify workspace integrity' },\r\n ],\r\n });\r\n\r\n // -------------------------------------------------------------------------\r\n // 3. Resolve preset selection\r\n // -------------------------------------------------------------------------\r\n const available = listAvailable();\r\n let selectedNames: string[];\r\n\r\n if (opts.preset && opts.preset.length > 0) {\r\n // Validate preset names from --preset flag\r\n for (const name of opts.preset) {\r\n if (!available.includes(name)) {\r\n logger.error(`Preset \"${name}\" not found. Available: ${available.join(', ')}`);\r\n process.exit(1);\r\n }\r\n }\r\n selectedNames = opts.preset;\r\n } else {\r\n // Interactive multi-pick via ThemedPrompt\r\n const items = available.map((name) => {\r\n try {\r\n const preset = load(name);\r\n return {\r\n name,\r\n description: preset.manifest.description ?? '',\r\n };\r\n } catch {\r\n return { name, description: '' };\r\n }\r\n });\r\n\r\n selectedNames = await prompt.multiPickPresets(items);\r\n }\r\n\r\n // Empty selection → exit cleanly\r\n if (selectedNames.length === 0) {\r\n logger.info('No presets selected. Exiting.');\r\n process.exit(0);\r\n }\r\n\r\n // -------------------------------------------------------------------------\r\n // 4. Load presets + confirm file count\r\n // -------------------------------------------------------------------------\r\n const presets = loadAll(selectedNames);\r\n const totalFiles = presets.reduce((n, p) => n + p.manifest.files.length, 0);\r\n\r\n if (!opts.yes) {\r\n const confirmed = await prompt.confirm(\r\n `About to write ${totalFiles} files into .kiro/ and workspace. Continue?`,\r\n true,\r\n );\r\n if (!confirmed) {\r\n logger.info('Cancelled.');\r\n process.exit(0);\r\n }\r\n }\r\n\r\n // -------------------------------------------------------------------------\r\n // 5. Determine conflict mode\r\n // -------------------------------------------------------------------------\r\n let mode: ConflictMode = 'interactive';\r\n if (opts.force) mode = 'force';\r\n else if (opts.skipExisting) mode = 'skip-existing';\r\n else if (opts.yes) mode = 'skip-existing';\r\n\r\n // -------------------------------------------------------------------------\r\n // 6. Build initial context and task runner\r\n // -------------------------------------------------------------------------\r\n const initialCtx: InitTaskContext = {\r\n workspaceRoot,\r\n selectedNames,\r\n opts,\r\n timestamp: generateTimestamp(),\r\n mode,\r\n sessionState: { overwriteAll: false },\r\n allTrackedFiles: [],\r\n filesWritten: 0,\r\n filesSkipped: 0,\r\n setupGuideWritten: false,\r\n envExampleWritten: false,\r\n };\r\n\r\n const tasks = buildInitTasks(presets, opts, prompt);\r\n const runner = await createTaskRunner(tasks, capability, theme);\r\n\r\n // -------------------------------------------------------------------------\r\n // 7. Run tasks\r\n // -------------------------------------------------------------------------\r\n const result = await runner.run(initialCtx);\r\n\r\n // -------------------------------------------------------------------------\r\n // 8. Render summary\r\n // -------------------------------------------------------------------------\r\n screens.summary({\r\n filesWritten: result.filesWritten,\r\n filesSkipped: result.filesSkipped,\r\n presets: selectedNames,\r\n setupGuidePath: result.setupGuideWritten ? '.kiro/POWERS-SETUP.md' : undefined,\r\n envExamplePath: result.envExampleWritten ? '.env.example' : undefined,\r\n nextSteps: [\r\n 'Open Kiro IDE in this directory',\r\n 'Run `kiro-kit doctor` to verify the workspace',\r\n ...(result.setupGuideWritten\r\n ? ['Read .kiro/POWERS-SETUP.md for Powers configuration']\r\n : []),\r\n ],\r\n docsUrl: 'https://github.com/ihatesea69/kiro-kit',\r\n });\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Command registration\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Register the `init` command on the given Commander program.\r\n */\r\nexport function registerInitCommand(program: Command): void {\r\n program\r\n .command('init')\r\n .description('Initialize workspace with selected presets')\r\n .option('-y, --yes', 'Skip confirmation, accept defaults')\r\n .option('--preset <name>', 'Specify preset (repeatable)', collectPreset, [])\r\n .option('--force', 'Overwrite all files (with backup)')\r\n .option('--skip-existing', 'Skip all existing files')\r\n .option('--no-color', 'Disable ANSI colors')\r\n .option(\r\n '--powers <mode>',\r\n 'Powers setup mode: none, all, or interactive (default)',\r\n 'interactive',\r\n )\r\n .option('--quiet', 'Suppress non-essential output including Powers recommendations')\r\n .action(async (opts: InitOptions) => {\r\n // Register SIGINT handler for exit code 130\r\n process.once('SIGINT', () => {\r\n process.exit(130);\r\n });\r\n\r\n try {\r\n await runInit(opts);\r\n } catch (err: unknown) {\r\n if (err instanceof Error && err.message === 'SIGINT') {\r\n process.exit(130);\r\n }\r\n\r\n // Attempt to render error box via UI layer; fall back to logger\r\n try {\r\n const capability = detectCapability(process.env, process.argv, process.stdout);\r\n const theme = await createTheme(capability);\r\n const screens = await createInitScreens({\r\n capability,\r\n theme,\r\n cliVersion: getKitVersion(),\r\n });\r\n screens.errorBox(err instanceof Error ? err : new Error(String(err)));\r\n } catch {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n }\r\n\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Exported for unit testing\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Build the lines for one render frame as plain strings.\r\n * Kept for backward compatibility with existing unit tests.\r\n * @deprecated Use ThemedPrompt.multiPickPresets instead.\r\n */\r\nexport function buildRenderLines(\r\n items: Array<{ name: string; description: string }>,\r\n cursor: number,\r\n selected: Set<number>,\r\n columns?: number,\r\n): string[] {\r\n const cols = columns ?? process.stdout.columns ?? 80;\r\n const maxDescWidth = Math.max(0, cols - 23);\r\n\r\n const lines: string[] = [];\r\n lines.push('? Select presets to install: (Space to select, <a> toggle all, Enter to confirm)');\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n const marker = cursor === i ? '>' : ' ';\r\n const check = selected.has(i) ? '[x]' : '[ ]';\r\n const name = items[i].name.padEnd(12);\r\n const rawDesc = items[i].description;\r\n const truncated =\r\n rawDesc.length > maxDescWidth\r\n ? rawDesc.slice(0, Math.max(0, maxDescWidth - 1)) + '\\u2026'\r\n : rawDesc;\r\n lines.push(` ${marker} ${check} ${name} - ${truncated}`);\r\n }\r\n\r\n return lines;\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport { fileURLToPath } from 'node:url';\r\nimport { parse, validate, type Manifest } from './ManifestParser.js';\r\nimport { KKError, ErrorCodes } from './errors.js';\r\n\r\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\r\n\r\nfunction getPresetsDir(): string {\r\n // Try a couple of candidate locations so the loader works whether the\r\n // bundle places presets next to index.js or one level up.\r\n const candidates = [\r\n path.resolve(__dirname, 'presets'), // dist/presets (current bundle)\r\n path.resolve(__dirname, '../presets'), // legacy layout\r\n path.resolve(__dirname, '../../../../presets'), // dev/source checkout\r\n ];\r\n for (const candidate of candidates) {\r\n if (fs.existsSync(candidate)) return candidate;\r\n }\r\n throw new KKError(\r\n ErrorCodes.PRESET_NOT_FOUND,\r\n 'Cannot locate presets directory.',\r\n 'Ensure kiro-kit is installed correctly.',\r\n );\r\n}\r\n\r\nexport interface LoadedPreset {\r\n manifest: Manifest;\r\n dir: string;\r\n}\r\n\r\n/**\r\n * Load a single preset by name.\r\n */\r\nexport function load(name: string): LoadedPreset {\r\n const presetsDir = getPresetsDir();\r\n const presetDir = path.join(presetsDir, name);\r\n\r\n if (!fs.existsSync(presetDir)) {\r\n throw new KKError(\r\n ErrorCodes.PRESET_NOT_FOUND,\r\n `Preset \"${name}\" not found.`,\r\n `Available presets: ${listAvailable().join(', ')}`,\r\n );\r\n }\r\n\r\n const manifestPath = path.join(presetDir, 'manifest.json');\r\n if (!fs.existsSync(manifestPath)) {\r\n throw new KKError(\r\n ErrorCodes.PRESET_LOAD_FAILED,\r\n `Preset \"${name}\" is missing manifest.json.`,\r\n );\r\n }\r\n\r\n const raw = fs.readFileSync(manifestPath, 'utf-8');\r\n const result = parse(raw);\r\n\r\n if (!result.ok) {\r\n throw new KKError(\r\n ErrorCodes.PRESET_LOAD_FAILED,\r\n `Preset \"${name}\" manifest parse error: ${result.error.message}`,\r\n );\r\n }\r\n\r\n return { manifest: result.value, dir: presetDir };\r\n}\r\n\r\n/**\r\n * Load multiple presets by name.\r\n */\r\nexport function loadAll(names: string[]): LoadedPreset[] {\r\n return names.map((n) => load(n));\r\n}\r\n\r\n/**\r\n * List all available preset names from the presets directory.\r\n */\r\nexport function listAvailable(): string[] {\r\n const presetsDir = getPresetsDir();\r\n try {\r\n return fs\r\n .readdirSync(presetsDir, { withFileTypes: true })\r\n .filter((d) => d.isDirectory())\r\n .filter((d) => !d.name.startsWith('_'))\r\n .filter((d) =>\r\n fs.existsSync(path.join(presetsDir, d.name, 'manifest.json')),\r\n )\r\n .map((d) => d.name);\r\n } catch {\r\n return [];\r\n }\r\n}\r\n","import { z } from 'zod';\r\nimport fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport { KKError, ErrorCodes } from './errors.js';\r\n\r\nconst ArtifactTypeSchema = z.enum([\r\n 'steering', 'hook', 'mcp', 'skill', 'agent',\r\n 'command', 'workflow', 'statusline', 'metadata',\r\n 'settings', 'env', 'spec', 'docs', 'doc', 'config', 'other',\r\n 'powers',\r\n]);\r\n\r\nconst PresetNameSchema = z.enum([\r\n 'frontend', 'backend', 'fullstack', 'mobile', 'devops', 'data-ai',\r\n]);\r\n\r\nconst FileEntrySchema = z.object({\r\n source: z.string().min(1),\r\n target: z.string().min(1),\r\n type: ArtifactTypeSchema,\r\n executable: z.boolean().optional(),\r\n});\r\n\r\nconst MCPServerDefSchema = z.object({\r\n command: z.string().min(1),\r\n args: z.array(z.string()).optional(),\r\n env: z.record(z.string()).optional(),\r\n});\r\n\r\nconst HookEntrySchema = z.union([\r\n z.object({\r\n matcher: z.string().optional(),\r\n command: z.string().min(1),\r\n }),\r\n z.string().min(1),\r\n]);\r\n\r\nconst ManifestSchema = z.object({\r\n name: z.string().min(1),\r\n version: z.string().min(1),\r\n description: z.string().min(1),\r\n category: PresetNameSchema,\r\n files: z.array(FileEntrySchema).min(1),\r\n dependencies: z.array(PresetNameSchema).optional(),\r\n mcpServers: z.record(MCPServerDefSchema).optional(),\r\n hooks: z.object({\r\n PreToolUse: z.array(HookEntrySchema).optional(),\r\n PostToolUse: z.array(HookEntrySchema).optional(),\r\n agentStop: z.array(HookEntrySchema).optional(),\r\n fileEdited: z.array(HookEntrySchema).optional(),\r\n }).optional(),\r\n tags: z.array(z.string()).optional(),\r\n minCounts: z.object({\r\n agents: z.number().int().nonnegative().optional(),\r\n skills: z.number().int().nonnegative().optional(),\r\n commands: z.number().int().nonnegative().optional(),\r\n hooks: z.number().int().nonnegative().optional(),\r\n workflows: z.number().int().nonnegative().optional(),\r\n }).optional(),\r\n});\r\n\r\nexport type Manifest = z.infer<typeof ManifestSchema>;\r\nexport type FileEntry = z.infer<typeof FileEntrySchema>;\r\nexport type ArtifactType = z.infer<typeof ArtifactTypeSchema>;\r\n\r\nexport interface ManifestError {\r\n code: string;\r\n message: string;\r\n}\r\n\r\nexport type Result<T, E> =\r\n | { ok: true; value: T }\r\n | { ok: false; error: E };\r\n\r\n/**\r\n * Parse raw JSON string into a validated Manifest.\r\n */\r\nexport function parse(json: string): Result<Manifest, ManifestError> {\r\n let raw: unknown;\r\n try {\r\n raw = JSON.parse(json);\r\n } catch {\r\n return {\r\n ok: false,\r\n error: {\r\n code: ErrorCodes.MANIFEST_INVALID,\r\n message: 'Manifest is not valid JSON.',\r\n },\r\n };\r\n }\r\n\r\n const result = ManifestSchema.safeParse(raw);\r\n if (!result.success) {\r\n const issues = result.error.issues\r\n .map((i) => `${i.path.join('.')}: ${i.message}`)\r\n .join('; ');\r\n return {\r\n ok: false,\r\n error: {\r\n code: ErrorCodes.MANIFEST_MISSING_FIELD,\r\n message: `Manifest schema validation failed: ${issues}`,\r\n },\r\n };\r\n }\r\n\r\n return { ok: true, value: result.data };\r\n}\r\n\r\n/**\r\n * Pretty-print a Manifest object as JSON (2-space indent).\r\n */\r\nexport function print(m: Manifest): string {\r\n return JSON.stringify(m, null, 2);\r\n}\r\n\r\n/**\r\n * Validate a parsed Manifest against its preset directory on disk.\r\n * Checks:\r\n * 1. File completeness: every file in manifest.files exists at presetDir/source\r\n * 2. No-orphan: every file in presetDir (except manifest.json, README.md) is declared in manifest.files\r\n */\r\nexport function validate(m: Manifest, presetDir: string): Result<void, ManifestError[]> {\r\n const errors: ManifestError[] = [];\r\n\r\n // 1. File completeness check\r\n for (const entry of m.files) {\r\n const fullPath = path.join(presetDir, entry.source);\r\n if (!fs.existsSync(fullPath)) {\r\n errors.push({\r\n code: ErrorCodes.MANIFEST_INCOMPLETE,\r\n message: `File declared in manifest not found on disk: ${entry.source}`,\r\n });\r\n }\r\n }\r\n\r\n // 2. No-orphan check\r\n const declaredSources = new Set(m.files.map((f) => f.source));\r\n const ignoredFiles = new Set(['manifest.json', 'README.md']);\r\n\r\n const walkDir = (dir: string, prefix: string): void => {\r\n let entries: fs.Dirent[];\r\n try {\r\n entries = fs.readdirSync(dir, { withFileTypes: true });\r\n } catch {\r\n return;\r\n }\r\n for (const entry of entries) {\r\n const rel = prefix ? `${prefix}/${entry.name}` : entry.name;\r\n if (entry.isDirectory()) {\r\n walkDir(path.join(dir, entry.name), rel);\r\n } else if (entry.isFile()) {\r\n if (!ignoredFiles.has(rel) && !declaredSources.has(rel)) {\r\n errors.push({\r\n code: ErrorCodes.MANIFEST_ORPHAN_FILE,\r\n message: `File on disk not declared in manifest (orphan): ${rel}`,\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n walkDir(presetDir, '');\r\n\r\n if (errors.length > 0) {\r\n return { ok: false, error: errors };\r\n }\r\n return { ok: true, value: undefined };\r\n}\r\n","/**\r\n * Structured error class for kiro-kit CLI.\r\n * Each error carries a unique code (KK001-KK091), a human-readable message,\r\n * and an optional suggestion for resolution.\r\n */\r\nexport class KKError extends Error {\r\n readonly code: string;\r\n readonly suggestion?: string;\r\n\r\n constructor(code: string, message: string, suggestion?: string) {\r\n super(message);\r\n this.name = 'KKError';\r\n this.code = code;\r\n this.suggestion = suggestion;\r\n Object.setPrototypeOf(this, KKError.prototype);\r\n }\r\n\r\n format(): string {\r\n let output = `[${this.code}] ${this.message}`;\r\n if (this.suggestion) {\r\n output += `\\n Suggestion: ${this.suggestion}`;\r\n }\r\n return output;\r\n }\r\n}\r\n\r\n// Common error codes\r\nexport const ErrorCodes = {\r\n NODE_VERSION: 'KK001',\r\n MANIFEST_INVALID: 'KK010',\r\n MANIFEST_MISSING_FIELD: 'KK011',\r\n MANIFEST_ORPHAN_FILE: 'KK012',\r\n MANIFEST_INCOMPLETE: 'KK013',\r\n PRESET_NOT_FOUND: 'KK020',\r\n PRESET_LOAD_FAILED: 'KK021',\r\n CONFLICT_UNRESOLVED: 'KK030',\r\n TRACKING_CORRUPT: 'KK040',\r\n TRACKING_WRITE_FAILED: 'KK041',\r\n BACKUP_NOT_FOUND: 'KK050',\r\n BACKUP_WRITE_FAILED: 'KK051',\r\n MCP_MERGE_CONFLICT: 'KK060',\r\n MCP_INVALID_JSON: 'KK061',\r\n SETTINGS_MERGE_WARN: 'KK070',\r\n FRONTMATTER_INVALID: 'KK080',\r\n FRONTMATTER_MISSING: 'KK081',\r\n DOCTOR_FAIL: 'KK090',\r\n DOCTOR_WARN: 'KK091',\r\n} as const;\r\n","import fs from 'node:fs';\r\nimport crypto from 'node:crypto';\r\n\r\nexport type ConflictAction =\r\n | 'WRITE_NEW'\r\n | 'OVERWRITE_WITH_BACKUP'\r\n | 'SKIP'\r\n | 'NO_OP';\r\n\r\nexport type ConflictMode = 'interactive' | 'force' | 'skip-existing';\r\n\r\nexport interface SessionState {\r\n overwriteAll: boolean;\r\n}\r\n\r\nexport interface ConflictPromptFn {\r\n (target: string): Promise<'overwrite' | 'skip' | 'view-diff' | 'overwrite-all'>;\r\n}\r\n\r\nexport interface DiffViewerFn {\r\n (target: string, sourceContent: Buffer): void;\r\n}\r\n\r\nfunction sha256(data: Buffer): string {\r\n return crypto.createHash('sha256').update(data).digest('hex');\r\n}\r\n\r\n/**\r\n * Resolve file conflict based on mode and session state.\r\n */\r\nexport async function resolve(opts: {\r\n target: string;\r\n sourceContent: Buffer;\r\n mode: ConflictMode;\r\n sessionState: SessionState;\r\n prompt?: ConflictPromptFn;\r\n showDiff?: DiffViewerFn;\r\n}): Promise<ConflictAction> {\r\n const { target, sourceContent, mode, sessionState, prompt, showDiff } = opts;\r\n\r\n // File doesn't exist yet - write new\r\n if (!fs.existsSync(target)) {\r\n return 'WRITE_NEW';\r\n }\r\n\r\n // Compare hashes\r\n const currentContent = fs.readFileSync(target);\r\n const currentHash = sha256(currentContent);\r\n const newHash = sha256(sourceContent);\r\n\r\n // Byte-equal - no operation needed\r\n if (currentHash === newHash) {\r\n return 'NO_OP';\r\n }\r\n\r\n // Force mode - always overwrite with backup\r\n if (mode === 'force') {\r\n return 'OVERWRITE_WITH_BACKUP';\r\n }\r\n\r\n // Skip-existing mode - never overwrite\r\n if (mode === 'skip-existing') {\r\n return 'SKIP';\r\n }\r\n\r\n // Session overwrite-all already set\r\n if (sessionState.overwriteAll) {\r\n return 'OVERWRITE_WITH_BACKUP';\r\n }\r\n\r\n // Interactive mode - prompt user\r\n if (!prompt) {\r\n // No prompt function provided, default to skip\r\n return 'SKIP';\r\n }\r\n\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n const choice = await prompt(target);\r\n\r\n switch (choice) {\r\n case 'view-diff':\r\n if (showDiff) {\r\n showDiff(target, sourceContent);\r\n }\r\n continue;\r\n case 'overwrite':\r\n return 'OVERWRITE_WITH_BACKUP';\r\n case 'skip':\r\n return 'SKIP';\r\n case 'overwrite-all':\r\n sessionState.overwriteAll = true;\r\n return 'OVERWRITE_WITH_BACKUP';\r\n }\r\n }\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport { KKError, ErrorCodes } from './errors.js';\r\n\r\nconst BACKUP_DIR = '.kiro/.backup';\r\n\r\n/**\r\n * Generate timestamp string: YYYYMMDD-HHmmss-mmm\r\n */\r\nfunction generateTimestamp(): string {\r\n const now = new Date();\r\n const y = now.getFullYear();\r\n const mo = String(now.getMonth() + 1).padStart(2, '0');\r\n const d = String(now.getDate()).padStart(2, '0');\r\n const h = String(now.getHours()).padStart(2, '0');\r\n const mi = String(now.getMinutes()).padStart(2, '0');\r\n const s = String(now.getSeconds()).padStart(2, '0');\r\n const ms = String(now.getMilliseconds()).padStart(3, '0');\r\n return `${y}${mo}${d}-${h}${mi}${s}-${ms}`;\r\n}\r\n\r\n/**\r\n * Backup a file to .kiro/.backup/<timestamp>/<relative-path>\r\n */\r\nexport function backup(\r\n workspaceRoot: string,\r\n target: string,\r\n timestamp?: string,\r\n): string {\r\n const ts = timestamp ?? generateTimestamp();\r\n const relPath = path.relative(workspaceRoot, target);\r\n const backupPath = path.join(workspaceRoot, BACKUP_DIR, ts, relPath);\r\n const backupDir = path.dirname(backupPath);\r\n\r\n fs.mkdirSync(backupDir, { recursive: true });\r\n fs.copyFileSync(target, backupPath);\r\n\r\n return ts;\r\n}\r\n\r\n/**\r\n * Restore files from a backup timestamp.\r\n * If no timestamp given, uses the most recent backup.\r\n * Returns list of restored file paths.\r\n */\r\nexport function restore(\r\n workspaceRoot: string,\r\n timestamp?: string,\r\n): string[] {\r\n const ts = timestamp ?? getLatestTimestamp(workspaceRoot);\r\n\r\n if (!ts) {\r\n throw new KKError(\r\n ErrorCodes.BACKUP_NOT_FOUND,\r\n 'No backup found.',\r\n 'Run kiro-kit init or add first to create backups.',\r\n );\r\n }\r\n\r\n const backupRoot = path.join(workspaceRoot, BACKUP_DIR, ts);\r\n if (!fs.existsSync(backupRoot)) {\r\n throw new KKError(\r\n ErrorCodes.BACKUP_NOT_FOUND,\r\n `Backup timestamp \"${ts}\" not found.`,\r\n `Available: ${listTimestamps(workspaceRoot).join(', ') || 'none'}`,\r\n );\r\n }\r\n\r\n const restored: string[] = [];\r\n\r\n const walkAndRestore = (dir: string, relPrefix: string): void => {\r\n const entries = fs.readdirSync(dir, { withFileTypes: true });\r\n for (const entry of entries) {\r\n const fullPath = path.join(dir, entry.name);\r\n const rel = relPrefix ? `${relPrefix}/${entry.name}` : entry.name;\r\n if (entry.isDirectory()) {\r\n walkAndRestore(fullPath, rel);\r\n } else if (entry.isFile()) {\r\n const targetPath = path.join(workspaceRoot, rel);\r\n const targetDir = path.dirname(targetPath);\r\n fs.mkdirSync(targetDir, { recursive: true });\r\n fs.copyFileSync(fullPath, targetPath);\r\n restored.push(rel);\r\n }\r\n }\r\n };\r\n\r\n walkAndRestore(backupRoot, '');\r\n return restored;\r\n}\r\n\r\n/**\r\n * List all backup timestamps sorted newest first.\r\n */\r\nexport function listTimestamps(workspaceRoot: string): string[] {\r\n const backupBase = path.join(workspaceRoot, BACKUP_DIR);\r\n if (!fs.existsSync(backupBase)) return [];\r\n\r\n try {\r\n return fs\r\n .readdirSync(backupBase, { withFileTypes: true })\r\n .filter((d) => d.isDirectory())\r\n .map((d) => d.name)\r\n .sort()\r\n .reverse();\r\n } catch {\r\n return [];\r\n }\r\n}\r\n\r\nfunction getLatestTimestamp(workspaceRoot: string): string | undefined {\r\n const timestamps = listTimestamps(workspaceRoot);\r\n return timestamps[0];\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport { KKError, ErrorCodes } from './errors.js';\r\nimport { logger } from '../utils/logger.js';\r\n\r\nconst TRACKING_FILE = '.kiro/.kiro-kit.json';\r\n\r\nexport interface TrackedFile {\r\n target: string;\r\n sourcePreset: string;\r\n contentHash: string;\r\n installedAt: string;\r\n}\r\n\r\nexport interface TrackedPreset {\r\n name: string;\r\n version: string;\r\n installedAt: string;\r\n updatedAt?: string;\r\n files: TrackedFile[];\r\n}\r\n\r\nexport interface TrackingData {\r\n kitVersion: string;\r\n installedAt: string;\r\n updatedAt?: string;\r\n presets: TrackedPreset[];\r\n}\r\n\r\nfunction getTrackingPath(workspaceRoot: string): string {\r\n return path.join(workspaceRoot, TRACKING_FILE);\r\n}\r\n\r\n/**\r\n * Read tracking data from .kiro/.kiro-kit.json.\r\n * Returns null if file doesn't exist.\r\n * Throws KK040 if file is corrupt.\r\n */\r\nexport function read(workspaceRoot: string): TrackingData | null {\r\n const filePath = getTrackingPath(workspaceRoot);\r\n\r\n if (!fs.existsSync(filePath)) {\r\n return null;\r\n }\r\n\r\n const raw = fs.readFileSync(filePath, 'utf-8');\r\n try {\r\n return JSON.parse(raw) as TrackingData;\r\n } catch {\r\n logger.warn(`Tracking file is corrupt: ${filePath}`);\r\n throw new KKError(\r\n ErrorCodes.TRACKING_CORRUPT,\r\n 'Tracking file .kiro/.kiro-kit.json is corrupt (invalid JSON).',\r\n 'Delete the file and re-run kiro-kit init to regenerate.',\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Write tracking data to .kiro/.kiro-kit.json.\r\n * Creates directory if needed.\r\n */\r\nexport function write(workspaceRoot: string, data: TrackingData): void {\r\n const filePath = getTrackingPath(workspaceRoot);\r\n const dir = path.dirname(filePath);\r\n fs.mkdirSync(dir, { recursive: true });\r\n fs.writeFileSync(filePath, JSON.stringify(data, null, 2) + '\\n', 'utf-8');\r\n}\r\n\r\n/**\r\n * Add or update a preset in tracking data.\r\n */\r\nexport function upsertPreset(\r\n data: TrackingData,\r\n preset: TrackedPreset,\r\n): TrackingData {\r\n const existing = data.presets.findIndex((p) => p.name === preset.name);\r\n if (existing >= 0) {\r\n data.presets[existing] = preset;\r\n } else {\r\n data.presets.push(preset);\r\n }\r\n data.updatedAt = new Date().toISOString();\r\n return data;\r\n}\r\n\r\n/**\r\n * Create initial tracking data.\r\n */\r\nexport function createInitial(kitVersion: string): TrackingData {\r\n return {\r\n kitVersion,\r\n installedAt: new Date().toISOString(),\r\n presets: [],\r\n };\r\n}\r\n\r\n/**\r\n * Get a preset from tracking data by name.\r\n */\r\nexport function getPreset(\r\n data: TrackingData,\r\n name: string,\r\n): TrackedPreset | undefined {\r\n return data.presets.find((p) => p.name === name);\r\n}\r\n","import process from 'node:process';\r\nimport { color } from './color.js';\r\n\r\nlet verboseEnabled = false;\r\nlet quietEnabled = false;\r\n\r\nexport function setVerbose(enabled: boolean): void {\r\n verboseEnabled = enabled;\r\n}\r\n\r\nexport function setQuiet(enabled: boolean): void {\r\n quietEnabled = enabled;\r\n}\r\n\r\nexport const logger = {\r\n info(msg: string): void {\r\n if (!quietEnabled) {\r\n process.stdout.write(`${msg}\\n`);\r\n }\r\n },\r\n\r\n success(msg: string): void {\r\n if (!quietEnabled) {\r\n process.stdout.write(`${color.green(msg)}\\n`);\r\n }\r\n },\r\n\r\n warn(msg: string): void {\r\n process.stderr.write(`${color.yellow('WARN')} ${msg}\\n`);\r\n },\r\n\r\n error(msg: string): void {\r\n process.stderr.write(`${color.red('ERROR')} ${msg}\\n`);\r\n },\r\n\r\n debug(msg: string): void {\r\n if (verboseEnabled) {\r\n process.stderr.write(`${color.dim('[debug]')} ${msg}\\n`);\r\n }\r\n },\r\n};\r\n","import pc from 'picocolors';\r\nimport process from 'node:process';\r\n\r\nconst isColorDisabled =\r\n !!process.env['NO_COLOR'] ||\r\n process.argv.includes('--no-color') ||\r\n !process.stdout.isTTY;\r\n\r\nfunction wrap(fn: (s: string) => string): (s: string) => string {\r\n return (s: string) => (isColorDisabled ? s : fn(s));\r\n}\r\n\r\nexport const color = {\r\n green: wrap(pc.green),\r\n red: wrap(pc.red),\r\n yellow: wrap(pc.yellow),\r\n blue: wrap(pc.blue),\r\n cyan: wrap(pc.cyan),\r\n gray: wrap(pc.gray),\r\n bold: wrap(pc.bold),\r\n dim: wrap(pc.dim),\r\n};\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\n\r\nconst METADATA_FILE = '.kiro/metadata.json';\r\n\r\nexport interface PresetMeta {\r\n name: string;\r\n version: string;\r\n}\r\n\r\nexport interface Metadata {\r\n version: string;\r\n name: string;\r\n description: string;\r\n buildDate: string;\r\n repository: string;\r\n presets: PresetMeta[];\r\n installedAt: string;\r\n kitVersion: string;\r\n}\r\n\r\n/**\r\n * Compose metadata from installed presets and kit info.\r\n */\r\nexport function compose(opts: {\r\n kitVersion: string;\r\n repository: string;\r\n presets: PresetMeta[];\r\n}): Metadata {\r\n return {\r\n version: '1.0.0',\r\n name: 'kiro-kit',\r\n description: 'Kiro IDE workspace bootstrapped by kiro-kit.',\r\n buildDate: new Date().toISOString(),\r\n repository: opts.repository,\r\n presets: opts.presets,\r\n installedAt: new Date().toISOString(),\r\n kitVersion: opts.kitVersion,\r\n };\r\n}\r\n\r\n/**\r\n * Write metadata.json to workspace.\r\n * When installing multiple presets, merges preset list.\r\n */\r\nexport function write(workspaceRoot: string, metadata: Metadata): void {\r\n const filePath = path.join(workspaceRoot, METADATA_FILE);\r\n const dir = path.dirname(filePath);\r\n fs.mkdirSync(dir, { recursive: true });\r\n fs.writeFileSync(filePath, JSON.stringify(metadata, null, 2) + '\\n', 'utf-8');\r\n}\r\n\r\n/**\r\n * Read existing metadata, or return null if not present.\r\n */\r\nexport function read(workspaceRoot: string): Metadata | null {\r\n const filePath = path.join(workspaceRoot, METADATA_FILE);\r\n if (!fs.existsSync(filePath)) return null;\r\n try {\r\n return JSON.parse(fs.readFileSync(filePath, 'utf-8')) as Metadata;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Merge new presets into existing metadata (dedup by name).\r\n */\r\nexport function mergePresets(existing: Metadata, newPresets: PresetMeta[]): Metadata {\r\n const merged = [...(existing.presets || [])];\r\n for (const p of newPresets) {\r\n const idx = merged.findIndex((m) => m.name === p.name);\r\n if (idx >= 0) {\r\n merged[idx] = p;\r\n } else {\r\n merged.push(p);\r\n }\r\n }\r\n return { ...existing, presets: merged, buildDate: new Date().toISOString() };\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport process from 'node:process';\r\n\r\nconst STATUSLINE_FILES = ['statusline.js', 'statusline.sh', 'statusline.ps1'];\r\n\r\n/**\r\n * Get the appropriate statusline command for the current platform.\r\n */\r\nexport function getCommand(): string {\r\n switch (process.platform) {\r\n case 'win32':\r\n return 'powershell -ExecutionPolicy Bypass -File .kiro/statusline.ps1';\r\n default:\r\n // macOS, Linux, etc.\r\n return 'node .kiro/statusline.js';\r\n }\r\n}\r\n\r\n/**\r\n * Install statusline triple (.js, .sh, .ps1) from preset to workspace.\r\n * Sets chmod +x on .sh for Unix platforms.\r\n */\r\nexport function install(\r\n presetDir: string,\r\n workspaceRoot: string,\r\n): string[] {\r\n const installed: string[] = [];\r\n const targetDir = path.join(workspaceRoot, '.kiro');\r\n fs.mkdirSync(targetDir, { recursive: true });\r\n\r\n for (const file of STATUSLINE_FILES) {\r\n const source = path.join(presetDir, file);\r\n if (!fs.existsSync(source)) continue;\r\n\r\n const target = path.join(targetDir, file);\r\n fs.copyFileSync(source, target);\r\n installed.push(`.kiro/${file}`);\r\n\r\n // Set executable bit on Unix for .sh\r\n if (file.endsWith('.sh') && process.platform !== 'win32') {\r\n try {\r\n fs.chmodSync(target, 0o755);\r\n } catch {\r\n // Non-critical: skip if chmod fails\r\n }\r\n }\r\n }\r\n\r\n return installed;\r\n}\r\n\r\n/**\r\n * Resolve the statusLine.command field in settings based on platform.\r\n */\r\nexport function resolveSettingsCommand(settings: Record<string, unknown>): Record<string, unknown> {\r\n const statusLine = settings['statusLine'] as Record<string, unknown> | undefined;\r\n if (statusLine && statusLine['type'] === 'command') {\r\n statusLine['command'] = getCommand();\r\n }\r\n return settings;\r\n}\r\n","import { logger } from '../../utils/logger.js';\r\n\r\nexport interface MCPConfig {\r\n mcpServers: Record<string, MCPServerEntry>;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface MCPServerEntry {\r\n command: string;\r\n args?: string[];\r\n env?: Record<string, string>;\r\n disabled?: boolean;\r\n autoApprove?: string[];\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Merge preset MCP servers into existing MCP config.\r\n * User-priority: existing servers are never overwritten or deleted.\r\n * Warns on cross-preset conflicts (same server name from different presets).\r\n */\r\nexport function mergeMCP(\r\n existing: MCPConfig | null,\r\n presetServers: Record<string, MCPServerEntry>,\r\n presetName?: string,\r\n): MCPConfig {\r\n const result: MCPConfig = existing\r\n ? structuredClone(existing)\r\n : { mcpServers: {} };\r\n\r\n if (!result.mcpServers) {\r\n result.mcpServers = {};\r\n }\r\n\r\n for (const [serverName, def] of Object.entries(presetServers)) {\r\n if (serverName in result.mcpServers) {\r\n logger.warn(\r\n `MCP server \"${serverName}\" already exists, keeping user definition.` +\r\n (presetName ? ` (from preset: ${presetName})` : ''),\r\n );\r\n continue;\r\n }\r\n result.mcpServers[serverName] = structuredClone(def);\r\n }\r\n\r\n return result;\r\n}\r\n","import { logger } from '../../utils/logger.js';\r\n\r\nexport interface HookRef {\r\n command: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface SettingsConfig {\r\n statusLine?: { type?: string; command?: string; [key: string]: unknown };\r\n hooks?: {\r\n PreToolUse?: HookRef[];\r\n PostToolUse?: HookRef[];\r\n agentStop?: HookRef[];\r\n [key: string]: unknown;\r\n };\r\n includeCoAuthoredBy?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Merge preset settings into existing settings.\r\n * - Array fields (hooks.PreToolUse, hooks.PostToolUse, etc.): concat-dedupe by `command`\r\n * - Non-array fields: last-write-wins with warning\r\n * - Preserves user-added fields not in preset\r\n */\r\nexport function mergeSettings(\r\n existing: SettingsConfig | null,\r\n preset: SettingsConfig,\r\n): SettingsConfig {\r\n const result: SettingsConfig = existing\r\n ? structuredClone(existing)\r\n : {};\r\n\r\n // Merge hooks arrays with dedup by command\r\n if (preset.hooks) {\r\n if (!result.hooks) result.hooks = {};\r\n\r\n for (const key of ['PreToolUse', 'PostToolUse', 'agentStop'] as const) {\r\n const presetArr = preset.hooks[key];\r\n if (!presetArr || presetArr.length === 0) continue;\r\n\r\n const existingArr: HookRef[] = (result.hooks[key] as HookRef[]) ?? [];\r\n const existingCommands = new Set(existingArr.map((h) => h.command));\r\n\r\n for (const hook of presetArr) {\r\n if (!existingCommands.has(hook.command)) {\r\n existingArr.push(structuredClone(hook));\r\n }\r\n }\r\n (result.hooks as Record<string, unknown>)[key] = existingArr;\r\n }\r\n }\r\n\r\n // Merge non-array scalar fields with last-write-wins + warning\r\n if (preset.statusLine !== undefined) {\r\n if (result.statusLine !== undefined) {\r\n logger.warn('statusLine already set in settings, overwriting with preset value.');\r\n }\r\n result.statusLine = structuredClone(preset.statusLine);\r\n }\r\n\r\n if (preset.includeCoAuthoredBy !== undefined) {\r\n if (result.includeCoAuthoredBy !== undefined && result.includeCoAuthoredBy !== preset.includeCoAuthoredBy) {\r\n logger.warn('includeCoAuthoredBy already set, overwriting with preset value.');\r\n }\r\n result.includeCoAuthoredBy = preset.includeCoAuthoredBy;\r\n }\r\n\r\n return result;\r\n}\r\n","import fs from 'node:fs';\r\nimport { createTwoFilesPatch } from 'diff';\r\nimport { color } from '../utils/color.js';\r\n\r\n/**\r\n * Print a unified diff between the existing file on disk and new source content.\r\n * Highlights additions in green and deletions in red (NO_COLOR aware).\r\n */\r\nexport function showDiff(target: string, sourceContent: Buffer): void {\r\n const existing = fs.existsSync(target)\r\n ? fs.readFileSync(target, 'utf-8')\r\n : '';\r\n const incoming = sourceContent.toString('utf-8');\r\n\r\n const patch = createTwoFilesPatch(\r\n `a/${target}`,\r\n `b/${target}`,\r\n existing,\r\n incoming,\r\n 'current',\r\n 'incoming',\r\n { context: 3 },\r\n );\r\n\r\n const lines = patch.split('\\n');\r\n for (const line of lines) {\r\n if (line.startsWith('+') && !line.startsWith('+++')) {\r\n process.stdout.write(color.green(line) + '\\n');\r\n } else if (line.startsWith('-') && !line.startsWith('---')) {\r\n process.stdout.write(color.red(line) + '\\n');\r\n } else if (line.startsWith('@@')) {\r\n process.stdout.write(color.cyan(line) + '\\n');\r\n } else {\r\n process.stdout.write(line + '\\n');\r\n }\r\n }\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport crypto from 'node:crypto';\r\nimport os from 'node:os';\r\n\r\n/** Extensions that should always use LF line endings. */\r\nconst LF_EXTENSIONS = new Set(['.json', '.yaml', '.yml']);\r\n\r\n/**\r\n * Determine the appropriate line ending for a file based on extension.\r\n * - .json, .yaml, .yml -> LF\r\n * - Everything else -> OS default (CRLF on Windows, LF elsewhere)\r\n */\r\nfunction getLineEnding(filePath: string): string {\r\n const ext = path.extname(filePath).toLowerCase();\r\n if (LF_EXTENSIONS.has(ext)) return '\\n';\r\n return os.EOL;\r\n}\r\n\r\n/**\r\n * Normalize line endings in content based on target file extension.\r\n */\r\nfunction normalizeLineEndings(content: string, filePath: string): string {\r\n const eol = getLineEnding(filePath);\r\n // First normalize all to LF, then convert to target\r\n const normalized = content.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\r\n if (eol === '\\n') return normalized;\r\n return normalized.replace(/\\n/g, eol);\r\n}\r\n\r\n/**\r\n * Atomic write: writes to a temp file in the same directory, then renames.\r\n * This ensures the target file is never in a partial state.\r\n * Also normalizes line endings based on file extension.\r\n */\r\nexport function atomicWrite(target: string, content: string | Buffer): void {\r\n const dir = path.dirname(target);\r\n fs.mkdirSync(dir, { recursive: true });\r\n\r\n const rand = crypto.randomBytes(6).toString('hex');\r\n const tmpPath = path.join(dir, `.tmp.${rand}`);\r\n\r\n let data: Buffer;\r\n if (typeof content === 'string') {\r\n const normalized = normalizeLineEndings(content, target);\r\n data = Buffer.from(normalized, 'utf-8');\r\n } else {\r\n data = content;\r\n }\r\n\r\n try {\r\n fs.writeFileSync(tmpPath, data);\r\n fs.renameSync(tmpPath, target);\r\n } catch (err) {\r\n // Clean up temp file on failure\r\n try {\r\n fs.unlinkSync(tmpPath);\r\n } catch {\r\n // ignore cleanup errors\r\n }\r\n throw err;\r\n }\r\n}\r\n","import path from 'node:path';\r\n\r\n/**\r\n * Normalize a path to use forward slashes (for consistent cross-platform display).\r\n */\r\nexport function normalize(p: string): string {\r\n return p.split(path.sep).join('/');\r\n}\r\n\r\n/**\r\n * Get relative path from workspace root, normalized with forward slashes.\r\n */\r\nexport function relativeFromWorkspace(workspaceRoot: string, target: string): string {\r\n return normalize(path.relative(workspaceRoot, target));\r\n}\r\n\r\n/**\r\n * Check that a resolved path is safely inside the workspace root.\r\n * Prevents path traversal attacks (e.g., ../../etc/passwd).\r\n */\r\nexport function safePathInside(workspaceRoot: string, target: string): boolean {\r\n const resolved = path.resolve(workspaceRoot, target);\r\n const root = path.resolve(workspaceRoot);\r\n return resolved.startsWith(root + path.sep) || resolved === root;\r\n}\r\n\r\n/**\r\n * Join paths using OS-native separator.\r\n */\r\nexport function join(...segments: string[]): string {\r\n return path.join(...segments);\r\n}\r\n\r\n/**\r\n * Resolve to absolute path.\r\n */\r\nexport function resolve(...segments: string[]): string {\r\n return path.resolve(...segments);\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport { z } from 'zod';\r\n\r\n/**\r\n * PowersLoader — reads and validates `powers.json` from preset directories.\r\n *\r\n * Provides tier-based filtering and multi-preset merge with deduplication.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Schemas\r\n// ---------------------------------------------------------------------------\r\n\r\nexport const PowerTierSchema = z.enum(['essential', 'recommended', 'optional']);\r\n\r\nexport const PowerEntrySchema = z.object({\r\n name: z.string().min(1),\r\n url: z.string().url(),\r\n description: z.string().min(1),\r\n tier: PowerTierSchema,\r\n});\r\n\r\nexport const PowersConfigSchema = z.object({\r\n powers: z.array(PowerEntrySchema),\r\n});\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\nexport type PowerTier = z.infer<typeof PowerTierSchema>;\r\nexport type PowerEntry = z.infer<typeof PowerEntrySchema>;\r\nexport type PowersConfig = z.infer<typeof PowersConfigSchema>;\r\n\r\nexport interface LoadPowersResult {\r\n ok: boolean;\r\n powers: PowerEntry[];\r\n error?: string;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Constants\r\n// ---------------------------------------------------------------------------\r\n\r\nconst POWERS_FILENAME = 'powers.json';\r\n\r\n/** Priority order: lower index = higher priority. */\r\nconst TIER_PRIORITY: Record<PowerTier, number> = {\r\n essential: 0,\r\n recommended: 1,\r\n optional: 2,\r\n};\r\n\r\n// ---------------------------------------------------------------------------\r\n// Public API\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Load powers.json from a preset directory.\r\n * Returns empty array if file doesn't exist (graceful degradation).\r\n * Returns error result (not throw) for invalid JSON or schema failures.\r\n */\r\nexport function loadPowers(presetDir: string): LoadPowersResult {\r\n const filePath = path.join(presetDir, POWERS_FILENAME);\r\n\r\n if (!fs.existsSync(filePath)) {\r\n return { ok: true, powers: [] };\r\n }\r\n\r\n let raw: string;\r\n try {\r\n raw = fs.readFileSync(filePath, 'utf-8');\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : String(err);\r\n return { ok: false, powers: [], error: `Failed to read ${POWERS_FILENAME}: ${message}` };\r\n }\r\n\r\n let parsed: unknown;\r\n try {\r\n parsed = JSON.parse(raw);\r\n } catch {\r\n return { ok: false, powers: [], error: `${POWERS_FILENAME} is not valid JSON.` };\r\n }\r\n\r\n const result = PowersConfigSchema.safeParse(parsed);\r\n if (!result.success) {\r\n const issues = result.error.issues\r\n .map((i) => `${i.path.join('.')}: ${i.message}`)\r\n .join('; ');\r\n return { ok: false, powers: [], error: `${POWERS_FILENAME} schema validation failed: ${issues}` };\r\n }\r\n\r\n return { ok: true, powers: result.data.powers };\r\n}\r\n\r\n/**\r\n * Merge powers from multiple presets, deduplicating by name.\r\n * When duplicates exist, keep the entry with the highest tier\r\n * (essential > recommended > optional).\r\n */\r\nexport function mergePowers(configs: PowerEntry[][]): PowerEntry[] {\r\n const seen = new Map<string, PowerEntry>();\r\n\r\n for (const entries of configs) {\r\n for (const entry of entries) {\r\n const existing = seen.get(entry.name);\r\n if (!existing) {\r\n seen.set(entry.name, entry);\r\n } else if (TIER_PRIORITY[entry.tier] < TIER_PRIORITY[existing.tier]) {\r\n // New entry has higher priority tier — replace.\r\n seen.set(entry.name, entry);\r\n }\r\n }\r\n }\r\n\r\n return Array.from(seen.values());\r\n}\r\n\r\n/**\r\n * Filter powers by tier selection.\r\n * Returns only those powers whose tier is in the provided list.\r\n */\r\nexport function filterByTier(powers: PowerEntry[], tiers: PowerTier[]): PowerEntry[] {\r\n const tierSet = new Set<PowerTier>(tiers);\r\n return powers.filter((p) => tierSet.has(p.tier));\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport { KKError, ErrorCodes } from './errors.js';\r\n\r\n/**\r\n * MCPConfigurator — manages auto-configuration of MCP servers per preset.\r\n *\r\n * Generates functional `.mcp.json` files with preset-specific servers,\r\n * handles merge logic for existing configs, and uses `_disabled_` prefix\r\n * convention for servers requiring credentials.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface MCPServerEntry {\r\n command: string;\r\n args?: string[];\r\n env?: Record<string, string>;\r\n requiresCredentials?: boolean;\r\n credentialEnvVars?: string[];\r\n}\r\n\r\nexport interface MCPPresetConfig {\r\n servers: Record<string, MCPServerEntry>;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Constants\r\n// ---------------------------------------------------------------------------\r\n\r\nconst MCP_FILENAME = '.mcp.json';\r\n\r\n/** Shared MCP server definitions. */\r\nconst SERVER_DEFINITIONS: Record<string, MCPServerEntry> = {\r\n filesystem: {\r\n command: 'npx',\r\n args: ['-y', '@modelcontextprotocol/server-filesystem', '.'],\r\n requiresCredentials: false,\r\n },\r\n git: {\r\n command: 'npx',\r\n args: ['-y', '@modelcontextprotocol/server-git', '--repository', '.'],\r\n requiresCredentials: false,\r\n },\r\n fetch: {\r\n command: 'npx',\r\n args: ['-y', '@modelcontextprotocol/server-fetch'],\r\n requiresCredentials: false,\r\n },\r\n playwright: {\r\n command: 'npx',\r\n args: ['-y', '@modelcontextprotocol/server-playwright'],\r\n requiresCredentials: false,\r\n },\r\n postgres: {\r\n command: 'npx',\r\n args: ['-y', '@modelcontextprotocol/server-postgres'],\r\n env: { POSTGRES_URL: '${POSTGRES_URL}' },\r\n requiresCredentials: true,\r\n credentialEnvVars: ['POSTGRES_URL'],\r\n },\r\n docker: {\r\n command: 'npx',\r\n args: ['-y', '@modelcontextprotocol/server-docker'],\r\n env: { DOCKER_HOST: '${DOCKER_HOST}' },\r\n requiresCredentials: true,\r\n credentialEnvVars: ['DOCKER_HOST'],\r\n },\r\n};\r\n\r\n/** Preset-to-server mapping. */\r\nconst PRESET_SERVERS: Record<string, { default: string[]; optional: string[] }> = {\r\n frontend: { default: ['filesystem', 'git', 'fetch', 'playwright'], optional: [] },\r\n backend: { default: ['filesystem', 'git', 'fetch'], optional: ['postgres', 'docker'] },\r\n fullstack: { default: ['filesystem', 'git', 'fetch', 'playwright'], optional: ['postgres', 'docker'] },\r\n mobile: { default: ['filesystem', 'git', 'fetch'], optional: [] },\r\n devops: { default: ['filesystem', 'git', 'fetch'], optional: ['docker', 'postgres'] },\r\n 'data-ai': { default: ['filesystem', 'git', 'fetch'], optional: ['postgres'] },\r\n};\r\n\r\n// ---------------------------------------------------------------------------\r\n// Public API\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Get preset-specific MCP server configuration.\r\n * Servers requiring no credentials are enabled by default.\r\n * Servers requiring credentials are included with `requiresCredentials: true`.\r\n */\r\nexport function getMCPConfig(presetName: string): MCPPresetConfig {\r\n const mapping = PRESET_SERVERS[presetName];\r\n if (!mapping) {\r\n return { servers: {} };\r\n }\r\n\r\n const servers: Record<string, MCPServerEntry> = {};\r\n\r\n for (const name of mapping.default) {\r\n const def = SERVER_DEFINITIONS[name];\r\n if (def) {\r\n servers[name] = { ...def };\r\n }\r\n }\r\n\r\n for (const name of mapping.optional) {\r\n const def = SERVER_DEFINITIONS[name];\r\n if (def) {\r\n servers[name] = { ...def };\r\n }\r\n }\r\n\r\n return { servers };\r\n}\r\n\r\n/**\r\n * Merge new MCP config with existing `.mcp.json` without overwriting user entries.\r\n * Existing keys in `mcpServers` are preserved with their original values.\r\n * New keys from incoming config are added (using `_disabled_` prefix for credential servers).\r\n */\r\nexport function mergeMCPConfig(\r\n existing: Record<string, unknown> | null,\r\n incoming: MCPPresetConfig,\r\n): Record<string, unknown> {\r\n const existingServers: Record<string, unknown> =\r\n existing && typeof existing === 'object' && existing !== null\r\n ? ((existing as Record<string, unknown>).mcpServers as Record<string, unknown>) ?? {}\r\n : {};\r\n\r\n const merged: Record<string, unknown> = { ...existingServers };\r\n\r\n for (const [name, entry] of Object.entries(incoming.servers)) {\r\n const outputKey = entry.requiresCredentials ? `_disabled_${name}` : name;\r\n\r\n // Do not overwrite existing user entries (check both enabled and disabled keys).\r\n if (merged[name] !== undefined || merged[`_disabled_${name}`] !== undefined) {\r\n continue;\r\n }\r\n\r\n const serverObj: Record<string, unknown> = { command: entry.command };\r\n if (entry.args && entry.args.length > 0) {\r\n serverObj.args = entry.args;\r\n }\r\n if (entry.env && Object.keys(entry.env).length > 0) {\r\n serverObj.env = entry.env;\r\n }\r\n if (entry.requiresCredentials) {\r\n serverObj._comment = `Requires ${entry.credentialEnvVars?.join(', ') ?? 'credentials'} environment variable. Remove '_disabled_' prefix to enable.`;\r\n }\r\n\r\n merged[outputKey] = serverObj;\r\n }\r\n\r\n const result: Record<string, unknown> = { ...(existing ?? {}) };\r\n result.mcpServers = merged;\r\n return result;\r\n}\r\n\r\n/**\r\n * Write the final `.mcp.json` to workspace root.\r\n * Throws KKError if write fails.\r\n */\r\nexport function writeMCPConfig(\r\n workspaceRoot: string,\r\n config: Record<string, unknown>,\r\n): void {\r\n const filePath = path.join(workspaceRoot, MCP_FILENAME);\r\n const content = JSON.stringify(config, null, 2) + '\\n';\r\n\r\n try {\r\n fs.writeFileSync(filePath, content, 'utf-8');\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : String(err);\r\n throw new KKError(\r\n ErrorCodes.MCP_MERGE_CONFLICT,\r\n `Failed to write ${MCP_FILENAME}: ${message}`,\r\n 'Check file permissions and ensure the directory exists.',\r\n );\r\n }\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport { KKError, ErrorCodes } from './errors.js';\r\nimport type { PowerEntry, PowerTier } from './PowersLoader.js';\r\nimport type { MCPServerEntry } from './MCPConfigurator.js';\r\n\r\n/**\r\n * SetupGuideGenerator — creates POWERS-SETUP.md with installation instructions.\r\n *\r\n * Groups Powers by tier (essential first, then recommended, then optional),\r\n * includes marketplace URLs, and provides step-by-step instructions for\r\n * installing each Power via Kiro IDE.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface SetupGuideOptions {\r\n powers: PowerEntry[];\r\n presetNames: string[];\r\n mcpServers: Record<string, MCPServerEntry>;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Constants\r\n// ---------------------------------------------------------------------------\r\n\r\nconst SETUP_GUIDE_FILENAME = 'POWERS-SETUP.md';\r\nconst KIRO_DIR = '.kiro';\r\n\r\n/** Tier display order and labels. */\r\nconst TIER_ORDER: { tier: PowerTier; heading: string }[] = [\r\n { tier: 'essential', heading: 'Essential Powers (install these first)' },\r\n { tier: 'recommended', heading: 'Recommended Powers' },\r\n { tier: 'optional', heading: 'Optional Powers' },\r\n];\r\n\r\n// ---------------------------------------------------------------------------\r\n// Public API\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Generate POWERS-SETUP.md content.\r\n * Powers are grouped by tier with marketplace URLs and install instructions.\r\n */\r\nexport function generateSetupGuide(options: SetupGuideOptions): string {\r\n const { powers, presetNames, mcpServers } = options;\r\n const lines: string[] = [];\r\n\r\n lines.push('# Kiro Powers Setup Guide');\r\n lines.push('');\r\n lines.push(`## Presets: ${presetNames.join(', ')}`);\r\n lines.push('');\r\n\r\n // Group powers by tier\r\n let counter = 0;\r\n for (const { tier, heading } of TIER_ORDER) {\r\n const tierPowers = powers.filter((p) => p.tier === tier);\r\n if (tierPowers.length === 0) {\r\n continue;\r\n }\r\n\r\n lines.push(`## ${heading}`);\r\n lines.push('');\r\n\r\n for (const power of tierPowers) {\r\n counter += 1;\r\n lines.push(`### ${counter}. ${power.name}`);\r\n lines.push(`- URL: ${power.url}`);\r\n lines.push(`- Description: ${power.description}`);\r\n lines.push(`- How to install: Open Kiro IDE > Powers panel > Search \"${power.name}\" > Click Install`);\r\n lines.push('');\r\n }\r\n }\r\n\r\n // MCP servers section\r\n const serverNames = Object.keys(mcpServers);\r\n if (serverNames.length > 0) {\r\n lines.push('## MCP Servers (auto-configured)');\r\n lines.push('');\r\n lines.push('The following MCP servers have been configured in `.mcp.json`:');\r\n lines.push('');\r\n\r\n for (const name of serverNames) {\r\n const entry = mcpServers[name];\r\n if (entry.requiresCredentials) {\r\n lines.push(`- **${name}** (disabled, requires credentials)`);\r\n } else {\r\n lines.push(`- **${name}** (enabled)`);\r\n }\r\n }\r\n\r\n lines.push('');\r\n lines.push('To enable disabled servers, set the required environment variables');\r\n lines.push('and remove the `_disabled_` prefix from the server key in `.mcp.json`.');\r\n lines.push('');\r\n }\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\n/**\r\n * Write setup guide to .kiro/ directory.\r\n * Creates the .kiro directory if it does not exist.\r\n * Throws KKError if write fails.\r\n */\r\nexport function writeSetupGuide(workspaceRoot: string, content: string): void {\r\n const dirPath = path.join(workspaceRoot, KIRO_DIR);\r\n const filePath = path.join(dirPath, SETUP_GUIDE_FILENAME);\r\n\r\n try {\r\n if (!fs.existsSync(dirPath)) {\r\n fs.mkdirSync(dirPath, { recursive: true });\r\n }\r\n fs.writeFileSync(filePath, content, 'utf-8');\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : String(err);\r\n throw new KKError(\r\n ErrorCodes.MCP_MERGE_CONFLICT,\r\n `Failed to write ${SETUP_GUIDE_FILENAME}: ${message}`,\r\n 'Check file permissions and ensure the .kiro directory is writable.',\r\n );\r\n }\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport { KKError, ErrorCodes } from './errors.js';\r\nimport type { MCPPresetConfig, MCPServerEntry } from './MCPConfigurator.js';\r\nimport type { PowerEntry } from './PowersLoader.js';\r\n\r\n/**\r\n * EnvTemplateGenerator — generates/updates `.env.example` with environment\r\n * variables required by MCP servers and Powers.\r\n *\r\n * Collects variables from credential-requiring servers, groups them by service,\r\n * and appends without duplicating existing entries.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface EnvVariable {\r\n key: string;\r\n placeholder: string;\r\n comment: string;\r\n service: string;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Constants\r\n// ---------------------------------------------------------------------------\r\n\r\nconst ENV_FILENAME = '.env.example';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Public API\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Collect all required env vars from MCP servers that have requiresCredentials=true.\r\n * Also collects placeholder vars for Powers that may need configuration.\r\n */\r\nexport function collectEnvVars(\r\n mcpConfig: MCPPresetConfig,\r\n powers: PowerEntry[],\r\n): EnvVariable[] {\r\n const vars: EnvVariable[] = [];\r\n\r\n // Collect from MCP servers requiring credentials\r\n for (const [name, entry] of Object.entries(mcpConfig.servers)) {\r\n if (!entry.requiresCredentials) {\r\n continue;\r\n }\r\n\r\n const envVars = entry.credentialEnvVars ?? [];\r\n const envMap = entry.env ?? {};\r\n\r\n for (const key of envVars) {\r\n const placeholder = envMap[key] ?? `your-${key.toLowerCase().replace(/_/g, '-')}`;\r\n vars.push({\r\n key,\r\n placeholder,\r\n comment: `Required by ${name} MCP server`,\r\n service: `${name} MCP Server`,\r\n });\r\n }\r\n }\r\n\r\n // Collect from Powers (placeholder entries for Powers that may need env vars)\r\n // Powers are installed via marketplace, but some may need env configuration\r\n for (const power of powers) {\r\n if (power.tier === 'essential' || power.tier === 'recommended') {\r\n // Only include a generic placeholder for Powers that commonly need keys\r\n const knownPowerEnvVars = getKnownPowerEnvVars(power.name);\r\n for (const envVar of knownPowerEnvVars) {\r\n vars.push(envVar);\r\n }\r\n }\r\n }\r\n\r\n return vars;\r\n}\r\n\r\n/**\r\n * Parse existing .env.example content to get a Set of existing keys.\r\n * Ignores comments and blank lines.\r\n */\r\nexport function parseExistingEnv(content: string): Set<string> {\r\n const keys = new Set<string>();\r\n\r\n for (const line of content.split('\\n')) {\r\n const trimmed = line.trim();\r\n // Skip empty lines and comments\r\n if (trimmed === '' || trimmed.startsWith('#')) {\r\n continue;\r\n }\r\n // Extract key from KEY=value or # KEY=value (commented-out vars)\r\n const match = trimmed.match(/^#?\\s*([A-Z_][A-Z0-9_]*)=/);\r\n if (match) {\r\n keys.add(match[1]);\r\n }\r\n }\r\n\r\n return keys;\r\n}\r\n\r\n/**\r\n * Generate .env.example content, appending new vars without duplicating existing keys.\r\n * Variables are grouped by service with comment headers.\r\n */\r\nexport function generateEnvTemplate(\r\n existing: string | null,\r\n newVars: EnvVariable[],\r\n): string {\r\n const existingKeys = existing ? parseExistingEnv(existing) : new Set<string>();\r\n\r\n // Filter out vars that already exist\r\n const varsToAdd = newVars.filter((v) => !existingKeys.has(v.key));\r\n\r\n if (varsToAdd.length === 0) {\r\n return existing ?? '';\r\n }\r\n\r\n // Group by service\r\n const grouped = new Map<string, EnvVariable[]>();\r\n for (const v of varsToAdd) {\r\n const group = grouped.get(v.service) ?? [];\r\n group.push(v);\r\n grouped.set(v.service, group);\r\n }\r\n\r\n // Build new content\r\n const lines: string[] = [];\r\n\r\n for (const [service, vars] of grouped) {\r\n lines.push(`# ${service}`);\r\n for (const v of vars) {\r\n lines.push(`# ${v.comment}`);\r\n lines.push(`# ${v.key}=${v.placeholder}`);\r\n }\r\n lines.push('');\r\n }\r\n\r\n const newContent = lines.join('\\n');\r\n\r\n if (!existing || existing.trim() === '') {\r\n return newContent;\r\n }\r\n\r\n // Append to existing content with separator\r\n const separator = existing.endsWith('\\n') ? '' : '\\n';\r\n return existing + separator + '\\n' + newContent;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// File I/O\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Read existing .env.example from workspace root.\r\n * Returns null if file does not exist.\r\n */\r\nexport function readExistingEnv(workspaceRoot: string): string | null {\r\n const filePath = path.join(workspaceRoot, ENV_FILENAME);\r\n try {\r\n return fs.readFileSync(filePath, 'utf-8');\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Write .env.example to workspace root.\r\n * Throws KKError if write fails.\r\n */\r\nexport function writeEnvTemplate(workspaceRoot: string, content: string): void {\r\n const filePath = path.join(workspaceRoot, ENV_FILENAME);\r\n\r\n try {\r\n fs.writeFileSync(filePath, content, 'utf-8');\r\n } catch (err) {\r\n const message = err instanceof Error ? err.message : String(err);\r\n throw new KKError(\r\n ErrorCodes.MCP_MERGE_CONFLICT,\r\n `Failed to write ${ENV_FILENAME}: ${message}`,\r\n 'Check file permissions or create the file manually.',\r\n );\r\n }\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal Helpers\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Known environment variables for popular Powers.\r\n * Returns empty array for Powers without known env requirements.\r\n */\r\nfunction getKnownPowerEnvVars(powerName: string): EnvVariable[] {\r\n const mapping: Record<string, EnvVariable[]> = {\r\n Supabase: [\r\n {\r\n key: 'SUPABASE_URL',\r\n placeholder: 'https://your-project.supabase.co',\r\n comment: 'Supabase project URL',\r\n service: 'Supabase Power',\r\n },\r\n {\r\n key: 'SUPABASE_ANON_KEY',\r\n placeholder: 'your-anon-key',\r\n comment: 'Supabase anonymous key',\r\n service: 'Supabase Power',\r\n },\r\n ],\r\n Firebase: [\r\n {\r\n key: 'FIREBASE_PROJECT_ID',\r\n placeholder: 'your-project-id',\r\n comment: 'Firebase project ID',\r\n service: 'Firebase Power',\r\n },\r\n ],\r\n Stripe: [\r\n {\r\n key: 'STRIPE_SECRET_KEY',\r\n placeholder: 'sk_test_your-key',\r\n comment: 'Stripe secret key',\r\n service: 'Stripe Power',\r\n },\r\n ],\r\n Datadog: [\r\n {\r\n key: 'DD_API_KEY',\r\n placeholder: 'your-datadog-api-key',\r\n comment: 'Datadog API key',\r\n service: 'Datadog Power',\r\n },\r\n ],\r\n Neon: [\r\n {\r\n key: 'NEON_DATABASE_URL',\r\n placeholder: 'postgresql://user:password@host/dbname',\r\n comment: 'Neon database connection string',\r\n service: 'Neon Power',\r\n },\r\n ],\r\n };\r\n\r\n return mapping[powerName] ?? [];\r\n}\r\n","import readline from 'node:readline';\r\nimport { color } from '../utils/color.js';\r\nimport type { PowerEntry, PowerTier } from '../core/PowersLoader.js';\r\n\r\n/**\r\n * PowersPrompter — interactive tier selection and formatted display\r\n * for Powers recommendations during init flow.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface PowersPromptResult {\r\n selectedTiers: PowerTier[];\r\n confirmMCP: boolean;\r\n}\r\n\r\nexport interface PowersPromptFlags {\r\n powersFlag?: string;\r\n yes?: boolean;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Constants\r\n// ---------------------------------------------------------------------------\r\n\r\nconst TIER_ORDER: PowerTier[] = ['essential', 'recommended', 'optional'];\r\n\r\nconst TIER_LABELS: Record<PowerTier, string> = {\r\n essential: 'Essential',\r\n recommended: 'Recommended',\r\n optional: 'Optional',\r\n};\r\n\r\nconst TIER_OPTIONS: Array<{ label: string; tiers: PowerTier[] }> = [\r\n { label: 'Essential only', tiers: ['essential'] },\r\n { label: 'Essential + Recommended', tiers: ['essential', 'recommended'] },\r\n { label: 'All (Essential + Recommended + Optional)', tiers: ['essential', 'recommended', 'optional'] },\r\n { label: 'None (skip Powers)', tiers: [] },\r\n];\r\n\r\n// ---------------------------------------------------------------------------\r\n// Public API\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Prompt user for Powers tier selection.\r\n * Respects --powers and --yes flags to skip interactive prompts.\r\n *\r\n * - flags.powersFlag === 'none': return empty tiers, confirmMCP=false\r\n * - flags.powersFlag === 'all': return all tiers, confirmMCP=true\r\n * - flags.yes === true: return ['essential', 'recommended'] as default, confirmMCP=true\r\n * - Otherwise: prompt user interactively\r\n */\r\nexport async function promptPowersTier(\r\n powers: PowerEntry[],\r\n flags: PowersPromptFlags,\r\n): Promise<PowersPromptResult> {\r\n // No powers available — nothing to prompt\r\n if (powers.length === 0) {\r\n return { selectedTiers: [], confirmMCP: false };\r\n }\r\n\r\n // --powers=none: skip entirely\r\n if (flags.powersFlag === 'none') {\r\n return { selectedTiers: [], confirmMCP: false };\r\n }\r\n\r\n // --powers=all: include everything\r\n if (flags.powersFlag === 'all') {\r\n return { selectedTiers: ['essential', 'recommended', 'optional'], confirmMCP: true };\r\n }\r\n\r\n // --yes: use sensible defaults without prompting\r\n if (flags.yes === true) {\r\n return { selectedTiers: ['essential', 'recommended'], confirmMCP: true };\r\n }\r\n\r\n // Interactive mode\r\n return interactiveTierPrompt(powers);\r\n}\r\n\r\n/**\r\n * Display formatted Powers recommendations in terminal.\r\n * Groups by tier (essential -> recommended -> optional), shows URLs,\r\n * and prints a summary count at the end.\r\n *\r\n * Skips display when quiet=true.\r\n */\r\nexport function displayPowersRecommendations(\r\n powers: PowerEntry[],\r\n quiet: boolean,\r\n): void {\r\n if (quiet || powers.length === 0) {\r\n return;\r\n }\r\n\r\n process.stdout.write('\\n');\r\n process.stdout.write(color.bold('Recommended Kiro Powers:') + '\\n');\r\n\r\n for (const tier of TIER_ORDER) {\r\n const tierPowers = powers.filter((p) => p.tier === tier);\r\n if (tierPowers.length === 0) continue;\r\n\r\n process.stdout.write('\\n');\r\n process.stdout.write(` ${color.cyan(TIER_LABELS[tier])}:\\n`);\r\n\r\n for (const power of tierPowers) {\r\n process.stdout.write(` ${color.bold(power.name)} - ${power.description}\\n`);\r\n process.stdout.write(` ${color.dim(power.url)}\\n`);\r\n }\r\n }\r\n\r\n // Summary count\r\n const counts = countByTier(powers);\r\n const parts: string[] = [];\r\n if (counts.essential > 0) parts.push(`${counts.essential} essential`);\r\n if (counts.recommended > 0) parts.push(`${counts.recommended} recommended`);\r\n if (counts.optional > 0) parts.push(`${counts.optional} optional`);\r\n\r\n process.stdout.write('\\n');\r\n process.stdout.write(color.dim(`${parts.join(', ')} Powers recommended`) + '\\n');\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Internal helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction countByTier(powers: PowerEntry[]): Record<PowerTier, number> {\r\n const counts: Record<PowerTier, number> = { essential: 0, recommended: 0, optional: 0 };\r\n for (const p of powers) {\r\n counts[p.tier]++;\r\n }\r\n return counts;\r\n}\r\n\r\n/**\r\n * Interactive single-select prompt for tier selection using readline.\r\n * Arrow keys to navigate, Enter to confirm.\r\n */\r\nasync function interactiveTierPrompt(powers: PowerEntry[]): Promise<PowersPromptResult> {\r\n if (!process.stdin.isTTY) {\r\n // Non-interactive fallback: use defaults\r\n return { selectedTiers: ['essential', 'recommended'], confirmMCP: true };\r\n }\r\n\r\n return new Promise<PowersPromptResult>((resolve, reject) => {\r\n let cursor = 1; // Default to \"Essential + Recommended\"\r\n let rendered = false;\r\n\r\n const rl = readline.createInterface({\r\n input: process.stdin,\r\n output: process.stdout,\r\n terminal: false,\r\n });\r\n\r\n const render = (): void => {\r\n if (rendered) {\r\n process.stdout.write('\\x1B[u');\r\n } else {\r\n process.stdout.write('\\x1B[s');\r\n }\r\n rendered = true;\r\n process.stdout.write('\\x1B[J');\r\n process.stdout.write(\r\n color.bold('? Which Powers tiers to include in setup guide?') +\r\n color.dim(' (Arrow keys to select, Enter to confirm)') +\r\n '\\n',\r\n );\r\n for (let i = 0; i < TIER_OPTIONS.length; i++) {\r\n const marker = cursor === i ? color.cyan('>') : ' ';\r\n const label = cursor === i\r\n ? color.cyan(TIER_OPTIONS[i].label)\r\n : TIER_OPTIONS[i].label;\r\n process.stdout.write(` ${marker} ${label}\\n`);\r\n }\r\n };\r\n\r\n render();\r\n\r\n process.stdin.setRawMode(true);\r\n process.stdin.resume();\r\n process.stdin.setEncoding('utf-8');\r\n\r\n let escBuffer = '';\r\n\r\n const handleArrow = (seq: string): boolean => {\r\n if (seq === '\\x1B[A' || seq === '\\x1BOA') {\r\n cursor = (cursor - 1 + TIER_OPTIONS.length) % TIER_OPTIONS.length;\r\n render();\r\n return true;\r\n }\r\n if (seq === '\\x1B[B' || seq === '\\x1BOB') {\r\n cursor = (cursor + 1) % TIER_OPTIONS.length;\r\n render();\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n const cleanup = (): void => {\r\n process.stdin.setRawMode(false);\r\n process.stdin.removeListener('data', onData);\r\n process.stdin.pause();\r\n rl.close();\r\n };\r\n\r\n const onData = (key: string): void => {\r\n // Buffered escape sequence\r\n if (escBuffer.length > 0) {\r\n escBuffer += key;\r\n if (escBuffer.length >= 3) {\r\n const seq = escBuffer;\r\n escBuffer = '';\r\n handleArrow(seq);\r\n }\r\n return;\r\n }\r\n\r\n // Full escape sequence in one chunk\r\n if (key.length >= 3 && key.startsWith('\\x1B')) {\r\n handleArrow(key);\r\n return;\r\n }\r\n\r\n // Start of escape sequence\r\n if (key === '\\x1B') {\r\n escBuffer = key;\r\n setTimeout(() => {\r\n if (escBuffer.length > 0) {\r\n escBuffer = '';\r\n }\r\n }, 50);\r\n return;\r\n }\r\n\r\n // Ctrl+C\r\n if (key === '\\x03') {\r\n cleanup();\r\n reject(new Error('SIGINT'));\r\n return;\r\n }\r\n\r\n // Enter\r\n if (key === '\\r' || key === '\\n') {\r\n cleanup();\r\n const selected = TIER_OPTIONS[cursor];\r\n const confirmMCP = selected.tiers.length > 0;\r\n resolve({ selectedTiers: selected.tiers, confirmMCP });\r\n return;\r\n }\r\n\r\n // Arrow up / k\r\n if (key === 'k') {\r\n cursor = (cursor - 1 + TIER_OPTIONS.length) % TIER_OPTIONS.length;\r\n render();\r\n return;\r\n }\r\n\r\n // Arrow down / j\r\n if (key === 'j') {\r\n cursor = (cursor + 1) % TIER_OPTIONS.length;\r\n render();\r\n return;\r\n }\r\n };\r\n\r\n process.stdin.on('data', onData);\r\n });\r\n}\r\n","/**\r\n * capability.ts — Terminal capability detector.\r\n *\r\n * Single source of truth for what the current terminal can render.\r\n * Every UI component receives a TerminalCapability and falls back accordingly.\r\n *\r\n * Design invariants (always hold):\r\n * - truecolor === true implies color === true\r\n * - animate === true implies isTTY === true\r\n * - columns >= 20\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Interface\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface TerminalCapability {\r\n /** stdout is a TTY (not pipe/file) */\r\n isTTY: boolean;\r\n /** true unless NO_COLOR / --no-color / non-TTY / CI without FORCE_COLOR */\r\n color: boolean;\r\n /** true if terminal likely supports 16M colors (truecolor) */\r\n truecolor: boolean;\r\n /** unicode box-drawing/emoji safe (false on legacy Windows cmd) */\r\n unicode: boolean;\r\n /** OSC-8 hyperlinks supported */\r\n hyperlink: boolean;\r\n /** allow spinners / re-render */\r\n animate: boolean;\r\n /** terminal columns (fallback 80, minimum 20) */\r\n columns: number;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Implementation\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Detect terminal capabilities from environment, argv, and stream.\r\n *\r\n * @param env - process.env (injectable for testing)\r\n * @param argv - process.argv (injectable for testing)\r\n * @param stream - NodeJS.WriteStream, typically process.stdout\r\n * @returns Frozen TerminalCapability object (immutable)\r\n *\r\n * @example\r\n * const cap = detectCapability(process.env, process.argv, process.stdout);\r\n */\r\nexport function detectCapability(\r\n env: NodeJS.ProcessEnv = process.env,\r\n argv: readonly string[] = process.argv,\r\n stream: NodeJS.WriteStream = process.stdout,\r\n): TerminalCapability {\r\n // -------------------------------------------------------------------------\r\n // TTY and columns\r\n // -------------------------------------------------------------------------\r\n const isTTY = stream.isTTY === true;\r\n const rawColumns = typeof stream.columns === 'number' ? stream.columns : 80;\r\n const columns = rawColumns >= 20 ? rawColumns : 80;\r\n\r\n // -------------------------------------------------------------------------\r\n // Color detection\r\n // -------------------------------------------------------------------------\r\n const noColorFlag = Array.isArray(argv) && argv.includes('--no-color');\r\n const noColorEnv =\r\n env['NO_COLOR'] !== undefined && env['NO_COLOR'] !== '';\r\n const forceColor =\r\n env['FORCE_COLOR'] !== undefined && env['FORCE_COLOR'] !== '0';\r\n\r\n let color: boolean;\r\n let truecolor: boolean;\r\n\r\n if (noColorFlag || noColorEnv) {\r\n color = false;\r\n truecolor = false;\r\n } else if (!isTTY && !forceColor) {\r\n color = false;\r\n truecolor = false;\r\n } else {\r\n color = true;\r\n const colorterm = env['COLORTERM'];\r\n truecolor =\r\n colorterm === 'truecolor' || colorterm === '24bit' || forceColor;\r\n }\r\n\r\n // -------------------------------------------------------------------------\r\n // Unicode detection\r\n // -------------------------------------------------------------------------\r\n let unicode: boolean;\r\n\r\n if (\r\n process.platform === 'win32' &&\r\n env['WT_SESSION'] === undefined &&\r\n env['TERM_PROGRAM'] === undefined\r\n ) {\r\n unicode = false;\r\n } else if (env['TERM'] === 'dumb') {\r\n unicode = false;\r\n } else {\r\n unicode = true;\r\n }\r\n\r\n // -------------------------------------------------------------------------\r\n // Hyperlink detection (best-effort, OSC-8)\r\n // -------------------------------------------------------------------------\r\n const termProgram = env['TERM_PROGRAM'];\r\n const hyperlinkTerminals = new Set([\r\n 'iTerm.app',\r\n 'WezTerm',\r\n 'vscode',\r\n 'Hyper',\r\n ]);\r\n const hyperlink =\r\n isTTY && color && termProgram !== undefined && hyperlinkTerminals.has(termProgram);\r\n\r\n // -------------------------------------------------------------------------\r\n // Animation\r\n // -------------------------------------------------------------------------\r\n const isCI = env['CI'] !== undefined && env['CI'] !== '';\r\n const animate = isTTY && (!isCI || forceColor);\r\n\r\n // -------------------------------------------------------------------------\r\n // Invariant assertions (always hold by construction)\r\n // truecolor → color, animate → isTTY\r\n // -------------------------------------------------------------------------\r\n\r\n const result: TerminalCapability = {\r\n isTTY,\r\n color,\r\n truecolor,\r\n unicode,\r\n hyperlink,\r\n animate,\r\n columns,\r\n };\r\n\r\n return Object.freeze(result);\r\n}\r\n","/**\r\n * Lazy import adapter for ESM-only vendor packages.\r\n *\r\n * Each loadX() function uses dynamic import() with try/catch so that:\r\n * - The promise is cached after the first resolve (no re-importing).\r\n * - null is returned when a load fails; callers must handle the null fallback.\r\n *\r\n * This keeps postinstall and lightweight commands (list, --version) free of\r\n * the cold-start cost of loading figlet, boxen, ora, listr2, etc.\r\n */\r\n\r\n// ---------------------------------------------------------------------------\r\n// Types — use the default export shape for packages whose @types ship CJS-style\r\n// ---------------------------------------------------------------------------\r\n\r\nimport type { ChalkInstance } from 'chalk';\r\nimport type * as FigletNS from 'figlet';\r\nimport type * as GradientNS from 'gradient-string';\r\nimport type { Options as BoxenOptions } from 'boxen';\r\nimport type { Ora, Options as OraOptions } from 'ora';\r\nimport type { Listr, ListrTask, ListrOptions } from 'listr2';\r\nimport type { PromptObject, Answers, Options as PromptsOptions } from 'prompts';\r\nimport type terminalLinkDefault from 'terminal-link';\r\n\r\n// Re-export convenience types for callers\r\nexport type { ChalkInstance, BoxenOptions, OraOptions, Ora, Listr, ListrTask, ListrOptions, PromptObject, Answers, PromptsOptions };\r\n\r\n/** The callable chalk instance (default export of chalk@5) */\r\nexport type ChalkLike = ChalkInstance;\r\n\r\n/** figlet namespace (text, textSync, etc.) */\r\nexport type FigletLike = typeof FigletNS;\r\n\r\n/** gradient-string default export (callable function + named gradients) */\r\nexport type GradientStringLike = typeof GradientNS.default;\r\n\r\n/** boxen default export (callable function) */\r\nexport type BoxenFn = (text: string, options?: BoxenOptions) => string;\r\n\r\n/** ora default export (callable factory) */\r\nexport type OraFn = (options?: string | OraOptions) => Ora;\r\n\r\n/** Listr constructor */\r\nexport type ListrCtor = typeof Listr;\r\n\r\n/** prompts default export (callable function) */\r\nexport type PromptsFn = <T extends string = string>(\r\n questions: PromptObject<T> | PromptObject<T>[],\r\n options?: PromptsOptions,\r\n) => Promise<Answers<T>>;\r\n\r\n/** terminal-link default export */\r\nexport type TerminalLinkFn = typeof terminalLinkDefault;\r\n\r\n// ---------------------------------------------------------------------------\r\n// Cache slots — typed as Promise<T | null> | undefined (undefined = not yet started)\r\n// ---------------------------------------------------------------------------\r\n\r\nlet _chalk: Promise<ChalkLike | null> | undefined;\r\nlet _figlet: Promise<FigletLike | null> | undefined;\r\nlet _gradientString: Promise<GradientStringLike | null> | undefined;\r\nlet _boxen: Promise<BoxenFn | null> | undefined;\r\nlet _ora: Promise<OraFn | null> | undefined;\r\nlet _listr2: Promise<ListrCtor | null> | undefined;\r\nlet _prompts: Promise<PromptsFn | null> | undefined;\r\nlet _terminalLink: Promise<TerminalLinkFn | null> | undefined;\r\n\r\n// ---------------------------------------------------------------------------\r\n// Loaders\r\n// ---------------------------------------------------------------------------\r\n\r\n/** Load chalk. Returns the default ChalkInstance, or null if unavailable. */\r\nexport function loadChalk(): Promise<ChalkLike | null> {\r\n if (_chalk === undefined) {\r\n _chalk = import('chalk')\r\n .then((m) => m.default as ChalkLike)\r\n .catch(() => null);\r\n }\r\n return _chalk;\r\n}\r\n\r\n/** Load figlet. Returns the figlet namespace, or null if unavailable. */\r\nexport function loadFiglet(): Promise<FigletLike | null> {\r\n if (_figlet === undefined) {\r\n _figlet = import('figlet')\r\n .then((m) => m as unknown as FigletLike)\r\n .catch(() => null);\r\n }\r\n return _figlet;\r\n}\r\n\r\n/** Load gradient-string. Returns the default callable, or null if unavailable. */\r\nexport function loadGradientString(): Promise<GradientStringLike | null> {\r\n if (_gradientString === undefined) {\r\n _gradientString = import('gradient-string')\r\n .then((m) => m.default as GradientStringLike)\r\n .catch(() => null);\r\n }\r\n return _gradientString;\r\n}\r\n\r\n/** Load boxen. Returns the default callable, or null if unavailable. */\r\nexport function loadBoxen(): Promise<BoxenFn | null> {\r\n if (_boxen === undefined) {\r\n _boxen = import('boxen')\r\n .then((m) => m.default as BoxenFn)\r\n .catch(() => null);\r\n }\r\n return _boxen;\r\n}\r\n\r\n/** Load ora. Returns the default factory, or null if unavailable. */\r\nexport function loadOra(): Promise<OraFn | null> {\r\n if (_ora === undefined) {\r\n _ora = import('ora')\r\n .then((m) => m.default as OraFn)\r\n .catch(() => null);\r\n }\r\n return _ora;\r\n}\r\n\r\n/** Load listr2. Returns the Listr constructor, or null if unavailable. */\r\nexport function loadListr2(): Promise<ListrCtor | null> {\r\n if (_listr2 === undefined) {\r\n _listr2 = import('listr2')\r\n .then((m) => m.Listr as ListrCtor)\r\n .catch(() => null);\r\n }\r\n return _listr2;\r\n}\r\n\r\n/** Load prompts. Returns the default callable, or null if unavailable. */\r\nexport function loadPrompts(): Promise<PromptsFn | null> {\r\n if (_prompts === undefined) {\r\n _prompts = import('prompts')\r\n .then((m) => m.default as unknown as PromptsFn)\r\n .catch(() => null);\r\n }\r\n return _prompts;\r\n}\r\n\r\n/** Load terminal-link. Returns the default callable, or null if unavailable. */\r\nexport function loadTerminalLink(): Promise<TerminalLinkFn | null> {\r\n if (_terminalLink === undefined) {\r\n _terminalLink = import('terminal-link')\r\n .then((m) => m.default as TerminalLinkFn)\r\n .catch(() => null);\r\n }\r\n return _terminalLink;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Reset helpers (test-only — allow injecting failures)\r\n// ---------------------------------------------------------------------------\r\n\r\n/** @internal Reset all cached promises. Used in tests to simulate load failures. */\r\nexport function _resetVendorCache(): void {\r\n _chalk = undefined;\r\n _figlet = undefined;\r\n _gradientString = undefined;\r\n _boxen = undefined;\r\n _ora = undefined;\r\n _listr2 = undefined;\r\n _prompts = undefined;\r\n _terminalLink = undefined;\r\n}\r\n","/**\r\n * theme.ts — Palette, semantic tokens, and color helper factory.\r\n *\r\n * Separates color values from components. All styling goes through\r\n * ThemeTokens methods so that color=false produces clean plain text.\r\n *\r\n * Usage:\r\n * const theme = await createTheme(capability);\r\n * console.log(theme.heading('Hello'));\r\n */\r\n\r\nimport type { TerminalCapability } from './capability.js';\r\nimport {\r\n loadChalk,\r\n loadTerminalLink,\r\n type ChalkLike,\r\n type TerminalLinkFn,\r\n} from './vendor.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Interfaces\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface ThemePalette {\r\n primary: string; // #a970ff\r\n secondary: string; // #8bd5ff\r\n muted: string; // #6f6a7c\r\n text: string; // #f4f1ff\r\n danger: string; // #ff5c8a\r\n success: string; // #22c55e\r\n warn: string; // #f5b042\r\n}\r\n\r\nexport interface ThemeTokens {\r\n /** Gradient stops for logo (primary → secondary) */\r\n readonly logoGradient: readonly [string, string, ...string[]];\r\n /** Style primitives — each returns a styled string */\r\n heading: (s: string) => string;\r\n command: (s: string) => string;\r\n flag: (s: string) => string;\r\n pathStyle: (s: string) => string;\r\n success: (s: string) => string;\r\n danger: (s: string) => string;\r\n muted: (s: string) => string;\r\n /**\r\n * Render a hyperlink.\r\n * Validates that url starts with https:// or mailto:.\r\n * Uses OSC-8 terminal-link when capability.hyperlink=true,\r\n * otherwise falls back to \"label (url)\".\r\n */\r\n link: (label: string, url: string) => string;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Default palette\r\n// ---------------------------------------------------------------------------\r\n\r\nexport const DEFAULT_PALETTE: ThemePalette = {\r\n primary: '#a970ff',\r\n secondary: '#8bd5ff',\r\n muted: '#6f6a7c',\r\n text: '#f4f1ff',\r\n danger: '#ff5c8a',\r\n success: '#22c55e',\r\n warn: '#f5b042',\r\n};\r\n\r\n// ---------------------------------------------------------------------------\r\n// Validation helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nconst HEX_REGEX = /^#[0-9a-fA-F]{6}$/;\r\n\r\nfunction validatePalette(palette: ThemePalette): void {\r\n for (const [field, value] of Object.entries(palette) as [keyof ThemePalette, string][]) {\r\n if (!HEX_REGEX.test(value)) {\r\n throw new Error(\r\n `ThemePalette.${field} is not a valid hex color: \"${value}\". Expected format: #rrggbb`,\r\n );\r\n }\r\n }\r\n if (palette.primary === palette.secondary) {\r\n throw new Error(\r\n `ThemePalette.primary and ThemePalette.secondary must be different colors (gradient requires distinct stops).`,\r\n );\r\n }\r\n}\r\n\r\nconst VALID_URL_SCHEMES = ['https://', 'mailto:'];\r\n\r\nfunction validateUrl(url: string): void {\r\n const valid = VALID_URL_SCHEMES.some((scheme) => url.startsWith(scheme));\r\n if (!valid) {\r\n throw new Error(\r\n `link() URL must start with https:// or mailto:, got: \"${url}\"`,\r\n );\r\n }\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// ANSI 256 color approximation helper\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Convert a hex color string to the nearest xterm-256 color index.\r\n * Uses the 6x6x6 color cube (indices 16–231).\r\n */\r\nfunction hexToAnsi256(hex: string): number {\r\n const r = parseInt(hex.slice(1, 3), 16);\r\n const g = parseInt(hex.slice(3, 5), 16);\r\n const b = parseInt(hex.slice(5, 7), 16);\r\n // Map each channel to 0-5 range\r\n const ri = Math.round((r / 255) * 5);\r\n const gi = Math.round((g / 255) * 5);\r\n const bi = Math.round((b / 255) * 5);\r\n return 16 + 36 * ri + 6 * gi + bi;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Factory\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Create theme tokens for the given capability.\r\n *\r\n * This is an async factory because it pre-loads terminal-link for the\r\n * sync link() helper. If terminal-link is unavailable, link() falls back\r\n * to \"label (url)\" format.\r\n *\r\n * @param capability - Detected terminal capability\r\n * @param palette - Optional partial palette override (merged with defaults)\r\n */\r\nexport async function createTheme(\r\n capability: TerminalCapability,\r\n palette?: Partial<ThemePalette>,\r\n): Promise<ThemeTokens> {\r\n // Merge palette with defaults\r\n const merged: ThemePalette = { ...DEFAULT_PALETTE, ...palette };\r\n validatePalette(merged);\r\n\r\n // Pre-load terminal-link so link() can be sync\r\n let terminalLinkFn: TerminalLinkFn | null = null;\r\n if (capability.hyperlink) {\r\n terminalLinkFn = await loadTerminalLink();\r\n }\r\n\r\n // -------------------------------------------------------------------------\r\n // No-color path: identity functions\r\n // -------------------------------------------------------------------------\r\n if (!capability.color) {\r\n const identity = (s: string): string => s;\r\n const linkFn = (label: string, url: string): string => {\r\n validateUrl(url);\r\n return `${label} (${url})`;\r\n };\r\n\r\n return {\r\n logoGradient: [merged.primary, merged.secondary],\r\n heading: identity,\r\n command: identity,\r\n flag: identity,\r\n pathStyle: identity,\r\n success: identity,\r\n danger: identity,\r\n muted: identity,\r\n link: linkFn,\r\n };\r\n }\r\n\r\n // -------------------------------------------------------------------------\r\n // Color path: load chalk\r\n // -------------------------------------------------------------------------\r\n const chalk: ChalkLike | null = await loadChalk();\r\n\r\n // Helper: apply hex color via chalk (truecolor) or ansi256 fallback\r\n function applyColor(hex: string): (s: string) => string {\r\n if (!chalk) {\r\n // chalk unavailable — return identity\r\n return (s: string) => s;\r\n }\r\n if (capability.truecolor) {\r\n return (s: string) => chalk.hex(hex)(s);\r\n }\r\n // ANSI 256 approximation\r\n const idx = hexToAnsi256(hex);\r\n return (s: string) => chalk.ansi256(idx)(s);\r\n }\r\n\r\n const primaryFn = applyColor(merged.primary);\r\n const secondaryFn = applyColor(merged.secondary);\r\n const mutedFn = applyColor(merged.muted);\r\n const successFn = applyColor(merged.success);\r\n const dangerFn = applyColor(merged.danger);\r\n\r\n const headingFn = (s: string): string =>\r\n chalk ? chalk.bold(primaryFn(s)) : primaryFn(s);\r\n\r\n const commandFn = (s: string): string =>\r\n chalk ? chalk.bold(secondaryFn(s)) : secondaryFn(s);\r\n\r\n const flagFn = (s: string): string => mutedFn(s);\r\n\r\n const pathStyleFn = (s: string): string =>\r\n chalk ? chalk.underline(secondaryFn(s)) : secondaryFn(s);\r\n\r\n const linkFn = (label: string, url: string): string => {\r\n validateUrl(url);\r\n if (capability.hyperlink && terminalLinkFn) {\r\n return terminalLinkFn(label, url);\r\n }\r\n return `${label} (${url})`;\r\n };\r\n\r\n return {\r\n logoGradient: [merged.primary, merged.secondary],\r\n heading: headingFn,\r\n command: commandFn,\r\n flag: flagFn,\r\n pathStyle: pathStyleFn,\r\n success: successFn,\r\n danger: dangerFn,\r\n muted: mutedFn,\r\n link: linkFn,\r\n };\r\n}\r\n","/**\r\n * Logo.ts — ASCII logo renderer for the welcome screen.\r\n *\r\n * Renders a large figlet logo with gradient when the terminal supports it,\r\n * gracefully degrading to compact single-line form for narrow or plain terminals.\r\n *\r\n * Never writes to stdout — callers receive a string and decide when/where to print.\r\n *\r\n * Render paths:\r\n * unicode=true && color=true && columns>=60 → figlet + gradient\r\n * color=false (unicode=true && columns>=60) → figlet plain (no ANSI)\r\n * unicode=false || columns<60 → compact \"kiro-kit vX.Y.Z\\nsubtitle\"\r\n * vendor figlet/gradient unavailable → compact fallback\r\n */\r\n\r\nimport type { TerminalCapability } from './capability.js';\r\nimport type { ThemeTokens } from './theme.js';\r\nimport { loadFiglet, loadGradientString } from './vendor.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Interfaces\r\n// ---------------------------------------------------------------------------\r\n\r\nexport type LogoFont =\r\n | 'ANSI Shadow'\r\n | 'Big'\r\n | 'Slant'\r\n | '3D-ASCII'\r\n | 'Bloody';\r\n\r\nexport interface LogoOptions {\r\n /** Text to render as ASCII art. Default: 'kiro-kit' */\r\n text?: string;\r\n /** figlet font. Default: 'ANSI Shadow' */\r\n font?: LogoFont;\r\n /** Subtitle shown below the logo. */\r\n subtitle?: string;\r\n /** Version string (e.g. '0.3.1'). Shown as \"vX.Y.Z\" */\r\n version?: string;\r\n}\r\n\r\nexport interface LogoRenderer {\r\n /** Render the logo according to capability. Returns a multi-line string. */\r\n render(opts: LogoOptions): string;\r\n /** Compact single-line fallback: \"kiro-kit vX.Y.Z\\nsubtitle\" */\r\n renderCompact(opts: LogoOptions): string;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Factory\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Create a LogoRenderer bound to the given capability and theme.\r\n *\r\n * The renderer is synchronous — vendor modules must be pre-loaded before\r\n * calling render(). Use createLogoAsync() to pre-load and get a ready renderer.\r\n *\r\n * @param capability - Detected terminal capability\r\n * @param theme - Theme tokens for styling\r\n * @param figlet - Pre-loaded figlet module (or null for compact fallback)\r\n * @param gradient - Pre-loaded gradient-string (or null for plain fallback)\r\n */\r\nfunction createLogoSync(\r\n capability: TerminalCapability,\r\n theme: ThemeTokens,\r\n figlet: import('./vendor.js').FigletLike | null,\r\n gradient: import('./vendor.js').GradientStringLike | null,\r\n): LogoRenderer {\r\n // -------------------------------------------------------------------------\r\n // Compact renderer (always available)\r\n // -------------------------------------------------------------------------\r\n function renderCompact(opts: LogoOptions): string {\r\n const text = opts.text ?? 'kiro-kit';\r\n const version = opts.version ?? '';\r\n const subtitle = opts.subtitle ?? '';\r\n\r\n let line = text;\r\n if (version) line += ` v${version}`;\r\n line = theme.heading(line);\r\n\r\n if (subtitle) {\r\n line += `\\n${theme.muted(subtitle)}`;\r\n }\r\n return line;\r\n }\r\n\r\n // -------------------------------------------------------------------------\r\n // Full renderer\r\n // -------------------------------------------------------------------------\r\n function render(opts: LogoOptions): string {\r\n const text = opts.text ?? 'kiro-kit';\r\n const font = opts.font ?? 'ANSI Shadow';\r\n const subtitle = opts.subtitle ?? '';\r\n const version = opts.version ?? '';\r\n\r\n // Compact path: too narrow, unicode disabled, or vendor unavailable\r\n if (\r\n capability.columns < 60 ||\r\n !capability.unicode ||\r\n figlet === null\r\n ) {\r\n return renderCompact(opts);\r\n }\r\n\r\n // Generate figlet ASCII art\r\n let ascii: string;\r\n try {\r\n ascii = figlet.textSync(text, {\r\n font: font as Parameters<typeof figlet.textSync>[1] extends { font?: infer F } ? F : string,\r\n horizontalLayout: 'default',\r\n });\r\n } catch {\r\n // figlet failed (e.g. font not found) — fall back to compact\r\n return renderCompact(opts);\r\n }\r\n\r\n // Apply gradient or plain\r\n let body: string;\r\n if (capability.color && gradient !== null) {\r\n try {\r\n body = gradient(theme.logoGradient as unknown as string[])(ascii);\r\n } catch {\r\n // gradient failed — use plain\r\n body = ascii;\r\n }\r\n } else {\r\n // color=false: plain figlet, no ANSI bytes\r\n body = ascii;\r\n }\r\n\r\n // Append tagline\r\n if (subtitle || version) {\r\n let tagline = subtitle;\r\n if (version) {\r\n tagline += (subtitle ? ' ' : '') + `v${version}`;\r\n }\r\n body += `\\n${theme.muted(tagline)}`;\r\n }\r\n\r\n return body;\r\n }\r\n\r\n return { render, renderCompact };\r\n}\r\n\r\n/**\r\n * Create a LogoRenderer, pre-loading vendor modules.\r\n *\r\n * @param capability - Detected terminal capability\r\n * @param theme - Theme tokens for styling\r\n */\r\nexport async function createLogo(\r\n capability: TerminalCapability,\r\n theme: ThemeTokens,\r\n): Promise<LogoRenderer> {\r\n // Only load vendors if we might need them\r\n const needsFull =\r\n capability.unicode && capability.columns >= 60;\r\n\r\n const [figlet, gradient] = await Promise.all([\r\n needsFull ? loadFiglet() : Promise.resolve(null),\r\n needsFull && capability.color ? loadGradientString() : Promise.resolve(null),\r\n ]);\r\n\r\n return createLogoSync(capability, theme, figlet, gradient);\r\n}\r\n\r\n/**\r\n * Synchronous factory for use when vendor modules are already loaded externally.\r\n * Prefer createLogo() (async) in normal usage.\r\n */\r\nexport { createLogoSync };\r\n","/**\r\n * ThemedBox.ts — Bordered box renderer with variant support.\r\n *\r\n * Wraps boxen when available, falls back to a hand-drawn ASCII box.\r\n * Supports info/tip/success/warn/error variants mapped to theme colors.\r\n *\r\n * Border styles:\r\n * unicode=true → 'round' (╭─╮ style)\r\n * unicode=false → 'classic' (+/-/| style)\r\n *\r\n * Width defaults to min(capability.columns - 4, 80).\r\n * When columns < 40, padding is forced to 0.\r\n */\r\n\r\nimport type { TerminalCapability } from './capability.js';\r\nimport type { ThemeTokens } from './theme.js';\r\nimport { loadBoxen, loadChalk } from './vendor.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Interfaces\r\n// ---------------------------------------------------------------------------\r\n\r\nexport type BoxVariant = 'info' | 'tip' | 'success' | 'warn' | 'error';\r\n\r\nexport interface ThemedBoxOptions {\r\n /** Title shown on the top border */\r\n title?: string;\r\n /** Visual variant controlling border color. Default: 'info' */\r\n variant?: BoxVariant;\r\n /** Inner padding (spaces). Default: 1. Forced to 0 when columns < 40. */\r\n padding?: number;\r\n /** Box width. Default: min(capability.columns - 4, 80) */\r\n width?: number;\r\n}\r\n\r\nexport interface ThemedBoxRenderer {\r\n render(content: string, opts?: ThemedBoxOptions): string;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Variant → palette key mapping\r\n// ---------------------------------------------------------------------------\r\n\r\ntype PaletteKey = 'primary' | 'secondary' | 'success' | 'warn' | 'danger';\r\n\r\nconst VARIANT_COLOR: Record<BoxVariant, PaletteKey> = {\r\n info: 'primary',\r\n tip: 'secondary',\r\n success: 'success',\r\n warn: 'warn',\r\n error: 'danger',\r\n};\r\n\r\n// Default hex values matching DEFAULT_PALETTE (used in ASCII fallback)\r\nconst VARIANT_HEX: Record<BoxVariant, string> = {\r\n info: '#a970ff',\r\n tip: '#8bd5ff',\r\n success: '#22c55e',\r\n warn: '#f5b042',\r\n error: '#ff5c8a',\r\n};\r\n\r\n// ---------------------------------------------------------------------------\r\n// ASCII fallback box drawing\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Draw a simple ASCII box using +/-/| characters.\r\n * Used when boxen is unavailable.\r\n */\r\nfunction drawAsciiBox(\r\n content: string,\r\n title: string | undefined,\r\n width: number,\r\n padding: number,\r\n colorBorder: (s: string) => string,\r\n): string {\r\n const innerWidth = width - 2; // subtract left and right border chars\r\n\r\n // Top border\r\n const topFill = '-'.repeat(innerWidth);\r\n let topBorder: string;\r\n if (title) {\r\n const titleStr = ` ${title} `;\r\n const remaining = innerWidth - titleStr.length;\r\n const leftDashes = Math.max(0, Math.floor(remaining / 2));\r\n const rightDashes = Math.max(0, innerWidth - titleStr.length - leftDashes);\r\n topBorder = colorBorder('+' + '-'.repeat(leftDashes) + titleStr + '-'.repeat(rightDashes) + '+');\r\n } else {\r\n topBorder = colorBorder('+' + topFill + '+');\r\n }\r\n\r\n const bottomBorder = colorBorder('+' + '-'.repeat(innerWidth) + '+');\r\n const emptyLine = colorBorder('|') + ' '.repeat(innerWidth) + colorBorder('|');\r\n\r\n const lines: string[] = [];\r\n lines.push(topBorder);\r\n\r\n // Padding lines above content\r\n for (let i = 0; i < padding; i++) {\r\n lines.push(emptyLine);\r\n }\r\n\r\n // Content lines\r\n const contentLines = content.split('\\n');\r\n for (const line of contentLines) {\r\n // Truncate/pad to innerWidth - 2*padding\r\n const contentInner = innerWidth - 2 * padding;\r\n const visLen = visibleLength(line);\r\n if (visLen > contentInner) {\r\n // Truncate visible content\r\n lines.push(\r\n colorBorder('|') +\r\n ' '.repeat(padding) +\r\n truncateVisible(line, contentInner) +\r\n ' '.repeat(padding) +\r\n colorBorder('|'),\r\n );\r\n } else {\r\n const pad = contentInner - visLen;\r\n lines.push(\r\n colorBorder('|') +\r\n ' '.repeat(padding) +\r\n line +\r\n ' '.repeat(pad) +\r\n ' '.repeat(padding) +\r\n colorBorder('|'),\r\n );\r\n }\r\n }\r\n\r\n // Padding lines below content\r\n for (let i = 0; i < padding; i++) {\r\n lines.push(emptyLine);\r\n }\r\n\r\n lines.push(bottomBorder);\r\n return lines.join('\\n');\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Visible length (strip ANSI escape sequences)\r\n// ---------------------------------------------------------------------------\r\n\r\nconst ANSI_ESCAPE_RE = /\\x1B\\[[0-9;]*m|\\x9B[0-9;]*m/g;\r\n\r\nfunction visibleLength(s: string): number {\r\n return s.replace(ANSI_ESCAPE_RE, '').length;\r\n}\r\n\r\nfunction truncateVisible(s: string, maxLen: number): string {\r\n // Simple truncation: strip ANSI, truncate, return truncated plain text\r\n const plain = s.replace(ANSI_ESCAPE_RE, '');\r\n return plain.slice(0, maxLen);\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Factory\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Create a ThemedBoxRenderer bound to the given capability and theme.\r\n *\r\n * @param capability - Detected terminal capability\r\n * @param theme - Theme tokens for styling\r\n */\r\nexport async function createThemedBox(\r\n capability: TerminalCapability,\r\n theme: ThemeTokens,\r\n): Promise<ThemedBoxRenderer> {\r\n const [boxen, chalk] = await Promise.all([\r\n loadBoxen(),\r\n loadChalk(),\r\n ]);\r\n\r\n function render(content: string, opts?: ThemedBoxOptions): string {\r\n const variant: BoxVariant = opts?.variant ?? 'info';\r\n const title = opts?.title;\r\n const defaultWidth = Math.min(capability.columns - 4, 80);\r\n const width = opts?.width ?? defaultWidth;\r\n const padding = capability.columns < 40 ? 0 : (opts?.padding ?? 1);\r\n\r\n // Determine border color function\r\n let colorBorder: (s: string) => string;\r\n\r\n if (!capability.color) {\r\n colorBorder = (s: string) => s;\r\n } else if (chalk) {\r\n const hexColor = VARIANT_HEX[variant];\r\n if (capability.truecolor) {\r\n colorBorder = (s: string) => chalk.hex(hexColor)(s);\r\n } else {\r\n // ANSI 256 approximation\r\n const r = parseInt(hexColor.slice(1, 3), 16);\r\n const g = parseInt(hexColor.slice(3, 5), 16);\r\n const b = parseInt(hexColor.slice(5, 7), 16);\r\n const ri = Math.round((r / 255) * 5);\r\n const gi = Math.round((g / 255) * 5);\r\n const bi = Math.round((b / 255) * 5);\r\n const idx = 16 + 36 * ri + 6 * gi + bi;\r\n colorBorder = (s: string) => chalk.ansi256(idx)(s);\r\n }\r\n } else {\r\n colorBorder = (s: string) => s;\r\n }\r\n\r\n // Use boxen when available\r\n if (boxen) {\r\n try {\r\n const borderStyle = capability.unicode ? 'round' : 'classic';\r\n const borderColor = capability.color ? VARIANT_HEX[variant] : undefined;\r\n\r\n const boxenOpts: Parameters<typeof boxen>[1] = {\r\n borderStyle,\r\n padding,\r\n width,\r\n title,\r\n titleAlignment: 'left',\r\n };\r\n\r\n // Apply border color via chalk if available\r\n if (borderColor && chalk) {\r\n // boxen accepts borderColor as hex string in newer versions\r\n (boxenOpts as Record<string, unknown>)['borderColor'] = borderColor;\r\n }\r\n\r\n return boxen(content, boxenOpts);\r\n } catch {\r\n // boxen failed — fall through to ASCII fallback\r\n }\r\n }\r\n\r\n // ASCII fallback\r\n return drawAsciiBox(content, title, Math.max(width, 20), padding, colorBorder);\r\n }\r\n\r\n return { render };\r\n}\r\n","/**\r\n * InitScreens.ts — Composed UI screens for the init command.\r\n *\r\n * Assembles Logo, ThemedBox, and theme primitives into the three screens\r\n * that init.ts calls sequentially:\r\n * 1. welcome(data) — logo + tip box + command list\r\n * 2. summary(data) — success box with file counts, paths, next steps\r\n * 3. errorBox(err) — error box with message + verbose hint\r\n *\r\n * Security: any string sourced from the filesystem (paths) is sanitized\r\n * by stripping ANSI escape sequences before rendering.\r\n *\r\n * This module is pure presentation — it never imports from src/core/*.\r\n */\r\n\r\nimport type { TerminalCapability } from '../capability.js';\r\nimport type { ThemeTokens } from '../theme.js';\r\nimport { createLogo } from '../Logo.js';\r\nimport { createThemedBox } from '../ThemedBox.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Interfaces\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface InitContext {\r\n capability: TerminalCapability;\r\n theme: ThemeTokens;\r\n cliVersion: string;\r\n}\r\n\r\nexport interface WelcomeData {\r\n cliVersion: string;\r\n /** Content for the \"Did you know?\" tip box */\r\n tipText: string;\r\n commands: Array<{ name: string; description: string }>;\r\n}\r\n\r\nexport interface SummaryData {\r\n filesWritten: number;\r\n filesSkipped: number;\r\n presets: string[];\r\n /** If defined, shown as \"Setup guide: <path>\" */\r\n setupGuidePath?: string;\r\n /** If defined, shown as \"Env template: <path>\" */\r\n envExamplePath?: string;\r\n nextSteps: string[];\r\n docsUrl: string;\r\n}\r\n\r\nexport interface InitScreens {\r\n welcome(data: WelcomeData): void;\r\n summary(data: SummaryData): void;\r\n errorBox(err: Error): void;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Sanitization helper\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Strip ANSI/CSI escape sequences from a string.\r\n * Removes both ESC-based (\\x1B[...m) and C1-based (\\x9B[...m) sequences.\r\n * Applied to any string sourced from the filesystem before rendering.\r\n */\r\nfunction sanitizePath(s: string): string {\r\n // Strip ESC [ ... sequences (CSI) and standalone ESC sequences\r\n // Also strip C1 CSI (\\x9B) sequences\r\n return s\r\n .replace(/\\x1B\\[[0-9;]*[A-Za-z]/g, '')\r\n .replace(/\\x9B[0-9;]*[A-Za-z]/g, '')\r\n .replace(/\\x1B[^[]/g, '');\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Factory\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Create the InitScreens object for the given context.\r\n *\r\n * All component factories are async; this factory pre-loads them so that\r\n * the returned screen methods are synchronous (no await at call site).\r\n *\r\n * @param ctx - InitContext with capability, theme, and cliVersion\r\n */\r\nexport async function createInitScreens(ctx: InitContext): Promise<InitScreens> {\r\n const { capability, theme, cliVersion } = ctx;\r\n\r\n // Pre-load async component factories\r\n const [logo, box] = await Promise.all([\r\n createLogo(capability, theme),\r\n createThemedBox(capability, theme),\r\n ]);\r\n\r\n // -------------------------------------------------------------------------\r\n // welcome(data)\r\n // Implements Algorithm: renderInitWelcome from design.md\r\n // -------------------------------------------------------------------------\r\n function welcome(data: WelcomeData): void {\r\n // 1. Logo\r\n const logoStr = logo.render({\r\n text: 'kiro-kit',\r\n font: 'ANSI Shadow',\r\n version: data.cliVersion,\r\n subtitle: 'Engineer-grade Kiro presets',\r\n });\r\n process.stdout.write(logoStr + '\\n');\r\n\r\n // 2. Blank line\r\n process.stdout.write('\\n');\r\n\r\n // 3. Tip box (variant='tip', title='Did you know?')\r\n const tipBox = box.render(data.tipText, {\r\n title: 'Did you know?',\r\n variant: 'tip',\r\n });\r\n process.stdout.write(tipBox + '\\n');\r\n\r\n // 4. Blank line\r\n process.stdout.write('\\n');\r\n\r\n // 5. Heading + command list\r\n process.stdout.write(theme.heading('Available commands:') + '\\n');\r\n\r\n for (const cmd of data.commands) {\r\n // Pad the raw name to 20 chars first, then apply styling so ANSI\r\n // escape bytes don't inflate the visible width calculation.\r\n const paddedName = theme.command(cmd.name.padEnd(20));\r\n const desc = theme.muted(cmd.description);\r\n process.stdout.write(` ${paddedName}${desc}\\n`);\r\n }\r\n\r\n // 6. Trailing blank line\r\n process.stdout.write('\\n');\r\n }\r\n\r\n // -------------------------------------------------------------------------\r\n // summary(data)\r\n // Renders a success box with file counts, preset list, optional paths,\r\n // next steps, and a docs link.\r\n // -------------------------------------------------------------------------\r\n function summary(data: SummaryData): void {\r\n const lines: string[] = [];\r\n\r\n // File counts\r\n lines.push(\r\n `${theme.success(String(data.filesWritten))} files written, ` +\r\n `${theme.muted(String(data.filesSkipped))} skipped`,\r\n );\r\n\r\n // Preset list\r\n lines.push(`Presets: ${theme.command(data.presets.join(', '))}`);\r\n\r\n // Optional paths — sanitize before rendering\r\n if (data.setupGuidePath !== undefined) {\r\n const safePath = sanitizePath(data.setupGuidePath);\r\n lines.push(`Setup guide: ${theme.pathStyle(safePath)}`);\r\n }\r\n\r\n if (data.envExamplePath !== undefined) {\r\n const safePath = sanitizePath(data.envExamplePath);\r\n lines.push(`Env template: ${theme.pathStyle(safePath)}`);\r\n }\r\n\r\n // Next steps\r\n if (data.nextSteps.length > 0) {\r\n lines.push('');\r\n lines.push(theme.heading('Next steps:'));\r\n for (const step of data.nextSteps) {\r\n lines.push(` ${theme.muted('\\u2022')} ${step}`);\r\n }\r\n }\r\n\r\n // Docs URL\r\n lines.push('');\r\n lines.push(theme.link('Docs', data.docsUrl));\r\n\r\n const content = lines.join('\\n');\r\n const successBox = box.render(content, {\r\n title: 'Done!',\r\n variant: 'success',\r\n });\r\n\r\n process.stdout.write('\\n' + successBox + '\\n');\r\n }\r\n\r\n // -------------------------------------------------------------------------\r\n // errorBox(err)\r\n // Renders an error box with the error message and a verbose hint.\r\n // -------------------------------------------------------------------------\r\n function errorBox(err: Error): void {\r\n const content =\r\n theme.danger(err.message) +\r\n '\\n\\n' +\r\n theme.muted('Run with --verbose for details');\r\n\r\n const errBox = box.render(content, {\r\n title: 'Error',\r\n variant: 'error',\r\n });\r\n\r\n process.stderr.write('\\n' + errBox + '\\n');\r\n }\r\n\r\n return { welcome, summary, errorBox };\r\n}\r\n","/**\r\n * ThemedPrompt.ts — Interactive prompt wrapper with theme support.\r\n *\r\n * Wraps the `prompts` library with theme primitives for consistent styling.\r\n * Provides multi-select, single-select, confirm, and conflict-choice prompts.\r\n *\r\n * Non-TTY semantics (non-blocking):\r\n * multiPickPresets → []\r\n * confirm → defaultYes value\r\n * selectTier → options[defaultIndex].value\r\n * conflictChoice → 'skip'\r\n *\r\n * SIGINT handling:\r\n * When the user presses Ctrl+C inside a prompt, raw mode is cleaned up\r\n * and a new Error('SIGINT') is rejected so callers can exit with code 130.\r\n *\r\n * Color=false + isTTY:\r\n * Still interactive — prompts library is used but theme methods strip color.\r\n */\r\n\r\nimport type { TerminalCapability } from './capability.js';\r\nimport type { ThemeTokens } from './theme.js';\r\nimport { loadPrompts, type PromptsFn } from './vendor.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Interfaces\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface MultiSelectChoice {\r\n /** Unique identifier / value returned on selection */\r\n name: string;\r\n /** Human-readable label shown in the prompt */\r\n description: string;\r\n /** Pre-selected state */\r\n selected?: boolean;\r\n /** Hint shown alongside the choice */\r\n hint?: string;\r\n}\r\n\r\nexport interface ConflictChoice {\r\n value: 'overwrite' | 'skip' | 'view-diff' | 'overwrite-all';\r\n label: string;\r\n}\r\n\r\nexport interface ThemedPrompt {\r\n /**\r\n * Multi-select preset picker.\r\n * Validates items.length >= 1 and unique names.\r\n * Returns selected names, or [] when !isTTY.\r\n */\r\n multiPickPresets(items: MultiSelectChoice[]): Promise<string[]>;\r\n\r\n /**\r\n * Single-select from a list of options.\r\n * Returns the selected value, or options[defaultIndex].value when !isTTY.\r\n */\r\n selectTier<T extends string>(\r\n title: string,\r\n options: Array<{ value: T; label: string; hint?: string }>,\r\n defaultIndex?: number,\r\n ): Promise<T>;\r\n\r\n /**\r\n * Yes/No confirmation prompt.\r\n * Returns defaultYes when !isTTY.\r\n */\r\n confirm(message: string, defaultYes?: boolean): Promise<boolean>;\r\n\r\n /**\r\n * Conflict resolution choice for a specific file.\r\n * Returns 'skip' when !isTTY.\r\n */\r\n conflictChoice(targetRel: string): Promise<ConflictChoice['value']>;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Validation helpers\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction validateMultiSelectItems(items: MultiSelectChoice[]): void {\r\n if (items.length < 1) {\r\n throw new Error('multiPickPresets: items must contain at least one entry');\r\n }\r\n const seen = new Set<string>();\r\n for (const item of items) {\r\n if (seen.has(item.name)) {\r\n throw new Error(\r\n `multiPickPresets: duplicate item name \"${item.name}\" — all names must be unique`,\r\n );\r\n }\r\n seen.add(item.name);\r\n }\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// SIGINT helper\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Wrap a prompts call so that a cancelled prompt (value === undefined)\r\n * or an aborted prompt rejects with Error('SIGINT').\r\n *\r\n * The `prompts` library sets the answer to undefined when the user presses\r\n * Ctrl+C (when onCancel is not overridden). We detect this and throw.\r\n */\r\nfunction makeSigintHandler(reject: (err: Error) => void): () => void {\r\n return () => {\r\n // Attempt to restore terminal raw mode\r\n try {\r\n if (process.stdin.isTTY) {\r\n process.stdin.setRawMode(false);\r\n }\r\n } catch {\r\n // ignore — stdin may not support setRawMode\r\n }\r\n reject(new Error('SIGINT'));\r\n };\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Factory\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Create a ThemedPrompt bound to the given capability and theme.\r\n *\r\n * @param capability - Detected terminal capability\r\n * @param theme - Theme tokens for styling\r\n */\r\nexport async function createPrompt(\r\n capability: TerminalCapability,\r\n theme: ThemeTokens,\r\n): Promise<ThemedPrompt> {\r\n // Pre-load prompts library\r\n const promptsFnOrNull: PromptsFn | null = capability.isTTY ? await loadPrompts() : null;\r\n\r\n // -------------------------------------------------------------------------\r\n // Non-TTY path: return defaults immediately without blocking\r\n // -------------------------------------------------------------------------\r\n if (!capability.isTTY || promptsFnOrNull === null) {\r\n return {\r\n async multiPickPresets(_items: MultiSelectChoice[]): Promise<string[]> {\r\n return [];\r\n },\r\n async selectTier<T extends string>(\r\n _title: string,\r\n options: Array<{ value: T; label: string; hint?: string }>,\r\n defaultIndex = 0,\r\n ): Promise<T> {\r\n return options[Math.max(0, Math.min(defaultIndex, options.length - 1))].value;\r\n },\r\n async confirm(_message: string, defaultYes = true): Promise<boolean> {\r\n return defaultYes;\r\n },\r\n async conflictChoice(_targetRel: string): Promise<ConflictChoice['value']> {\r\n return 'skip';\r\n },\r\n };\r\n }\r\n\r\n // -------------------------------------------------------------------------\r\n // TTY path: wrap prompts library\r\n // -------------------------------------------------------------------------\r\n\r\n // At this point we know promptsFnOrNull is non-null (checked above)\r\n const promptsFn: PromptsFn = promptsFnOrNull;\r\n\r\n /**\r\n * Run a prompts question and handle SIGINT (Ctrl+C → reject Error('SIGINT')).\r\n */\r\n async function runPrompt<T>(\r\n question: Parameters<PromptsFn>[0],\r\n resultKey: string,\r\n ): Promise<T> {\r\n return new Promise<T>((resolve, reject) => {\r\n const sigintHandler = makeSigintHandler(reject);\r\n\r\n // prompts calls onCancel when user presses Ctrl+C\r\n const options = {\r\n onCancel: () => {\r\n process.removeListener('SIGINT', sigintHandler);\r\n sigintHandler();\r\n },\r\n };\r\n\r\n process.once('SIGINT', sigintHandler);\r\n\r\n promptsFn(question as Parameters<PromptsFn>[0], options)\r\n .then((answers) => {\r\n process.removeListener('SIGINT', sigintHandler);\r\n const value = (answers as Record<string, unknown>)[resultKey];\r\n if (value === undefined) {\r\n // User cancelled without triggering onCancel (edge case)\r\n sigintHandler();\r\n } else {\r\n resolve(value as T);\r\n }\r\n })\r\n .catch((err: unknown) => {\r\n process.removeListener('SIGINT', sigintHandler);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n // -------------------------------------------------------------------------\r\n // multiPickPresets\r\n // -------------------------------------------------------------------------\r\n async function multiPickPresets(items: MultiSelectChoice[]): Promise<string[]> {\r\n validateMultiSelectItems(items);\r\n\r\n const choices = items.map((item) => ({\r\n title: theme.command(item.description),\r\n value: item.name,\r\n selected: item.selected ?? false,\r\n description: item.hint,\r\n }));\r\n\r\n return runPrompt<string[]>(\r\n {\r\n type: 'multiselect',\r\n name: 'selected',\r\n message: theme.heading('Select presets to install'),\r\n choices,\r\n hint: '- Space to select, Enter to confirm',\r\n instructions: false,\r\n },\r\n 'selected',\r\n );\r\n }\r\n\r\n // -------------------------------------------------------------------------\r\n // selectTier\r\n // -------------------------------------------------------------------------\r\n async function selectTier<T extends string>(\r\n title: string,\r\n options: Array<{ value: T; label: string; hint?: string }>,\r\n defaultIndex = 0,\r\n ): Promise<T> {\r\n const choices = options.map((opt) => ({\r\n title: theme.command(opt.label),\r\n value: opt.value,\r\n description: opt.hint ? theme.muted(opt.hint) : undefined,\r\n }));\r\n\r\n return runPrompt<T>(\r\n {\r\n type: 'select',\r\n name: 'value',\r\n message: theme.heading(title),\r\n choices,\r\n initial: Math.max(0, Math.min(defaultIndex, options.length - 1)),\r\n },\r\n 'value',\r\n );\r\n }\r\n\r\n // -------------------------------------------------------------------------\r\n // confirm\r\n // -------------------------------------------------------------------------\r\n async function confirm(message: string, defaultYes = true): Promise<boolean> {\r\n return runPrompt<boolean>(\r\n {\r\n type: 'confirm',\r\n name: 'value',\r\n message: theme.heading(message),\r\n initial: defaultYes,\r\n },\r\n 'value',\r\n );\r\n }\r\n\r\n // -------------------------------------------------------------------------\r\n // conflictChoice\r\n // -------------------------------------------------------------------------\r\n async function conflictChoice(\r\n targetRel: string,\r\n ): Promise<ConflictChoice['value']> {\r\n const choices: Array<{ title: string; value: ConflictChoice['value'] }> = [\r\n { title: theme.command('overwrite'), value: 'overwrite' },\r\n { title: theme.muted('skip'), value: 'skip' },\r\n { title: theme.flag('view-diff'), value: 'view-diff' },\r\n { title: theme.danger('overwrite-all'), value: 'overwrite-all' },\r\n ];\r\n\r\n return runPrompt<ConflictChoice['value']>(\r\n {\r\n type: 'select',\r\n name: 'value',\r\n message: theme.heading(`Conflict: ${targetRel}`),\r\n choices,\r\n initial: 1, // default to 'skip'\r\n },\r\n 'value',\r\n );\r\n }\r\n\r\n return {\r\n multiPickPresets,\r\n selectTier,\r\n confirm,\r\n conflictChoice,\r\n };\r\n}\r\n","/**\r\n * TaskRunner.ts — Task list renderer with listr2 and plain fallback.\r\n *\r\n * Displays a sequence of tasks with spinners, check marks, and failure symbols.\r\n * Delegates to listr2 when the terminal supports animation and color; falls back\r\n * to a simple sequential \"-> task ... done\" renderer otherwise.\r\n *\r\n * Renderer selection:\r\n * animate=true && color=true && columns>=40 → listr2 'default' renderer\r\n * animate=false || !isTTY || columns<40 → simple renderer (plain lines)\r\n *\r\n * TaskHelpers:\r\n * setOutput(line) — stream sub-text under the running spinner\r\n * setTitle(title) — mutate the task title in-place\r\n *\r\n * Error handling:\r\n * When a task throws, the error is re-thrown with a `taskTitle` property\r\n * attached so callers can identify which task failed. All started spinners\r\n * are stopped before the rejection propagates.\r\n *\r\n * Throttle:\r\n * listr2's default renderer already throttles at ~100ms. The simple renderer\r\n * is synchronous per-task so throttling is not applicable.\r\n */\r\n\r\nimport type { TerminalCapability } from './capability.js';\r\nimport type { ThemeTokens } from './theme.js';\r\nimport { loadListr2 } from './vendor.js';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Interfaces\r\n// ---------------------------------------------------------------------------\r\n\r\nexport interface TaskDef<C = unknown> {\r\n /** Display title shown in the renderer */\r\n title: string;\r\n /** Optional hint shown under the spinner while running */\r\n hint?: string;\r\n /**\r\n * Optional skip predicate. Return true or a string reason to skip this task.\r\n * Skipped tasks are shown with a skip symbol and continue to the next task.\r\n */\r\n skip?: (ctx: C) => boolean | string | Promise<boolean | string>;\r\n /**\r\n * The task implementation. May throw to mark the task as failed.\r\n * Throwing aborts the remaining tasks and rejects the runner.\r\n */\r\n run: (ctx: C, helpers: TaskHelpers) => Promise<void>;\r\n}\r\n\r\nexport interface TaskHelpers {\r\n /** Stream a sub-text line under the running spinner */\r\n setOutput(line: string): void;\r\n /** Mutate the task title (e.g. \"Wrote 12 files\") */\r\n setTitle(title: string): void;\r\n}\r\n\r\nexport interface TaskRunner<C> {\r\n /** Execute all tasks sequentially. Resolves with the final context. */\r\n run(initialCtx: C): Promise<C>;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Error with taskTitle attached\r\n// ---------------------------------------------------------------------------\r\n\r\ninterface TaskError extends Error {\r\n taskTitle: string;\r\n}\r\n\r\nfunction attachTaskTitle(err: unknown, title: string): TaskError {\r\n const e = err instanceof Error ? err : new Error(String(err));\r\n (e as TaskError).taskTitle = title;\r\n return e as TaskError;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Simple renderer (plain text, no animation)\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction runSimple<C>(tasks: TaskDef<C>[], initialCtx: C): Promise<C> {\r\n return (async () => {\r\n const ctx = initialCtx;\r\n\r\n for (const task of tasks) {\r\n // Evaluate skip predicate\r\n if (task.skip) {\r\n let skipResult: boolean | string;\r\n try {\r\n skipResult = await task.skip(ctx);\r\n } catch {\r\n skipResult = false;\r\n }\r\n if (skipResult !== false) {\r\n const reason = typeof skipResult === 'string' ? ` (${skipResult})` : '';\r\n process.stdout.write(`-> ${task.title} [skipped${reason}]\\n`);\r\n continue;\r\n }\r\n }\r\n\r\n process.stdout.write(`-> ${task.title} ...\\n`);\r\n\r\n let currentTitle = task.title;\r\n\r\n const helpers: TaskHelpers = {\r\n setOutput(line: string): void {\r\n process.stdout.write(` ${line}\\n`);\r\n },\r\n setTitle(title: string): void {\r\n currentTitle = title;\r\n },\r\n };\r\n\r\n try {\r\n await task.run(ctx, helpers);\r\n process.stdout.write(`-> ${currentTitle} done\\n`);\r\n } catch (err) {\r\n process.stdout.write(`-> ${currentTitle} FAILED\\n`);\r\n throw attachTaskTitle(err, task.title);\r\n }\r\n }\r\n\r\n return ctx;\r\n })();\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Listr2 renderer (animated, colored)\r\n// ---------------------------------------------------------------------------\r\n\r\nasync function runListr2<C>(\r\n tasks: TaskDef<C>[],\r\n initialCtx: C,\r\n ListrCtor: Awaited<ReturnType<typeof loadListr2>>,\r\n): Promise<C> {\r\n if (ListrCtor === null) {\r\n // listr2 unavailable — fall back to simple\r\n return runSimple(tasks, initialCtx);\r\n }\r\n\r\n // Build listr2 task definitions\r\n const listrTasks = tasks.map((taskDef) => ({\r\n title: taskDef.title,\r\n skip: taskDef.skip\r\n ? (ctx: C) => taskDef.skip!(ctx)\r\n : undefined,\r\n task: async (ctx: C, wrapper: { output: string; title: string }) => {\r\n const helpers: TaskHelpers = {\r\n setOutput(line: string): void {\r\n wrapper.output = line;\r\n },\r\n setTitle(title: string): void {\r\n wrapper.title = title;\r\n },\r\n };\r\n\r\n try {\r\n await taskDef.run(ctx, helpers);\r\n } catch (err) {\r\n throw attachTaskTitle(err, taskDef.title);\r\n }\r\n },\r\n }));\r\n\r\n const listr = new ListrCtor(listrTasks, {\r\n ctx: initialCtx,\r\n concurrent: false,\r\n exitOnError: true,\r\n renderer: 'default',\r\n fallbackRenderer: 'simple',\r\n rendererOptions: {\r\n // Throttle re-render to >= 100ms (listr2 default is ~100ms already)\r\n lazy: false,\r\n collapseSubtasks: false,\r\n collapseSkips: false,\r\n },\r\n });\r\n\r\n return listr.run(initialCtx);\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Factory\r\n// ---------------------------------------------------------------------------\r\n\r\n/**\r\n * Create a TaskRunner bound to the given capability and theme.\r\n *\r\n * @param tasks - Ordered list of task definitions\r\n * @param capability - Detected terminal capability\r\n * @param theme - Theme tokens for styling\r\n */\r\nexport async function createTaskRunner<C>(\r\n tasks: TaskDef<C>[],\r\n capability: TerminalCapability,\r\n _theme: ThemeTokens,\r\n): Promise<TaskRunner<C>> {\r\n // Determine renderer mode\r\n const useListr2 =\r\n capability.animate &&\r\n capability.color &&\r\n capability.columns >= 40;\r\n\r\n // Pre-load listr2 only when needed\r\n const ListrCtor = useListr2 ? await loadListr2() : null;\r\n\r\n return {\r\n async run(initialCtx: C): Promise<C> {\r\n if (useListr2 && ListrCtor !== null) {\r\n return runListr2(tasks, initialCtx, ListrCtor);\r\n }\r\n return runSimple(tasks, initialCtx);\r\n },\r\n };\r\n}\r\n","import { Command } from 'commander';\r\nimport fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport process from 'node:process';\r\nimport crypto from 'node:crypto';\r\n\r\nimport { load, listAvailable } from '../core/PresetLoader.js';\r\nimport { resolve as resolveConflict, type ConflictMode, type SessionState } from '../core/ConflictResolver.js';\r\nimport { backup } from '../core/BackupManager.js';\r\nimport * as TrackingStore from '../core/TrackingStore.js';\r\nimport * as MetadataWriter from '../core/MetadataWriter.js';\r\nimport * as StatuslineSelector from '../core/StatuslineSelector.js';\r\nimport { mergeMCP, type MCPConfig } from '../core/merge/mergeMCP.js';\r\nimport { mergeSettings, type SettingsConfig } from '../core/merge/mergeSettings.js';\r\nimport { showDiff } from '../prompts/DiffViewer.js';\r\nimport { atomicWrite } from '../utils/fs-safe.js';\r\nimport { logger } from '../utils/logger.js';\r\nimport { color } from '../utils/color.js';\r\nimport { safePathInside } from '../utils/paths.js';\r\n\r\ninterface AddOptions {\r\n yes?: boolean;\r\n force?: boolean;\r\n skipExisting?: boolean;\r\n color?: boolean;\r\n}\r\n\r\nfunction sha256(data: Buffer): string {\r\n return crypto.createHash('sha256').update(data).digest('hex');\r\n}\r\n\r\nfunction generateTimestamp(): string {\r\n const now = new Date();\r\n const y = now.getFullYear();\r\n const mo = String(now.getMonth() + 1).padStart(2, '0');\r\n const d = String(now.getDate()).padStart(2, '0');\r\n const h = String(now.getHours()).padStart(2, '0');\r\n const mi = String(now.getMinutes()).padStart(2, '0');\r\n const s = String(now.getSeconds()).padStart(2, '0');\r\n const ms = String(now.getMilliseconds()).padStart(3, '0');\r\n return `${y}${mo}${d}-${h}${mi}${s}-${ms}`;\r\n}\r\n\r\nfunction getKitVersion(): string {\r\n try {\r\n const pkgPath = new URL('../../package.json', import.meta.url);\r\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')) as { version: string };\r\n return pkg.version;\r\n } catch {\r\n return '0.1.0';\r\n }\r\n}\r\n\r\nasync function conflictPrompt(\r\n target: string,\r\n): Promise<'overwrite' | 'skip' | 'view-diff' | 'overwrite-all'> {\r\n if (!process.stdin.isTTY) return 'skip';\r\n\r\n const { default: readline } = await import('node:readline');\r\n const relTarget = path.relative(process.cwd(), target);\r\n process.stdout.write(\r\n `\\n${color.yellow('?')} File ${color.bold(relTarget)} already exists with different content.\\n` +\r\n ` ${color.cyan('>')} overwrite - Replace existing file (backup will be saved)\\n` +\r\n ` skip - Keep existing file\\n` +\r\n ` view diff - Show unified diff and ask again\\n` +\r\n ` overwrite all - Replace this and all remaining conflicting files\\n`,\r\n );\r\n\r\n return new Promise((resolve) => {\r\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\r\n rl.question(` Choice (overwrite/skip/diff/all): `, (answer) => {\r\n rl.close();\r\n const a = answer.trim().toLowerCase();\r\n if (a === 'o' || a === 'overwrite') resolve('overwrite');\r\n else if (a === 's' || a === 'skip') resolve('skip');\r\n else if (a === 'd' || a === 'diff' || a === 'view diff') resolve('view-diff');\r\n else if (a === 'a' || a === 'all' || a === 'overwrite all') resolve('overwrite-all');\r\n else resolve('skip');\r\n });\r\n });\r\n}\r\n\r\nexport function registerAddCommand(program: Command): void {\r\n program\r\n .command('add <preset>')\r\n .description('Add a preset to existing workspace')\r\n .option('-y, --yes', 'Skip confirmation')\r\n .option('--force', 'Overwrite all files (with backup)')\r\n .option('--skip-existing', 'Skip all existing files')\r\n .option('--no-color', 'Disable ANSI colors')\r\n .action(async (presetName: string, opts: AddOptions) => {\r\n try {\r\n await runAdd(presetName, opts);\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n\r\nasync function runAdd(presetName: string, opts: AddOptions): Promise<void> {\r\n const workspaceRoot = process.cwd();\r\n const available = listAvailable();\r\n\r\n // Validate preset name\r\n if (!available.includes(presetName)) {\r\n logger.error(\r\n `Preset \"${presetName}\" not found. Available: ${available.join(', ')}`,\r\n );\r\n process.exit(1);\r\n }\r\n\r\n // Auto-init: create .kiro/ if it doesn't exist\r\n const kiroDir = path.join(workspaceRoot, '.kiro');\r\n if (!fs.existsSync(kiroDir)) {\r\n fs.mkdirSync(kiroDir, { recursive: true });\r\n logger.info('Created .kiro/ directory.');\r\n }\r\n\r\n // Load preset\r\n const preset = load(presetName);\r\n\r\n // Determine conflict mode\r\n let mode: ConflictMode = 'interactive';\r\n if (opts.force) mode = 'force';\r\n else if (opts.skipExisting) mode = 'skip-existing';\r\n else if (opts.yes) mode = 'skip-existing';\r\n\r\n const sessionState: SessionState = { overwriteAll: false };\r\n const timestamp = generateTimestamp();\r\n const allTrackedFiles: TrackingStore.TrackedFile[] = [];\r\n let filesWritten = 0;\r\n let filesSkipped = 0;\r\n\r\n const { manifest, dir: presetDir } = preset;\r\n\r\n // Separate files by type\r\n const regularFiles = manifest.files.filter(\r\n (f) => !['mcp', 'settings', 'statusline'].includes(f.type),\r\n );\r\n const statuslineFiles = manifest.files.filter((f) => f.type === 'statusline');\r\n\r\n // Process regular files\r\n for (const fileEntry of regularFiles) {\r\n const sourcePath = path.join(presetDir, fileEntry.source);\r\n const targetPath = path.resolve(workspaceRoot, fileEntry.target);\r\n\r\n if (!safePathInside(workspaceRoot, fileEntry.target)) {\r\n logger.warn(`Skipping unsafe path: ${fileEntry.target}`);\r\n filesSkipped++;\r\n continue;\r\n }\r\n\r\n if (!fs.existsSync(sourcePath)) {\r\n logger.debug(`Source file missing: ${sourcePath}`);\r\n continue;\r\n }\r\n\r\n const sourceContent = fs.readFileSync(sourcePath);\r\n\r\n const action = await resolveConflict({\r\n target: targetPath,\r\n sourceContent,\r\n mode,\r\n sessionState,\r\n prompt: conflictPrompt,\r\n showDiff: (t, s) => showDiff(t, s),\r\n });\r\n\r\n switch (action) {\r\n case 'WRITE_NEW':\r\n fs.mkdirSync(path.dirname(targetPath), { recursive: true });\r\n atomicWrite(targetPath, sourceContent.toString('utf-8'));\r\n if (fileEntry.executable && process.platform !== 'win32') {\r\n try { fs.chmodSync(targetPath, 0o755); } catch { /* non-critical */ }\r\n }\r\n filesWritten++;\r\n break;\r\n case 'OVERWRITE_WITH_BACKUP':\r\n backup(workspaceRoot, targetPath, timestamp);\r\n atomicWrite(targetPath, sourceContent.toString('utf-8'));\r\n if (fileEntry.executable && process.platform !== 'win32') {\r\n try { fs.chmodSync(targetPath, 0o755); } catch { /* non-critical */ }\r\n }\r\n filesWritten++;\r\n break;\r\n case 'SKIP':\r\n filesSkipped++;\r\n break;\r\n case 'NO_OP':\r\n break;\r\n }\r\n\r\n if (action !== 'SKIP') {\r\n allTrackedFiles.push({\r\n target: fileEntry.target,\r\n sourcePreset: manifest.name,\r\n contentHash: sha256(sourceContent),\r\n installedAt: new Date().toISOString(),\r\n });\r\n }\r\n }\r\n\r\n // Process statusline files\r\n if (statuslineFiles.length > 0) {\r\n const installed = StatuslineSelector.install(presetDir, workspaceRoot);\r\n filesWritten += installed.length;\r\n for (const f of installed) {\r\n allTrackedFiles.push({\r\n target: f,\r\n sourcePreset: manifest.name,\r\n contentHash: '',\r\n installedAt: new Date().toISOString(),\r\n });\r\n }\r\n }\r\n\r\n // Process MCP merge\r\n if (manifest.mcpServers) {\r\n const mcpPath = path.join(workspaceRoot, '.kiro/settings/mcp.json');\r\n let existingMcp: MCPConfig | null = null;\r\n if (fs.existsSync(mcpPath)) {\r\n try {\r\n existingMcp = JSON.parse(fs.readFileSync(mcpPath, 'utf-8')) as MCPConfig;\r\n } catch { existingMcp = null; }\r\n }\r\n const merged = mergeMCP(existingMcp, manifest.mcpServers, manifest.name);\r\n fs.mkdirSync(path.dirname(mcpPath), { recursive: true });\r\n atomicWrite(mcpPath, JSON.stringify(merged, null, 2) + '\\n');\r\n filesWritten++;\r\n }\r\n\r\n // Process settings merge\r\n const presetSettingsPath = path.join(presetDir, 'settings.json');\r\n if (fs.existsSync(presetSettingsPath)) {\r\n const settingsPath = path.join(workspaceRoot, '.kiro/settings.json');\r\n let existingSettings: SettingsConfig | null = null;\r\n if (fs.existsSync(settingsPath)) {\r\n try {\r\n existingSettings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8')) as SettingsConfig;\r\n } catch { existingSettings = null; }\r\n }\r\n const presetSettings = JSON.parse(fs.readFileSync(presetSettingsPath, 'utf-8')) as SettingsConfig;\r\n const resolvedSettings = StatuslineSelector.resolveSettingsCommand(\r\n presetSettings as Record<string, unknown>,\r\n ) as SettingsConfig;\r\n const merged = mergeSettings(existingSettings, resolvedSettings);\r\n fs.mkdirSync(path.dirname(settingsPath), { recursive: true });\r\n atomicWrite(settingsPath, JSON.stringify(merged, null, 2) + '\\n');\r\n filesWritten++;\r\n }\r\n\r\n // Write metadata\r\n const kitVersion = getKitVersion();\r\n const presetMeta = { name: manifest.name, version: manifest.version };\r\n const existingMeta = MetadataWriter.read(workspaceRoot);\r\n const metadata = existingMeta\r\n ? MetadataWriter.mergePresets(existingMeta, [presetMeta])\r\n : MetadataWriter.compose({ kitVersion, repository: 'https://github.com/ihatesea69/kiro-kit.git', presets: [presetMeta] });\r\n MetadataWriter.write(workspaceRoot, metadata);\r\n\r\n // Write tracking file LAST\r\n let trackingData = TrackingStore.read(workspaceRoot) ?? TrackingStore.createInitial(kitVersion);\r\n const trackedPreset: TrackingStore.TrackedPreset = {\r\n name: manifest.name,\r\n version: manifest.version,\r\n installedAt: new Date().toISOString(),\r\n files: allTrackedFiles,\r\n };\r\n trackingData = TrackingStore.upsertPreset(trackingData, trackedPreset);\r\n trackingData.kitVersion = kitVersion;\r\n TrackingStore.write(workspaceRoot, trackingData);\r\n\r\n // Summary\r\n logger.success(`Done! ${filesWritten} files written, ${filesSkipped} skipped.`);\r\n logger.info(`Preset added: ${presetName}`);\r\n}\r\n","import { Command } from 'commander';\r\nimport process from 'node:process';\r\n\r\nimport { load, listAvailable } from '../core/PresetLoader.js';\r\nimport { logger } from '../utils/logger.js';\r\nimport { color } from '../utils/color.js';\r\n\r\ninterface ListOptions {\r\n json?: boolean;\r\n}\r\n\r\ninterface PresetSummary {\r\n name: string;\r\n description: string;\r\n agents: number;\r\n skills: number;\r\n commands: number;\r\n hooks: number;\r\n workflows: number;\r\n mcp: number;\r\n}\r\n\r\nfunction countArtifacts(files: Array<{ type: string }>): Record<string, number> {\r\n const counts: Record<string, number> = {\r\n agent: 0,\r\n skill: 0,\r\n command: 0,\r\n hook: 0,\r\n workflow: 0,\r\n mcp: 0,\r\n };\r\n for (const f of files) {\r\n if (f.type in counts) {\r\n counts[f.type]++;\r\n }\r\n }\r\n return counts;\r\n}\r\n\r\nexport function registerListCommand(program: Command): void {\r\n program\r\n .command('list')\r\n .description('List available presets')\r\n .option('--json', 'Output as JSON')\r\n .action((opts: ListOptions) => {\r\n try {\r\n runList(opts);\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n\r\nfunction runList(opts: ListOptions): void {\r\n const available = listAvailable();\r\n const summaries: PresetSummary[] = [];\r\n\r\n for (const name of available) {\r\n try {\r\n const preset = load(name);\r\n const counts = countArtifacts(preset.manifest.files);\r\n summaries.push({\r\n name,\r\n description: preset.manifest.description,\r\n agents: counts['agent'],\r\n skills: counts['skill'],\r\n commands: counts['command'],\r\n hooks: counts['hook'],\r\n workflows: counts['workflow'],\r\n mcp: Object.keys(preset.manifest.mcpServers ?? {}).length,\r\n });\r\n } catch {\r\n summaries.push({\r\n name,\r\n description: '(failed to load)',\r\n agents: 0,\r\n skills: 0,\r\n commands: 0,\r\n hooks: 0,\r\n workflows: 0,\r\n mcp: 0,\r\n });\r\n }\r\n }\r\n\r\n if (opts.json) {\r\n process.stdout.write(JSON.stringify(summaries, null, 2) + '\\n');\r\n return;\r\n }\r\n\r\n // Text output\r\n for (const s of summaries) {\r\n const nameStr = color.bold(s.name.padEnd(12));\r\n const descStr = color.dim(`- ${s.description}`);\r\n process.stdout.write(` ${nameStr} ${descStr}\\n`);\r\n const counts = `${s.agents} agents, ${s.skills} skills, ${s.commands} commands, ${s.hooks} hooks, ${s.workflows} workflows, ${s.mcp} MCP servers`;\r\n process.stdout.write(`${''.padEnd(14)} ${color.gray(counts)}\\n`);\r\n }\r\n}\r\n","import { Command } from 'commander';\r\nimport process from 'node:process';\r\n\r\nimport { load, listAvailable } from '../core/PresetLoader.js';\r\nimport { logger } from '../utils/logger.js';\r\nimport { color } from '../utils/color.js';\r\n\r\ninterface InfoOptions {\r\n json?: boolean;\r\n}\r\n\r\ninterface PresetInfo {\r\n name: string;\r\n version: string;\r\n description: string;\r\n category: string;\r\n files: Array<{ source: string; target: string; type: string }>;\r\n mcpServers: string[];\r\n hooks: string[];\r\n agents: string[];\r\n skills: string[];\r\n commands: string[];\r\n workflows: string[];\r\n}\r\n\r\nexport function registerInfoCommand(program: Command): void {\r\n program\r\n .command('info <preset>')\r\n .description('Show detailed preset information')\r\n .option('--json', 'Output as JSON')\r\n .action((presetName: string, opts: InfoOptions) => {\r\n try {\r\n runInfo(presetName, opts);\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n\r\nfunction runInfo(presetName: string, opts: InfoOptions): void {\r\n const available = listAvailable();\r\n\r\n if (!available.includes(presetName)) {\r\n logger.error(\r\n `Preset \"${presetName}\" not found. Available: ${available.join(', ')}`,\r\n );\r\n process.exit(1);\r\n }\r\n\r\n const preset = load(presetName);\r\n const { manifest } = preset;\r\n\r\n const agents = manifest.files.filter((f) => f.type === 'agent').map((f) => f.source);\r\n const skills = manifest.files.filter((f) => f.type === 'skill').map((f) => f.source);\r\n const commands = manifest.files.filter((f) => f.type === 'command').map((f) => f.source);\r\n const workflows = manifest.files.filter((f) => f.type === 'workflow').map((f) => f.source);\r\n const hooks = manifest.files.filter((f) => f.type === 'hook').map((f) => f.source);\r\n const mcpServers = Object.keys(manifest.mcpServers ?? {});\r\n\r\n const info: PresetInfo = {\r\n name: manifest.name,\r\n version: manifest.version,\r\n description: manifest.description,\r\n category: manifest.category,\r\n files: manifest.files.map((f) => ({ source: f.source, target: f.target, type: f.type })),\r\n mcpServers,\r\n hooks,\r\n agents,\r\n skills,\r\n commands,\r\n workflows,\r\n };\r\n\r\n if (opts.json) {\r\n process.stdout.write(JSON.stringify(info, null, 2) + '\\n');\r\n return;\r\n }\r\n\r\n // Text output\r\n process.stdout.write(`\\n${color.bold(manifest.name)} v${manifest.version}\\n`);\r\n process.stdout.write(`${manifest.description}\\n\\n`);\r\n process.stdout.write(`${color.dim('Category:')} ${manifest.category}\\n`);\r\n process.stdout.write(`${color.dim('Total files:')} ${manifest.files.length}\\n\\n`);\r\n\r\n if (mcpServers.length > 0) {\r\n process.stdout.write(`${color.bold('MCP Servers')} (${mcpServers.length}):\\n`);\r\n for (const s of mcpServers) {\r\n process.stdout.write(` - ${s}\\n`);\r\n }\r\n process.stdout.write('\\n');\r\n }\r\n\r\n if (agents.length > 0) {\r\n process.stdout.write(`${color.bold('Agents')} (${agents.length}):\\n`);\r\n for (const a of agents) {\r\n process.stdout.write(` - ${a}\\n`);\r\n }\r\n process.stdout.write('\\n');\r\n }\r\n\r\n if (skills.length > 0) {\r\n process.stdout.write(`${color.bold('Skills')} (${skills.length}):\\n`);\r\n for (const s of skills) {\r\n process.stdout.write(` - ${s}\\n`);\r\n }\r\n process.stdout.write('\\n');\r\n }\r\n\r\n if (commands.length > 0) {\r\n process.stdout.write(`${color.bold('Commands')} (${commands.length}):\\n`);\r\n for (const c of commands) {\r\n process.stdout.write(` - ${c}\\n`);\r\n }\r\n process.stdout.write('\\n');\r\n }\r\n\r\n if (workflows.length > 0) {\r\n process.stdout.write(`${color.bold('Workflows')} (${workflows.length}):\\n`);\r\n for (const w of workflows) {\r\n process.stdout.write(` - ${w}\\n`);\r\n }\r\n process.stdout.write('\\n');\r\n }\r\n\r\n if (hooks.length > 0) {\r\n process.stdout.write(`${color.bold('Hooks')} (${hooks.length}):\\n`);\r\n for (const h of hooks) {\r\n process.stdout.write(` - ${h}\\n`);\r\n }\r\n process.stdout.write('\\n');\r\n }\r\n\r\n // File list with targets\r\n process.stdout.write(`${color.bold('File Targets')}:\\n`);\r\n for (const f of manifest.files) {\r\n process.stdout.write(` ${color.dim(f.type.padEnd(12))} ${f.target}\\n`);\r\n }\r\n}\r\n","import { Command } from 'commander';\r\nimport fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport process from 'node:process';\r\nimport crypto from 'node:crypto';\r\n\r\nimport { load } from '../core/PresetLoader.js';\r\nimport { resolve as resolveConflict, type ConflictMode, type SessionState } from '../core/ConflictResolver.js';\r\nimport { backup } from '../core/BackupManager.js';\r\nimport * as TrackingStore from '../core/TrackingStore.js';\r\nimport { showDiff } from '../prompts/DiffViewer.js';\r\nimport { atomicWrite } from '../utils/fs-safe.js';\r\nimport { logger } from '../utils/logger.js';\r\nimport { color } from '../utils/color.js';\r\nimport { safePathInside } from '../utils/paths.js';\r\n\r\ninterface UpdateOptions {\r\n yes?: boolean;\r\n force?: boolean;\r\n skipExisting?: boolean;\r\n}\r\n\r\nfunction sha256(data: Buffer): string {\r\n return crypto.createHash('sha256').update(data).digest('hex');\r\n}\r\n\r\nfunction generateTimestamp(): string {\r\n const now = new Date();\r\n const y = now.getFullYear();\r\n const mo = String(now.getMonth() + 1).padStart(2, '0');\r\n const d = String(now.getDate()).padStart(2, '0');\r\n const h = String(now.getHours()).padStart(2, '0');\r\n const mi = String(now.getMinutes()).padStart(2, '0');\r\n const s = String(now.getSeconds()).padStart(2, '0');\r\n const ms = String(now.getMilliseconds()).padStart(3, '0');\r\n return `${y}${mo}${d}-${h}${mi}${s}-${ms}`;\r\n}\r\n\r\nfunction getKitVersion(): string {\r\n try {\r\n const pkgPath = new URL('../../package.json', import.meta.url);\r\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')) as { version: string };\r\n return pkg.version;\r\n } catch {\r\n return '0.1.0';\r\n }\r\n}\r\n\r\nasync function conflictPrompt(\r\n target: string,\r\n): Promise<'overwrite' | 'skip' | 'view-diff' | 'overwrite-all'> {\r\n if (!process.stdin.isTTY) return 'skip';\r\n\r\n const { default: readline } = await import('node:readline');\r\n const relTarget = path.relative(process.cwd(), target);\r\n process.stdout.write(\r\n `\\n${color.yellow('?')} File ${color.bold(relTarget)} has changed in the new version.\\n` +\r\n ` ${color.cyan('>')} overwrite - Replace with new version (backup saved)\\n` +\r\n ` skip - Keep current file\\n` +\r\n ` view diff - Show unified diff and ask again\\n` +\r\n ` overwrite all - Replace all remaining changed files\\n`,\r\n );\r\n\r\n return new Promise((resolve) => {\r\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\r\n rl.question(` Choice (overwrite/skip/diff/all): `, (answer) => {\r\n rl.close();\r\n const a = answer.trim().toLowerCase();\r\n if (a === 'o' || a === 'overwrite') resolve('overwrite');\r\n else if (a === 's' || a === 'skip') resolve('skip');\r\n else if (a === 'd' || a === 'diff' || a === 'view diff') resolve('view-diff');\r\n else if (a === 'a' || a === 'all' || a === 'overwrite all') resolve('overwrite-all');\r\n else resolve('skip');\r\n });\r\n });\r\n}\r\n\r\nexport function registerUpdateCommand(program: Command): void {\r\n program\r\n .command('update')\r\n .description('Update installed presets to latest bundled version')\r\n .option('-y, --yes', 'Skip confirmation, auto-skip conflicts')\r\n .option('--force', 'Overwrite all changed files (with backup)')\r\n .option('--skip-existing', 'Skip all changed files')\r\n .action(async (opts: UpdateOptions) => {\r\n try {\r\n await runUpdate(opts);\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n\r\nasync function runUpdate(opts: UpdateOptions): Promise<void> {\r\n const workspaceRoot = process.cwd();\r\n\r\n // Read tracking\r\n const tracking = TrackingStore.read(workspaceRoot);\r\n if (!tracking || tracking.presets.length === 0) {\r\n logger.info('No presets installed. Nothing to update.');\r\n process.exit(0);\r\n }\r\n\r\n let mode: ConflictMode = 'interactive';\r\n if (opts.force) mode = 'force';\r\n else if (opts.skipExisting) mode = 'skip-existing';\r\n else if (opts.yes) mode = 'skip-existing';\r\n\r\n const sessionState: SessionState = { overwriteAll: false };\r\n const timestamp = generateTimestamp();\r\n let totalUpdated = 0;\r\n let totalSkipped = 0;\r\n\r\n for (const trackedPreset of tracking.presets) {\r\n let bundled;\r\n try {\r\n bundled = load(trackedPreset.name);\r\n } catch {\r\n logger.warn(`Preset \"${trackedPreset.name}\" not found in bundled presets. Skipping.`);\r\n continue;\r\n }\r\n\r\n const bundledVersion = bundled.manifest.version;\r\n if (bundledVersion === trackedPreset.version) {\r\n logger.debug(`Preset \"${trackedPreset.name}\" is up to date (v${bundledVersion}).`);\r\n continue;\r\n }\r\n\r\n logger.info(\r\n `Updating ${color.bold(trackedPreset.name)}: v${trackedPreset.version} -> v${bundledVersion}`,\r\n );\r\n\r\n // Find changed files by comparing content hashes\r\n const presetDir = bundled.dir;\r\n const updatedFiles: TrackingStore.TrackedFile[] = [];\r\n\r\n for (const fileEntry of bundled.manifest.files) {\r\n if (['mcp', 'settings', 'statusline'].includes(fileEntry.type)) continue;\r\n\r\n const sourcePath = path.join(presetDir, fileEntry.source);\r\n const targetPath = path.resolve(workspaceRoot, fileEntry.target);\r\n\r\n if (!safePathInside(workspaceRoot, fileEntry.target)) continue;\r\n if (!fs.existsSync(sourcePath)) continue;\r\n\r\n const sourceContent = fs.readFileSync(sourcePath);\r\n const newHash = sha256(sourceContent);\r\n\r\n // Check if file changed from what we installed\r\n const trackedFile = trackedPreset.files.find((f) => f.target === fileEntry.target);\r\n if (trackedFile && trackedFile.contentHash === newHash) {\r\n // Bundled file hasn't changed since last install\r\n continue;\r\n }\r\n\r\n // File has changed in the new version - resolve conflict\r\n const action = await resolveConflict({\r\n target: targetPath,\r\n sourceContent,\r\n mode,\r\n sessionState,\r\n prompt: conflictPrompt,\r\n showDiff: (t, s) => showDiff(t, s),\r\n });\r\n\r\n switch (action) {\r\n case 'WRITE_NEW':\r\n fs.mkdirSync(path.dirname(targetPath), { recursive: true });\r\n atomicWrite(targetPath, sourceContent.toString('utf-8'));\r\n if (fileEntry.executable && process.platform !== 'win32') {\r\n try { fs.chmodSync(targetPath, 0o755); } catch { /* */ }\r\n }\r\n totalUpdated++;\r\n break;\r\n case 'OVERWRITE_WITH_BACKUP':\r\n backup(workspaceRoot, targetPath, timestamp);\r\n atomicWrite(targetPath, sourceContent.toString('utf-8'));\r\n if (fileEntry.executable && process.platform !== 'win32') {\r\n try { fs.chmodSync(targetPath, 0o755); } catch { /* */ }\r\n }\r\n totalUpdated++;\r\n break;\r\n case 'SKIP':\r\n totalSkipped++;\r\n break;\r\n case 'NO_OP':\r\n break;\r\n }\r\n\r\n updatedFiles.push({\r\n target: fileEntry.target,\r\n sourcePreset: bundled.manifest.name,\r\n contentHash: newHash,\r\n installedAt: new Date().toISOString(),\r\n });\r\n }\r\n\r\n // Bump version in tracking\r\n trackedPreset.version = bundledVersion;\r\n trackedPreset.updatedAt = new Date().toISOString();\r\n // Update file hashes for changed files\r\n for (const uf of updatedFiles) {\r\n const idx = trackedPreset.files.findIndex((f) => f.target === uf.target);\r\n if (idx >= 0) {\r\n trackedPreset.files[idx] = uf;\r\n } else {\r\n trackedPreset.files.push(uf);\r\n }\r\n }\r\n }\r\n\r\n // Write updated tracking\r\n tracking.kitVersion = getKitVersion();\r\n tracking.updatedAt = new Date().toISOString();\r\n TrackingStore.write(workspaceRoot, tracking);\r\n\r\n if (totalUpdated === 0 && totalSkipped === 0) {\r\n logger.success('All presets are up to date.');\r\n } else {\r\n logger.success(`Update complete: ${totalUpdated} files updated, ${totalSkipped} skipped.`);\r\n }\r\n}\r\n","import { Command } from 'commander';\r\nimport process from 'node:process';\r\n\r\nimport { restore, listTimestamps } from '../core/BackupManager.js';\r\nimport { logger } from '../utils/logger.js';\r\nimport { color } from '../utils/color.js';\r\n\r\ninterface RestoreOptions {\r\n timestamp?: string;\r\n list?: boolean;\r\n}\r\n\r\nexport function registerRestoreCommand(program: Command): void {\r\n program\r\n .command('restore')\r\n .description('Restore files from backup')\r\n .option('--timestamp <ts>', 'Restore from specific backup timestamp')\r\n .option('--list', 'List available backup timestamps')\r\n .action((opts: RestoreOptions) => {\r\n try {\r\n runRestore(opts);\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n\r\nfunction runRestore(opts: RestoreOptions): void {\r\n const workspaceRoot = process.cwd();\r\n\r\n // --list flag: print available timestamps and exit\r\n if (opts.list) {\r\n const timestamps = listTimestamps(workspaceRoot);\r\n if (timestamps.length === 0) {\r\n logger.info('No backups available.');\r\n process.exit(0);\r\n }\r\n process.stdout.write(`${color.bold('Available backups')}:\\n`);\r\n for (const ts of timestamps) {\r\n process.stdout.write(` ${ts}\\n`);\r\n }\r\n process.exit(0);\r\n }\r\n\r\n // Check if any backups exist\r\n const timestamps = listTimestamps(workspaceRoot);\r\n if (timestamps.length === 0) {\r\n logger.error('No backups found. Nothing to restore.');\r\n process.exit(1);\r\n }\r\n\r\n // Restore from specified timestamp or latest\r\n const restored = restore(workspaceRoot, opts.timestamp);\r\n\r\n if (restored.length === 0) {\r\n logger.info('No files to restore from backup.');\r\n process.exit(0);\r\n }\r\n\r\n process.stdout.write(`${color.bold('Restored files')}:\\n`);\r\n for (const file of restored) {\r\n process.stdout.write(` ${color.green('+')} ${file}\\n`);\r\n }\r\n logger.success(`Restored ${restored.length} files.`);\r\n}\r\n","import { Command } from 'commander';\r\nimport fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport process from 'node:process';\r\n\r\nimport * as TrackingStore from '../core/TrackingStore.js';\r\nimport { logger } from '../utils/logger.js';\r\nimport { color } from '../utils/color.js';\r\n\r\ninterface DoctorOptions {\r\n fix?: boolean;\r\n}\r\n\r\ntype CheckResult = 'PASS' | 'FAIL' | 'WARN';\r\n\r\ninterface CheckReport {\r\n name: string;\r\n result: CheckResult;\r\n message: string;\r\n fixable?: boolean;\r\n fixAction?: () => void;\r\n}\r\n\r\nexport function registerDoctorCommand(program: Command): void {\r\n program\r\n .command('doctor')\r\n .description('Run workspace health checks')\r\n .option('--fix', 'Auto-fix fixable issues')\r\n .action((opts: DoctorOptions) => {\r\n try {\r\n runDoctor(opts);\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n\r\nfunction runDoctor(opts: DoctorOptions): void {\r\n const workspaceRoot = process.cwd();\r\n const checks: CheckReport[] = [];\r\n\r\n // (a) Node >= 18\r\n checks.push(checkNodeVersion());\r\n\r\n // (b) .kiro/ exists\r\n checks.push(checkKiroDir(workspaceRoot));\r\n\r\n // (c) mcp.json valid\r\n checks.push(checkMcpJson(workspaceRoot));\r\n\r\n // (d) tracking valid\r\n checks.push(checkTracking(workspaceRoot));\r\n\r\n // (e) tracked files exist\r\n checks.push(checkTrackedFiles(workspaceRoot));\r\n\r\n // (f) no trailing whitespace in steering front-matter\r\n checks.push(checkSteeringFrontMatter(workspaceRoot));\r\n\r\n // (g) metadata.json valid\r\n checks.push(checkMetadataJson(workspaceRoot));\r\n\r\n // (h) statusline exec bit (Unix)\r\n checks.push(checkStatuslineExecBit(workspaceRoot));\r\n\r\n // Print results\r\n let hasFail = false;\r\n for (const check of checks) {\r\n const tag = formatTag(check.result);\r\n process.stdout.write(`${tag} ${check.message}\\n`);\r\n\r\n if (check.result === 'FAIL') hasFail = true;\r\n\r\n // Apply fix if --fix and fixable\r\n if (opts.fix && check.fixable && check.fixAction) {\r\n check.fixAction();\r\n process.stdout.write(` ${color.green('Fixed!')}\\n`);\r\n }\r\n }\r\n\r\n process.exit(hasFail ? 1 : 0);\r\n}\r\n\r\nfunction formatTag(result: CheckResult): string {\r\n switch (result) {\r\n case 'PASS': return color.green('[PASS]');\r\n case 'FAIL': return color.red('[FAIL]');\r\n case 'WARN': return color.yellow('[WARN]');\r\n }\r\n}\r\n\r\nfunction checkNodeVersion(): CheckReport {\r\n const major = parseInt(process.versions.node.split('.')[0], 10);\r\n if (major >= 18) {\r\n return {\r\n name: 'node-version',\r\n result: 'PASS',\r\n message: `Node.js version >= 18 (${process.version})`,\r\n };\r\n }\r\n return {\r\n name: 'node-version',\r\n result: 'FAIL',\r\n message: `Node.js version >= 18 required (current: ${process.version})`,\r\n };\r\n}\r\n\r\nfunction checkKiroDir(workspaceRoot: string): CheckReport {\r\n const kiroDir = path.join(workspaceRoot, '.kiro');\r\n if (fs.existsSync(kiroDir) && fs.statSync(kiroDir).isDirectory()) {\r\n return { name: 'kiro-dir', result: 'PASS', message: '.kiro/ directory exists' };\r\n }\r\n return {\r\n name: 'kiro-dir',\r\n result: 'FAIL',\r\n message: '.kiro/ directory not found. Run `kiro-kit init` to create it.',\r\n };\r\n}\r\n\r\nfunction checkMcpJson(workspaceRoot: string): CheckReport {\r\n const mcpPath = path.join(workspaceRoot, '.kiro/settings/mcp.json');\r\n if (!fs.existsSync(mcpPath)) {\r\n return { name: 'mcp-json', result: 'WARN', message: '.kiro/settings/mcp.json not found (optional)' };\r\n }\r\n try {\r\n const content = fs.readFileSync(mcpPath, 'utf-8');\r\n JSON.parse(content);\r\n return { name: 'mcp-json', result: 'PASS', message: '.kiro/settings/mcp.json is valid JSON' };\r\n } catch {\r\n return {\r\n name: 'mcp-json',\r\n result: 'FAIL',\r\n message: '.kiro/settings/mcp.json is not valid JSON',\r\n fixable: true,\r\n fixAction: () => {\r\n const mcpPath2 = path.join(workspaceRoot, '.kiro/settings/mcp.json');\r\n fs.writeFileSync(mcpPath2, '{\\n \"mcpServers\": {}\\n}\\n', 'utf-8');\r\n },\r\n };\r\n }\r\n}\r\n\r\nfunction checkTracking(workspaceRoot: string): CheckReport {\r\n const trackingPath = path.join(workspaceRoot, '.kiro/.kiro-kit.json');\r\n if (!fs.existsSync(trackingPath)) {\r\n return { name: 'tracking', result: 'WARN', message: '.kiro/.kiro-kit.json not found (no presets installed)' };\r\n }\r\n try {\r\n const content = fs.readFileSync(trackingPath, 'utf-8');\r\n JSON.parse(content);\r\n return { name: 'tracking', result: 'PASS', message: '.kiro/.kiro-kit.json is valid' };\r\n } catch {\r\n return {\r\n name: 'tracking',\r\n result: 'FAIL',\r\n message: '.kiro/.kiro-kit.json is corrupt (invalid JSON)',\r\n };\r\n }\r\n}\r\n\r\nfunction checkTrackedFiles(workspaceRoot: string): CheckReport {\r\n let tracking: TrackingStore.TrackingData | null;\r\n try {\r\n tracking = TrackingStore.read(workspaceRoot);\r\n } catch {\r\n return { name: 'tracked-files', result: 'WARN', message: 'Cannot read tracking file, skipping file check' };\r\n }\r\n\r\n if (!tracking || tracking.presets.length === 0) {\r\n return { name: 'tracked-files', result: 'PASS', message: 'No tracked files to verify' };\r\n }\r\n\r\n const missing: string[] = [];\r\n for (const preset of tracking.presets) {\r\n for (const file of preset.files) {\r\n const fullPath = path.resolve(workspaceRoot, file.target);\r\n if (!fs.existsSync(fullPath)) {\r\n missing.push(file.target);\r\n }\r\n }\r\n }\r\n\r\n if (missing.length === 0) {\r\n return { name: 'tracked-files', result: 'PASS', message: 'All tracked files exist on disk' };\r\n }\r\n\r\n return {\r\n name: 'tracked-files',\r\n result: 'FAIL',\r\n message: `${missing.length} tracked file(s) missing: ${missing.slice(0, 3).join(', ')}${missing.length > 3 ? '...' : ''}`,\r\n };\r\n}\r\n\r\nfunction checkSteeringFrontMatter(workspaceRoot: string): CheckReport {\r\n const steeringDir = path.join(workspaceRoot, '.kiro/steering');\r\n if (!fs.existsSync(steeringDir)) {\r\n return { name: 'steering-fm', result: 'PASS', message: 'No steering files to check' };\r\n }\r\n\r\n const issues: string[] = [];\r\n\r\n const walkDir = (dir: string): void => {\r\n let entries: fs.Dirent[];\r\n try {\r\n entries = fs.readdirSync(dir, { withFileTypes: true });\r\n } catch { return; }\r\n for (const entry of entries) {\r\n const fullPath = path.join(dir, entry.name);\r\n if (entry.isDirectory()) {\r\n walkDir(fullPath);\r\n } else if (entry.isFile() && entry.name.endsWith('.md')) {\r\n checkSingleSteering(fullPath, issues);\r\n }\r\n }\r\n };\r\n\r\n walkDir(steeringDir);\r\n\r\n if (issues.length === 0) {\r\n return { name: 'steering-fm', result: 'PASS', message: 'Steering front-matter has no trailing whitespace' };\r\n }\r\n\r\n return {\r\n name: 'steering-fm',\r\n result: 'WARN',\r\n message: `${issues.length} steering file(s) have trailing whitespace in front-matter`,\r\n fixable: true,\r\n fixAction: () => {\r\n fixSteeringWhitespace(steeringDir);\r\n },\r\n };\r\n}\r\n\r\nfunction checkSingleSteering(filePath: string, issues: string[]): void {\r\n try {\r\n const content = fs.readFileSync(filePath, 'utf-8');\r\n const lines = content.split('\\n');\r\n if (lines[0]?.trim() !== '---') return;\r\n\r\n let endIdx = -1;\r\n for (let i = 1; i < lines.length; i++) {\r\n if (lines[i]?.trim() === '---') { endIdx = i; break; }\r\n }\r\n if (endIdx === -1) return;\r\n\r\n // Check for trailing whitespace in front-matter lines\r\n for (let i = 1; i < endIdx; i++) {\r\n if (lines[i] !== lines[i].trimEnd()) {\r\n issues.push(filePath);\r\n return;\r\n }\r\n }\r\n } catch { /* skip unreadable files */ }\r\n}\r\n\r\nfunction fixSteeringWhitespace(steeringDir: string): void {\r\n const walkAndFix = (dir: string): void => {\r\n let entries: fs.Dirent[];\r\n try { entries = fs.readdirSync(dir, { withFileTypes: true }); } catch { return; }\r\n for (const entry of entries) {\r\n const fullPath = path.join(dir, entry.name);\r\n if (entry.isDirectory()) {\r\n walkAndFix(fullPath);\r\n } else if (entry.isFile() && entry.name.endsWith('.md')) {\r\n const content = fs.readFileSync(fullPath, 'utf-8');\r\n const lines = content.split('\\n');\r\n if (lines[0]?.trim() !== '---') continue;\r\n let endIdx = -1;\r\n for (let i = 1; i < lines.length; i++) {\r\n if (lines[i]?.trim() === '---') { endIdx = i; break; }\r\n }\r\n if (endIdx === -1) continue;\r\n let changed = false;\r\n for (let i = 1; i < endIdx; i++) {\r\n const trimmed = lines[i].trimEnd();\r\n if (lines[i] !== trimmed) { lines[i] = trimmed; changed = true; }\r\n }\r\n if (changed) {\r\n fs.writeFileSync(fullPath, lines.join('\\n'), 'utf-8');\r\n }\r\n }\r\n }\r\n };\r\n walkAndFix(steeringDir);\r\n}\r\n\r\nfunction checkMetadataJson(workspaceRoot: string): CheckReport {\r\n const metaPath = path.join(workspaceRoot, '.kiro/metadata.json');\r\n if (!fs.existsSync(metaPath)) {\r\n return { name: 'metadata-json', result: 'WARN', message: '.kiro/metadata.json not found (optional)' };\r\n }\r\n try {\r\n const content = fs.readFileSync(metaPath, 'utf-8');\r\n const parsed = JSON.parse(content);\r\n if (!parsed.version || !parsed.name) {\r\n return { name: 'metadata-json', result: 'FAIL', message: '.kiro/metadata.json missing required fields (version, name)' };\r\n }\r\n return { name: 'metadata-json', result: 'PASS', message: '.kiro/metadata.json is valid' };\r\n } catch {\r\n return { name: 'metadata-json', result: 'FAIL', message: '.kiro/metadata.json is not valid JSON' };\r\n }\r\n}\r\n\r\nfunction checkStatuslineExecBit(workspaceRoot: string): CheckReport {\r\n // Only relevant on Unix\r\n if (process.platform === 'win32') {\r\n return { name: 'statusline-exec', result: 'PASS', message: 'Statusline exec bit check (skipped on Windows)' };\r\n }\r\n\r\n const shPath = path.join(workspaceRoot, '.kiro/statusline.sh');\r\n if (!fs.existsSync(shPath)) {\r\n return { name: 'statusline-exec', result: 'PASS', message: 'No statusline.sh to check' };\r\n }\r\n\r\n try {\r\n const stat = fs.statSync(shPath);\r\n const isExecutable = (stat.mode & 0o111) !== 0;\r\n if (isExecutable) {\r\n return { name: 'statusline-exec', result: 'PASS', message: 'statusline.sh is executable' };\r\n }\r\n return {\r\n name: 'statusline-exec',\r\n result: 'WARN',\r\n message: 'statusline.sh is not executable',\r\n fixable: true,\r\n fixAction: () => {\r\n fs.chmodSync(shPath, 0o755);\r\n },\r\n };\r\n } catch {\r\n return { name: 'statusline-exec', result: 'WARN', message: 'Cannot check statusline.sh permissions' };\r\n }\r\n}\r\n","import { Command } from 'commander';\r\nimport fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport os from 'node:os';\r\nimport process from 'node:process';\r\n\r\nimport { logger } from '../utils/logger.js';\r\nimport { color } from '../utils/color.js';\r\n\r\nconst CONFIG_DIR = path.join(os.homedir(), '.kiro-kit');\r\nconst CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');\r\n\r\ninterface TelemetryConfig {\r\n telemetry: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\nfunction readConfig(): TelemetryConfig {\r\n try {\r\n if (fs.existsSync(CONFIG_FILE)) {\r\n return JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf-8')) as TelemetryConfig;\r\n }\r\n } catch { /* ignore corrupt config */ }\r\n return { telemetry: false };\r\n}\r\n\r\nfunction writeConfig(config: TelemetryConfig): void {\r\n fs.mkdirSync(CONFIG_DIR, { recursive: true });\r\n fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + '\\n', 'utf-8');\r\n}\r\n\r\nexport function registerTelemetryCommand(program: Command): void {\r\n const telemetry = program\r\n .command('telemetry')\r\n .description('Manage anonymous usage telemetry');\r\n\r\n telemetry\r\n .command('enable')\r\n .description('Opt in to anonymous telemetry')\r\n .action(() => {\r\n try {\r\n const config = readConfig();\r\n config.telemetry = true;\r\n writeConfig(config);\r\n logger.success('Telemetry enabled. Anonymous usage data will be collected.');\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n\r\n telemetry\r\n .command('disable')\r\n .description('Opt out of telemetry')\r\n .action(() => {\r\n try {\r\n const config = readConfig();\r\n config.telemetry = false;\r\n writeConfig(config);\r\n logger.success('Telemetry disabled. No data will be collected.');\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n\r\n telemetry\r\n .command('status')\r\n .description('Show current telemetry status')\r\n .action(() => {\r\n try {\r\n const config = readConfig();\r\n const status = config.telemetry ? color.green('enabled') : color.yellow('disabled');\r\n process.stdout.write(`Telemetry: ${status}\\n`);\r\n process.stdout.write(`Config: ${CONFIG_FILE}\\n`);\r\n } catch (err: unknown) {\r\n logger.error(err instanceof Error ? err.message : String(err));\r\n process.exit(1);\r\n }\r\n });\r\n}\r\n"],"mappings":"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OAAU,aACV,OAAU,aACV,OAAU,aACV,OAAU,aACV,OAAU,aACV,OAAU,aACV,OAAU,aACV,OAAU,aACV,OAAU,aACV,OAAU,aAAa,aAAa,OACpC,OAAU,aACV,OAAU,aACV,OAAU,aAAa,aAAa,OACpC,OAAU,aACV,OAAU,aACV,OAAU,aAAa,aAAa,OACpC,OAAU,aAAa,aAAa,OACpC,OAAU,aAAa,aAAa,OACpC,OAAU,aAAa,aAAa,OACpC,OAAU,aAAa,aAAa,OACpC,QAAU,aACV,QAAU,aAAa,aAAa,QACpC,QAAU,aACV,QAAU,aACV,QAAU,aAAa,aAAa,QACpC,QAAU,aAAa,aAAa,QACpC,QAAU,aAAa,aAAa,QACpC,QAAU,aAAa,aAAa,QACpC,QAAU,aAAa,aAAa,QACpC,QAAU,aACV,QAAU,aAAa,aAAa,QACpC,QAAU,aACV,QAAU,aACV,QAAU,aACV,QAAU,aACV,QAAU,aACV,QAAU,aAAa,aAAa,QACpC,QAAU,aACV,QAAU,aACV,QAAU,aACV,QAAU,aACV,QAAU,aACV,QAAU,aACV,QAAU,aAAa,aAAa,QACpC,QAAU,aACV,QAAU,aACV,QAAU,aAAa,aAAa,QACpC,QAAU,aAAa,aAAa,QACpC,QAAU,aAAa,aAAa,QACpC,QAAU,aAAa,aAAa,QACpC,QAAU,aACV,QAAU,aAAa,aAAa,QACpC,QAAU,aAAa,aAAa,QACpC,QAAU,aACV,QAAU,aACV,QAAU,aACV,QAAU,aACV,QAAU,aAAa,aAAa,QACpC,QAAU,aAAa,aAAa,QACpC,QAAU,aACV,QAAU,aACV,QAAU,aACV,QAAU,aACV,QAAU,aACV,QAAU,aAAa,aAAa,QACpC,QAAU,aACV,QAAU,aACV,QAAU,aAAa,aAAa,QACpC,QAAU,aACV,QAAU,aAAa,aAAa,QACpC,QAAU,aAAa,aAAa,QACpC,QAAU,aACV,QAAU,aACV,QAAU,aACV,QAAU,aAAa,aAAa,QACpC,QAAU,aAAa,aAAa,QACpC,QAAU,aAAa,aAAa,QACpC,QAAU,aAAa,aAAa,QACpC,QAAU,aAAa,aAAa,QACpC,QAAU,aAAa,aAAa,QACpC,QAAU,aACV,QAAU,aACV,QAAU,a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AAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,M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","names":["red","green","blue","process","os","argv","styles","chalk","self","outputFigText","resolve","fs","path","z","z2","color","gray","link","path","wrapAnsi16","wrapAnsi256","wrapAnsi16m","wrap","styles","assembleStyles","argv","os","tty","hasFlag","env","translateLevel","supportsColor","stringReplaceAll","stringEncaseCRLFWithFirstIndex","ESCAPES","chalk","styles","inverse","ansiStyles","stdoutColor","stderrColor","stringReplaceAll","stringEncaseCRLFWithFirstIndex","levelMapping","styles","applyOptions","chalkFactory","chalk","Chalk","createBuilder","createStyler","usedModels","proto","self","applyStyle","global","obj","color","format","clone","p","q","color2","color","chalk","colors","emojiRegex","eastAsianWidth","cliBoxes","preserveConsecutiveUppercase","ansiRegex","isFullwidthCodePoint","require_emoji_regex","stripAnsi","isFullwidthCodePoint","emojiRegex","stringWidth","stringWidth","ansiAlign","assembleStyles","styles","wrapAnsi16","wrapAnsi256","wrapAnsi16m","ANSI_BACKGROUND_OFFSET","red","green","blue","modifierNames","foregroundColorNames","backgroundColorNames","colorNames","ansiStyles","ansi_styles_default","init_ansi_styles","init_ansi_styles","code","ansi_styles_default","process","import_cli_boxes","env","cliBoxes","ansiAlign","content","color","EventEmitter","EventEmitter","tty","env","colors","rfdc","handler","clone","platform","isWindows","process","os","isWindows","major","onetime","process","load","process","process","init_utilities","init_utilities","validate","eastAsianWidth","stringWidth","eastAsianWidth","init_string_width","wrapAnsi","exec","ESCAPES","END_CODE","ANSI_ESCAPE_BELL","ANSI_CSI","ANSI_OSC","ANSI_SGR_TERMINATOR","ANSI_ESCAPE_LINK","wrapAnsiCode","wrapAnsiHyperlink","wordLengths","wrapWord","stringVisibleTrimSpacesRight","init_wrap_ansi","init_string_width","init_ansi_styles","stringWidth","code","ansi_styles_default","ansi_styles_default","ESCAPES","isFullWidth","init_ansi_styles","process","reset","wrapAnsi","init_wrap_ansi","isFullwidthCodePoint","init_is_fullwidth_code_point","sliceAnsi","ESCAPES","isFullwidthCodePoint","wrapAnsi","init_slice_ansi","init_is_fullwidth_code_point","init_ansi_styles","ansi_styles_default","stringWidth","sliceAnsi","init_slice_ansi","init_string_width","color","resolve","__defProp","createLogUpdate","wrap","rfdc","init","ESC","beep","F","figures","figures","styles","require_util","readline","EventEmitter","beep","color","resolve","self","color","figures","color","figures","wrap","color","resolve","self","color","figures","regex","resolve","self","color","figures","color","figures","wrap","cursor","resolve","self","color","figures","wrap","color","figures","cursor","color","onExit","F","resolve","self","override","question","answer","getFormattedAnswer","require_action","require_strip","require_clear","require_figures","figures","require_style","figures","styles","require_lines","require_wrap","require_entriesToDisplay","require_util","require_prompt","readline","EventEmitter","beep","color","require_text","color","figures","require_select","color","figures","wrap","require_toggle","color","require_datepart","require_meridiem","require_day","require_hours","require_milliseconds","require_minutes","require_month","require_seconds","require_year","require_dateparts","require_date","color","figures","regex","require_number","color","figures","require_multiselect","color","figures","wrap","cursor","require_autocomplete","color","figures","wrap","require_autocompleteMultiselect","color","figures","cursor","require_confirm","color","require_elements","require_prompts","onExit","override","question","answer","require_prompts","ESC","OSC","BEL","SEP","isTerminalApp","init_ansi_escapes","supportsColor","hasFlag","env","supportsHyperlinks","init_ansi_escapes","process","fs","path","process","crypto","fs","path","__dirname","path","fs","fs","showDiff","fs","path","path","fs","fs","path","process","process","process","path","fs","fs","path","write","read","fs","path","process","fs","fs","fs","path","crypto","path","path","fs","path","z","fs","path","path","fs","fs","path","path","fs","fs","path","path","fs","TIER_ORDER","resolve","env","argv","color","isCI","linkFn","chalk","boxen","chalk","resolve","sha256","crypto","generateTimestamp","pkg","fs","path","process","read","write","program","fs","path","process","crypto","sha256","crypto","generateTimestamp","getKitVersion","pkg","fs","process","readline","path","resolve","program","read","write","process","program","process","process","program","process","fs","path","process","crypto","sha256","crypto","generateTimestamp","getKitVersion","pkg","fs","conflictPrompt","process","readline","path","resolve","program","process","program","process","timestamps","fs","path","process","program","process","major","path","fs","fs","path","os","process","path","os","fs","program","process","process","require"]}
|