From 498eb4f3fc372b880d76c8300a86e8f5b9123fad Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Tue, 24 Jun 2025 01:51:34 +0200 Subject: [PATCH] Unfuck tsconfigs + VS Code + eslint + tsc, fix type errors --- web/eslint.config.js | 2 +- web/package.json | 2 +- web/src/server/routes/sessions.ts | 6 ++--- web/src/server/services/hq-client.ts | 4 +++- web/tsconfig.base.json | 18 ++++++++++++++ web/tsconfig.client.json | 22 +++++++---------- web/tsconfig.json | 35 +++------------------------- web/tsconfig.server.json | 27 +++++++++++++++++++++ web/tsconfig.sw.json | 17 ++++---------- web/tsconfig.test.json | 17 +++++++++++--- 10 files changed, 83 insertions(+), 67 deletions(-) create mode 100644 web/tsconfig.base.json create mode 100644 web/tsconfig.server.json diff --git a/web/eslint.config.js b/web/eslint.config.js index 702538d5..e48091c2 100644 --- a/web/eslint.config.js +++ b/web/eslint.config.js @@ -14,7 +14,7 @@ module.exports = tseslint.config( files: ['src/**/*.ts', 'src/**/*.tsx'], languageOptions: { parserOptions: { - project: ['./tsconfig.json', './tsconfig.client.json', './tsconfig.sw.json', './tsconfig.test.json'], + project: ['./tsconfig.server.json', './tsconfig.client.json', './tsconfig.sw.json', './tsconfig.test.json'], tsconfigRootDir: __dirname, }, }, diff --git a/web/package.json b/web/package.json index 972ec4a8..9975d18a 100644 --- a/web/package.json +++ b/web/package.json @@ -11,7 +11,7 @@ "build:ci": "node scripts/build-ci.js", "lint": "eslint 'src/**/*.{ts,tsx}'", "lint:fix": "eslint 'src/**/*.{ts,tsx}' --fix", - "typecheck": "tsc --noEmit && tsc --noEmit --project tsconfig.client.json && tsc --noEmit --project tsconfig.sw.json", + "typecheck": "tsc --noEmit --project tsconfig.server.json && tsc --noEmit --project tsconfig.client.json && tsc --noEmit --project tsconfig.sw.json", "test": "vitest", "test:ci": "vitest run --reporter=verbose", "format": "prettier --write 'src/**/*.{ts,tsx,js,jsx,json,css,md}'", diff --git a/web/src/server/routes/sessions.ts b/web/src/server/routes/sessions.ts index 6c0de36a..119b1890 100644 --- a/web/src/server/routes/sessions.ts +++ b/web/src/server/routes/sessions.ts @@ -81,7 +81,7 @@ export function createSessionRoutes(config: SessionRoutesConfig): Router { }); if (response.ok) { - const remoteSessions = await response.json(); + const remoteSessions = (await response.json()) as Session[]; logger.debug(`got ${remoteSessions.length} sessions from remote ${remote.name}`); // Track session IDs for this remote @@ -169,7 +169,7 @@ export function createSessionRoutes(config: SessionRoutesConfig): Router { return res.status(response.status).json(error); } - const result = await response.json(); + const result = (await response.json()) as { sessionId: string }; logger.debug(`remote session creation took ${Date.now() - startTime}ms`); // Track the session in the remote's sessionIds @@ -543,7 +543,7 @@ export function createSessionRoutes(config: SessionRoutesConfig): Router { }); if (response.ok) { - const result = await response.json(); + const result = (await response.json()) as { cleanedSessions: string[] }; const cleanedSessionIds = result.cleanedSessions || []; const cleanedCount = cleanedSessionIds.length; totalCleaned += cleanedCount; diff --git a/web/src/server/services/hq-client.ts b/web/src/server/services/hq-client.ts index 8a07346f..469111ce 100644 --- a/web/src/server/services/hq-client.ts +++ b/web/src/server/services/hq-client.ts @@ -56,7 +56,9 @@ export class HQClient { }); if (!response.ok) { - const errorBody = await response.json().catch(() => ({ error: response.statusText })); + const errorBody = (await response.json().catch(() => ({ error: response.statusText }))) as { + error: string; + }; logger.debug(`registration failed with status ${response.status}`, errorBody); throw new Error(`Registration failed: ${errorBody.error || response.statusText}`); } diff --git a/web/tsconfig.base.json b/web/tsconfig.base.json new file mode 100644 index 00000000..32fcb343 --- /dev/null +++ b/web/tsconfig.base.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ES2020", + "lib": ["ES2020"], + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "sourceMap": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "useDefineForClassFields": false, + "typeRoots": ["./node_modules/@types"] + } +} \ No newline at end of file diff --git a/web/tsconfig.client.json b/web/tsconfig.client.json index f2e8fe0e..3310c371 100644 --- a/web/tsconfig.client.json +++ b/web/tsconfig.client.json @@ -1,32 +1,26 @@ { + "extends": "./tsconfig.base.json", "compilerOptions": { - "target": "ES2020", "module": "ES2020", "lib": ["ES2020", "dom", "dom.iterable"], "outDir": "./public", "rootDir": "./src", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "moduleResolution": "node", - "allowSyntheticDefaultImports": true, - "sourceMap": true, "inlineSourceMap": false, "inlineSources": true, - "declaration": false, - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "useDefineForClassFields": false, + "declaration": true, "composite": true }, "include": [ - "src/client/**/*" + "src/client/**/*", + "src/shared/**/*", + "src/types/**/*" ], "exclude": [ "node_modules", "dist", "src/cli.ts", - "src/client/sw.ts" + "src/client/sw.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts" ] } \ No newline at end of file diff --git a/web/tsconfig.json b/web/tsconfig.json index dd992c48..6eda1724 100644 --- a/web/tsconfig.json +++ b/web/tsconfig.json @@ -1,37 +1,8 @@ { - "compilerOptions": { - "target": "ES2020", - "module": "CommonJS", - "lib": ["ES2020", "dom"], - "outDir": "./dist", - "rootDir": "./src", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "moduleResolution": "node", - "allowSyntheticDefaultImports": true, - "resolveJsonModule": true, - "sourceMap": true, - "declaration": false, - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "useDefineForClassFields": false, - "typeRoots": ["./node_modules/@types"] - }, - "include": [ - "src/server/**/*", - "src/shared/**/*", - "src/types/**/*", - "src/cli.ts" - ], - "exclude": [ - "node_modules", - "dist", - "public", - "src/client/**/*" - ], + "files": [], "references": [ + { "path": "./tsconfig.server.json" }, { "path": "./tsconfig.client.json" }, + { "path": "./tsconfig.sw.json" } ] } \ No newline at end of file diff --git a/web/tsconfig.server.json b/web/tsconfig.server.json new file mode 100644 index 00000000..262ece39 --- /dev/null +++ b/web/tsconfig.server.json @@ -0,0 +1,27 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "module": "CommonJS", + "lib": ["ES2020"], + "outDir": "./dist", + "rootDir": "./src", + "declaration": true, + "types": ["node"], + "composite": true + }, + "include": [ + "src/server/**/*", + "src/shared/**/*", + "src/types/**/*", + "src/cli.ts", + "src/index.ts" + ], + "exclude": [ + "node_modules", + "dist", + "public", + "src/client/**/*", + "src/**/*.test.ts", + "src/**/*.spec.ts" + ] +} \ No newline at end of file diff --git a/web/tsconfig.sw.json b/web/tsconfig.sw.json index d49754a4..d00e785c 100644 --- a/web/tsconfig.sw.json +++ b/web/tsconfig.sw.json @@ -1,25 +1,18 @@ { + "extends": "./tsconfig.base.json", "compilerOptions": { - "target": "ES2020", "module": "ES2020", "lib": ["ES2020", "webworker", "webworker.iterable"], "outDir": "./public", "rootDir": "./src", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "moduleResolution": "node", - "allowSyntheticDefaultImports": true, - "sourceMap": true, "inlineSourceMap": false, "inlineSources": true, - "declaration": false, - "experimentalDecorators": true, - "useDefineForClassFields": false + "declaration": true }, "include": [ - "src/client/sw.ts" + "src/client/sw.ts", + "src/shared/**/*", + "src/types/**/*" ], "exclude": [ "node_modules", diff --git a/web/tsconfig.test.json b/web/tsconfig.test.json index 7d09a431..7f15bfcd 100644 --- a/web/tsconfig.test.json +++ b/web/tsconfig.test.json @@ -1,11 +1,22 @@ { - "extends": "./tsconfig.json", + "extends": "./tsconfig.base.json", "compilerOptions": { - "types": ["vitest/globals"] + "module": "ES2020", + "lib": ["ES2020", "dom"], + "types": ["vitest/globals", "node"] }, "include": [ "src/**/*.test.ts", "src/**/*.spec.ts", - "src/test/**/*" + "src/test/**/*", + "src/server/**/*", + "src/client/**/*", + "src/shared/**/*", + "src/types/**/*" + ], + "exclude": [ + "node_modules", + "dist", + "public" ] } \ No newline at end of file