86 lines
2.9 KiB
JavaScript
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;
|