65 lines
1.4 KiB
JavaScript
65 lines
1.4 KiB
JavaScript
// 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 }
|
|
}
|