Skip to content

Commit a9cce8f

Browse files
authored
feat: add debug directory (#1409)
1 parent a228ec4 commit a9cce8f

File tree

3 files changed

+46
-5
lines changed

3 files changed

+46
-5
lines changed

src/lib/misc/ErrorHandler.tsx

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import express from 'express';
22
import { renderToStaticMarkup } from 'react-dom/server';
33
import { sendError } from '../error/sendError';
4+
import { UploadedFile } from '../storage/types';
5+
import path from 'path';
6+
import os from 'os';
7+
import { getRandomUUID } from '../../shared/helpers/getRandomUUID';
8+
import fs from 'fs';
49

510
export const NO_PACKAGE_ERROR = new Error(
611
renderToStaticMarkup(
@@ -20,8 +25,44 @@ export const NO_PACKAGE_ERROR = new Error(
2025
)
2126
);
2227

23-
export default function ErrorHandler(res: express.Response, err: Error) {
28+
function perserveFilesForDebugging(uploadedFiles: UploadedFile[]) {
29+
const debugDirectory = path.join(os.tmpdir(), 'debug', getRandomUUID());
30+
31+
if (!fs.existsSync(debugDirectory)) {
32+
try {
33+
fs.mkdirSync(debugDirectory, { recursive: true });
34+
console.log(`Created debug directory: ${debugDirectory}`);
35+
} catch (error) {
36+
console.error(`Failed to create debug directory: ${error}`);
37+
return;
38+
}
39+
}
40+
41+
uploadedFiles.forEach((file, index) => {
42+
try {
43+
const destPath = `${debugDirectory}/${index}-${path.basename(
44+
file.originalname
45+
)}`;
46+
const fileContents = fs.readFileSync(file.path);
47+
fs.writeFileSync(destPath, fileContents);
48+
console.log(`Copied file ${file.path} to ${destPath}`);
49+
} catch (error) {
50+
console.error(`Error copying file ${file.path}: ${error}`);
51+
}
52+
});
53+
}
54+
55+
export default function ErrorHandler(
56+
res: express.Response,
57+
req: express.Request,
58+
err: Error
59+
) {
2460
sendError(err);
61+
62+
if (Array.isArray(req.files) && req.files.length > 0) {
63+
perserveFilesForDebugging(req.files as UploadedFile[]);
64+
}
65+
2566
res.set('Content-Type', 'text/plain');
2667
res.status(400).send(err.message);
2768
}

src/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,14 @@ const serve = async () => {
9696
app.use(
9797
(
9898
err: Error,
99-
_req: express.Request,
99+
req: express.Request,
100100
res: express.Response,
101101
next: () => void
102102
) => {
103103
if (!err) {
104104
next();
105105
} else {
106-
ErrorHandler(res, err);
106+
ErrorHandler(res, req, err);
107107
}
108108
}
109109
);

src/services/UploadService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,11 @@ class UploadService {
7171
res.status(300);
7272
return res.redirect(url);
7373
} else {
74-
ErrorHandler(res, NO_PACKAGE_ERROR);
74+
ErrorHandler(res, req, NO_PACKAGE_ERROR);
7575
}
7676
} catch (err) {
7777
sendError(err);
78-
ErrorHandler(res, err as Error);
78+
ErrorHandler(res, req, err as Error);
7979
}
8080
}
8181
}

0 commit comments

Comments
 (0)