@boba-cli/machine 0.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +335 -0
- package/dist/browser/index.cjs +696 -0
- package/dist/browser/index.cjs.map +1 -0
- package/dist/browser/index.d.cts +232 -0
- package/dist/browser/index.d.ts +232 -0
- package/dist/browser/index.js +686 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/index.cjs +435 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +329 -0
- package/dist/index.d.ts +329 -0
- package/dist/index.js +364 -0
- package/dist/index.js.map +1 -0
- package/dist/node/index.cjs +827 -0
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.d.cts +235 -0
- package/dist/node/index.d.ts +235 -0
- package/dist/node/index.js +790 -0
- package/dist/node/index.js.map +1 -0
- package/dist/types-FB6TYMn5.d.cts +443 -0
- package/dist/types-FB6TYMn5.d.ts +443 -0
- package/package.json +95 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/.pnpm/tsup@8.5.1_@microsoft+api-extractor@7.55.2_@types+node@24.10.2__jiti@2.6.1_postcss@8.5._cc73ec3ff2d01f4687d3b65cbe1abb84/node_modules/tsup/assets/cjs_shims.js","../../src/style/index.ts","../../src/node/archive.ts","../../src/node/clipboard.ts","../../src/node/environment.ts","../../src/node/filesystem.ts","../../src/node/path.ts","../../src/node/signals.ts","../../src/bytes.ts","../../src/node/terminal.ts","../../src/node/index.ts"],"names":["r","g","b","stat","resolve","require","createRequire","process","readdir","readFile","writeFile","mkdir","unlink","rm","rmdir","rename","copyFile","homedir","nodePath"],"mappings":"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","file":"index.cjs","sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","/**\n * Pure JavaScript ANSI styling utility for terminal text.\n * Works identically in Node.js and browser/xterm.js contexts.\n */\n\nimport type { ColorSupport, StyleFn } from '../types.js'\n\n// ANSI escape codes\nconst ESC = '\\x1b['\nconst RESET = `${ESC}0m`\n\n// Modifier codes\nconst CODES = {\n // Modifiers (open, close)\n bold: ['1', '22'],\n dim: ['2', '22'],\n italic: ['3', '23'],\n underline: ['4', '24'],\n inverse: ['7', '27'],\n hidden: ['8', '28'],\n strikethrough: ['9', '29'],\n\n // Basic foreground colors (30-37)\n black: ['30', '39'],\n red: ['31', '39'],\n green: ['32', '39'],\n yellow: ['33', '39'],\n blue: ['34', '39'],\n magenta: ['35', '39'],\n cyan: ['36', '39'],\n white: ['37', '39'],\n\n // Bright foreground colors (90-97)\n blackBright: ['90', '39'],\n redBright: ['91', '39'],\n greenBright: ['92', '39'],\n yellowBright: ['93', '39'],\n blueBright: ['94', '39'],\n magentaBright: ['95', '39'],\n cyanBright: ['96', '39'],\n whiteBright: ['97', '39'],\n\n // Basic background colors (40-47)\n bgBlack: ['40', '49'],\n bgRed: ['41', '49'],\n bgGreen: ['42', '49'],\n bgYellow: ['43', '49'],\n bgBlue: ['44', '49'],\n bgMagenta: ['45', '49'],\n bgCyan: ['46', '49'],\n bgWhite: ['47', '49'],\n\n // Bright background colors (100-107)\n bgBlackBright: ['100', '49'],\n bgRedBright: ['101', '49'],\n bgGreenBright: ['102', '49'],\n bgYellowBright: ['103', '49'],\n bgBlueBright: ['104', '49'],\n bgMagentaBright: ['105', '49'],\n bgCyanBright: ['106', '49'],\n bgWhiteBright: ['107', '49'],\n} as const\n\ntype CodeName = keyof typeof CODES\n\n/**\n * Apply ANSI codes to text.\n * @param text - Text to style\n * @param open - Opening ANSI code\n * @param close - Closing ANSI code\n * @returns Styled text\n */\nfunction applyStyle(text: string, open: string, close: string): string {\n const openSeq = `${ESC}${open}m`\n const closeSeq = `${ESC}${close}m`\n\n // Replace any existing close codes with close+open to properly nest styles\n // This handles cases like style.bold(style.bold('text')) where the inner\n // bold close would prematurely end the outer bold\n const replaced = text.replace(\n new RegExp(closeSeq.replace(/[[\\](){}|^$+*?.\\\\]/g, '\\\\$&'), 'g'),\n closeSeq + openSeq,\n )\n\n return openSeq + replaced + closeSeq\n}\n\n/**\n * Convert hex color to RGB.\n * @param hex - Hex color string (with or without #)\n * @returns RGB array [r, g, b]\n */\nfunction hexToRgb(hex: string): [number, number, number] {\n const clean = hex.replace(/^#/, '')\n const num = parseInt(clean, 16)\n\n if (clean.length === 3) {\n // Short form: #RGB -> #RRGGBB\n const r = ((num >> 8) & 0xf) * 17\n const g = ((num >> 4) & 0xf) * 17\n const b = (num & 0xf) * 17\n return [r, g, b]\n }\n\n // Long form: #RRGGBB\n const r = (num >> 16) & 0xff\n const g = (num >> 8) & 0xff\n const b = num & 0xff\n return [r, g, b]\n}\n\n/**\n * Create a chainable style function.\n * @param colorSupport - Color support level information\n * @returns Chainable style function\n * @public\n */\nexport function createStyle(colorSupport: ColorSupport): StyleFn {\n const enabled = colorSupport.level > 0\n\n /**\n * Build a style function that can be chained.\n * @param stack - Array of [open, close] code pairs to apply\n * @returns Style function\n */\n function build(stack: Array<[string, string]>): StyleFn {\n // The function itself - applies all stacked styles\n const fn = (text: string): string => {\n if (!enabled || stack.length === 0) {\n return text\n }\n\n // Apply styles from inside out\n let result = text\n for (let i = stack.length - 1; i >= 0; i--) {\n const [open, close] = stack[i]!\n result = applyStyle(result, open, close)\n }\n return result\n }\n\n // Add all code-based style properties\n const codeNames = Object.keys(CODES) as CodeName[]\n for (const name of codeNames) {\n const [open, close] = CODES[name]\n Object.defineProperty(fn, name, {\n get() {\n return build([...stack, [open, close]])\n },\n })\n }\n\n // Add gray as alias for blackBright\n Object.defineProperty(fn, 'gray', {\n get() {\n const [open, close] = CODES.blackBright\n return build([...stack, [open, close]])\n },\n })\n\n // Add grey as alias for blackBright\n Object.defineProperty(fn, 'grey', {\n get() {\n const [open, close] = CODES.blackBright\n return build([...stack, [open, close]])\n },\n })\n\n // Add extended color methods\n\n // hex(color: string): StyleFn\n Object.defineProperty(fn, 'hex', {\n value: (color: string): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n const [r, g, b] = hexToRgb(color)\n return build([...stack, [`38;2;${r};${g};${b}`, '39']])\n },\n writable: true,\n })\n\n // rgb(r: number, g: number, b: number): StyleFn\n Object.defineProperty(fn, 'rgb', {\n value: (r: number, g: number, b: number): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n return build([...stack, [`38;2;${r};${g};${b}`, '39']])\n },\n writable: true,\n })\n\n // bgHex(color: string): StyleFn\n Object.defineProperty(fn, 'bgHex', {\n value: (color: string): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n const [r, g, b] = hexToRgb(color)\n return build([...stack, [`48;2;${r};${g};${b}`, '49']])\n },\n writable: true,\n })\n\n // bgRgb(r: number, g: number, b: number): StyleFn\n Object.defineProperty(fn, 'bgRgb', {\n value: (r: number, g: number, b: number): StyleFn => {\n if (!enabled || !colorSupport.has16m) {\n return build(stack)\n }\n return build([...stack, [`48;2;${r};${g};${b}`, '49']])\n },\n writable: true,\n })\n\n // ansi256(code: number): StyleFn\n Object.defineProperty(fn, 'ansi256', {\n value: (code: number): StyleFn => {\n if (!enabled || !colorSupport.has256) {\n return build(stack)\n }\n return build([...stack, [`38;5;${code}`, '39']])\n },\n writable: true,\n })\n\n // bgAnsi256(code: number): StyleFn\n Object.defineProperty(fn, 'bgAnsi256', {\n value: (code: number): StyleFn => {\n if (!enabled || !colorSupport.has256) {\n return build(stack)\n }\n return build([...stack, [`48;5;${code}`, '49']])\n },\n writable: true,\n })\n\n return fn as StyleFn\n }\n\n return build([])\n}\n\n/**\n * Create a style function that always applies colors (for xterm.js).\n * @returns Chainable style function with full color support\n * @public\n */\nexport function createAlwaysEnabledStyle(): StyleFn {\n return createStyle({ level: 3, hasBasic: true, has256: true, has16m: true })\n}\n","/**\n * Node.js archive adapter using archiver and unzipper.\n */\n\nimport type { ArchiveAdapter } from '../types.js'\n\n/**\n * Node.js implementation of ArchiveAdapter.\n * Uses archiver for compression and unzipper for extraction.\n * @public\n */\nexport class NodeArchiveAdapter implements ArchiveAdapter {\n private readonly hasArchiver: boolean\n private readonly hasUnzipper: boolean\n\n /**\n * Create a new Node.js archive adapter.\n * Checks for availability of archiver and unzipper packages.\n */\n constructor() {\n this.hasArchiver = this.checkPackageAvailability('archiver')\n this.hasUnzipper = this.checkPackageAvailability('unzipper')\n }\n\n /**\n * Check if a package is available.\n * @param packageName - Package to check\n * @returns True if package can be imported\n */\n private checkPackageAvailability(packageName: string): boolean {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n require.resolve(packageName)\n return true\n } catch {\n return false\n }\n }\n\n /**\n * Check if archive operations are available.\n * @returns True if both archiver and unzipper are available\n */\n isAvailable(): boolean {\n return this.hasArchiver && this.hasUnzipper\n }\n\n /**\n * Create a zip archive from a directory.\n * @param sourceDir - Source directory to archive\n * @param destPath - Destination path for the zip file\n * @throws Error if archiver is not available or archiving fails\n */\n async zip(sourceDir: string, destPath: string): Promise<void> {\n if (!this.hasArchiver) {\n throw new Error(\n 'Archive operations not available: archiver package not found. Install with: pnpm add archiver',\n )\n }\n\n // Dynamic import to avoid bundling dependencies that may not be installed\n const archiver = await import('archiver')\n const { createWriteStream } = await import('node:fs')\n const { stat } = await import('node:fs/promises')\n const path = await import('node:path')\n\n return new Promise((resolve, reject) => {\n const outputStream = createWriteStream(destPath)\n const archive = archiver.default('zip', { zlib: { level: 9 } })\n\n outputStream.on('close', () => {\n resolve()\n })\n\n archive.on('error', (err: Error) => {\n reject(err)\n })\n\n archive.pipe(outputStream)\n\n // Check if source is a directory or file\n stat(sourceDir)\n .then((stats) => {\n if (stats.isDirectory()) {\n archive.directory(sourceDir, false)\n } else {\n archive.file(sourceDir, { name: path.basename(sourceDir) })\n }\n\n void archive.finalize()\n })\n .catch((err) => {\n reject(err)\n })\n })\n }\n\n /**\n * Extract a zip archive to a directory.\n * @param archivePath - Path to the zip file\n * @param destDir - Destination directory for extraction\n * @throws Error if unzipper is not available or extraction fails\n */\n async unzip(archivePath: string, destDir: string): Promise<void> {\n if (!this.hasUnzipper) {\n throw new Error(\n 'Archive operations not available: unzipper package not found. Install with: pnpm add unzipper',\n )\n }\n\n // Dynamic import to avoid bundling dependencies that may not be installed\n const unzipper = await import('unzipper')\n const { createReadStream } = await import('node:fs')\n\n return new Promise((resolve, reject) => {\n createReadStream(archivePath)\n .pipe(unzipper.Extract({ path: destDir }))\n .on('close', () => {\n resolve()\n })\n .on('error', (err: Error) => {\n reject(err)\n })\n })\n }\n}\n","import { createRequire } from 'node:module'\nimport type { ClipboardAdapter } from '../types.js'\n\nconst require = createRequire(import.meta.url)\n\n/**\n * Clipboard interface matching the clipboardy module.\n */\ninterface ClipboardModule {\n read(): Promise<string>\n write(text: string): Promise<void>\n}\n\n/**\n * Node.js clipboard adapter using the clipboardy package.\n * clipboardy is an optional peer dependency.\n * @public\n */\nexport class NodeClipboardAdapter implements ClipboardAdapter {\n private clipboard: ClipboardModule | null = null\n private available: boolean | null = null\n\n /**\n * Create a new Node.js clipboard adapter.\n * Optionally pass a pre-loaded clipboardy module for dependency injection.\n * @param clipboardModule - Optional pre-loaded clipboard module\n */\n constructor(clipboardModule?: ClipboardModule) {\n if (clipboardModule) {\n this.clipboard = clipboardModule\n this.available = true\n }\n }\n\n private async loadClipboard(): Promise<ClipboardModule | null> {\n // Don't try to load if we've already determined it's unavailable\n if (this.available === false) {\n return null\n }\n\n if (this.clipboard !== null) {\n return this.clipboard\n }\n\n try {\n // Dynamic import of optional peer dependency\n const module = (await import('clipboardy')) as {\n default: ClipboardModule\n }\n this.clipboard = module.default\n // Note: We set available=true here, but it may be set to false later if runtime fails\n // (e.g., clipboardy installed but xsel binary missing)\n this.available = true\n return this.clipboard\n } catch {\n this.available = false\n return null\n }\n }\n\n async read(): Promise<string> {\n const clipboard = await this.loadClipboard()\n if (!clipboard) {\n throw new Error(\n 'Clipboard not available. Install clipboardy: npm install clipboardy',\n )\n }\n try {\n return await clipboard.read()\n } catch {\n // Mark as unavailable when clipboardy fails at runtime (e.g., missing xsel binary)\n // This ensures isAvailable() returns false on subsequent checks\n this.available = false\n this.clipboard = null\n throw new Error(\n 'Clipboard not available. Install clipboardy: npm install clipboardy',\n )\n }\n }\n\n async write(text: string): Promise<void> {\n const clipboard = await this.loadClipboard()\n if (!clipboard) {\n throw new Error(\n 'Clipboard not available. Install clipboardy: npm install clipboardy',\n )\n }\n try {\n await clipboard.write(text)\n } catch {\n // Mark as unavailable when clipboardy fails at runtime (e.g., missing xsel binary)\n // This ensures isAvailable() returns false on subsequent checks\n this.available = false\n this.clipboard = null\n throw new Error(\n 'Clipboard not available. Install clipboardy: npm install clipboardy',\n )\n }\n }\n\n isAvailable(): boolean {\n // If we already checked, return cached result\n if (this.available !== null) {\n return this.available\n }\n\n // Try synchronous check first\n try {\n require.resolve('clipboardy')\n return true\n } catch {\n return false\n }\n }\n}\n","import process from 'node:process'\nimport { createRequire } from 'node:module'\nimport type {\n ColorSupport,\n EnvironmentAdapter,\n TerminalBackground,\n} from '../types.js'\n\nconst require = createRequire(import.meta.url)\n\n/**\n * Supports-color module interface.\n */\ninterface SupportsColorModule {\n stdout?: { level?: number } | false\n}\n\n/**\n * Node.js environment adapter.\n * Uses process.env and supports-color for environment detection.\n * @public\n */\nexport class NodeEnvironmentAdapter implements EnvironmentAdapter {\n private supportsColorModule: SupportsColorModule | null = null\n private colorSupportCached: ColorSupport | null = null\n private backgroundCached: TerminalBackground | null = null\n\n /**\n * Create a new Node.js environment adapter.\n * Optionally pass a pre-loaded supports-color module for dependency injection.\n * @param supportsColor - Optional pre-loaded supports-color module\n */\n constructor(supportsColor?: SupportsColorModule) {\n if (supportsColor) {\n this.supportsColorModule = supportsColor\n }\n }\n\n get(name: string): string | undefined {\n return process.env[name]\n }\n\n getColorSupport(): ColorSupport {\n if (this.colorSupportCached) {\n return this.colorSupportCached\n }\n\n const support = this.detectColorSupport()\n this.colorSupportCached = support\n return support\n }\n\n private detectColorSupport(): ColorSupport {\n // Try to use supports-color if available\n const module = this.loadSupportsColor()\n if (module) {\n const stdout = module.stdout\n if (stdout && typeof stdout.level === 'number') {\n const level = stdout.level\n return {\n level,\n hasBasic: level >= 1,\n has256: level >= 2,\n has16m: level >= 3,\n }\n }\n }\n\n // Fallback to environment variable detection\n return this.detectColorSupportFromEnv()\n }\n\n private loadSupportsColor(): SupportsColorModule | null {\n if (this.supportsColorModule !== null) {\n return this.supportsColorModule\n }\n\n try {\n // Dynamic require of optional peer dependency\n const module = require('supports-color') as SupportsColorModule\n this.supportsColorModule = module\n return module\n } catch {\n return null\n }\n }\n\n private detectColorSupportFromEnv(): ColorSupport {\n // Check COLORTERM for true color support\n const colorTerm = process.env.COLORTERM?.toLowerCase()\n if (colorTerm === 'truecolor' || colorTerm === '24bit') {\n return { level: 3, hasBasic: true, has256: true, has16m: true }\n }\n\n // Check TERM for 256 color support\n const term = process.env.TERM?.toLowerCase() ?? ''\n if (term.includes('256color') || term.includes('256-color')) {\n return { level: 2, hasBasic: true, has256: true, has16m: false }\n }\n\n // Check for basic color terminals\n if (\n term.includes('color') ||\n term.includes('ansi') ||\n term.includes('xterm') ||\n term.includes('vt100') ||\n term.includes('screen') ||\n term.includes('linux')\n ) {\n return { level: 1, hasBasic: true, has256: false, has16m: false }\n }\n\n // Check CI environments\n if (process.env.CI) {\n return { level: 1, hasBasic: true, has256: false, has16m: false }\n }\n\n // Check if we have a TTY\n if (process.stdout?.isTTY) {\n return { level: 1, hasBasic: true, has256: false, has16m: false }\n }\n\n // No color support detected\n return { level: 0, hasBasic: false, has256: false, has16m: false }\n }\n\n getTerminalBackground(): TerminalBackground {\n if (this.backgroundCached) {\n return this.backgroundCached\n }\n\n const background = this.detectTerminalBackground()\n this.backgroundCached = background\n return background\n }\n\n private detectTerminalBackground(): TerminalBackground {\n // COLORFGBG is the most reliable indicator when present\n // Format: \"fg;bg\" where bg < 7 typically means dark, bg >= 7 means light\n const colorFgBg = process.env.COLORFGBG\n if (colorFgBg) {\n const parts = colorFgBg.split(';')\n const bg = parseInt(parts[parts.length - 1] ?? '', 10)\n if (!isNaN(bg)) {\n // Standard ANSI colors: 0-6 are dark, 7+ (white) is light\n // 256-color: 0-7 dark, 8-15 bright versions\n return bg < 7 || (bg >= 8 && bg < 16 && bg !== 15) ? 'dark' : 'light'\n }\n }\n\n // Some terminals set TERM_BACKGROUND directly\n const termBackground = process.env.TERM_BACKGROUND?.toLowerCase()\n if (termBackground === 'dark' || termBackground === 'light') {\n return termBackground\n }\n\n // macOS Terminal.app and iTerm2 default to dark themes commonly\n const termProgram = process.env.TERM_PROGRAM ?? ''\n if (/iTerm/i.test(termProgram)) {\n // iTerm2's default is dark, but users can change it\n return 'dark'\n }\n\n // VS Code integrated terminal\n if (process.env.TERM_PROGRAM === 'vscode') {\n // VS Code defaults to matching the editor theme\n // Most devs use dark themes\n return 'dark'\n }\n\n return 'unknown'\n }\n}\n","import { copyFile, mkdir, readdir, readFile, rename, rm, rmdir, stat, unlink, writeFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport process from 'node:process'\nimport type { DirectoryEntry, FileStat, FileSystemAdapter } from '../types.js'\n\n/**\n * Node.js directory entry implementation.\n * Wraps fs.Dirent from Node.js.\n * @internal\n */\nclass NodeDirectoryEntry implements DirectoryEntry {\n readonly name: string\n private readonly _isDirectory: boolean\n private readonly _isFile: boolean\n private readonly _isSymbolicLink: boolean\n\n constructor(name: string, isDirectory: boolean, isFile: boolean, isSymbolicLink: boolean) {\n this.name = name\n this._isDirectory = isDirectory\n this._isFile = isFile\n this._isSymbolicLink = isSymbolicLink\n }\n\n isDirectory(): boolean {\n return this._isDirectory\n }\n\n isFile(): boolean {\n return this._isFile\n }\n\n isSymbolicLink(): boolean {\n return this._isSymbolicLink\n }\n}\n\n/**\n * Node.js filesystem adapter.\n * Wraps Node.js fs/promises API for platform-agnostic file operations.\n * @public\n */\nexport class NodeFileSystemAdapter implements FileSystemAdapter {\n async readdir(path: string, options?: { withFileTypes?: boolean }): Promise<DirectoryEntry[] | string[]> {\n if (options?.withFileTypes) {\n const entries = await readdir(path, { withFileTypes: true })\n return entries.map(\n (entry) =>\n new NodeDirectoryEntry(\n entry.name,\n entry.isDirectory(),\n entry.isFile(),\n entry.isSymbolicLink(),\n ),\n )\n }\n\n return readdir(path)\n }\n\n async stat(path: string): Promise<FileStat> {\n const stats = await stat(path)\n return {\n size: stats.size,\n mode: stats.mode,\n mtime: stats.mtime,\n isDirectory: stats.isDirectory(),\n isFile: stats.isFile(),\n isSymbolicLink: stats.isSymbolicLink(),\n }\n }\n\n async readFile(path: string, encoding?: string): Promise<string> {\n return readFile(path, { encoding: (encoding ?? 'utf-8') as BufferEncoding })\n }\n\n async writeFile(path: string, content: string): Promise<void> {\n await writeFile(path, content, 'utf-8')\n }\n\n async exists(path: string): Promise<boolean> {\n try {\n await stat(path)\n return true\n } catch {\n return false\n }\n }\n\n async mkdir(path: string, options?: { recursive?: boolean }): Promise<void> {\n await mkdir(path, { recursive: options?.recursive })\n }\n\n async unlink(path: string): Promise<void> {\n await unlink(path)\n }\n\n async rmdir(path: string, options?: { recursive?: boolean; force?: boolean }): Promise<void> {\n if (options?.recursive || options?.force) {\n // Use rm for recursive deletion or force option\n await rm(path, { recursive: options.recursive ?? false, force: options.force ?? false })\n } else {\n // Use rmdir for non-recursive deletion (throws for non-empty directories)\n await rmdir(path)\n }\n }\n\n async rename(src: string, dst: string): Promise<void> {\n await rename(src, dst)\n }\n\n async copyFile(src: string, dst: string): Promise<void> {\n await copyFile(src, dst)\n }\n\n cwd(): string {\n return process.cwd()\n }\n\n homedir(): string {\n return homedir()\n }\n}\n","import * as nodePath from 'node:path'\nimport type { PathAdapter } from '../types.js'\n\n/**\n * Node.js path adapter.\n * Wraps Node.js path module for platform-agnostic path operations.\n * @public\n */\nexport class NodePathAdapter implements PathAdapter {\n readonly sep = nodePath.sep\n\n join(...segments: string[]): string {\n return nodePath.join(...segments)\n }\n\n dirname(path: string): string {\n return nodePath.dirname(path)\n }\n\n basename(path: string, ext?: string): string {\n return nodePath.basename(path, ext)\n }\n\n extname(path: string): string {\n return nodePath.extname(path)\n }\n\n resolve(...segments: string[]): string {\n return nodePath.resolve(...segments)\n }\n\n isAbsolute(path: string): boolean {\n return nodePath.isAbsolute(path)\n }\n\n normalize(path: string): string {\n return nodePath.normalize(path)\n }\n}\n","import process from 'node:process'\nimport type { Disposable, SignalAdapter, SignalHandler } from '../types.js'\n\n/**\n * Node.js signal adapter for handling SIGINT, SIGTERM, etc.\n * @public\n */\nexport class NodeSignalAdapter implements SignalAdapter {\n private readonly interruptHandlers: Set<SignalHandler> = new Set()\n private readonly terminateHandlers: Set<SignalHandler> = new Set()\n private disposed = false\n\n private readonly handleInterrupt = (): void => {\n for (const handler of this.interruptHandlers) {\n handler()\n }\n }\n\n private readonly handleTerminate = (): void => {\n for (const handler of this.terminateHandlers) {\n handler()\n }\n }\n\n onInterrupt(handler: SignalHandler): Disposable {\n if (this.interruptHandlers.size === 0) {\n process.on('SIGINT', this.handleInterrupt)\n }\n this.interruptHandlers.add(handler)\n\n return {\n dispose: () => {\n this.interruptHandlers.delete(handler)\n if (this.interruptHandlers.size === 0) {\n process.off('SIGINT', this.handleInterrupt)\n }\n },\n }\n }\n\n onTerminate(handler: SignalHandler): Disposable {\n if (this.terminateHandlers.size === 0) {\n process.on('SIGTERM', this.handleTerminate)\n }\n this.terminateHandlers.add(handler)\n\n return {\n dispose: () => {\n this.terminateHandlers.delete(handler)\n if (this.terminateHandlers.size === 0) {\n process.off('SIGTERM', this.handleTerminate)\n }\n },\n }\n }\n\n dispose(): void {\n if (this.disposed) {\n return\n }\n this.disposed = true\n\n process.off('SIGINT', this.handleInterrupt)\n process.off('SIGTERM', this.handleTerminate)\n\n this.interruptHandlers.clear()\n this.terminateHandlers.clear()\n }\n}\n","/**\n * Platform-agnostic byte utilities using Uint8Array.\n * These replace Node.js Buffer operations for cross-platform compatibility.\n */\n\n/** Shared TextEncoder instance for string encoding. */\nconst encoder = new TextEncoder()\n\n/** Shared TextDecoder instance for string decoding. */\nconst decoder = new TextDecoder('utf-8')\n\n/**\n * Encode a string to UTF-8 bytes.\n * Equivalent to `Buffer.from(text, 'utf8')`.\n * @param text - String to encode\n * @returns UTF-8 encoded bytes\n * @public\n */\nexport function encodeString(text: string): Uint8Array {\n return encoder.encode(text)\n}\n\n/**\n * Decode UTF-8 bytes to a string.\n * Equivalent to `buffer.toString('utf8')`.\n * @param bytes - Bytes to decode\n * @returns Decoded string\n * @public\n */\nexport function decodeString(bytes: Uint8Array): string {\n return decoder.decode(bytes)\n}\n\n/**\n * Get the byte length of a string when encoded as UTF-8.\n * Equivalent to `Buffer.byteLength(text, 'utf8')`.\n * @param text - String to measure\n * @returns Byte length\n * @public\n */\nexport function byteLength(text: string): number {\n return encoder.encode(text).length\n}\n\n/**\n * Concatenate multiple Uint8Arrays into one.\n * Equivalent to `Buffer.concat(arrays)`.\n * @param arrays - Arrays to concatenate\n * @returns Combined array\n * @public\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0)\n const result = new Uint8Array(totalLength)\n let offset = 0\n for (const arr of arrays) {\n result.set(arr, offset)\n offset += arr.length\n }\n return result\n}\n\n/**\n * Create a new Uint8Array of the specified size, filled with zeros.\n * Equivalent to `Buffer.alloc(size)`.\n * @param size - Size of the array\n * @returns New zero-filled array\n * @public\n */\nexport function allocBytes(size: number): Uint8Array {\n return new Uint8Array(size)\n}\n\n/**\n * Create a Uint8Array from an array of byte values.\n * Equivalent to `Buffer.from([...])`.\n * @param values - Byte values (0-255)\n * @returns New Uint8Array\n * @public\n */\nexport function fromBytes(values: number[]): Uint8Array {\n return new Uint8Array(values)\n}\n\n/**\n * Compare two Uint8Arrays for equality.\n * Equivalent to `buffer1.equals(buffer2)`.\n * @param a - First array\n * @param b - Second array\n * @returns True if arrays are equal\n * @public\n */\nexport function bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n return true\n}\n\n/**\n * Check if a byte array starts with a specific prefix.\n * @param bytes - Array to check\n * @param prefix - Prefix to look for\n * @returns True if bytes starts with prefix\n * @public\n */\nexport function startsWith(bytes: Uint8Array, prefix: Uint8Array): boolean {\n if (bytes.length < prefix.length) {\n return false\n }\n for (let i = 0; i < prefix.length; i++) {\n if (bytes[i] !== prefix[i]) {\n return false\n }\n }\n return true\n}\n\n/**\n * Check if a byte array starts with a specific string (UTF-8 encoded).\n * @param bytes - Array to check\n * @param prefix - String prefix to look for\n * @returns True if bytes starts with the encoded prefix\n * @public\n */\nexport function startsWithString(bytes: Uint8Array, prefix: string): boolean {\n return startsWith(bytes, encodeString(prefix))\n}\n\n/**\n * Find the index of a substring within a byte array.\n * Returns -1 if not found.\n * @param bytes - Array to search\n * @param needle - String to find\n * @param fromIndex - Start index (default 0)\n * @returns Index of first occurrence or -1\n * @public\n */\nexport function indexOfString(\n bytes: Uint8Array,\n needle: string,\n fromIndex: number = 0,\n): number {\n const needleBytes = encodeString(needle)\n const endIndex = bytes.length - needleBytes.length\n\n outer: for (let i = fromIndex; i <= endIndex; i++) {\n for (let j = 0; j < needleBytes.length; j++) {\n if (bytes[i + j] !== needleBytes[j]) {\n continue outer\n }\n }\n return i\n }\n return -1\n}\n\n/**\n * Decode the first complete UTF-8 character from a byte array.\n * Returns the character and its byte length, or null if incomplete.\n * @param bytes - Byte array to decode\n * @param offset - Start offset (default 0)\n * @returns Tuple of [character, byteLength] or [null, 0] if incomplete\n * @public\n */\nexport function decodeFirstRune(\n bytes: Uint8Array,\n offset: number = 0,\n): [string | null, number] {\n if (offset >= bytes.length) {\n return [null, 0]\n }\n\n const firstByte = bytes[offset]\n if (firstByte === undefined) {\n return [null, 0]\n }\n\n // Determine the byte length of this UTF-8 character\n let byteLen: number\n if ((firstByte & 0x80) === 0) {\n // Single byte character (ASCII)\n byteLen = 1\n } else if ((firstByte & 0xe0) === 0xc0) {\n // Two byte character\n byteLen = 2\n } else if ((firstByte & 0xf0) === 0xe0) {\n // Three byte character\n byteLen = 3\n } else if ((firstByte & 0xf8) === 0xf0) {\n // Four byte character\n byteLen = 4\n } else {\n // Invalid UTF-8 start byte, treat as single byte\n byteLen = 1\n }\n\n // Check if we have enough bytes\n if (offset + byteLen > bytes.length) {\n return [null, 0]\n }\n\n // Decode the character\n const slice = bytes.subarray(offset, offset + byteLen)\n const decoded = decoder.decode(slice)\n\n if (decoded.length === 0) {\n return [null, 0]\n }\n\n // Use codePointAt to properly handle surrogate pairs (emoji, etc.)\n // This returns the full Unicode code point, not just the first surrogate\n const codePoint = decoded.codePointAt(0)\n if (codePoint === undefined) {\n return [null, 0]\n }\n\n // Convert the code point back to a string (handles surrogate pairs correctly)\n const firstChar = String.fromCodePoint(codePoint)\n\n return [firstChar, byteLen]\n}\n\n/**\n * Slice a portion of a byte array.\n * Equivalent to `buffer.subarray(start, end)`.\n * @param bytes - Source array\n * @param start - Start index\n * @param end - End index (optional, defaults to length)\n * @returns New Uint8Array view of the slice\n * @public\n */\nexport function sliceBytes(\n bytes: Uint8Array,\n start: number,\n end?: number,\n): Uint8Array {\n return bytes.subarray(start, end)\n}\n\n/**\n * Create a copy of a byte array.\n * @param bytes - Array to copy\n * @returns New Uint8Array with copied data\n * @public\n */\nexport function copyBytes(bytes: Uint8Array): Uint8Array {\n return new Uint8Array(bytes)\n}\n","import process from 'node:process'\nimport { encodeString } from '../bytes.js'\nimport type {\n Disposable,\n InputHandler,\n ResizeHandler,\n TerminalAdapter,\n TerminalSize,\n} from '../types.js'\n\n/**\n * Node.js terminal adapter using stdin/stdout.\n * @public\n */\nexport class NodeTerminalAdapter implements TerminalAdapter {\n private rawModeEnabled = false\n private readonly inputHandlers: Set<InputHandler> = new Set()\n private readonly resizeHandlers: Set<ResizeHandler> = new Set()\n private disposed = false\n\n constructor(\n private readonly input: NodeJS.ReadableStream = process.stdin,\n private readonly output: NodeJS.WritableStream = process.stdout,\n ) {}\n\n private readonly handleData = (data: Buffer | string): void => {\n const bytes =\n typeof data === 'string' ? encodeString(data) : new Uint8Array(data)\n for (const handler of this.inputHandlers) {\n handler(bytes)\n }\n }\n\n private readonly handleResize = (): void => {\n const size = this.getSize()\n for (const handler of this.resizeHandlers) {\n handler(size)\n }\n }\n\n onInput(handler: InputHandler): Disposable {\n if (this.inputHandlers.size === 0) {\n this.input.on('data', this.handleData)\n this.input.resume()\n }\n this.inputHandlers.add(handler)\n\n return {\n dispose: () => {\n this.inputHandlers.delete(handler)\n if (this.inputHandlers.size === 0) {\n this.input.off('data', this.handleData)\n }\n },\n }\n }\n\n onResize(handler: ResizeHandler): Disposable {\n if (this.resizeHandlers.size === 0 && this.isWritableStream(this.output)) {\n this.output.on('resize', this.handleResize)\n }\n this.resizeHandlers.add(handler)\n\n return {\n dispose: () => {\n this.resizeHandlers.delete(handler)\n if (\n this.resizeHandlers.size === 0 &&\n this.isWritableStream(this.output)\n ) {\n this.output.off('resize', this.handleResize)\n }\n },\n }\n }\n\n write(data: string): void {\n if (data.length === 0) {\n return\n }\n this.output.write(data)\n }\n\n getSize(): TerminalSize {\n const stream = this.output as { columns?: number; rows?: number }\n return {\n columns: stream.columns ?? 80,\n rows: stream.rows ?? 24,\n }\n }\n\n enableRawMode(): void {\n const stream = this.input as NodeJS.ReadStream\n if (this.isTTY() && typeof stream.setRawMode === 'function') {\n stream.setRawMode(true)\n stream.resume()\n this.rawModeEnabled = true\n }\n }\n\n disableRawMode(): void {\n const stream = this.input as NodeJS.ReadStream\n if (this.rawModeEnabled && typeof stream.setRawMode === 'function') {\n stream.setRawMode(false)\n stream.pause()\n this.rawModeEnabled = false\n }\n }\n\n isTTY(): boolean {\n const stream = this.input as NodeJS.ReadStream\n return typeof stream.isTTY === 'boolean' && stream.isTTY\n }\n\n dispose(): void {\n if (this.disposed) {\n return\n }\n this.disposed = true\n\n this.disableRawMode()\n\n this.input.off('data', this.handleData)\n if (this.isWritableStream(this.output)) {\n this.output.off('resize', this.handleResize)\n }\n\n this.inputHandlers.clear()\n this.resizeHandlers.clear()\n }\n\n private isWritableStream(\n stream: NodeJS.WritableStream,\n ): stream is NodeJS.WriteStream {\n return (\n 'on' in stream && typeof (stream as NodeJS.WriteStream).on === 'function'\n )\n }\n}\n","/**\n * Node.js platform adapters for \\@boba-cli/machine.\n * @packageDocumentation\n */\n\nimport type {\n ArchiveAdapter,\n ClipboardAdapter,\n Disposable,\n EnvironmentAdapter,\n FileSystemAdapter,\n PathAdapter,\n PlatformAdapter,\n SignalAdapter,\n StyleAdapter,\n TerminalAdapter,\n} from '../types.js'\nimport { createStyle } from '../style/index.js'\nimport { NodeArchiveAdapter } from './archive.js'\nimport { NodeClipboardAdapter } from './clipboard.js'\nimport { NodeEnvironmentAdapter } from './environment.js'\nimport { NodeFileSystemAdapter } from './filesystem.js'\nimport { NodePathAdapter } from './path.js'\nimport { NodeSignalAdapter } from './signals.js'\nimport { NodeTerminalAdapter } from './terminal.js'\n\nexport { NodeArchiveAdapter } from './archive.js'\nexport { NodeClipboardAdapter } from './clipboard.js'\nexport { NodeEnvironmentAdapter } from './environment.js'\nexport { NodeFileSystemAdapter } from './filesystem.js'\nexport { NodePathAdapter } from './path.js'\nexport { NodeSignalAdapter } from './signals.js'\nexport { NodeTerminalAdapter } from './terminal.js'\n\n/**\n * Options for creating a Node.js platform adapter.\n * @public\n */\nexport interface NodePlatformOptions {\n /** Custom input stream (default: process.stdin). */\n input?: NodeJS.ReadableStream\n /** Custom output stream (default: process.stdout). */\n output?: NodeJS.WritableStream\n}\n\n/**\n * Complete Node.js platform adapter.\n * Combines terminal, signal, clipboard, environment, filesystem, path, archive, and style adapters.\n * @public\n */\nexport class NodePlatformAdapter implements PlatformAdapter {\n readonly terminal: TerminalAdapter\n readonly signals: SignalAdapter\n readonly clipboard: ClipboardAdapter\n readonly environment: EnvironmentAdapter\n readonly filesystem: FileSystemAdapter\n readonly path: PathAdapter\n readonly archive: ArchiveAdapter\n readonly style: StyleAdapter\n\n private disposed = false\n private readonly disposables: Disposable[] = []\n\n /**\n * Create a new Node.js platform adapter.\n * @param options - Configuration options\n */\n constructor(options: NodePlatformOptions = {}) {\n const terminalAdapter = new NodeTerminalAdapter(\n options.input,\n options.output,\n )\n const signalAdapter = new NodeSignalAdapter()\n const clipboardAdapter = new NodeClipboardAdapter()\n const environmentAdapter = new NodeEnvironmentAdapter()\n const filesystemAdapter = new NodeFileSystemAdapter()\n const pathAdapter = new NodePathAdapter()\n const archiveAdapter = new NodeArchiveAdapter()\n\n // Create style adapter using environment's color support\n const colorSupport = environmentAdapter.getColorSupport()\n const styleAdapter: StyleAdapter = {\n style: createStyle(colorSupport),\n enabled: colorSupport.level > 0,\n level: colorSupport.level,\n }\n\n this.terminal = terminalAdapter\n this.signals = signalAdapter\n this.clipboard = clipboardAdapter\n this.environment = environmentAdapter\n this.filesystem = filesystemAdapter\n this.path = pathAdapter\n this.archive = archiveAdapter\n this.style = styleAdapter\n\n this.disposables.push(terminalAdapter, signalAdapter)\n }\n\n dispose(): void {\n if (this.disposed) {\n return\n }\n this.disposed = true\n\n for (const disposable of this.disposables) {\n disposable.dispose()\n }\n }\n}\n\n/**\n * Create a Node.js platform adapter with default settings.\n * @param options - Configuration options\n * @returns A new platform adapter\n * @public\n */\nexport function createNodePlatform(\n options: NodePlatformOptions = {},\n): PlatformAdapter {\n return new NodePlatformAdapter(options)\n}\n"]}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { A as ArchiveAdapter, a as ClipboardAdapter, E as EnvironmentAdapter, C as ColorSupport, h as TerminalBackground, c as FileSystemAdapter, D as DirectoryEntry, F as FileStat, P as PathAdapter, e as SignalAdapter, f as SignalHandler, b as Disposable, T as TerminalAdapter, I as InputHandler, R as ResizeHandler, i as TerminalSize, d as PlatformAdapter, g as StyleAdapter } from '../types-FB6TYMn5.cjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Node.js archive adapter using archiver and unzipper.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Node.js implementation of ArchiveAdapter.
|
|
9
|
+
* Uses archiver for compression and unzipper for extraction.
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
declare class NodeArchiveAdapter implements ArchiveAdapter {
|
|
13
|
+
private readonly hasArchiver;
|
|
14
|
+
private readonly hasUnzipper;
|
|
15
|
+
/**
|
|
16
|
+
* Create a new Node.js archive adapter.
|
|
17
|
+
* Checks for availability of archiver and unzipper packages.
|
|
18
|
+
*/
|
|
19
|
+
constructor();
|
|
20
|
+
/**
|
|
21
|
+
* Check if a package is available.
|
|
22
|
+
* @param packageName - Package to check
|
|
23
|
+
* @returns True if package can be imported
|
|
24
|
+
*/
|
|
25
|
+
private checkPackageAvailability;
|
|
26
|
+
/**
|
|
27
|
+
* Check if archive operations are available.
|
|
28
|
+
* @returns True if both archiver and unzipper are available
|
|
29
|
+
*/
|
|
30
|
+
isAvailable(): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Create a zip archive from a directory.
|
|
33
|
+
* @param sourceDir - Source directory to archive
|
|
34
|
+
* @param destPath - Destination path for the zip file
|
|
35
|
+
* @throws Error if archiver is not available or archiving fails
|
|
36
|
+
*/
|
|
37
|
+
zip(sourceDir: string, destPath: string): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Extract a zip archive to a directory.
|
|
40
|
+
* @param archivePath - Path to the zip file
|
|
41
|
+
* @param destDir - Destination directory for extraction
|
|
42
|
+
* @throws Error if unzipper is not available or extraction fails
|
|
43
|
+
*/
|
|
44
|
+
unzip(archivePath: string, destDir: string): Promise<void>;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Clipboard interface matching the clipboardy module.
|
|
49
|
+
*/
|
|
50
|
+
interface ClipboardModule {
|
|
51
|
+
read(): Promise<string>;
|
|
52
|
+
write(text: string): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Node.js clipboard adapter using the clipboardy package.
|
|
56
|
+
* clipboardy is an optional peer dependency.
|
|
57
|
+
* @public
|
|
58
|
+
*/
|
|
59
|
+
declare class NodeClipboardAdapter implements ClipboardAdapter {
|
|
60
|
+
private clipboard;
|
|
61
|
+
private available;
|
|
62
|
+
/**
|
|
63
|
+
* Create a new Node.js clipboard adapter.
|
|
64
|
+
* Optionally pass a pre-loaded clipboardy module for dependency injection.
|
|
65
|
+
* @param clipboardModule - Optional pre-loaded clipboard module
|
|
66
|
+
*/
|
|
67
|
+
constructor(clipboardModule?: ClipboardModule);
|
|
68
|
+
private loadClipboard;
|
|
69
|
+
read(): Promise<string>;
|
|
70
|
+
write(text: string): Promise<void>;
|
|
71
|
+
isAvailable(): boolean;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Supports-color module interface.
|
|
76
|
+
*/
|
|
77
|
+
interface SupportsColorModule {
|
|
78
|
+
stdout?: {
|
|
79
|
+
level?: number;
|
|
80
|
+
} | false;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Node.js environment adapter.
|
|
84
|
+
* Uses process.env and supports-color for environment detection.
|
|
85
|
+
* @public
|
|
86
|
+
*/
|
|
87
|
+
declare class NodeEnvironmentAdapter implements EnvironmentAdapter {
|
|
88
|
+
private supportsColorModule;
|
|
89
|
+
private colorSupportCached;
|
|
90
|
+
private backgroundCached;
|
|
91
|
+
/**
|
|
92
|
+
* Create a new Node.js environment adapter.
|
|
93
|
+
* Optionally pass a pre-loaded supports-color module for dependency injection.
|
|
94
|
+
* @param supportsColor - Optional pre-loaded supports-color module
|
|
95
|
+
*/
|
|
96
|
+
constructor(supportsColor?: SupportsColorModule);
|
|
97
|
+
get(name: string): string | undefined;
|
|
98
|
+
getColorSupport(): ColorSupport;
|
|
99
|
+
private detectColorSupport;
|
|
100
|
+
private loadSupportsColor;
|
|
101
|
+
private detectColorSupportFromEnv;
|
|
102
|
+
getTerminalBackground(): TerminalBackground;
|
|
103
|
+
private detectTerminalBackground;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Node.js filesystem adapter.
|
|
108
|
+
* Wraps Node.js fs/promises API for platform-agnostic file operations.
|
|
109
|
+
* @public
|
|
110
|
+
*/
|
|
111
|
+
declare class NodeFileSystemAdapter implements FileSystemAdapter {
|
|
112
|
+
readdir(path: string, options?: {
|
|
113
|
+
withFileTypes?: boolean;
|
|
114
|
+
}): Promise<DirectoryEntry[] | string[]>;
|
|
115
|
+
stat(path: string): Promise<FileStat>;
|
|
116
|
+
readFile(path: string, encoding?: string): Promise<string>;
|
|
117
|
+
writeFile(path: string, content: string): Promise<void>;
|
|
118
|
+
exists(path: string): Promise<boolean>;
|
|
119
|
+
mkdir(path: string, options?: {
|
|
120
|
+
recursive?: boolean;
|
|
121
|
+
}): Promise<void>;
|
|
122
|
+
unlink(path: string): Promise<void>;
|
|
123
|
+
rmdir(path: string, options?: {
|
|
124
|
+
recursive?: boolean;
|
|
125
|
+
force?: boolean;
|
|
126
|
+
}): Promise<void>;
|
|
127
|
+
rename(src: string, dst: string): Promise<void>;
|
|
128
|
+
copyFile(src: string, dst: string): Promise<void>;
|
|
129
|
+
cwd(): string;
|
|
130
|
+
homedir(): string;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Node.js path adapter.
|
|
135
|
+
* Wraps Node.js path module for platform-agnostic path operations.
|
|
136
|
+
* @public
|
|
137
|
+
*/
|
|
138
|
+
declare class NodePathAdapter implements PathAdapter {
|
|
139
|
+
readonly sep: "\\" | "/";
|
|
140
|
+
join(...segments: string[]): string;
|
|
141
|
+
dirname(path: string): string;
|
|
142
|
+
basename(path: string, ext?: string): string;
|
|
143
|
+
extname(path: string): string;
|
|
144
|
+
resolve(...segments: string[]): string;
|
|
145
|
+
isAbsolute(path: string): boolean;
|
|
146
|
+
normalize(path: string): string;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Node.js signal adapter for handling SIGINT, SIGTERM, etc.
|
|
151
|
+
* @public
|
|
152
|
+
*/
|
|
153
|
+
declare class NodeSignalAdapter implements SignalAdapter {
|
|
154
|
+
private readonly interruptHandlers;
|
|
155
|
+
private readonly terminateHandlers;
|
|
156
|
+
private disposed;
|
|
157
|
+
private readonly handleInterrupt;
|
|
158
|
+
private readonly handleTerminate;
|
|
159
|
+
onInterrupt(handler: SignalHandler): Disposable;
|
|
160
|
+
onTerminate(handler: SignalHandler): Disposable;
|
|
161
|
+
dispose(): void;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Node.js terminal adapter using stdin/stdout.
|
|
166
|
+
* @public
|
|
167
|
+
*/
|
|
168
|
+
declare class NodeTerminalAdapter implements TerminalAdapter {
|
|
169
|
+
private readonly input;
|
|
170
|
+
private readonly output;
|
|
171
|
+
private rawModeEnabled;
|
|
172
|
+
private readonly inputHandlers;
|
|
173
|
+
private readonly resizeHandlers;
|
|
174
|
+
private disposed;
|
|
175
|
+
constructor(input?: NodeJS.ReadableStream, output?: NodeJS.WritableStream);
|
|
176
|
+
private readonly handleData;
|
|
177
|
+
private readonly handleResize;
|
|
178
|
+
onInput(handler: InputHandler): Disposable;
|
|
179
|
+
onResize(handler: ResizeHandler): Disposable;
|
|
180
|
+
write(data: string): void;
|
|
181
|
+
getSize(): TerminalSize;
|
|
182
|
+
enableRawMode(): void;
|
|
183
|
+
disableRawMode(): void;
|
|
184
|
+
isTTY(): boolean;
|
|
185
|
+
dispose(): void;
|
|
186
|
+
private isWritableStream;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Node.js platform adapters for \@boba-cli/machine.
|
|
191
|
+
* @packageDocumentation
|
|
192
|
+
*/
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Options for creating a Node.js platform adapter.
|
|
196
|
+
* @public
|
|
197
|
+
*/
|
|
198
|
+
interface NodePlatformOptions {
|
|
199
|
+
/** Custom input stream (default: process.stdin). */
|
|
200
|
+
input?: NodeJS.ReadableStream;
|
|
201
|
+
/** Custom output stream (default: process.stdout). */
|
|
202
|
+
output?: NodeJS.WritableStream;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Complete Node.js platform adapter.
|
|
206
|
+
* Combines terminal, signal, clipboard, environment, filesystem, path, archive, and style adapters.
|
|
207
|
+
* @public
|
|
208
|
+
*/
|
|
209
|
+
declare class NodePlatformAdapter implements PlatformAdapter {
|
|
210
|
+
readonly terminal: TerminalAdapter;
|
|
211
|
+
readonly signals: SignalAdapter;
|
|
212
|
+
readonly clipboard: ClipboardAdapter;
|
|
213
|
+
readonly environment: EnvironmentAdapter;
|
|
214
|
+
readonly filesystem: FileSystemAdapter;
|
|
215
|
+
readonly path: PathAdapter;
|
|
216
|
+
readonly archive: ArchiveAdapter;
|
|
217
|
+
readonly style: StyleAdapter;
|
|
218
|
+
private disposed;
|
|
219
|
+
private readonly disposables;
|
|
220
|
+
/**
|
|
221
|
+
* Create a new Node.js platform adapter.
|
|
222
|
+
* @param options - Configuration options
|
|
223
|
+
*/
|
|
224
|
+
constructor(options?: NodePlatformOptions);
|
|
225
|
+
dispose(): void;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Create a Node.js platform adapter with default settings.
|
|
229
|
+
* @param options - Configuration options
|
|
230
|
+
* @returns A new platform adapter
|
|
231
|
+
* @public
|
|
232
|
+
*/
|
|
233
|
+
declare function createNodePlatform(options?: NodePlatformOptions): PlatformAdapter;
|
|
234
|
+
|
|
235
|
+
export { NodeArchiveAdapter, NodeClipboardAdapter, NodeEnvironmentAdapter, NodeFileSystemAdapter, NodePathAdapter, NodePlatformAdapter, type NodePlatformOptions, NodeSignalAdapter, NodeTerminalAdapter, createNodePlatform };
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { A as ArchiveAdapter, a as ClipboardAdapter, E as EnvironmentAdapter, C as ColorSupport, h as TerminalBackground, c as FileSystemAdapter, D as DirectoryEntry, F as FileStat, P as PathAdapter, e as SignalAdapter, f as SignalHandler, b as Disposable, T as TerminalAdapter, I as InputHandler, R as ResizeHandler, i as TerminalSize, d as PlatformAdapter, g as StyleAdapter } from '../types-FB6TYMn5.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Node.js archive adapter using archiver and unzipper.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Node.js implementation of ArchiveAdapter.
|
|
9
|
+
* Uses archiver for compression and unzipper for extraction.
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
declare class NodeArchiveAdapter implements ArchiveAdapter {
|
|
13
|
+
private readonly hasArchiver;
|
|
14
|
+
private readonly hasUnzipper;
|
|
15
|
+
/**
|
|
16
|
+
* Create a new Node.js archive adapter.
|
|
17
|
+
* Checks for availability of archiver and unzipper packages.
|
|
18
|
+
*/
|
|
19
|
+
constructor();
|
|
20
|
+
/**
|
|
21
|
+
* Check if a package is available.
|
|
22
|
+
* @param packageName - Package to check
|
|
23
|
+
* @returns True if package can be imported
|
|
24
|
+
*/
|
|
25
|
+
private checkPackageAvailability;
|
|
26
|
+
/**
|
|
27
|
+
* Check if archive operations are available.
|
|
28
|
+
* @returns True if both archiver and unzipper are available
|
|
29
|
+
*/
|
|
30
|
+
isAvailable(): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Create a zip archive from a directory.
|
|
33
|
+
* @param sourceDir - Source directory to archive
|
|
34
|
+
* @param destPath - Destination path for the zip file
|
|
35
|
+
* @throws Error if archiver is not available or archiving fails
|
|
36
|
+
*/
|
|
37
|
+
zip(sourceDir: string, destPath: string): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Extract a zip archive to a directory.
|
|
40
|
+
* @param archivePath - Path to the zip file
|
|
41
|
+
* @param destDir - Destination directory for extraction
|
|
42
|
+
* @throws Error if unzipper is not available or extraction fails
|
|
43
|
+
*/
|
|
44
|
+
unzip(archivePath: string, destDir: string): Promise<void>;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Clipboard interface matching the clipboardy module.
|
|
49
|
+
*/
|
|
50
|
+
interface ClipboardModule {
|
|
51
|
+
read(): Promise<string>;
|
|
52
|
+
write(text: string): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Node.js clipboard adapter using the clipboardy package.
|
|
56
|
+
* clipboardy is an optional peer dependency.
|
|
57
|
+
* @public
|
|
58
|
+
*/
|
|
59
|
+
declare class NodeClipboardAdapter implements ClipboardAdapter {
|
|
60
|
+
private clipboard;
|
|
61
|
+
private available;
|
|
62
|
+
/**
|
|
63
|
+
* Create a new Node.js clipboard adapter.
|
|
64
|
+
* Optionally pass a pre-loaded clipboardy module for dependency injection.
|
|
65
|
+
* @param clipboardModule - Optional pre-loaded clipboard module
|
|
66
|
+
*/
|
|
67
|
+
constructor(clipboardModule?: ClipboardModule);
|
|
68
|
+
private loadClipboard;
|
|
69
|
+
read(): Promise<string>;
|
|
70
|
+
write(text: string): Promise<void>;
|
|
71
|
+
isAvailable(): boolean;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Supports-color module interface.
|
|
76
|
+
*/
|
|
77
|
+
interface SupportsColorModule {
|
|
78
|
+
stdout?: {
|
|
79
|
+
level?: number;
|
|
80
|
+
} | false;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Node.js environment adapter.
|
|
84
|
+
* Uses process.env and supports-color for environment detection.
|
|
85
|
+
* @public
|
|
86
|
+
*/
|
|
87
|
+
declare class NodeEnvironmentAdapter implements EnvironmentAdapter {
|
|
88
|
+
private supportsColorModule;
|
|
89
|
+
private colorSupportCached;
|
|
90
|
+
private backgroundCached;
|
|
91
|
+
/**
|
|
92
|
+
* Create a new Node.js environment adapter.
|
|
93
|
+
* Optionally pass a pre-loaded supports-color module for dependency injection.
|
|
94
|
+
* @param supportsColor - Optional pre-loaded supports-color module
|
|
95
|
+
*/
|
|
96
|
+
constructor(supportsColor?: SupportsColorModule);
|
|
97
|
+
get(name: string): string | undefined;
|
|
98
|
+
getColorSupport(): ColorSupport;
|
|
99
|
+
private detectColorSupport;
|
|
100
|
+
private loadSupportsColor;
|
|
101
|
+
private detectColorSupportFromEnv;
|
|
102
|
+
getTerminalBackground(): TerminalBackground;
|
|
103
|
+
private detectTerminalBackground;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Node.js filesystem adapter.
|
|
108
|
+
* Wraps Node.js fs/promises API for platform-agnostic file operations.
|
|
109
|
+
* @public
|
|
110
|
+
*/
|
|
111
|
+
declare class NodeFileSystemAdapter implements FileSystemAdapter {
|
|
112
|
+
readdir(path: string, options?: {
|
|
113
|
+
withFileTypes?: boolean;
|
|
114
|
+
}): Promise<DirectoryEntry[] | string[]>;
|
|
115
|
+
stat(path: string): Promise<FileStat>;
|
|
116
|
+
readFile(path: string, encoding?: string): Promise<string>;
|
|
117
|
+
writeFile(path: string, content: string): Promise<void>;
|
|
118
|
+
exists(path: string): Promise<boolean>;
|
|
119
|
+
mkdir(path: string, options?: {
|
|
120
|
+
recursive?: boolean;
|
|
121
|
+
}): Promise<void>;
|
|
122
|
+
unlink(path: string): Promise<void>;
|
|
123
|
+
rmdir(path: string, options?: {
|
|
124
|
+
recursive?: boolean;
|
|
125
|
+
force?: boolean;
|
|
126
|
+
}): Promise<void>;
|
|
127
|
+
rename(src: string, dst: string): Promise<void>;
|
|
128
|
+
copyFile(src: string, dst: string): Promise<void>;
|
|
129
|
+
cwd(): string;
|
|
130
|
+
homedir(): string;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Node.js path adapter.
|
|
135
|
+
* Wraps Node.js path module for platform-agnostic path operations.
|
|
136
|
+
* @public
|
|
137
|
+
*/
|
|
138
|
+
declare class NodePathAdapter implements PathAdapter {
|
|
139
|
+
readonly sep: "\\" | "/";
|
|
140
|
+
join(...segments: string[]): string;
|
|
141
|
+
dirname(path: string): string;
|
|
142
|
+
basename(path: string, ext?: string): string;
|
|
143
|
+
extname(path: string): string;
|
|
144
|
+
resolve(...segments: string[]): string;
|
|
145
|
+
isAbsolute(path: string): boolean;
|
|
146
|
+
normalize(path: string): string;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Node.js signal adapter for handling SIGINT, SIGTERM, etc.
|
|
151
|
+
* @public
|
|
152
|
+
*/
|
|
153
|
+
declare class NodeSignalAdapter implements SignalAdapter {
|
|
154
|
+
private readonly interruptHandlers;
|
|
155
|
+
private readonly terminateHandlers;
|
|
156
|
+
private disposed;
|
|
157
|
+
private readonly handleInterrupt;
|
|
158
|
+
private readonly handleTerminate;
|
|
159
|
+
onInterrupt(handler: SignalHandler): Disposable;
|
|
160
|
+
onTerminate(handler: SignalHandler): Disposable;
|
|
161
|
+
dispose(): void;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Node.js terminal adapter using stdin/stdout.
|
|
166
|
+
* @public
|
|
167
|
+
*/
|
|
168
|
+
declare class NodeTerminalAdapter implements TerminalAdapter {
|
|
169
|
+
private readonly input;
|
|
170
|
+
private readonly output;
|
|
171
|
+
private rawModeEnabled;
|
|
172
|
+
private readonly inputHandlers;
|
|
173
|
+
private readonly resizeHandlers;
|
|
174
|
+
private disposed;
|
|
175
|
+
constructor(input?: NodeJS.ReadableStream, output?: NodeJS.WritableStream);
|
|
176
|
+
private readonly handleData;
|
|
177
|
+
private readonly handleResize;
|
|
178
|
+
onInput(handler: InputHandler): Disposable;
|
|
179
|
+
onResize(handler: ResizeHandler): Disposable;
|
|
180
|
+
write(data: string): void;
|
|
181
|
+
getSize(): TerminalSize;
|
|
182
|
+
enableRawMode(): void;
|
|
183
|
+
disableRawMode(): void;
|
|
184
|
+
isTTY(): boolean;
|
|
185
|
+
dispose(): void;
|
|
186
|
+
private isWritableStream;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Node.js platform adapters for \@boba-cli/machine.
|
|
191
|
+
* @packageDocumentation
|
|
192
|
+
*/
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Options for creating a Node.js platform adapter.
|
|
196
|
+
* @public
|
|
197
|
+
*/
|
|
198
|
+
interface NodePlatformOptions {
|
|
199
|
+
/** Custom input stream (default: process.stdin). */
|
|
200
|
+
input?: NodeJS.ReadableStream;
|
|
201
|
+
/** Custom output stream (default: process.stdout). */
|
|
202
|
+
output?: NodeJS.WritableStream;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Complete Node.js platform adapter.
|
|
206
|
+
* Combines terminal, signal, clipboard, environment, filesystem, path, archive, and style adapters.
|
|
207
|
+
* @public
|
|
208
|
+
*/
|
|
209
|
+
declare class NodePlatformAdapter implements PlatformAdapter {
|
|
210
|
+
readonly terminal: TerminalAdapter;
|
|
211
|
+
readonly signals: SignalAdapter;
|
|
212
|
+
readonly clipboard: ClipboardAdapter;
|
|
213
|
+
readonly environment: EnvironmentAdapter;
|
|
214
|
+
readonly filesystem: FileSystemAdapter;
|
|
215
|
+
readonly path: PathAdapter;
|
|
216
|
+
readonly archive: ArchiveAdapter;
|
|
217
|
+
readonly style: StyleAdapter;
|
|
218
|
+
private disposed;
|
|
219
|
+
private readonly disposables;
|
|
220
|
+
/**
|
|
221
|
+
* Create a new Node.js platform adapter.
|
|
222
|
+
* @param options - Configuration options
|
|
223
|
+
*/
|
|
224
|
+
constructor(options?: NodePlatformOptions);
|
|
225
|
+
dispose(): void;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Create a Node.js platform adapter with default settings.
|
|
229
|
+
* @param options - Configuration options
|
|
230
|
+
* @returns A new platform adapter
|
|
231
|
+
* @public
|
|
232
|
+
*/
|
|
233
|
+
declare function createNodePlatform(options?: NodePlatformOptions): PlatformAdapter;
|
|
234
|
+
|
|
235
|
+
export { NodeArchiveAdapter, NodeClipboardAdapter, NodeEnvironmentAdapter, NodeFileSystemAdapter, NodePathAdapter, NodePlatformAdapter, type NodePlatformOptions, NodeSignalAdapter, NodeTerminalAdapter, createNodePlatform };
|