(overrides?: Partial<EngineConfig>)
| 319 | * takes precedence over everything. |
| 320 | */ |
| 321 | export function resolveConfig(overrides?: Partial<EngineConfig>): EngineConfig { |
| 322 | const env = (key: string): string | undefined => process.env[key]; |
| 323 | const envNum = (key: string, fallback: number): number => { |
| 324 | const raw = env(key); |
| 325 | if (raw === undefined || raw === "") return fallback; |
| 326 | const n = Number(raw); |
| 327 | return Number.isFinite(n) ? n : fallback; |
| 328 | }; |
| 329 | const envBool = (key: string, fallback: boolean): boolean => { |
| 330 | const raw = env(key); |
| 331 | if (raw === undefined) return fallback; |
| 332 | return raw === "true"; |
| 333 | }; |
| 334 | const envVp9CpuUsed = (): number => { |
| 335 | const raw = env("PRODUCER_VP9_CPU_USED"); |
| 336 | if (raw === undefined || raw === "") return DEFAULT_CONFIG.vp9CpuUsed; |
| 337 | return normalizeVp9CpuUsed(Number(raw)); |
| 338 | }; |
| 339 | const envBrowserGpuMode = (): EngineConfig["browserGpuMode"] => { |
| 340 | const raw = env("PRODUCER_BROWSER_GPU_MODE"); |
| 341 | if (raw === "hardware" || raw === "software" || raw === "auto") return raw; |
| 342 | return DEFAULT_CONFIG.browserGpuMode; |
| 343 | }; |
| 344 | // Tri-state: explicit on/off via env, otherwise auto-detect from total RAM. |
| 345 | const resolveLowMemoryMode = (): boolean => { |
| 346 | const raw = env("PRODUCER_LOW_MEMORY_MODE")?.toLowerCase(); |
| 347 | if (raw === "true" || raw === "on" || raw === "1") return true; |
| 348 | if (raw === "false" || raw === "off" || raw === "0") return false; |
| 349 | return isLowMemorySystem(); |
| 350 | }; |
| 351 | // Opt-OUT: default ON, disabled only by an explicit falsey value. |
| 352 | const resolveStaticFrameDedup = (): boolean => { |
| 353 | const raw = env("HF_STATIC_DEDUP")?.trim().toLowerCase(); |
| 354 | return !(raw === "false" || raw === "off" || raw === "0"); |
| 355 | }; |
| 356 | |
| 357 | // Env-var layer (backward compat) |
| 358 | const fromEnv: Partial<EngineConfig> = { |
| 359 | concurrency: env("PRODUCER_MAX_WORKERS") ? Number(env("PRODUCER_MAX_WORKERS")) : undefined, |
| 360 | coresPerWorker: envNum("PRODUCER_CORES_PER_WORKER", DEFAULT_CONFIG.coresPerWorker), |
| 361 | minParallelFrames: envNum("PRODUCER_MIN_PARALLEL_FRAMES", DEFAULT_CONFIG.minParallelFrames), |
| 362 | largeRenderThreshold: envNum( |
| 363 | "PRODUCER_LARGE_RENDER_THRESHOLD", |
| 364 | DEFAULT_CONFIG.largeRenderThreshold, |
| 365 | ), |
| 366 | |
| 367 | chromePath: env("PRODUCER_HEADLESS_SHELL_PATH"), |
| 368 | disableGpu: envBool("PRODUCER_DISABLE_GPU", DEFAULT_CONFIG.disableGpu), |
| 369 | browserGpuMode: envBrowserGpuMode(), |
| 370 | enableBrowserPool: envBool("PRODUCER_ENABLE_BROWSER_POOL", DEFAULT_CONFIG.enableBrowserPool), |
| 371 | browserTimeout: envNum("PRODUCER_PUPPETEER_LAUNCH_TIMEOUT_MS", DEFAULT_CONFIG.browserTimeout), |
| 372 | protocolTimeout: envNum( |
| 373 | "PRODUCER_PUPPETEER_PROTOCOL_TIMEOUT_MS", |
| 374 | DEFAULT_CONFIG.protocolTimeout, |
| 375 | ), |
| 376 | expectedChromiumMajor: env("PRODUCER_EXPECTED_CHROMIUM_MAJOR") |
| 377 | ? Number(env("PRODUCER_EXPECTED_CHROMIUM_MAJOR")) |
| 378 | : undefined, |
no test coverage detected