mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-18 14:02:51 +00:00
30 lines
812 B
TypeScript
30 lines
812 B
TypeScript
import { open } from "node:fs/promises";
|
|
import { fileTypeFromBuffer } from "file-type";
|
|
|
|
const IMAGE_MIME_TYPES = new Set(["image/jpeg", "image/png", "image/gif", "image/webp"]);
|
|
|
|
const FILE_TYPE_SNIFF_BYTES = 4100;
|
|
|
|
export async function detectSupportedImageMimeTypeFromFile(filePath: string): Promise<string | null> {
|
|
const fileHandle = await open(filePath, "r");
|
|
try {
|
|
const buffer = Buffer.alloc(FILE_TYPE_SNIFF_BYTES);
|
|
const { bytesRead } = await fileHandle.read(buffer, 0, FILE_TYPE_SNIFF_BYTES, 0);
|
|
if (bytesRead === 0) {
|
|
return null;
|
|
}
|
|
|
|
const fileType = await fileTypeFromBuffer(buffer.subarray(0, bytesRead));
|
|
if (!fileType) {
|
|
return null;
|
|
}
|
|
|
|
if (!IMAGE_MIME_TYPES.has(fileType.mime)) {
|
|
return null;
|
|
}
|
|
|
|
return fileType.mime;
|
|
} finally {
|
|
await fileHandle.close();
|
|
}
|
|
}
|