Frontend/25_02_24/node_modules/@tinyhttp/res/dist/download.js

42 lines
1.5 KiB
JavaScript
Raw Normal View History

2025-02-25 08:55:29 +00:00
import { basename, extname, resolve } from 'node:path';
import { contentDisposition } from '@tinyhttp/content-disposition';
import { sendFile } from '@tinyhttp/send';
import { setContentType, setHeader } from './headers.js';
export const download = (req, res) => (path, filename, options, cb) => {
let done = cb;
let name = filename;
let opts = (options || null);
// support function as second or third arg
if (typeof filename === 'function') {
done = filename;
name = null;
}
else if (typeof options === 'function') {
done = options;
opts = null;
}
// set Content-Disposition when file is sent
const headers = {
'Content-Disposition': contentDisposition(name || basename(path))
};
// merge user-provided headers
if (opts === null || opts === void 0 ? void 0 : opts.headers) {
for (const key of Object.keys(opts.headers)) {
if (key.toLowerCase() !== 'content-disposition')
headers[key] = opts.headers[key];
}
}
// merge user-provided options
opts = { ...opts, headers };
// send file
return sendFile(req, res)(opts.root ? path : resolve(path), opts, done || (() => undefined));
};
export const attachment = (res) => (filename) => {
if (filename) {
setContentType(res)(extname(filename));
filename = basename(filename);
}
setHeader(res)('Content-Disposition', contentDisposition(filename));
return res;
};
//# sourceMappingURL=download.js.map