* 从 CHATLAB_* 环境变量加载配置 * * 映射规则: * - CHATLAB_DATA_DIR -> data.user_data_dir * - CHATLAB_API_PORT -> api.port * - CHATLAB_API_HOST -> api.host * - CHATLAB_LLM_PROVIDER -> llm.provider * - CHATLAB_LLM_MODEL -> llm.model * - CHATLAB_LLM_BASE_URL -> llm.base_url * - C
()
| 82 | * - CHATLAB_LOCALE_LANG -> locale.lang |
| 83 | */ |
| 84 | function loadEnvConfig(): Record<string, unknown> { |
| 85 | const result: Record<string, Record<string, unknown>> = {} |
| 86 | |
| 87 | const envMap: Array<{ env: string; section: string; key: string; transform?: (v: string) => unknown }> = [ |
| 88 | { env: 'CHATLAB_DATA_DIR', section: 'data', key: 'user_data_dir' }, |
| 89 | { env: 'CHATLAB_API_PORT', section: 'api', key: 'port', transform: (v) => parseInt(v, 10) }, |
| 90 | { env: 'CHATLAB_API_HOST', section: 'api', key: 'host' }, |
| 91 | { env: 'CHATLAB_LLM_PROVIDER', section: 'llm', key: 'provider' }, |
| 92 | { env: 'CHATLAB_LLM_MODEL', section: 'llm', key: 'model' }, |
| 93 | { env: 'CHATLAB_LLM_BASE_URL', section: 'llm', key: 'base_url' }, |
| 94 | { env: 'CHATLAB_LOCALE_LANG', section: 'locale', key: 'lang' }, |
| 95 | ] |
| 96 | |
| 97 | for (const { env, section, key, transform } of envMap) { |
| 98 | const value = process.env[env] |
| 99 | if (value !== undefined && value !== '') { |
| 100 | if (!result[section]) result[section] = {} |
| 101 | result[section][key] = transform ? transform(value) : value |
| 102 | } |
| 103 | } |
| 104 | |
| 105 | return result |
| 106 | } |
| 107 | |
| 108 | /** |
| 109 | * 写入 config.toml 的某个字段 |