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} 个对象待下载...`);
|
onProgress(5, `共 ${totalObjects} 个对象待下载...`);
|
||||||
|
|
||||||
for (const bucket of bucketsToBackup) {
|
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 });
|
fs.mkdirSync(bucketDir, { recursive: true });
|
||||||
|
|
||||||
const objects = await this.listAllObjects(bucket.name);
|
const objects = await this.listAllObjects(bucketName);
|
||||||
|
|
||||||
for (const obj of objects) {
|
for (const objName of objects) {
|
||||||
const objectDir = path.join(bucketDir, path.dirname(obj.name));
|
const objectDir = path.join(bucketDir, path.dirname(objName));
|
||||||
fs.mkdirSync(objectDir, { recursive: true });
|
fs.mkdirSync(objectDir, { recursive: true });
|
||||||
|
|
||||||
const objectPath = path.join(bucketDir, obj.name);
|
const objectPath = path.join(bucketDir, objName);
|
||||||
const dataStream = await this.minioClient.getObject(bucket.name, obj.name);
|
const dataStream = await this.minioClient.getObject(bucketName, objName);
|
||||||
const writeStream = fs.createWriteStream(objectPath);
|
const writeStream = fs.createWriteStream(objectPath);
|
||||||
|
|
||||||
await new Promise<void>((resolve, reject) => {
|
await new Promise<void>((resolve, reject) => {
|
||||||
|
|
@ -92,7 +93,7 @@ export class MinioBackupHandler implements BackupHandler {
|
||||||
|
|
||||||
downloadedObjects++;
|
downloadedObjects++;
|
||||||
const percent = 5 + Math.floor((downloadedObjects / totalObjects) * 70);
|
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) => {
|
return new Promise((resolve, reject) => {
|
||||||
const objects: Minio.BucketItem[] = [];
|
const names: string[] = [];
|
||||||
const stream = this.minioClient.listObjects(bucket, '', true);
|
const stream = this.minioClient.listObjects(bucket, '', true);
|
||||||
stream.on('data', (obj) => objects.push(obj));
|
stream.on('data', (obj) => { if (obj.name) names.push(obj.name); });
|
||||||
stream.on('end', () => resolve(objects));
|
stream.on('end', () => resolve(names));
|
||||||
stream.on('error', reject);
|
stream.on('error', reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,10 +47,10 @@ import { BackupTarget } from '@/domain/enums';
|
||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
|
|
||||||
const allHandlers = [pg, redis, kafka, zk, minio, uploads];
|
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) {
|
for (const handler of allHandlers) {
|
||||||
if (availableTargets.includes(handler.target)) {
|
if (availableTargets.includes(handler.target as string)) {
|
||||||
handlerMap.set(handler.target, handler);
|
handlerMap.set(handler.target, handler);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ export class MinioStorageAdapter implements OnModuleInit {
|
||||||
const stream = this.minioClient.listObjects(this.bucketName, prefix, true);
|
const stream = this.minioClient.listObjects(this.bucketName, prefix, true);
|
||||||
|
|
||||||
await new Promise<void>((resolve, reject) => {
|
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('end', resolve);
|
||||||
stream.on('error', reject);
|
stream.on('error', reject);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue