// frontend/utils/preloadApi/config.js // 配置加载器:合并用户配置与内置默认值,提取 fetcher 映射表 /** * 内置默认值(与设计文档 §3 defaults 一致) */ const BUILTIN_DEFAULTS = { ttl: 5 * 60 * 1000, persistence: 'memory', concurrency: 4, timeout: 10000, silent: true, limits: { maxEntrySizeKB: 1024, maxMemoryEntries: 100, maxFileCacheMB: 50 } } /** * 加载并合并配置 * @param {object} userConfig - 用户提供的 preload.config.js export * @returns {{ config: object, fetchers: object }} */ export function loadConfig(userConfig) { if (!userConfig) { throw new Error('[preload] config is required') } // 合并 defaults const mergedDefaults = { ...BUILTIN_DEFAULTS, ...(userConfig.defaults || {}), limits: { ...BUILTIN_DEFAULTS.limits, ...((userConfig.defaults && userConfig.defaults.limits) || {}) } } const config = { defaults: mergedDefaults, startup: userConfig.startup || [], idle: userConfig.idle || [], pages: userConfig.pages || {} } // 提取 fetcher 映射表 const fetchers = {} const allEntries = [ ...(config.startup || []), ...(config.idle || []) ] for (const entries of Object.values(config.pages || {})) { if (Array.isArray(entries)) allEntries.push(...entries) } for (const entry of allEntries) { if (entry.key && typeof entry.fetcher === 'function') { fetchers[entry.key] = entry.fetcher } } return { config, fetchers } }