UNPKG

@tsed/platform-multer

Version:
57 lines (56 loc) 1.6 kB
import { promisify } from "node:util"; import { injectable } from "@tsed/di"; import { MULTER_MODULE } from "../../common/index.js"; /** * @ignore */ function createRawMiddleware(middleware) { return async (request) => { const ctx = request.ctx; await middleware(ctx.req, ctx.res); const forwardKey = (key) => { if (ctx.req[key]) { ctx.request[key] = ctx.req[key]; ctx[key] = ctx.req[key]; delete ctx.req[key]; } }; if ("request" in ctx) { if (ctx.req.body) { ctx.request.body = ctx.req.body; delete ctx.req.body; } forwardKey("file"); forwardKey("files"); } }; } /** * @ignore */ function makePromise(multer, name) { // istanbul ignore next if (!multer[name]) return; const fn = multer[name]; multer[name] = function apply(...args) { const middleware = Reflect.apply(fn, this, args); return createRawMiddleware(promisify(middleware)); }; } async function factory() { const { default: multer } = await import("multer"); return { multer, get(options) { const instance = multer(options); makePromise(instance, "any"); makePromise(instance, "array"); makePromise(instance, "fields"); makePromise(instance, "none"); makePromise(instance, "single"); return instance; } }; } injectable(MULTER_MODULE).asyncFactory(factory).token();