@be-link/cos 1.11.4 → 1.12.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,11 +1,426 @@
1
- # `cos`
1
+ # @be-link/cos
2
2
 
3
- > TODO: description
3
+ 腾讯云 COS 浏览器端文件上传工具。
4
4
 
5
- ## Usage
5
+ ## 功能特性
6
6
 
7
+ - 🌐 **浏览器端上传** - 单文件上传,支持进度回调
8
+ - 🔐 **安全可靠** - 自动获取临时密钥,无需暴露永久密钥
9
+ - ⚡ **性能优化** - 大文件 MD5 分片计算,避免内存溢出
10
+ - 📝 **TypeScript** - 完整的类型定义支持
11
+ - 🎯 **多环境** - 支持开发、测试、生产环境配置
12
+ - 🔧 **安全设计** - mode 必填无默认值,强制显式配置,避免环境配置错误
13
+
14
+ ---
15
+
16
+ ## 安装
17
+
18
+ ```bash
19
+ npm install @be-link/cos cos-js-sdk-v5 crypto-js
20
+ ```
21
+
22
+ ---
23
+
24
+ ## 快速开始
25
+
26
+ ### Vue 项目
27
+
28
+ **方式一:立即初始化**
29
+
30
+ ```vue
31
+ <template>
32
+ <div>
33
+ <input type="file" @change="handleFileChange" />
34
+ <button @click="handleUpload" :disabled="uploading">
35
+ {{ uploading ? `上传中 ${progress}%` : '上传文件' }}
36
+ </button>
37
+ </div>
38
+ </template>
39
+
40
+ <script setup>
41
+ import { ref } from 'vue';
42
+ import { BeLinkCOS } from '@be-link/cos';
43
+
44
+ const file = ref(null);
45
+ const uploading = ref(false);
46
+ const progress = ref(0);
47
+
48
+ // 创建上传器实例(mode 必填)
49
+ const uploader = new BeLinkCOS({ mode: 'production' });
50
+
51
+ const handleFileChange = (e) => {
52
+ file.value = e.target.files[0];
53
+ };
54
+
55
+ const handleUpload = async () => {
56
+ if (!file.value) return;
57
+
58
+ uploading.value = true;
59
+ try {
60
+ const result = await uploader.uploadFile(file.value, {
61
+ onProgressCallback: (data) => {
62
+ progress.value = Math.round(data.percent * 100);
63
+ },
64
+ });
65
+ console.log('上传成功:', result.url);
66
+ } catch (error) {
67
+ console.error('上传失败:', error);
68
+ } finally {
69
+ uploading.value = false;
70
+ }
71
+ };
72
+ </script>
73
+ ```
74
+
75
+ **方式二:延迟初始化(支持异步配置)**
76
+
77
+ ```vue
78
+ <script setup>
79
+ import { ref, onMounted } from 'vue';
80
+ import { BeLinkCOS } from '@be-link/cos';
81
+
82
+ const uploader = new BeLinkCOS(); // 先创建实例
83
+
84
+ onMounted(async () => {
85
+ // 从服务器获取配置
86
+ const config = await fetchConfigFromServer();
87
+ uploader.init({ mode: config.mode }); // 稍后初始化
88
+ });
89
+
90
+ const handleUpload = async () => {
91
+ const result = await uploader.uploadFile(file.value);
92
+ console.log('上传成功:', result.url);
93
+ };
94
+ </script>
95
+ ```
96
+
97
+ ### React 项目
98
+
99
+ ```jsx
100
+ import { useState } from 'react';
101
+ import { BeLinkCOS } from '@be-link/cos';
102
+
103
+ // 创建上传器实例(mode 必填)
104
+ const uploader = new BeLinkCOS({ mode: 'production' });
105
+
106
+ function FileUploader() {
107
+ const [file, setFile] = useState(null);
108
+ const [uploading, setUploading] = useState(false);
109
+ const [progress, setProgress] = useState(0);
110
+
111
+ const handleUpload = async () => {
112
+ if (!file) return;
113
+
114
+ setUploading(true);
115
+ try {
116
+ const result = await uploader.uploadFile(file, {
117
+ onProgressCallback: (data) => setProgress(Math.round(data.percent * 100)),
118
+ });
119
+ console.log('上传成功:', result.url);
120
+ } catch (error) {
121
+ console.error('上传失败:', error);
122
+ } finally {
123
+ setUploading(false);
124
+ }
125
+ };
126
+
127
+ return (
128
+ <div>
129
+ <input type='file' onChange={(e) => setFile(e.target.files[0])} />
130
+ <button onClick={handleUpload} disabled={uploading}>
131
+ {uploading ? `上传中 ${progress}%` : '上传文件'}
132
+ </button>
133
+ </div>
134
+ );
135
+ }
136
+ ```
137
+
138
+ ### 原生 JS
139
+
140
+ ```html
141
+ <!DOCTYPE html>
142
+ <html>
143
+ <head>
144
+ <script type="module">
145
+ import { BeLinkCOS } from '@be-link/cos';
146
+
147
+ // 创建上传器实例(mode 必填)
148
+ const uploader = new BeLinkCOS({ mode: 'production' });
149
+
150
+ // 上传
151
+ document.getElementById('upload').onclick = async () => {
152
+ const file = document.getElementById('file').files[0];
153
+ const result = await uploader.uploadFile(file, {
154
+ onProgressCallback: (data) => {
155
+ console.log('进度:', data.percent * 100 + '%');
156
+ },
157
+ });
158
+ console.log('上传成功:', result.url);
159
+ };
160
+ </script>
161
+ </head>
162
+ <body>
163
+ <input type="file" id="file" />
164
+ <button id="upload">上传</button>
165
+ </body>
166
+ </html>
7
167
  ```
