UNPKG

@jrmc/adonis-attachment

Version:

Turn any field on your Lucid model to an attachment data type

41 lines (40 loc) 1.14 kB
import path from 'node:path'; import fs from 'node:fs/promises'; import { fileTypeFromBuffer, fileTypeFromFile } from 'file-type'; import mime from 'mime-types'; function getFileExtension(filename) { if (!filename) { return ''; } const ext = path.extname(filename).slice(1); return ext && /^[a-zA-Z0-9]+$/.test(ext) ? ext : ''; } function metaByFileName(filename) { return { ext: getFileExtension(filename), mime: mime.lookup(filename) || '', }; } export async function metaFormBuffer(input) { const fileType = await fileTypeFromBuffer(input); return { extname: fileType?.ext || '', mimeType: fileType?.mime || '', size: input.length, }; } export async function metaFormFile(input, filename) { let fileType; let size = 0; fileType = metaByFileName(filename); if (fileType.ext === '' || fileType.mime === '') { fileType = await fileTypeFromFile(input); } const stats = await fs.stat(input); size = stats.size; return { extname: fileType?.ext || '', mimeType: fileType?.mime || '', size, }; }