{"version":3,"file":"mime.d.ts","sourceRoot":"","sources":["../../src/utils/mime.ts"],"names":[],"mappings":"AAoBA,wBAAsB,oCAAoC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAEnG;AAED,wBAAsB,oCAAoC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAEnG","sourcesContent":["import { open } from \"node:fs/promises\";\nimport { fileTypeFromBuffer } from \"file-type\";\n\nconst IMAGE_MIME_TYPES = new Set([\"image/jpeg\", \"image/png\", \"image/gif\", \"image/webp\"]);\nconst AUDIO_MIME_TYPES = new Set([\n\t\"audio/wav\",\n\t\"audio/wave\",\n\t\"audio/x-wav\",\n\t\"audio/mpeg\",\n\t\"audio/mp3\",\n\t\"audio/flac\",\n\t\"audio/ogg\",\n\t\"audio/webm\",\n\t\"audio/mp4\",\n\t\"audio/x-m4a\",\n\t\"audio/aac\",\n]);\n\nconst FILE_TYPE_SNIFF_BYTES = 4100;\n\nexport async function detectSupportedImageMimeTypeFromFile(filePath: string): Promise<string | null> {\n\treturn detectSupportedMimeTypeFromFile(filePath, IMAGE_MIME_TYPES);\n}\n\nexport async function detectSupportedAudioMimeTypeFromFile(filePath: string): Promise<string | null> {\n\treturn detectSupportedMimeTypeFromFile(filePath, AUDIO_MIME_TYPES);\n}\n\nasync function detectSupportedMimeTypeFromFile(filePath: string, supportedMimeTypes: Set<string>): Promise<string | null> {\n\tconst fileHandle = await open(filePath, \"r\");\n\ttry {\n\t\tconst buffer = Buffer.alloc(FILE_TYPE_SNIFF_BYTES);\n\t\tconst { bytesRead } = await fileHandle.read(buffer, 0, FILE_TYPE_SNIFF_BYTES, 0);\n\t\tif (bytesRead === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst fileType = await fileTypeFromBuffer(buffer.subarray(0, bytesRead));\n\t\tif (!fileType) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!supportedMimeTypes.has(fileType.mime)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn fileType.mime;\n\t} finally {\n\t\tawait fileHandle.close();\n\t}\n}\n"]}