8
- const cos = require('cos');
9
168
 
10
- // TODO: DEMONSTRATE API
169
+ ---
170
+
171
+ ## 多环境上传
172
+
173
+ 支持同时上传到不同环境:
174
+
175
+ ```typescript
176
+ import { BeLinkCOS } from '@be-link/cos';
177
+
178
+ // 创建开发环境上传器
179
+ const devUploader = new BeLinkCOS({ mode: 'development' });
180
+
181
+ // 创建生产环境上传器
182
+ const prodUploader = new BeLinkCOS({ mode: 'production' });
183
+
184
+ // 同时上传到不同环境
185
+ await Promise.all([devUploader.uploadFile(file), prodUploader.uploadFile(file)]);
186
+ ```
187
+
188
+ ---
189
+
190
+ ## API 文档
191
+
192
+ ### `new BeLinkCOS(config?)`
193
+
194
+ 创建 COS 上传器实例
195
+
196
+ **支持两种使用方式:**
197
+
198
+ 1. **立即初始化**:传入配置对象,构造函数中自动调用 `init()`
199
+ 2. **延迟初始化**:不传配置,稍后调用 `init()` 方法(支持异步配置)
200
+
201
+ **参数:**
202
+
203
+ - `config.mode` - **必填** 环境模式:`'development'` | `'testing'` | `'production'`
204
+ - `config.headers` - 可选,自定义请求头
205
+ - `config.ScopeLimit` - 可选,是否限制临时密钥范围(默认 `false`)
206
+ - `config.debug` - 可选,是否开启调试模式(默认 `false`)
207
+
208
+ **示例:**
209
+
210
+ ```typescript
211
+ // 方式一:立即初始化
212
+ const uploader = new BeLinkCOS({ mode: 'production' });
213
+
214
+ // 方式二:延迟初始化(支持异步配置)
215
+ const uploader = new BeLinkCOS();
216
+ const config = await fetchConfig(); // 从服务器获取配置
217
+ uploader.init({ mode: config.mode });
218
+
219
+ // 带自定义请求头
220
+ const uploader = new BeLinkCOS({
221
+ mode: 'production',
222
+ headers: { 'x-custom': 'value' },
223
+ debug: true, // 开启调试日志
224
+ });
225
+ ```
226
+
227
+ ### `uploader.init(config)`
228
+
229
+ 初始化 COS 实例(用于延迟初始化场景)
230
+
231
+ **参数:**
232
+
233
+ - `config.mode` - **必填** 环境模式
234
+ - `config.headers` - 可选,自定义请求头
235
+ - `config.ScopeLimit` - 可选,是否限制临时密钥范围
236
+ - `config.debug` - 可选,是否开启调试模式
237
+
238
+ **示例:**
239
+
240
+ ```typescript
241
+ const uploader = new BeLinkCOS();
242
+ uploader.init({ mode: 'production' });
243
+ ```
244
+
245
+ ### `uploader.uploadFile(file, config)`
246
+
247
+ 上传文件到 COS
248
+
249
+ **参数:**
250
+
251
+ - `file` - 要上传的文件对象
252
+ - `config.onProgressCallback` - 可选,进度回调函数
253
+ - `config.Headers` - 可选,自定义请求头
254
+
255
+ **返回:**
256
+
257
+ ```typescript
258
+ {
259
+ url: string, // 文件访问 URL
260
+ Location: string, // 文件位置
261
+ ETag: string, // 文件 ETag
262
+ statusCode: number, // HTTP 状态码
263
+ headers: {} // 响应头
264
+ }
11
265
  ```
