From d6f9c3635a6459db37df5a0f73ac14d9220bcb12 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Sirois Date: Thu, 2 Apr 2026 19:48:01 +0400 Subject: [PATCH 1/2] fix: serialize prettier formatting to prevent concurrency failures Co-Authored-By: Claude Opus 4.6 (1M context) --- src/sql/recent-query.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/sql/recent-query.ts b/src/sql/recent-query.ts index ede7d9f..de762e9 100644 --- a/src/sql/recent-query.ts +++ b/src/sql/recent-query.ts @@ -11,6 +11,7 @@ import { type TableReference, } from "@query-doctor/core"; import { parse } from "@libpg-query/parser"; +import { Sema } from "async-sema"; import z from "zod"; import type { LiveQueryOptimization } from "../remote/optimization.ts"; @@ -21,6 +22,7 @@ import type { LiveQueryOptimization } from "../remote/optimization.ts"; export class RecentQuery { private static HARDCODED_LIMIT = 50; private static rewriter = new PssRewriter(); + private static prettierMutex = new Sema(1); readonly formattedQuery: string; readonly username: string; @@ -134,6 +136,7 @@ export class RecentQuery { } private static async formatQuery(query: string): Promise { + await RecentQuery.prettierMutex.acquire(); try { return await prettier.format(query, { parser: "sql", @@ -143,6 +146,8 @@ export class RecentQuery { }); } catch { return query; + } finally { + RecentQuery.prettierMutex.release(); } } From 15cf984517977130edcac1cddadfb0998c1f3ff0 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Sirois Date: Thu, 2 Apr 2026 19:49:39 +0400 Subject: [PATCH 2/2] fix: log prettier formatting errors instead of silently swallowing Co-Authored-By: Claude Opus 4.6 (1M context) --- src/sql/recent-query.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sql/recent-query.ts b/src/sql/recent-query.ts index de762e9..1c57fe0 100644 --- a/src/sql/recent-query.ts +++ b/src/sql/recent-query.ts @@ -144,7 +144,8 @@ export class RecentQuery { language: "postgresql", keywordCase: "upper", }); - } catch { + } catch (error) { + console.error(`[prettier] Failed to format query: ${error}`); return query; } finally { RecentQuery.prettierMutex.release();