fix(snapshot): 修复 6 个 TypeScript 严格模式编译错误
- infrastructure.module: handler union type 修正 - minio-storage.adapter: obj.name 可选属性安全检查 - minio-backup.handler: listAllObjects 返回 string[] 避免 BucketItem.name 可选问题 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
18c9f8b389
commit
685aced4e4
|
|
@ -70,17 +70,18 @@ export class MinioBackupHandler implements BackupHandler {
|
|||
onProgress(5, `共 ${totalObjects} 个对象待下载...`);
|
||||
|
||||
for (const bucket of bucketsToBackup) {
|
||||
const bucketDir = path.join(tempDownloadDir, bucket.name);
|
||||
const bucketName = bucket.name;
|
||||
const bucketDir = path.join(tempDownloadDir, bucketName);
|
||||
fs.mkdirSync(bucketDir, { recursive: true });
|
||||
|
||||
const objects = await this.listAllObjects(bucket.name);
|
||||
const objects = await this.listAllObjects(bucketName);
|
||||
|
||||
for (const obj of objects) {
|
||||
const objectDir = path.join(bucketDir, path.dirname(obj.name));
|
||||
for (const objName of objects) {
|
||||
const objectDir = path.join(bucketDir, path.dirname(objName));
|
||||
fs.mkdirSync(objectDir, { recursive: true });
|
||||
|
||||
const objectPath = path.join(bucketDir, obj.name);
|
||||
const dataStream = await this.minioClient.getObject(bucket.name, obj.name);
|
||||
const objectPath = path.join(bucketDir, objName);
|
||||
const dataStream = await this.minioClient.getObject(bucketName, objName);
|
||||
const writeStream = fs.createWriteStream(objectPath);
|
||||
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
|
|
@ -92,7 +93,7 @@ export class MinioBackupHandler implements BackupHandler {
|
|||
|
||||
downloadedObjects++;
|
||||
const percent = 5 + Math.floor((downloadedObjects / totalObjects) * 70);
|
||||
onProgress(percent, `下载对象 ${downloadedObjects}/${totalObjects}: ${bucket.name}/${obj.name}`);
|
||||
onProgress(percent, `下载对象 ${downloadedObjects}/${totalObjects}: ${bucketName}/${objName}`);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -123,12 +124,12 @@ export class MinioBackupHandler implements BackupHandler {
|
|||
}
|
||||
}
|
||||
|
||||
private async listAllObjects(bucket: string): Promise<Minio.BucketItem[]> {
|
||||
private async listAllObjects(bucket: string): Promise<string[]> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const objects: Minio.BucketItem[] = [];
|
||||
const names: string[] = [];
|
||||
const stream = this.minioClient.listObjects(bucket, '', true);
|
||||
stream.on('data', (obj) => objects.push(obj));
|
||||
stream.on('end', () => resolve(objects));
|
||||
stream.on('data', (obj) => { if (obj.name) names.push(obj.name); });
|
||||
stream.on('end', () => resolve(names));
|
||||
stream.on('error', reject);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,10 +47,10 @@ import { BackupTarget } from '@/domain/enums';
|
|||
.filter(Boolean);
|
||||
|
||||
const allHandlers = [pg, redis, kafka, zk, minio, uploads];
|
||||
const handlerMap = new Map<BackupTarget, typeof pg>();
|
||||
const handlerMap = new Map<BackupTarget, PostgresBackupHandler | RedisBackupHandler | KafkaBackupHandler | ZookeeperBackupHandler | MinioBackupHandler | UploadsBackupHandler>();
|
||||
|
||||
for (const handler of allHandlers) {
|
||||
if (availableTargets.includes(handler.target)) {
|
||||
if (availableTargets.includes(handler.target as string)) {
|
||||
handlerMap.set(handler.target, handler);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ export class MinioStorageAdapter implements OnModuleInit {
|
|||
const stream = this.minioClient.listObjects(this.bucketName, prefix, true);
|
||||
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
stream.on('data', (obj) => objects.push(obj.name));
|
||||
stream.on('data', (obj) => { if (obj.name) objects.push(obj.name); });
|
||||
stream.on('end', resolve);
|
||||
stream.on('error', reject);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue