web_ppt / frontend /src /config /vectorExportConfig.ts
CatPtain's picture
Upload vectorExportConfig.ts
27131f4 verified
/**
* 生产环境矢量图形导出配置
* 统一管理所有矢量图形导出相关的配置参数
*/
// 环境检测
export const ENVIRONMENT = {
isProduction: () => process.env.NODE_ENV === 'production',
isHuggingface: () => {
if (typeof window === 'undefined') return false;
return (
window.location.hostname.includes('hf.space') ||
window.location.hostname.includes('huggingface.co')
);
},
isDevelopment: () => process.env.NODE_ENV === 'development'
};
// 性能配置
export const PERFORMANCE_CONFIG = {
// 渲染超时时间(毫秒)
RENDER_TIMEOUT: ENVIRONMENT.isProduction() ? 10000 : 15000,
// Canvas渲染配置
CANVAS: {
DEFAULT_SCALE: ENVIRONMENT.isHuggingface() ? 1 : 2,
MAX_SCALE: 4,
QUALITY: 0.9,
BACKGROUND_COLOR: null
},
// SVG处理配置
SVG: {
MAX_SIZE_BYTES: 1024 * 1024, // 1MB
MIN_DIMENSION: 1,
MAX_DIMENSION: 4096,
SERIALIZATION_TIMEOUT: 5000
},
// 性能监控
MONITORING: {
ENABLED: ENVIRONMENT.isProduction(),
MAX_METRICS_COUNT: 100,
OPERATIONS: {
SVG_TO_BASE64: 'svg2base64',
CANVAS_RENDER: 'canvas_render',
HTML_EXPORT: 'html_export',
DIMENSION_CHECK: 'dimension_check'
}
}
};
// 错误处理配置
export const ERROR_CONFIG = {
// 重试配置
RETRY: {
MAX_ATTEMPTS: 3,
DELAY_MS: 1000,
BACKOFF_MULTIPLIER: 2
},
// 降级策略
FALLBACK: {
ENABLE_CANVAS_FALLBACK: true,
ENABLE_SIMPLIFIED_SVG: true,
ENABLE_PLACEHOLDER: true,
PLACEHOLDER_COLOR: '#f5f5f5',
PLACEHOLDER_TEXT: 'Vector'
},
// 日志配置
LOGGING: {
VERBOSE: !ENVIRONMENT.isProduction(),
ERROR_ONLY: ENVIRONMENT.isProduction(),
INCLUDE_STACK_TRACE: !ENVIRONMENT.isProduction()
}
};
// 导出格式配置
export const EXPORT_CONFIG = {
// HTML导出
HTML: {
INCLUDE_INLINE_SVG: true,
OPTIMIZE_SVG_SIZE: true,
REMOVE_VECTOR_EFFECTS: true,
ENSURE_NAMESPACES: true
},
// 图像导出
IMAGE: {
DEFAULT_FORMAT: 'png' as const,
SUPPORTED_FORMATS: ['png', 'jpeg', 'webp'] as const,
DEFAULT_QUALITY: 0.9,
USE_CORS: true
},
// Base64配置
BASE64: {
PREFIX: 'data:image/svg+xml;base64,',
ENCODING: 'utf-8' as const,
VALIDATE_OUTPUT: true,
MIN_LENGTH: 100
}
};
// 兼容性配置
export const COMPATIBILITY_CONFIG = {
// 浏览器特性检测
FEATURES: {
CANVAS_SUPPORT: () => {
try {
const canvas = document.createElement('canvas');
return !!(canvas.getContext && canvas.getContext('2d'));
} catch {
return false;
}
},
SVG_SUPPORT: () => {
try {
return !!(document.createElementNS &&
document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect);
} catch {
return false;
}
},
BLOB_SUPPORT: () => {
try {
return typeof Blob !== 'undefined';
} catch {
return false;
}
}
},
// 平台特定优化
PLATFORM_OPTIMIZATIONS: {
HUGGINGFACE: {
PREFER_SIMPLE_RENDERING: true,
REDUCE_LOGGING: true,
OPTIMIZE_MEMORY: true,
USE_MINIMAL_FALLBACKS: true
},
MOBILE: {
REDUCE_SCALE: true,
OPTIMIZE_PERFORMANCE: true,
LIMIT_CONCURRENT_RENDERS: true
}
}
};
// 验证配置
export const VALIDATION_CONFIG = {
DIMENSIONS: {
MIN_WIDTH: 1,
MIN_HEIGHT: 1,
MAX_WIDTH: 8192,
MAX_HEIGHT: 8192
},
SVG_ATTRIBUTES: {
REQUIRED: ['xmlns'],
FORBIDDEN: ['vector-effect'],
OPTIONAL: ['viewBox', 'width', 'height']
},
OUTPUT: {
MIN_BASE64_LENGTH: 50,
MAX_BASE64_LENGTH: 10 * 1024 * 1024, // 10MB
VALID_PREFIXES: ['data:image/svg+xml;base64,', 'data:image/png;base64,']
}
};
// 导出统一配置对象
export const VECTOR_EXPORT_CONFIG = {
ENVIRONMENT,
PERFORMANCE_CONFIG,
ERROR_CONFIG,
EXPORT_CONFIG,
COMPATIBILITY_CONFIG,
VALIDATION_CONFIG
} as const;
export default VECTOR_EXPORT_CONFIG;