import { type OnlineDriveFile, OnlineDriveFileType } from '@/models/pipeline' import type { OnlineDriveData } from '@/types/pipeline' const filePathRegex = /^(?:.*\/)?[^\/]+\.[^\/\.]+$/ export const isFile = (path: string): boolean => { return filePathRegex.test(path) } export const isBucketListInitiation = (data: OnlineDriveData[], prefix: string[], bucket: string): boolean => { if (bucket || prefix.length > 0) return false return data.length > 1 || (data.length === 1 && !!data[0].bucket && data[0].files.length === 0) } export const convertOnlineDriveData = (data: OnlineDriveData[], prefix: string[], bucket: string): { fileList: OnlineDriveFile[], isTruncated: boolean } => { const fileList: OnlineDriveFile[] = [] let isTruncated = false if (data.length === 0) return { fileList, isTruncated } if (isBucketListInitiation(data, prefix, bucket)) { data.forEach((item) => { fileList.push({ key: item.bucket, displayName: item.bucket, type: OnlineDriveFileType.bucket, }) }) } else { data[0].files.forEach((file) => { const isFileType = isFile(file.key) const filePathList = file.key.split('/') fileList.push({ key: file.key, displayName: `${isFileType ? filePathList.pop() : filePathList[filePathList.length - 2]}${isFileType ? '' : '/'}`, size: isFileType ? file.size : undefined, type: isFileType ? OnlineDriveFileType.file : OnlineDriveFileType.folder, }) }) isTruncated = data[0].is_truncated ?? false } return { fileList, isTruncated } }