File size: 3,098 Bytes
e1ae2c6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | function ensureConfigDefaults(config) {
const result = { ...config };
result.site = result.site || {};
result.navigation = result.navigation || [];
result.fonts = result.fonts && typeof result.fonts === 'object' ? result.fonts : {};
result.fonts.source = result.fonts.source || 'css';
result.fonts.family = result.fonts.family || 'LXGW WenKai';
result.fonts.weight = result.fonts.weight || 'normal';
result.fonts.cssUrl = result.fonts.cssUrl || 'https://fontsapi.zeoseven.com/292/main/result.css';
result.profile = result.profile || {};
result.social = result.social || [];
result.icons = result.icons || {};
result.icons.mode = result.icons.mode || 'favicon';
result.icons.region = result.icons.region || 'com';
result.site.title = result.site.title || 'MeNav导航';
result.site.description = result.site.description || '个人网络导航站';
result.site.author = result.site.author || 'MeNav User';
result.site.logo_text = result.site.logo_text || '导航站';
result.site.favicon = result.site.favicon || 'menav.svg';
result.site.logo = result.site.logo || null;
result.site.footer = result.site.footer || '';
result.site.theme = result.site.theme || {
primary: '#4a89dc',
background: '#f5f7fa',
modeToggle: true,
};
result.profile.title = result.profile.title || '欢迎使用';
result.profile.subtitle = result.profile.subtitle || 'MeNav个人导航系统';
function processSiteDefaults(site) {
site.name = site.name || '未命名站点';
site.url = site.url || '#';
site.description = site.description || '';
site.icon = site.icon || 'fas fa-link';
site.external = typeof site.external === 'boolean' ? site.external : true;
}
function processNodeSitesRecursively(node) {
if (!node || typeof node !== 'object') return;
if (Array.isArray(node.sites)) {
node.sites.forEach(processSiteDefaults);
}
if (Array.isArray(node.subcategories)) node.subcategories.forEach(processNodeSitesRecursively);
if (Array.isArray(node.groups)) node.groups.forEach(processNodeSitesRecursively);
if (Array.isArray(node.subgroups)) node.subgroups.forEach(processNodeSitesRecursively);
}
function processCategoryDefaults(category) {
category.name = category.name || '未命名分类';
category.sites = category.sites || [];
processNodeSitesRecursively(category);
}
Object.keys(result).forEach((key) => {
const pageConfig = result[key];
if (!pageConfig || typeof pageConfig !== 'object') return;
if (Array.isArray(pageConfig.categories)) {
pageConfig.categories.forEach(processCategoryDefaults);
}
if (Array.isArray(pageConfig.sites)) {
pageConfig.sites.forEach(processSiteDefaults);
}
});
return result;
}
function validateConfig(config) {
if (!config || typeof config !== 'object') {
const { createLogger } = require('../utils/logger');
createLogger('config').error('配置无效:配置必须是对象');
return false;
}
return true;
}
module.exports = {
ensureConfigDefaults,
validateConfig,
};
|