@tsed/platform-multer
Version:
Multer adapter package for Ts.ED framework
54 lines (53 loc) • 1.77 kB
JavaScript
import { promisify } from "node:util";
import { injectable } from "@tsed/di";
import fp from "fastify-plugin";
import { MULTER_MODULE } from "../../common/index.js";
const kMultipart = Symbol("multipart");
function setMultipart(req, _payload, done) {
// nothing to do, it will be done by multer in beforeHandler method
req[kMultipart] = true;
done(null);
}
function fastifyMulter(fastify, _options, next) {
fastify.addContentTypeParser("multipart/form-data", setMultipart);
next();
}
const multerPlugin = fp(fastifyMulter, {
fastify: ">= 5.0.0",
name: "fastify-multer"
});
async function factory() {
const { default: multer } = await import("multer");
return {
multer,
get(options) {
const instance = multer(options);
const 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 async (req, res) => {
await promisify(middleware)(req.raw, res.raw);
req.files = req.raw.files;
req.body = req.raw.body;
};
};
};
makePromise(instance, "any");
makePromise(instance, "array");
makePromise(instance, "fields");
makePromise(instance, "none");
makePromise(instance, "single");
return instance;
}
};
}
injectable(MULTER_MODULE)
.asyncFactory(factory)
.configuration({
plugins: [multerPlugin]
})
.token();