import type { H3Event } from 'h3'
import type { IncomingMessage } from 'node:http'
import multer from 'multer'
import fs from 'fs'
const middleware = multer({ dest: 'tmp/', limits: { fileSize: 5 * 1024 * 1024 } }).single('image')
/**
* Middleware function to handle file uploads using Multer.
*
* @param {H3Event} event - The event object from H3.
* @returns {Promise<{ file?: Express.Multer.File, body?: Record<string, any> }>} - A promise that resolves with the uploaded file and request body.
*/
const useMulter = async (event: H3Event): Promise<{
file?: Express.Multer.File | undefined,
body?: Record<string, unknown>,
}> => {
return new Promise((resolve, reject) => {
// eslint-disable-next-line
const req = event.node.req as IncomingMessage & any
// eslint-disable-next-line
const res = event.node.res as any
// Run multer middleware
// eslint-disable-next-line
middleware(req, res, (er: any) => {
if (er) {
reject(er)
return
}
resolve({
body: req.body,
file: req.file,
})
})
})
}
/**
* Delete a tmp from file system.
*
* @param filePath - Path to the file to be deleted.
*/
const deleteMulterFile = (filePath: string): void => {
fs.unlink(filePath, (err) => {
if (err) {
console.error('Error deleting the file:', err)
}
})
}
export { useMulter, deleteMulterFile }