CatPtain commited on
Commit
27131f4
·
verified ·
1 Parent(s): 21eec2e

Upload vectorExportConfig.ts

Browse files
frontend/src/config/vectorExportConfig.ts ADDED
@@ -0,0 +1,186 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * 生产环境矢量图形导出配置
3
+ * 统一管理所有矢量图形导出相关的配置参数
4
+ */
5
+
6
+ // 环境检测
7
+ export const ENVIRONMENT = {
8
+ isProduction: () => process.env.NODE_ENV === 'production',
9
+ isHuggingface: () => {
10
+ if (typeof window === 'undefined') return false;
11
+ return (
12
+ window.location.hostname.includes('hf.space') ||
13
+ window.location.hostname.includes('huggingface.co')
14
+ );
15
+ },
16
+ isDevelopment: () => process.env.NODE_ENV === 'development'
17
+ };
18
+
19
+ // 性能配置
20
+ export const PERFORMANCE_CONFIG = {
21
+ // 渲染超时时间(毫秒)
22
+ RENDER_TIMEOUT: ENVIRONMENT.isProduction() ? 10000 : 15000,
23
+
24
+ // Canvas渲染配置
25
+ CANVAS: {
26
+ DEFAULT_SCALE: ENVIRONMENT.isHuggingface() ? 1 : 2,
27
+ MAX_SCALE: 4,
28
+ QUALITY: 0.9,
29
+ BACKGROUND_COLOR: null
30
+ },
31
+
32
+ // SVG处理配置
33
+ SVG: {
34
+ MAX_SIZE_BYTES: 1024 * 1024, // 1MB
35
+ MIN_DIMENSION: 1,
36
+ MAX_DIMENSION: 4096,
37
+ SERIALIZATION_TIMEOUT: 5000
38
+ },
39
+
40
+ // 性能监控
41
+ MONITORING: {
42
+ ENABLED: ENVIRONMENT.isProduction(),
43
+ MAX_METRICS_COUNT: 100,
44
+ OPERATIONS: {
45
+ SVG_TO_BASE64: 'svg2base64',
46
+ CANVAS_RENDER: 'canvas_render',
47
+ HTML_EXPORT: 'html_export',
48
+ DIMENSION_CHECK: 'dimension_check'
49
+ }
50
+ }
51
+ };
52
+
53
+ // 错误处理配置
54
+ export const ERROR_CONFIG = {
55
+ // 重试配置
56
+ RETRY: {
57
+ MAX_ATTEMPTS: 3,
58
+ DELAY_MS: 1000,
59
+ BACKOFF_MULTIPLIER: 2
60
+ },
61
+
62
+ // 降级策略
63
+ FALLBACK: {
64
+ ENABLE_CANVAS_FALLBACK: true,
65
+ ENABLE_SIMPLIFIED_SVG: true,
66
+ ENABLE_PLACEHOLDER: true,
67
+ PLACEHOLDER_COLOR: '#f5f5f5',
68
+ PLACEHOLDER_TEXT: 'Vector'
69
+ },
70
+
71
+ // 日志配置
72
+ LOGGING: {
73
+ VERBOSE: !ENVIRONMENT.isProduction(),
74
+ ERROR_ONLY: ENVIRONMENT.isProduction(),
75
+ INCLUDE_STACK_TRACE: !ENVIRONMENT.isProduction()
76
+ }
77
+ };
78
+
79
+ // 导出格式配置
80
+ export const EXPORT_CONFIG = {
81
+ // HTML导出
82
+ HTML: {
83
+ INCLUDE_INLINE_SVG: true,
84
+ OPTIMIZE_SVG_SIZE: true,
85
+ REMOVE_VECTOR_EFFECTS: true,
86
+ ENSURE_NAMESPACES: true
87
+ },
88
+
89
+ // 图像导出
90
+ IMAGE: {
91
+ DEFAULT_FORMAT: 'png' as const,
92
+ SUPPORTED_FORMATS: ['png', 'jpeg', 'webp'] as const,
93
+ DEFAULT_QUALITY: 0.9,
94
+ USE_CORS: true
95
+ },
96
+
97
+ // Base64配置
98
+ BASE64: {
99
+ PREFIX: 'data:image/svg+xml;base64,',
100
+ ENCODING: 'utf-8' as const,
101
+ VALIDATE_OUTPUT: true,
102
+ MIN_LENGTH: 100
103
+ }
104
+ };
105
+
106
+ // 兼容性配置
107
+ export const COMPATIBILITY_CONFIG = {
108
+ // 浏览器特性检测
109
+ FEATURES: {
110
+ CANVAS_SUPPORT: () => {
111
+ try {
112
+ const canvas = document.createElement('canvas');
113
+ return !!(canvas.getContext && canvas.getContext('2d'));
114
+ } catch {
115
+ return false;
116
+ }
117
+ },
118
+
119
+ SVG_SUPPORT: () => {
120
+ try {
121
+ return !!(document.createElementNS &&
122
+ document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect);
123
+ } catch {
124
+ return false;
125
+ }
126
+ },
127
+
128
+ BLOB_SUPPORT: () => {
129
+ try {
130
+ return typeof Blob !== 'undefined';
131
+ } catch {
132
+ return false;
133
+ }
134
+ }
135
+ },
136
+
137
+ // 平台特定优化
138
+ PLATFORM_OPTIMIZATIONS: {
139
+ HUGGINGFACE: {
140
+ PREFER_SIMPLE_RENDERING: true,
141
+ REDUCE_LOGGING: true,
142
+ OPTIMIZE_MEMORY: true,
143
+ USE_MINIMAL_FALLBACKS: true
144
+ },
145
+
146
+ MOBILE: {
147
+ REDUCE_SCALE: true,
148
+ OPTIMIZE_PERFORMANCE: true,
149
+ LIMIT_CONCURRENT_RENDERS: true
150
+ }
151
+ }
152
+ };
153
+
154
+ // 验证配置
155
+ export const VALIDATION_CONFIG = {
156
+ DIMENSIONS: {
157
+ MIN_WIDTH: 1,
158
+ MIN_HEIGHT: 1,
159
+ MAX_WIDTH: 8192,
160
+ MAX_HEIGHT: 8192
161
+ },
162
+
163
+ SVG_ATTRIBUTES: {
164
+ REQUIRED: ['xmlns'],
165
+ FORBIDDEN: ['vector-effect'],
166
+ OPTIONAL: ['viewBox', 'width', 'height']
167
+ },
168
+
169
+ OUTPUT: {
170
+ MIN_BASE64_LENGTH: 50,
171
+ MAX_BASE64_LENGTH: 10 * 1024 * 1024, // 10MB
172
+ VALID_PREFIXES: ['data:image/svg+xml;base64,', 'data:image/png;base64,']
173
+ }
174
+ };
175
+
176
+ // 导出统一配置对象
177
+ export const VECTOR_EXPORT_CONFIG = {
178
+ ENVIRONMENT,
179
+ PERFORMANCE_CONFIG,
180
+ ERROR_CONFIG,
181
+ EXPORT_CONFIG,
182
+ COMPATIBILITY_CONFIG,
183
+ VALIDATION_CONFIG
184
+ } as const;
185
+
186
+ export default VECTOR_EXPORT_CONFIG;