@tsed/platform-multer
Version:
Multer adapter package for Ts.ED framework
57 lines (56 loc) • 1.6 kB
JavaScript
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();