Files
gridpilot.gg/packages/infrastructure/config/BrowserModeConfig.ts
2025-11-26 17:03:29 +01:00

59 lines
1.7 KiB
TypeScript

/**
* Browser mode configuration module for headed/headless browser toggle.
*
* Determines browser mode based on NODE_ENV:
* - development: default headed, but configurable via runtime setter
* - production: always headless
* - test: always headless
* - default: headless (for safety)
*/
export type BrowserMode = 'headed' | 'headless';
export interface BrowserModeConfig {
mode: BrowserMode;
source: 'GUI' | 'NODE_ENV';
}
/**
* Loader for browser mode configuration.
* Determines whether browser should run in headed or headless mode based on NODE_ENV.
* In development mode, provides runtime control via setter method.
*/
export class BrowserModeConfigLoader {
private developmentMode: BrowserMode = 'headed'; // Default to headed in development
/**
* Load browser mode configuration based on NODE_ENV.
* - NODE_ENV=development: returns current developmentMode (default: headed)
* - NODE_ENV=production: always headless
* - NODE_ENV=test: always headless
* - default: headless (for safety)
*/
load(): BrowserModeConfig {
const nodeEnv = process.env.NODE_ENV || 'production';
if (nodeEnv === 'development') {
return { mode: this.developmentMode, source: 'GUI' };
}
return { mode: 'headless', source: 'NODE_ENV' };
}
/**
* Set browser mode for development environment.
* Only affects behavior when NODE_ENV=development.
* @param mode - The browser mode to use in development
*/
setDevelopmentMode(mode: BrowserMode): void {
this.developmentMode = mode;
}
/**
* Get current development browser mode setting.
* @returns The current browser mode for development
*/
getDevelopmentMode(): BrowserMode {
return this.developmentMode;
}
}