Files
2026-02-21 10:33:18 +01:00

86 lines
2.9 KiB
JavaScript

"use strict";
/*!
* serve-static
* Copyright(c) 2010 Sencha Inc.
* Copyright(c) 2011 TJ Holowaychuk
* Copyright(c) 2014-2016 Douglas Christopher Wilson
* MIT Licensed
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.serveStatic = void 0;
const renderer_1 = require("@remotion/renderer");
const node_fs_1 = require("node:fs");
const middleware_1 = require("./dev-middleware/middleware");
const range_parser_1 = require("./dev-middleware/range-parser");
const serveStatic = async function ({ root, path, req, res, allowOutsidePublicFolder, }) {
if (req.method !== 'GET' && req.method !== 'HEAD') {
// method not allowed
res.statusCode = 405;
res.setHeader('Allow', 'GET, HEAD');
res.setHeader('Content-Length', '0');
res.end();
return;
}
if (!renderer_1.RenderInternals.isPathInside(path, root) && !allowOutsidePublicFolder) {
res.writeHead(500);
res.write('Not allowed to read');
res.end();
return;
}
const exists = (0, node_fs_1.existsSync)(path);
if (!exists) {
res.writeHead(404);
res.write(`${path} does not exist`);
res.end();
return;
}
const lstat = await node_fs_1.promises.lstat(path);
if (lstat.isSymbolicLink()) {
const target = await node_fs_1.promises.readlink(path);
return (0, exports.serveStatic)({
path: target,
root,
req,
res,
allowOutsidePublicFolder: true,
});
}
const isDirectory = lstat.isDirectory();
if (isDirectory) {
res.writeHead(500);
res.write('Is a directory');
res.end();
return;
}
const hasRange = req.headers.range && lstat.size;
if (!hasRange) {
const readStream = (0, node_fs_1.createReadStream)(path);
res.setHeader('content-type', renderer_1.RenderInternals.mimeLookup(path) || 'application/octet-stream');
res.setHeader('content-length', lstat.size);
res.writeHead(200);
readStream.pipe(res);
return;
}
const range = (0, range_parser_1.parseRange)(lstat.size, req.headers.range);
if (typeof range === 'object' && range.type === 'bytes') {
const { start, end } = range[0];
res.setHeader('content-type', renderer_1.RenderInternals.mimeLookup(path) || 'application/octet-stream');
res.setHeader('content-range', (0, middleware_1.getValueContentRangeHeader)('bytes', lstat.size, {
end,
start,
}));
res.setHeader('content-length', end - start + 1);
res.writeHead(206);
const readStream = (0, node_fs_1.createReadStream)(path, {
start,
end,
});
readStream.pipe(res);
return;
}
res.statusCode = 416;
res.setHeader('Content-Range', `bytes */${lstat.size}`);
res.end();
};
exports.serveStatic = serveStatic;