claude-statusline 2.1.2 → 2.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.bundle.js +9 -10
- package/dist/index.bundle.js.map +7 -0
- package/dist/index.js +71 -44
- package/dist/index.js.map +1 -1
- package/dist/metafile.json +479 -0
- package/dist/metafile.prod.json +6 -6
- package/dist/ui/width.d.ts +5 -0
- package/dist/ui/width.js +48 -0
- package/dist/ui/width.js.map +1 -1
- package/package.json +14 -14
package/dist/ui/width.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"width.js","sourceRoot":"","sources":["../../src/ui/width.ts"],"names":[],"mappings":"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","sourcesContent":["import { Config } from '../core/config.js';\n\n/**\n * Terminal width detection utilities\n * Ported from bash implementation with cross-platform Node.js support\n */\n\n/**\n * Get terminal width using multiple detection methods\n * Ordered from most reliable to fallback methods\n */\nexport async function getTerminalWidth(config: Config): Promise<number> {\n // Method 0: Respect manual width override first (for testing)\n if (config.forceWidth && config.forceWidth > 0) {\n return config.forceWidth;\n }\n\n // Method 1: Try COLUMNS environment variable\n const columnsEnv = process.env.COLUMNS;\n if (columnsEnv) {\n const columns = parseInt(columnsEnv, 10);\n if (!isNaN(columns) && columns > 0) {\n return columns;\n }\n }\n\n // Method 2: Try Node.js process.stdout.columns\n if (process.stdout.columns && process.stdout.columns > 0) {\n return process.stdout.columns;\n }\n\n // Method 3: Try tput command (Unix/Linux/macOS)\n const tputWidth = await tryCommand('tput', ['cols']);\n if (tputWidth) {\n return tputWidth;\n }\n\n // Method 4: Try stty command (Unix/Linux/macOS)\n const sttyWidth = await tryStty();\n if (sttyWidth) {\n return sttyWidth;\n }\n\n // Method 5: Check Claude Code specific environment\n const claudeWidth = process.env.CLAUDE_CODE_TERMINAL_WIDTH;\n if (claudeWidth) {\n const width = parseInt(claudeWidth, 10);\n if (!isNaN(width) && width > 0) {\n return width;\n }\n }\n\n // Method 6: Terminal-specific defaults\n const termProgram = process.env.TERM_PROGRAM;\n const term = process.env.TERM;\n\n if (termProgram === 'vscode' && process.env.VSCODE_PID) {\n return 120; // VS Code default\n }\n\n if (['ghostty', 'wezterm', 'iterm'].includes(termProgram || '')) {\n return 120; // Modern terminals default to wider\n }\n\n if (term && ['alacritty', 'kitty', 'wezterm', 'ghostty', 'xterm-256color'].includes(term)) {\n return 120; // Modern terminals\n }\n\n // Method 7: Check for Windows Terminal\n if (process.env.WT_SESSION || process.env.WT_PROFILE_ID) {\n return 120; // Windows Terminal\n }\n\n // Final fallback: conservative 80-column default\n return 80;\n}\n\n/**\n * Execute a command and parse numeric output\n */\nasync function tryCommand(command: string, args: string[]): Promise<number | null> {\n try {\n const { exec } = await import('child_process');\n const { promisify } = await import('util');\n const execAsync = promisify(exec);\n\n const { stdout } = await execAsync(`${command} ${args.join(' ')}`, {\n timeout: 1000, // 1 second timeout\n encoding: 'utf-8',\n });\n\n const width = parseInt(stdout.trim(), 10);\n if (!isNaN(width) && width > 0) {\n return width;\n }\n } catch {\n // Command failed or not available\n }\n\n return null;\n}\n\n/**\n * Try stty size command\n */\nasync function tryStty(): Promise<number | null> {\n try {\n const { exec } = await import('child_process');\n const { promisify } = await import('util');\n const execAsync = promisify(exec);\n\n const { stdout } = await execAsync('stty size', {\n timeout: 1000,\n encoding: 'utf-8',\n });\n\n // stty size returns: \"rows cols\"\n const parts = stdout.trim().split(' ');\n if (parts.length === 2) {\n const width = parseInt(parts[1] || '0', 10);\n if (!isNaN(width) && width > 0) {\n return width;\n }\n }\n } catch {\n // stty failed or not available\n }\n\n return null;\n}\n\n/**\n * Debug width detection (matches bash implementation)\n */\nexport async function debugWidthDetection(config: Config): Promise<void> {\n if (!config.debugWidth) {\n return;\n }\n\n console.error('[WIDTH DEBUG] Debug mode enabled');\n\n console.error('[WIDTH DEBUG] Methods tried:');\n\n // Test process.stdout.columns\n if (process.stdout.columns) {\n console.error(`[WIDTH DEBUG] process.stdout.columns: ${process.stdout.columns}`);\n } else {\n console.error('[WIDTH DEBUG] process.stdout.columns: not available');\n }\n\n // Test COLUMNS variable\n const columnsEnv = process.env.COLUMNS;\n if (columnsEnv) {\n console.error(`[WIDTH DEBUG] COLUMNS variable: ${columnsEnv}`);\n } else {\n console.error('[WIDTH DEBUG] COLUMNS variable: not set');\n }\n\n // Test tput\n const tputWidth = await tryCommand('tput', ['cols']);\n if (tputWidth) {\n console.error(`[WIDTH DEBUG] tput cols: ${tputWidth}`);\n } else {\n console.error('[WIDTH DEBUG] tput: not available or failed');\n }\n\n // Test stty\n const sttyWidth = await tryStty();\n if (sttyWidth) {\n console.error(`[WIDTH DEBUG] stty size: ${sttyWidth}`);\n } else {\n console.error('[WIDTH DEBUG] stty: not available or failed');\n }\n\n // Test environment variables\n console.error(`[WIDTH DEBUG] CLAUDE_CODE_STATUSLINE_FORCE_WIDTH: ${config.forceWidth || 'not set'}`);\n console.error(`[WIDTH DEBUG] COLUMNS variable: ${columnsEnv || 'not set'}`);\n console.error(`[WIDTH DEBUG] CLAUDE_CODE_TERMINAL_WIDTH: ${process.env.CLAUDE_CODE_TERMINAL_WIDTH || 'not set'}`);\n console.error(`[WIDTH DEBUG] TERM_PROGRAM: ${process.env.TERM_PROGRAM || 'not set'}`);\n console.error(`[WIDTH DEBUG] TERM: ${process.env.TERM || 'not set'}`);\n\n // Show final result\n const finalWidth = await getTerminalWidth(config);\n console.error(`[WIDTH DEBUG] Final detected width: ${finalWidth}`);\n console.error(`[WIDTH DEBUG] Statusline will use: ${finalWidth - config.rightMargin} columns max`);\n}\n\n/**\n * Text truncation utilities\n */\n\n/**\n * Simple text truncation with ellipsis\n */\nexport function truncateText(text: string, maxLength: number): string {\n if (text.length <= maxLength) {\n return text;\n }\n\n // Edge case: if maxLength is too small, return minimal result\n if (maxLength < 4) {\n return '..';\n }\n\n return `${text.substring(0, maxLength - 2)}..`;\n}\n\n/**\n * Smart truncation with branch prioritization (matches bash implementation)\n */\nexport function smartTruncate(\n project: string,\n gitInfo: string,\n maxLen: number,\n _config: Config\n): string {\n // Step 1: Check if everything fits\n if (project.length + gitInfo.length <= maxLen) {\n return '';\n }\n\n // Step 2: Truncate project only (preserve branch)\n const projLen = maxLen - gitInfo.length - 2;\n if (projLen >= 5) {\n return `${project.substring(0, projLen)}..${gitInfo}`;\n }\n\n // Step 3: Truncate project + branch (preserve indicators)\n let indicators = '';\n const bracketMatch = gitInfo.match(/\\[([^\\]]+)\\]/);\n if (bracketMatch) {\n indicators = bracketMatch[1] || '';\n }\n\n const branchLen = maxLen - indicators.length - 8;\n if (branchLen >= 8) {\n const gitPrefix = gitInfo.substring(0, Math.min(gitInfo.length, branchLen));\n return `${project.substring(0, 4)}..${gitPrefix}..${indicators ? ` [${indicators}]` : ''}`;\n }\n\n // Step 4: Basic fallback\n return `${project.substring(0, maxLen)}..`;\n}\n\n/**\n * Soft wrapping function (experimental)\n */\nexport function softWrapText(\n text: string,\n maxLength: number,\n wrapChar: 'newline' | 'space' = 'newline',\n modelPrefix: string = '*'\n): string {\n if (text.length <= maxLength) {\n return text;\n }\n\n if (wrapChar === 'newline') {\n // Smart wrap: try to break at space or safe character\n let breakPos = maxLength;\n let foundBreak = false;\n\n // Look for safe break points (spaces)\n for (let i = Math.min(maxLength - 1, text.length - 1); i > Math.max(maxLength - 20, 0) && i >= 0; i--) {\n const char = text[i];\n if (char === ' ') {\n breakPos = i;\n foundBreak = true;\n break;\n }\n }\n\n // If no safe break found and we're very close to max_length, just fit without wrapping\n if (!foundBreak && maxLength - text.length > -3) {\n return text;\n }\n\n // Adjust break position to avoid splitting multi-byte UTF-8 characters\n // UTF-8 continuation bytes have their two most significant bits set to 10 (0x80 to 0xBF)\n while (breakPos > 0 && (text.charCodeAt(breakPos) & 0xC0) === 0x80) {\n breakPos--;\n }\n\n const firstLine = text.substring(0, breakPos);\n let secondLine = text.substring(breakPos);\n\n // Remove leading space from second line if we broke at space\n if (secondLine.startsWith(' ')) {\n secondLine = secondLine.substring(1);\n }\n\n // Only wrap if second line has meaningful content\n if (secondLine) {\n return `${firstLine}\\n${modelPrefix}${secondLine}`;\n } else {\n return firstLine;\n }\n } else {\n // Use space separator for wrapping\n let breakPos = maxLength;\n\n // Adjust break position to avoid splitting multi-byte UTF-8 characters\n // UTF-8 continuation bytes have their two most significant bits set to 10 (0x80 to 0xBF)\n while (breakPos > 0 && (text.charCodeAt(breakPos) & 0xC0) === 0x80) {\n breakPos--;\n }\n\n const firstLine = text.substring(0, breakPos);\n const secondLine = text.substring(breakPos);\n return `${firstLine} ${secondLine}`;\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"width.js","sourceRoot":"","sources":["../../src/ui/width.ts"],"names":[],"mappings":"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","sourcesContent":["import { Config } from '../core/config.js';\n\n/**\n * Terminal width detection utilities\n * Ported from bash implementation with cross-platform Node.js support\n */\n\n/**\n * Get terminal width using multiple detection methods\n * Ordered from most reliable to fallback methods\n */\nexport async function getTerminalWidth(config: Config): Promise<number> {\n // Method 0: Respect manual width override first (for testing)\n if (config.forceWidth && config.forceWidth > 0) {\n return config.forceWidth;\n }\n\n // Method 1: Try COLUMNS environment variable\n const columnsEnv = process.env.COLUMNS;\n if (columnsEnv) {\n const columns = parseInt(columnsEnv, 10);\n if (!isNaN(columns) && columns > 0) {\n return columns;\n }\n }\n\n // Method 2: Try Node.js process.stdout.columns\n if (process.stdout.columns && process.stdout.columns > 0) {\n return process.stdout.columns;\n }\n\n // Method 3: Try tput command (Unix/Linux/macOS)\n const tputWidth = await tryCommand('tput', ['cols']);\n if (tputWidth) {\n return tputWidth;\n }\n\n // Method 4: Try stty command (Unix/Linux/macOS)\n const sttyWidth = await tryStty();\n if (sttyWidth) {\n return sttyWidth;\n }\n\n // Method 5: Check Claude Code specific environment\n const claudeWidth = process.env.CLAUDE_CODE_TERMINAL_WIDTH;\n if (claudeWidth) {\n const width = parseInt(claudeWidth, 10);\n if (!isNaN(width) && width > 0) {\n return width;\n }\n }\n\n // Method 6: Terminal-specific defaults\n const termProgram = process.env.TERM_PROGRAM;\n const term = process.env.TERM;\n\n if (termProgram === 'vscode' && process.env.VSCODE_PID) {\n return 120; // VS Code default\n }\n\n if (['ghostty', 'wezterm', 'iterm'].includes(termProgram || '')) {\n return 120; // Modern terminals default to wider\n }\n\n if (term && ['alacritty', 'kitty', 'wezterm', 'ghostty', 'xterm-256color'].includes(term)) {\n return 120; // Modern terminals\n }\n\n // Method 7: Check for Windows Terminal\n if (process.env.WT_SESSION || process.env.WT_PROFILE_ID) {\n return 120; // Windows Terminal\n }\n\n // Final fallback: conservative 80-column default\n return 80;\n}\n\n/**\n * Execute a command and parse numeric output\n */\nasync function tryCommand(command: string, args: string[]): Promise<number | null> {\n try {\n const { exec } = await import('child_process');\n const { promisify } = await import('util');\n const execAsync = promisify(exec);\n\n const { stdout } = await execAsync(`${command} ${args.join(' ')}`, {\n timeout: 1000, // 1 second timeout\n encoding: 'utf-8',\n });\n\n const width = parseInt(stdout.trim(), 10);\n if (!isNaN(width) && width > 0) {\n return width;\n }\n } catch {\n // Command failed or not available\n }\n\n return null;\n}\n\n/**\n * Try stty size command\n */\nasync function tryStty(): Promise<number | null> {\n try {\n const { exec } = await import('child_process');\n const { promisify } = await import('util');\n const execAsync = promisify(exec);\n\n const { stdout } = await execAsync('stty size', {\n timeout: 1000,\n encoding: 'utf-8',\n });\n\n // stty size returns: \"rows cols\"\n const parts = stdout.trim().split(' ');\n if (parts.length === 2) {\n const width = parseInt(parts[1] || '0', 10);\n if (!isNaN(width) && width > 0) {\n return width;\n }\n }\n } catch {\n // stty failed or not available\n }\n\n return null;\n}\n\n/**\n * Debug width detection (matches bash implementation)\n */\nexport async function debugWidthDetection(config: Config): Promise<void> {\n if (!config.debugWidth) {\n return;\n }\n\n console.error('[WIDTH DEBUG] Debug mode enabled');\n\n console.error('[WIDTH DEBUG] Methods tried:');\n\n // Test process.stdout.columns\n if (process.stdout.columns) {\n console.error(`[WIDTH DEBUG] process.stdout.columns: ${process.stdout.columns}`);\n } else {\n console.error('[WIDTH DEBUG] process.stdout.columns: not available');\n }\n\n // Test COLUMNS variable\n const columnsEnv = process.env.COLUMNS;\n if (columnsEnv) {\n console.error(`[WIDTH DEBUG] COLUMNS variable: ${columnsEnv}`);\n } else {\n console.error('[WIDTH DEBUG] COLUMNS variable: not set');\n }\n\n // Test tput\n const tputWidth = await tryCommand('tput', ['cols']);\n if (tputWidth) {\n console.error(`[WIDTH DEBUG] tput cols: ${tputWidth}`);\n } else {\n console.error('[WIDTH DEBUG] tput: not available or failed');\n }\n\n // Test stty\n const sttyWidth = await tryStty();\n if (sttyWidth) {\n console.error(`[WIDTH DEBUG] stty size: ${sttyWidth}`);\n } else {\n console.error('[WIDTH DEBUG] stty: not available or failed');\n }\n\n // Test environment variables\n console.error(`[WIDTH DEBUG] CLAUDE_CODE_STATUSLINE_FORCE_WIDTH: ${config.forceWidth || 'not set'}`);\n console.error(`[WIDTH DEBUG] COLUMNS variable: ${columnsEnv || 'not set'}`);\n console.error(`[WIDTH DEBUG] CLAUDE_CODE_TERMINAL_WIDTH: ${process.env.CLAUDE_CODE_TERMINAL_WIDTH || 'not set'}`);\n console.error(`[WIDTH DEBUG] TERM_PROGRAM: ${process.env.TERM_PROGRAM || 'not set'}`);\n console.error(`[WIDTH DEBUG] TERM: ${process.env.TERM || 'not set'}`);\n\n // Show final result\n const finalWidth = await getTerminalWidth(config);\n console.error(`[WIDTH DEBUG] Final detected width: ${finalWidth}`);\n console.error(`[WIDTH DEBUG] Statusline will use: ${finalWidth - config.rightMargin} columns max`);\n}\n\n/**\n * Text truncation utilities\n */\n\n/**\n * Simple text truncation with ellipsis\n */\nexport function truncateText(text: string, maxLength: number): string {\n if (text.length <= maxLength) {\n return text;\n }\n\n // Edge case: if maxLength is too small, return minimal result\n if (maxLength < 4) {\n return '..';\n }\n\n return `${text.substring(0, maxLength - 2)}..`;\n}\n\n/**\n * Smart truncation with branch prioritization (matches bash implementation)\n */\nexport function smartTruncate(\n project: string,\n gitInfo: string,\n maxLen: number,\n _config: Config\n): string {\n // Step 1: Check if everything fits\n if (project.length + gitInfo.length <= maxLen) {\n return '';\n }\n\n // Step 2: Truncate project only (preserve branch)\n const projLen = maxLen - gitInfo.length - 2;\n if (projLen >= 5) {\n return `${project.substring(0, projLen)}..${gitInfo}`;\n }\n\n // Step 3: Truncate project + branch (preserve indicators)\n let indicators = '';\n const bracketMatch = gitInfo.match(/\\[([^\\]]+)\\]/);\n if (bracketMatch) {\n indicators = bracketMatch[1] || '';\n }\n\n const branchLen = maxLen - indicators.length - 8;\n if (branchLen >= 8) {\n const gitPrefix = gitInfo.substring(0, Math.min(gitInfo.length, branchLen));\n return `${project.substring(0, 4)}..${gitPrefix}..${indicators ? ` [${indicators}]` : ''}`;\n }\n\n // Step 4: Basic fallback\n return `${project.substring(0, maxLen)}..`;\n}\n\n/**\n * Get the display width of a string, accounting for wide characters (CJK, emoji, Nerd Font icons)\n * Uses wcwidth-style logic where wide characters = 2 columns, narrow = 1 column\n */\nexport function getStringDisplayWidth(str: string): number {\n let width = 0;\n for (const char of str) {\n const code = char.codePointAt(0) ?? 0;\n\n // Wide character ranges (CJK, emoji, Nerd Font icons, etc.)\n // CJK Unified Ideographs\n if (code >= 0x1100 && (\n (code >= 0x1100 && code <= 0x115F) || // Hangul Jamo\n (code >= 0x2E80 && code <= 0xA4CF) || // CJK和各种符号\n (code >= 0xAC00 && code <= 0xD7A3) || // Hangul Syllables\n (code >= 0xF900 && code <= 0xFAFF) || // CJK Compatibility Ideographs\n (code >= 0xFE10 && code <= 0xFE19) || // Vertical forms\n (code >= 0xFE30 && code <= 0xFE6F) || // CJK Compatibility Forms\n (code >= 0xFF00 && code <= 0xFF60) || // Fullwidth Forms\n (code >= 0xFFE0 && code <= 0xFFE6) ||\n (code >= 0x20000 && code <= 0x2FFFD) ||\n (code >= 0x30000 && code <= 0x3FFFD)\n )) {\n width += 2;\n }\n // Emoji and various symbols (including Nerd Font icons in Private Use Area)\n else if (\n (code >= 0x1F300 && code <= 0x1F9FF) || // Emoji\n (code >= 0x2600 && code <= 0x27BF) || // Miscellaneous symbols\n (code >= 0xFE00 && code <= 0xFE0F) || // Variation Selectors\n (code >= 0x1F000 && code <= 0x1F02F) || // Mahjong tiles\n (code >= 0xE000 && code <= 0xF8FF) || // Private Use Area (Nerd Font icons)\n (code >= 0xF0000 && code <= 0xFFFFD) || // Supplementary Private Use Area-A\n (code >= 0x100000 && code <= 0x10FFFD) // Supplementary Private Use Area-B\n ) {\n width += 2;\n }\n // Combining characters (zero width)\n else if (\n (code >= 0x0300 && code <= 0x036F) || // Combining diacritical marks\n (code >= 0x1DC0 && code <= 0x1DFF) || // Combining diacritical marks extended\n (code >= 0x20D0 && code <= 0x20FF) || // Combining marks for symbols\n (code >= 0xFE20 && code <= 0xFE2F) // Combining half marks\n ) {\n // Zero width, don't increment\n }\n // Normal ASCII and narrow characters\n else {\n width += 1;\n }\n }\n return width;\n}\n\n/**\n * Soft wrapping function (experimental)\n */\nexport function softWrapText(\n text: string,\n maxLength: number,\n wrapChar: 'newline' | 'space' = 'newline',\n modelPrefix: string = '*'\n): string {\n if (text.length <= maxLength) {\n return text;\n }\n\n if (wrapChar === 'newline') {\n // Smart wrap: try to break at space or safe character\n let breakPos = maxLength;\n let foundBreak = false;\n\n // Look for safe break points (spaces)\n for (let i = Math.min(maxLength - 1, text.length - 1); i > Math.max(maxLength - 20, 0) && i >= 0; i--) {\n const char = text[i];\n if (char === ' ') {\n breakPos = i;\n foundBreak = true;\n break;\n }\n }\n\n // If no safe break found and we're very close to max_length, just fit without wrapping\n if (!foundBreak && maxLength - text.length > -3) {\n return text;\n }\n\n // Adjust break position to avoid splitting multi-byte UTF-8 characters\n // UTF-8 continuation bytes have their two most significant bits set to 10 (0x80 to 0xBF)\n while (breakPos > 0 && (text.charCodeAt(breakPos) & 0xC0) === 0x80) {\n breakPos--;\n }\n\n const firstLine = text.substring(0, breakPos);\n let secondLine = text.substring(breakPos);\n\n // Remove leading space from second line if we broke at space\n if (secondLine.startsWith(' ')) {\n secondLine = secondLine.substring(1);\n }\n\n // Only wrap if second line has meaningful content\n if (secondLine) {\n return `${firstLine}\\n${modelPrefix}${secondLine}`;\n } else {\n return firstLine;\n }\n } else {\n // Use space separator for wrapping\n let breakPos = maxLength;\n\n // Adjust break position to avoid splitting multi-byte UTF-8 characters\n // UTF-8 continuation bytes have their two most significant bits set to 10 (0x80 to 0xBF)\n while (breakPos > 0 && (text.charCodeAt(breakPos) & 0xC0) === 0x80) {\n breakPos--;\n }\n\n const firstLine = text.substring(0, breakPos);\n const secondLine = text.substring(breakPos);\n return `${firstLine} ${secondLine}`;\n }\n}"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-statusline",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.4",
|
|
4
4
|
"description": "Simple statusline for Claude Code with git indicators. TypeScript rewrite for performance and npm distribution.",
|
|
5
5
|
"main": "dist/index.bundle.js",
|
|
6
6
|
"bin": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"license": "Apache-2.0",
|
|
45
45
|
"repository": {
|
|
46
46
|
"type": "git",
|
|
47
|
-
"url": "https://github.com/shrwnsan/claude-statusline.git"
|
|
47
|
+
"url": "git+https://github.com/shrwnsan/claude-statusline.git"
|
|
48
48
|
},
|
|
49
49
|
"bugs": {
|
|
50
50
|
"url": "https://github.com/shrwnsan/claude-statusline/issues"
|
|
@@ -55,19 +55,19 @@
|
|
|
55
55
|
"bun": ">=1.0.0"
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"yaml": "^2.
|
|
59
|
-
"zod": "^3.
|
|
58
|
+
"yaml": "^2.8.2",
|
|
59
|
+
"zod": "^3.25.76"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
|
-
"@types/node": "^22.
|
|
63
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
64
|
-
"@typescript-eslint/parser": "^8.
|
|
65
|
-
"esbuild": "^0.27.
|
|
66
|
-
"eslint": "^9.
|
|
67
|
-
"eslint-config-prettier": "^9.1.
|
|
68
|
-
"eslint-plugin-prettier": "^5.
|
|
69
|
-
"prettier": "^3.
|
|
70
|
-
"typescript": "^5.
|
|
62
|
+
"@types/node": "^22.19.7",
|
|
63
|
+
"@typescript-eslint/eslint-plugin": "^8.53.1",
|
|
64
|
+
"@typescript-eslint/parser": "^8.53.1",
|
|
65
|
+
"esbuild": "^0.27.2",
|
|
66
|
+
"eslint": "^9.39.2",
|
|
67
|
+
"eslint-config-prettier": "^9.1.2",
|
|
68
|
+
"eslint-plugin-prettier": "^5.5.5",
|
|
69
|
+
"prettier": "^3.8.1",
|
|
70
|
+
"typescript": "^5.9.3"
|
|
71
71
|
},
|
|
72
72
|
"files": [
|
|
73
73
|
"dist/",
|
|
@@ -86,4 +86,4 @@
|
|
|
86
86
|
"types": "./dist/core/config.d.ts"
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
}
|
|
89
|
+
}
|