Skip to content

Commit

Permalink
fix: serve empty 500 responses for non-html requests when a build err…
Browse files Browse the repository at this point in the history
…or occurs
  • Loading branch information
Shakeskeyboarde committed Jun 26, 2024
1 parent 24b4625 commit 0e8a1ca
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 8 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "vite-live-preview",
"version": "0.2.0",
"version": "0.2.1",
"description": "Vite build with preview.",
"license": "ISC",
"repository": {
Expand Down
10 changes: 8 additions & 2 deletions src/middleware/error.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,18 @@ export default ({ base, getError }: Options): Connect.NextHandleFunction => {
const clientSrc = JSON.stringify(path.posix.join(base, CLIENT_SCRIPT_NAME));

return (req, res, next) => {
if (!req.headers.accept?.includes('html')) return next();

const error = getError();

if (!error) return next();

if (!req.headers.accept?.includes('html')) {
res.statusCode = 500;
res.end();
debug?.(`served empty error response for "${req.url}".`);

return;
}

const message = ansiHtml(htmlEscape(error.message));
const html = TEMPLATE_ERROR_HTML
.replace(/(?=<\/head>)|$/iu, `<script crossorigin="" src=${clientSrc}></script>\n`)
Expand Down
16 changes: 11 additions & 5 deletions src/plugin/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ export default ({ reload = true, config, plugins }: LivePreviewOptions = {}): Pl
let server: PreviewServer | undefined;
let error: Error | undefined;
let deferToBuild: DeferredPromise<void> | undefined;
let reloadDelay: NodeJS.Timeout | undefined;
let deferToRequests: DeferredPromise<void> | undefined;
let deferToRequestsDelay: NodeJS.Timeout | undefined;
let activeRequestCount = 0;
Expand Down Expand Up @@ -121,6 +122,8 @@ export default ({ reload = true, config, plugins }: LivePreviewOptions = {}): Pl
async buildStart() {
if (!enabled) return;

clearTimeout(reloadDelay);

// Delay the build if requests are in progress.
await deferToRequests?.promise;

Expand Down Expand Up @@ -166,11 +169,14 @@ export default ({ reload = true, config, plugins }: LivePreviewOptions = {}): Pl
}

if (reload) {
debug?.(`sending page-reload to ${sockets.size} clients...`);
sockets.forEach((socket) => {
socket.send(JSON.stringify({ type: 'page-reload' }));
debug?.(`sent page-reload.`);
});
clearTimeout(reloadDelay);
reloadDelay = setTimeout(() => {
debug?.(`sending page-reload to ${sockets.size} clients...`);
sockets.forEach((socket) => {
socket.send(JSON.stringify({ type: 'page-reload' }));
debug?.(`sent page-reload.`);
});
}, 1000).unref();
}

return;
Expand Down

0 comments on commit 0e8a1ca

Please sign in to comment.