Merge branch 'Yann_Dev'
Yann authored at 2025-06-22 23:50:40
1.79 KiB
cube-front
import type { CubeFrontConfig, EnvConfig } from './types';
import { defaultConfig } from './defaultConfig';
import { deepMerge } from '../utils/object';
import { configData, currentEnv } from 'virtual:cube-front-config';

/**
 * 解析配置字符串为对象
 * @param configStr 配置字符串
 * @returns 配置对象
 */
function parseConfigString(configStr: string): EnvConfig {
  try {
    // 使用 Function 构造器安全地解析配置对象
    return new Function('return ' + configStr)();
  } catch (error) {
    console.warn('解析配置字符串失败:', error);
    return {};
  }
}

/**
 * 获取当前配置
 * 从虚拟模块导入配置数据并进行合并处理
 * @returns 当前配置
 */
export function getConfig(): CubeFrontConfig {
  let result = defaultConfig;

  // 1. 先合并通用配置 config.ts
  if (configData.general) {
    const generalConfig = parseConfigString(configData.general);
    result = deepMerge(result, generalConfig) as CubeFrontConfig;
  }

  // 2. 再合并环境特定配置 config.${env}.ts 或 ${env}.ts
  if (configData[currentEnv]) {
    const envConfig = parseConfigString(configData[currentEnv]);
    result = deepMerge(result, envConfig) as CubeFrontConfig;
  }

  return result;
}

/**
 * 合并配置
 * @param customConfig 自定义配置
 * @returns 合并后的配置
 */
export function mergeConfig(customConfig: EnvConfig): CubeFrontConfig {
  const baseConfig = getConfig();
  return deepMerge(baseConfig, customConfig) as CubeFrontConfig;
}

// 导出配置类型
export type {
  CubeFrontConfig,
  EnvConfig,
  BaseConfig, // 替代 AppConfig
  AuthConfig, // 替代 LoginConfig
  RequestConfig, // 替代 RequestConfig
  UIConfig, // 包含原 LayoutConfig 和 ThemeConfig
} from './types';

// 导出默认配置
export { defaultConfig } from './defaultConfig';