config.js
1.17 KB
/**
* normalizeConfig —— configSource 出口的唯一归一点。
*
* `mode_model_config` 全量行的多形态(chain 为 JSON 文本 vs 已解析数组、含 enabled=0 行 vs 不含)
* 在此一次性收敛为内部唯一形态 `{ [mode]: Array<{provider,model}> }`。经此之后,mode-router.js /
* fallback.js 内部零 JSON.parse、零 Array.isArray、零空值分支——形态收口即此函数职责。
*/
/**
* @typedef {object} ModeConfigRow
* @property {string} mode
* @property {string|Array<{provider:string,model:string}>} chain JSON 文本或已解析数组(驱动侧差异)。
* @property {number|boolean} enabled
*/
/**
* @param {ModeConfigRow[]} rows mode_model_config 全量行。
* @returns {{ [mode: string]: Array<{ provider: string, model: string }> }}
*/
export function normalizeConfig(rows) {
/** @type {{ [mode: string]: Array<{ provider: string, model: string }> }} */
const config = {}
for (const row of rows) {
if (!row.enabled) continue
const chain = typeof row.chain === 'string' ? JSON.parse(row.chain) : row.chain
config[row.mode] = chain.map(({ provider, model }) => ({ provider, model }))
}
return config
}