refactor(browser): scope async route lint exception

This commit is contained in:
Peter Steinberger
2026-07-14 02:36:04 +01:00
parent 7df623f528
commit 56e9d3b05f
2 changed files with 33 additions and 42 deletions

View File

@@ -64,7 +64,7 @@
"node/no-exports-assign": "error",
"eslint-plugin-unicorn/prefer-set-size": "error",
"oxc/no-accumulating-spread": "error",
"oxc/no-async-endpoint-handlers": "off",
"oxc/no-async-endpoint-handlers": "error",
"oxc/no-map-spread": "error",
"promise/no-callback-in-promise": "error",
"promise/no-multiple-resolved": "error",
@@ -228,6 +228,12 @@
"**/node_modules/**"
],
"overrides": [
{
"files": ["extensions/browser/src/browser/routes/*.ts"],
"rules": {
"oxc/no-async-endpoint-handlers": "off"
}
},
{
"files": [
"packages/markdown-core/**/*.ts",

View File

@@ -7,55 +7,40 @@ let createBrowserRouteDispatcher: typeof import("./dispatcher.js").createBrowser
describe("browser route dispatcher (abort)", () => {
beforeAll(async () => {
vi.doMock("./index.js", () => {
const asyncRoute = <Req, Res>(
handler: (req: Req, res: Res) => void | Promise<void>,
): ((req: Req, res: Res) => void | Promise<void>) => {
return (req, res) => handler(req, res);
};
return {
registerBrowserRoutes(app: { get: (path: string, handler: unknown) => void }) {
app.get(
"/slow",
asyncRoute(
async (req: { signal?: AbortSignal }, res: { json: (body: unknown) => void }) => {
const signal = req.signal;
await new Promise<void>((resolve, reject) => {
if (signal?.aborted) {
reject(
toLintErrorObject(
signal.reason ?? new Error("aborted"),
"Non-Error rejection",
),
);
return;
}
const onAbort = () =>
reject(
toLintErrorObject(
signal?.reason ?? new Error("aborted"),
"Non-Error rejection",
),
);
signal?.addEventListener("abort", onAbort, { once: true });
queueMicrotask(() => {
signal?.removeEventListener("abort", onAbort);
resolve();
});
async (req: { signal?: AbortSignal }, res: { json: (body: unknown) => void }) => {
const signal = req.signal;
await new Promise<void>((resolve, reject) => {
if (signal?.aborted) {
reject(
toLintErrorObject(signal.reason ?? new Error("aborted"), "Non-Error rejection"),
);
return;
}
const onAbort = () =>
reject(
toLintErrorObject(
signal?.reason ?? new Error("aborted"),
"Non-Error rejection",
),
);
signal?.addEventListener("abort", onAbort, { once: true });
queueMicrotask(() => {
signal?.removeEventListener("abort", onAbort);
resolve();
});
res.json({ ok: true });
},
),
});
res.json({ ok: true });
},
);
app.get(
"/echo/:id",
asyncRoute(
(
req: { params?: Record<string, string> },
res: { json: (body: unknown) => void },
) => {
res.json({ id: req.params?.id ?? null });
},
),
(req: { params?: Record<string, string> }, res: { json: (body: unknown) => void }) => {
res.json({ id: req.params?.id ?? null });
},
);
},
};