mirror of
https://github.com/samsonjs/vibetunnel.git
synced 2026-04-15 12:55:52 +00:00
108 lines
3.3 KiB
TypeScript
108 lines
3.3 KiB
TypeScript
/**
|
|
* Shared module to suppress xterm.js parsing errors in both client and server environments
|
|
*
|
|
* This module provides a unified way to suppress noisy xterm.js parsing errors that occur
|
|
* when the terminal encounters unsupported or proprietary escape sequences. These errors
|
|
* are harmless but create significant console noise.
|
|
*
|
|
* Usage: Import and call suppressXtermErrors() at the very beginning of your entry point
|
|
*/
|
|
|
|
// Type declaration for our global flag
|
|
// Type declarations for the suppression flag
|
|
// We use 'any' type for globalObj to avoid TypeScript errors in different environments
|
|
declare global {
|
|
namespace NodeJS {
|
|
interface Global {
|
|
__xtermErrorsSuppressed?: boolean;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Browser Window interface is extended conditionally at runtime
|
|
|
|
/**
|
|
* Suppresses xterm.js parsing errors by overriding console methods
|
|
* Works in both Node.js and browser environments
|
|
*/
|
|
export function suppressXtermErrors(): void {
|
|
// Detect environment
|
|
const isNode = typeof process !== 'undefined' && process.versions?.node;
|
|
const globalObj = (isNode ? global : typeof globalThis !== 'undefined' ? globalThis : global) as {
|
|
__xtermErrorsSuppressed?: boolean;
|
|
};
|
|
|
|
// Check if already suppressed to avoid multiple overrides
|
|
if (globalObj.__xtermErrorsSuppressed) {
|
|
return;
|
|
}
|
|
|
|
// Mark as suppressed
|
|
globalObj.__xtermErrorsSuppressed = true;
|
|
|
|
// Store original console methods
|
|
const originalError = console.error;
|
|
const originalWarn = console.warn;
|
|
|
|
// Override console.error
|
|
console.error = (...args: unknown[]) => {
|
|
if (shouldSuppressError(args)) {
|
|
return; // Suppress xterm.js parsing errors
|
|
}
|
|
originalError.apply(console, args);
|
|
};
|
|
|
|
// Override console.warn
|
|
console.warn = (...args: unknown[]) => {
|
|
if (shouldSuppressError(args)) {
|
|
return; // Suppress xterm.js parsing warnings
|
|
}
|
|
originalWarn.apply(console, args);
|
|
};
|
|
|
|
// Log suppression activation in debug mode
|
|
if (isNode && process.env.VIBETUNNEL_DEBUG === '1') {
|
|
originalWarn.call(console, '[suppress-xterm-errors] xterm.js error suppression activated');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Checks if the given console arguments represent an xterm.js parsing error
|
|
*/
|
|
function shouldSuppressError(args: unknown[]): boolean {
|
|
if (!args[0] || typeof args[0] !== 'string') {
|
|
return false;
|
|
}
|
|
|
|
const message = args[0];
|
|
|
|
// Check for xterm.js parsing errors
|
|
if (message.includes('xterm.js: Parsing error:')) {
|
|
return true;
|
|
}
|
|
|
|
// Also suppress related parsing errors that might come from xterm
|
|
if (message.includes('Unable to process character') && message.includes('xterm')) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Restore original console methods (useful for testing)
|
|
*/
|
|
export function restoreConsole(): void {
|
|
// This would need to store the originals somewhere accessible
|
|
// For now, this is a placeholder for potential future use
|
|
const isNode = typeof process !== 'undefined' && process.versions?.node;
|
|
const globalObj = (isNode ? global : typeof globalThis !== 'undefined' ? globalThis : global) as {
|
|
__xtermErrorsSuppressed?: boolean;
|
|
};
|
|
|
|
if (globalObj.__xtermErrorsSuppressed) {
|
|
delete globalObj.__xtermErrorsSuppressed;
|
|
// Note: We can't actually restore without storing the originals globally
|
|
// This function is mainly here for API completeness
|
|
}
|
|
}
|