// MIME type utilities for Google Drive operations
export const FOLDER_MIME_TYPE = 'application/vnd.google-apps.folder';
export const GOOGLE_MIME_TYPES = {
document: 'application/vnd.google-apps.document',
spreadsheet: 'application/vnd.google-apps.spreadsheet',
presentation: 'application/vnd.google-apps.presentation',
folder: FOLDER_MIME_TYPE,
} as const;
export const TEXT_MIME_TYPES: Record<string, string> = {
txt: 'text/plain',
md: 'text/markdown',
json: 'application/json',
html: 'text/html',
css: 'text/css',
js: 'application/javascript',
ts: 'application/typescript',
xml: 'application/xml',
csv: 'text/csv',
};
export const BINARY_MIME_TYPES: Record<string, string> = {
pdf: 'application/pdf',
zip: 'application/zip',
png: 'image/png',
jpg: 'image/jpeg',
jpeg: 'image/jpeg',
gif: 'image/gif',
webp: 'image/webp',
svg: 'image/svg+xml',
mp3: 'audio/mpeg',
mp4: 'video/mp4',
doc: 'application/msword',
docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
xls: 'application/vnd.ms-excel',
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
ppt: 'application/vnd.ms-powerpoint',
pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
};
// Export formats for Google Workspace files
export const EXPORT_MIME_TYPES = {
document: {
pdf: 'application/pdf',
docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
txt: 'text/plain',
html: 'text/html',
md: 'text/markdown',
},
spreadsheet: {
pdf: 'application/pdf',
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
csv: 'text/csv',
},
presentation: {
pdf: 'application/pdf',
pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
},
} as const;
export function getExtensionFromFilename(filename: string): string {
return filename.split('.').pop()?.toLowerCase() || '';
}
export function getMimeTypeFromFilename(filename: string): string {
const ext = getExtensionFromFilename(filename);
return TEXT_MIME_TYPES[ext] || BINARY_MIME_TYPES[ext] || 'application/octet-stream';
}
export function isTextFile(filename: string): boolean {
const ext = getExtensionFromFilename(filename);
return ext in TEXT_MIME_TYPES;
}
export function isBinaryFile(filename: string): boolean {
const ext = getExtensionFromFilename(filename);
return ext in BINARY_MIME_TYPES;
}
export function isGoogleWorkspaceFile(mimeType: string): boolean {
return mimeType.startsWith('application/vnd.google-apps.');
}