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
}