266
+
267
+ **示例:**
268
+
269
+ ```typescript
270
+ const result = await uploader.uploadFile(file, {
271
+ onProgressCallback: (data) => {
272
+ console.log('进度:', data.percent * 100 + '%');
273
+ },
274
+ });
275
+ console.log('上传成功:', result.url);
276
+ ```
277
+
278
+ ### `uploader.getSourceUrl(file)`
279
+
280
+ 获取文件上传后的 URL(不执行实际上传)
281
+
282
+ ```typescript
283
+ const url = await uploader.getSourceUrl(file);
284
+ ```
285
+
286
+ ### `uploader.createFileMd5(file, chunkSize?)`
287
+
288
+ 计算文件 MD5 哈希值
289
+
290
+ ```typescript
291
+ const md5 = await uploader.createFileMd5(file, 2 * 1024 * 1024); // 默认 2MB 分片
292
+ ```
293
+
294
+ ### `uploader.getConfig()`
295
+
296
+ 获取当前实例的配置信息
297
+
298
+ ```typescript
299
+ const config = uploader.getConfig();
300
+ console.log(config); // { mode: 'production', headers: {}, scopeLimit: false }
301
+ ```
302
+
303
+ ### `uploader.destroy()`
304
+
305
+ 销毁实例,清理资源
306
+
307
+ ```typescript
308
+ uploader.destroy();
309
+ ```
310
+
311
+ ---
312
+
313
+ ## 环境配置
314
+
315
+ | 环境 | Bucket | 区域 |
316
+ | ----------- | ------------------ | ---------- |
317
+ | development | dev-1304510571 | ap-nanjing |
318
+ | testing | dev-1304510571 | ap-nanjing |
319
+ | production | release-1304510571 | ap-nanjing |
320
+
321
+ ---
322
+
323
+ ## TypeScript 类型
324
+
325
+ ```typescript
326
+ import { BeLinkCOS } from '@be-link/cos';
327
+ import type {
328
+ EnvMode, // 'development' | 'testing' | 'production'
329
+ BucketConfig, // Bucket 配置
330
+ InitConfig, // 初始化配置
331
+ UploadConfig, // 上传配置
332
+ UploadResult, // 上传结果
333
+ } from '@be-link/cos';
334
+ ```
335
+
336
+ ---
337
+
338
+ ## 常见问题
339
+
340
+ ### 1. 两种初始化方式有什么区别?
341
+
342
+ **立即初始化**:配置在编译时已知,直接传入构造函数
343
+
344
+ ```typescript
345
+ const uploader = new BeLinkCOS({ mode: 'production' });
346
+ ```
347
+
348
+ **延迟初始化**:配置需要异步获取(如从服务器获取),先创建实例再初始化
349
+
350
+ ```typescript
351
+ const uploader = new BeLinkCOS();
352
+
353
+ // 稍后(可以是异步)
354
+ const config = await fetchConfigFromServer();
355
+ uploader.init({ mode: config.mode });
356
+ ```
357
+
358
+ **设计理念:** 参考了 `BeLinkLogDot` 的设计模式,支持更灵活的配置方式。
359
+
360
+ ### 2. 为什么 mode 必须传?
361
+
362
+ **设计理念:强制显式配置,避免默认值陷阱**
363
+
364
+ 如果提供默认值(如 `development`),很容易出现以下问题:
365
+
366
+ - 开发者忘记修改配置,生产环境代码误传到开发环境
367
+ - 或者开发环境配置被复制到生产,导致测试数据污染生产环境
368
+
369
+ **因此,我们要求必须显式指定环境:**
370
+
371
+ ```typescript
372
+ // ✅ 正确:明确指定环境,不会搞错
373
+ const uploader = new BeLinkCOS({ mode: 'production' });
374
+
375
+ // ✅ 也可以延迟初始化
376
+ const uploader = new BeLinkCOS();
377
+ uploader.init({ mode: 'production' });
378
+ ```
379
+
380
+ 这样设计更安全,用户必须思考"我要上传到哪个环境"。
381
+
382
+ ### 3. 上传失败怎么办?
383
+
384
+ 检查:
385
+
386
+ - `mode` 参数是否正确
387
+ - 实例是否已初始化(调用了 `init()` 或构造函数传入了配置)
388
+ - 网络是否正常
389
+ - 浏览器控制台是否有错误信息(可以开启 `debug: true` 查看详细日志)
390
+
391
+ ### 4. 文件存储路径是什么?
392
+
393
+ 文件会自动存储到:`/beLinkAllSource/static/{文件类型}/{文件名}_{时间戳}.{扩展名}`
394
+
395
+ 例如:`/beLinkAllSource/static/image/avatar_1699999999999.png`
396
+
397
+ ### 5. 支持哪些文件类型?
398
+
399
+ 支持所有文件类型,会根据文件的 MIME 类型自动分类存储(image、video、audio、application、text、other)。
400
+
401
+ ### 6. 如何切换环境?
402
+
403
+ 创建不同环境的实例:
404
+
405
+ ```typescript
406
+ const devUploader = new BeLinkCOS({ mode: 'development' });
407
+ const prodUploader = new BeLinkCOS({ mode: 'production' });
408
+ ```
409
+
410
+ ---
411
+
412
+ ## 安全说明
413
+
414
+ ✅ 本工具使用**临时密钥**方式,通过云函数动态获取授权
415
+ ✅ 不会在客户端暴露永久密钥,安全可靠
416
+ ✅ 临时密钥具有时效性,过期自动失效
417
+
418
+ ---
419
+
420
+ ## 许可证
421
+
422
+ ISC
423
+
424
+ ## 维护者
425
+
426
+ zhuifeng <yangyiboys@163.com>
@@ -1,2 +1,162 @@
1
- declare const beLinkCOS: any;
2
- export default beLinkCOS;
1
+ import { type EnvMode } from './config';
2
+ import type { InitConfig, UploadConfig, UploadResult } from './types';
3
+ /**
4
+ * BeLinkCOS 类 - 腾讯云 COS 文件上传工具
5
+ *
6
+ * 功能:文件上传、MD5 计算、临时密钥授权
7
+ *
8
+ * @example
9
+ * import { BeLinkCOS } from '@be-link/cos';
10
+ *
11
+ * // 方式一:构造函数传入配置,立即初始化
12
+ * const uploader = new BeLinkCOS({ mode: 'production' });
13
+ * await uploader.uploadFile(file);
14
+ *
15
+ * // 方式二:先创建实例,稍后初始化(支持异步配置)
16
+ * const uploader = new BeLinkCOS();
17
+ * const config = await fetchConfig(); // 从服务器获取配置
18
+ * uploader.init({ mode: 'production' });
19
+ * await uploader.uploadFile(file);
20
+ */
21
+ export declare class BeLinkCOS {
22
+ /** COS SDK 实例 */
23
+ private cos;
24
+ /** COS 存储的基础路径 */
25
+ private readonly basePath;
26
+ /** 自定义请求头 */
27
+ headers: Record<string, any>;
28
+ /** 当前环境模式 */
29
+ mode: EnvMode | null;
30
+ /** 是否限制临时密钥的使用范围 */
31
+ private scopeLimit;
32
+ /** 生命周期状态 */
33
+ protected isInitialized: boolean;
34
+ protected isDestroyed: boolean;
35
+ /** 调试模式 */
36
+ private debug;
37
+ /**
38
+ * 构造函数
39
+ *
40
+ * 支持两种使用方式:
41
+ * 1. 立即初始化:传入配置对象,构造函数中自动调用 init()
42
+ * 2. 延迟初始化:不传配置,稍后调用 init() 方法(支持异步配置)
43
+ *
44
+ * @param config - 可选的初始化配置
45
+ * @param config.mode - **必填** 环境模式:'development' | 'testing' | 'production'
46
+ * @param config.headers - 可选,自定义请求头
47
+ * @param config.ScopeLimit - 可选,是否限制临时密钥的使用范围(默认 false)
48
+ * @param config.debug - 可选,是否开启调试模式(默认 false)
49
+ *
50
+ * @example
51
+ * // 立即初始化
52
+ * const uploader = new BeLinkCOS({ mode: 'production' });
53
+ *
54
+ * // 延迟初始化
55
+ * const uploader = new BeLinkCOS();
56
+ * // ... 稍后调用 uploader.init(config);
57
+ */
58
+ constructor(config?: InitConfig);
59
+ /**
60
+ * 初始化 COS 实例
61
+ * @param config 配置对象
62
+ * @description 可以在创建实例时通过构造函数传入配置,也可以稍后调用此方法初始化
63
+ */
64
+ init(config: InitConfig): void;
65
+ /**
66
+ * 初始化 COS SDK 实例
67
+ *
68
+ * 内部方法,通过云函数获取临时密钥
69
+ * 首次上传时会自动调用
70
+ *
71
+ * @returns Promise<void>
72
+ */
73
+ private initCOS;
74
+ /**
75
+ * 检查实例状态
76
+ */
77
+ protected checkState(methodName: string): boolean;
78
+ /**
79
+ * 内部日志方法
80
+ */
81
+ protected log(...args: unknown[]): void;
82
+ protected warn(...args: unknown[]): void;
83
+ protected error(...args: unknown[]): void;
84
+ /**
85
+ * 验证配置
86
+ */
87
+ protected validateConfig(config: InitConfig): boolean;
88
+ /**
89
+ * 获取配置
90
+ */
91
+ getConfig(): {
92
+ mode: EnvMode | null;
93
+ headers: Record<string, any>;
94
+ scopeLimit: boolean;
95
+ } | null;
96
+ /**
97
+ * 计算文件的 MD5 哈希值
98
+ *
99
+ * 性能优化:
100
+ * - 小文件(< 10MB):一次性读取,速度更快
101
+ * - 大文件:分片读取,避免内存溢出
102
+ *
103
+ * @param file - 要计算 MD5 的文件对象
104
+ * @param chunkSize - 分片大小(字节),默认 2MB
105
+ * @returns Promise<string> 文件的 MD5 哈希值
106
+ *
107
+ * @example
108
+ * const md5 = await beLinkCOS.createFileMd5(file);
109
+ * console.log('文件 MD5:', md5);
110
+ */
111
+ createFileMd5(file: File, chunkSize?: number): Promise<string>;
112
+ /**
113
+ * 生成文件在 COS 中的存储路径
114
+ *
115
+ * 路径规则:/beLinkAllSource/static/{文件类型}/{文件名}_{时间戳}.{扩展名}
116
+ * 例如:/beLinkAllSource/static/image/avatar_1699999999999.png
117
+ *
118
+ * @param file - 文件对象
119
+ * @returns string COS 存储路径
120
+ */
121
+ private getFilePath;
122
+ /**
123
+ * 获取文件上传后的访问 URL(不执行实际上传)
124
+ *
125
+ * 用于在上传前预览文件的最终 URL
126
+ *
127
+ * @param file - 文件对象
128
+ * @returns Promise<string | null> 文件的完整访问 URL,如果实例未初始化则返回 null
129
+ *
130
+ * @example
131
+ * const url = await beLinkCOS.getSourceUrl(file);
132
+ * console.log('文件将上传到:', url);
133
+ */
134
+ getSourceUrl(file: File): Promise<string | null>;
135
+ /**
136
+ * 上传文件到腾讯云 COS
137
+ *
138
+ * 核心功能:将文件上传到对应环境的 COS 存储桶
139
+ * 支持上传进度回调、自定义请求头等配置
140
+ *
141
+ * @param file - 要上传的文件对象
142
+ * @param config - 上传配置(可选)
143
+ * @param config.Headers - 自定义请求头
144
+ * @param config.onProgressCallback - 上传进度回调函数
145
+ * @returns Promise<UploadResult> 上传结果,包含文件 URL、ETag 等信息
146
+ *
147
+ * @example
148
+ * const uploader = new BeLinkCOS({ mode: 'production' });
149
+ * const result = await uploader.uploadFile(file, {
150
+ * onProgressCallback: (progressData) => {
151
+ * console.log('进度:', progressData.percent * 100 + '%');
152
+ * }
153
+ * });
154
+ * console.log('文件 URL:', result.url);
155
+ */
156
+ uploadFile(file: File, config?: UploadConfig): Promise<UploadResult>;
157
+ /**
158
+ * 销毁实例
159
+ */
160
+ destroy(): void;
161
+ }
162
+ //# sourceMappingURL=beLinkCos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beLinkCos.d.ts","sourceRoot":"","sources":["../src/beLinkCos.ts"],"names":[],"mappings":"AAIA,OAAO,EAA0B,KAAK,OAAO,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEtE;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,SAAS;IACpB,iBAAiB;IACjB,OAAO,CAAC,GAAG,CAAa;IACxB,kBAAkB;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAC/D,aAAa;IACN,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;IACzC,aAAa;IACN,IAAI,EAAE,OAAO,GAAG,IAAI,CAAQ;IACnC,oBAAoB;IACpB,OAAO,CAAC,UAAU,CAAkB;IACpC,aAAa;IACb,SAAS,CAAC,aAAa,EAAE,OAAO,CAAS;IACzC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAS;IACvC,WAAW;IACX,OAAO,CAAC,KAAK,CAAkB;IAE/B;;;;;;;;;;;;;;;;;;;;OAoBG;gBACS,MAAM,CAAC,EAAE,UAAU;IAO/B;;;;OAIG;IACH,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAyB9B;;;;;;;OAOG;YACW,OAAO;IAqCrB;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAYjD;;OAEG;IACH,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAMvC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAMxC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAMzC;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAmBrD;;OAEG;IACH,SAAS,IAAI;QAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAY/F;;;;;;;;;;;;;;OAcG;IACI,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,GAAE,MAAwB,GAAG,OAAO,CAAC,MAAM,CAAC;IA+DtF;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;IASnB;;;;;;;;;;;OAWG;IACU,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAS7D;;;;;;;;;;;;;;;;;;;;OAoBG;IACU,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAsCjF;;OAEG;IACH,OAAO,IAAI,IAAI;CAsBhB"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 环境模式类型
3
+ * - development: 开发环境
4
+ * - testing: 测试环境
5
+ * - production: 生产环境
6
+ */
7
+ export type EnvMode = 'development' | 'testing' | 'production';
8
+ /**
9
+ * COS 存储桶配置接口
10
+ */
11
+ export interface BucketConfig {
12
+ /** 存储桶名称 */
13
+ name: string;
14
+ /** 存储桶访问域名 */
15
+ host: string;
16
+ /** 访问协议 */
17
+ protocol: string;
18
+ }
19
+ /**
20
+ * 各环境的 COS 存储桶配置
21
+ * 根据环境自动切换到对应的存储桶
22
+ */
23
+ export declare const BUCKETS_CONFIG: Record<EnvMode, BucketConfig>;
24
+ /** COS 存储桶所在地域(南京) */
25
+ export declare const REGION: "ap-nanjing";
26
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,SAAS,GAAG,YAAY,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,CAgBxD,CAAC;AAEF,sBAAsB;AACtB,eAAO,MAAM,MAAM,EAAG,YAAqB,CAAC"}