diff --git a/apps/api/eslint.config.js b/apps/api/eslint.config.mjs similarity index 100% rename from apps/api/eslint.config.js rename to apps/api/eslint.config.mjs diff --git a/apps/api/src/services/minio.service.ts b/apps/api/src/services/minio.service.ts index 9037852..925c88f 100644 --- a/apps/api/src/services/minio.service.ts +++ b/apps/api/src/services/minio.service.ts @@ -91,7 +91,7 @@ export class MinioService { try { await this.client.statObject(this.bucketName, objectName); return true; - } catch (error) { + } catch (_error) { return false; } } diff --git a/apps/api/src/services/token.service.ts b/apps/api/src/services/token.service.ts index 411dfc2..1cd9b31 100644 --- a/apps/api/src/services/token.service.ts +++ b/apps/api/src/services/token.service.ts @@ -90,7 +90,7 @@ export class TokenService { ); const tx = txn - ? (callback: Function) => callback(txn) + ? (callback: (tx: TransactionClient) => Promise) => callback(txn) : this.prisma.$transaction.bind(this.prisma); await tx(async (tx) => { diff --git a/apps/api/src/utils/middlewares.ts b/apps/api/src/utils/middlewares.ts index 1cfa3b3..bd95a9f 100644 --- a/apps/api/src/utils/middlewares.ts +++ b/apps/api/src/utils/middlewares.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unsafe-function-type */ import { MercuriusContext } from 'mercurius'; const isCallback = ( diff --git a/apps/web/eslint.config.js b/apps/web/eslint.config.mjs similarity index 100% rename from apps/web/eslint.config.js rename to apps/web/eslint.config.mjs diff --git a/apps/web/package.json b/apps/web/package.json index a67ab5c..eca838f 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -2,7 +2,6 @@ "name": "web", "private": true, "version": "0.0.0", - "type": "module", "scripts": { "lint": "eslint . --max-warnings 0", "check-types": "tsc --noEmit", diff --git a/apps/web/src/App.tsx b/apps/web/src/App.tsx index 40323d6..e7ccc31 100644 --- a/apps/web/src/App.tsx +++ b/apps/web/src/App.tsx @@ -27,8 +27,8 @@ function App() { // Check if user is already authenticated const checkAuth = () => { - const token = localStorage.getItem('token'); - const storedUserId = localStorage.getItem('userId'); + const token = window.localStorage.getItem('token'); + const storedUserId = window.localStorage.getItem('userId'); if (token && storedUserId) { setIsAuthenticated(true); @@ -52,8 +52,8 @@ function App() { } catch (error) { console.error('Logout failed:', error); } finally { - localStorage.removeItem('token'); - localStorage.removeItem('userId'); + window.localStorage.removeItem('token'); + window.localStorage.removeItem('userId'); setIsAuthenticated(false); setUserId(''); setSelectedRoomId(null); diff --git a/apps/web/src/components/chat-room.tsx b/apps/web/src/components/chat-room.tsx index d717d32..a296f2e 100644 --- a/apps/web/src/components/chat-room.tsx +++ b/apps/web/src/components/chat-room.tsx @@ -75,10 +75,7 @@ interface ChatRoomProps { } export function ChatRoom(props: ChatRoomProps) { - const [variables, setVariables] = createSignal({ - id: props.roomId, - roomId: props.roomId, - }); + const [variables, setVariables] = createSignal({}); const [message, setMessage] = createSignal(''); const [messages, setMessages] = createSignal([]); const [confirmLeave, setConfirmLeave] = createSignal(false); @@ -240,9 +237,9 @@ export function ChatRoom(props: ChatRoomProps) { } }; - document.addEventListener('mousedown', handleClickOutside); + window.document.addEventListener('mousedown', handleClickOutside); return () => { - document.removeEventListener('mousedown', handleClickOutside); + window.document.removeEventListener('mousedown', handleClickOutside); }; }); @@ -345,8 +342,8 @@ export function ChatRoom(props: ChatRoomProps) { {showEmojiPicker() && (
- {/* @ts-ignore */} - setPickerRef(el)}> + {/* @ts-expect-error - emoji-picker-element is not typed */} + setPickerRef(el)} />
)} diff --git a/apps/web/src/components/login-form.tsx b/apps/web/src/components/login-form.tsx index 3cd7c91..2ebe95d 100644 --- a/apps/web/src/components/login-form.tsx +++ b/apps/web/src/components/login-form.tsx @@ -48,8 +48,8 @@ export function LoginForm(props: LoginFormProps) { if (result.data?.login) { const { accessToken, user } = result.data.login; - localStorage.setItem('token', accessToken); - localStorage.setItem('userId', user.id); + window.localStorage.setItem('token', accessToken); + window.localStorage.setItem('userId', user.id); props.onLoginSuccess(accessToken, user.id); } else { setError('Login failed: No data received from server'); diff --git a/apps/web/src/components/register-form.tsx b/apps/web/src/components/register-form.tsx index 5352a5a..d36283a 100644 --- a/apps/web/src/components/register-form.tsx +++ b/apps/web/src/components/register-form.tsx @@ -56,8 +56,8 @@ export function RegisterForm(props: RegisterFormProps) { if (result.data?.register) { const { accessToken, user } = result.data.register; - localStorage.setItem('token', accessToken); - localStorage.setItem('userId', user.id); + window.localStorage.setItem('token', accessToken); + window.localStorage.setItem('userId', user.id); props.onRegisterSuccess(accessToken, user.id); } else { setError('Registration failed: No data received from server'); diff --git a/apps/web/src/components/room-list.tsx b/apps/web/src/components/room-list.tsx index 20b6236..0654658 100644 --- a/apps/web/src/components/room-list.tsx +++ b/apps/web/src/components/room-list.tsx @@ -172,7 +172,7 @@ export function RoomList(props: RoomListProps) { // Check if the current user is a member of a room const isMember = (room: Room) => { - const userId = localStorage.getItem('userId'); + const userId = window.localStorage.getItem('userId'); return room.members?.some((member) => member.id === userId); }; diff --git a/apps/web/src/lib/graphql-client.ts b/apps/web/src/lib/graphql-client.ts index 36fb596..3791c8b 100644 --- a/apps/web/src/lib/graphql-client.ts +++ b/apps/web/src/lib/graphql-client.ts @@ -37,7 +37,7 @@ export const client = createClient({ ], // For development, we'll add a simple header-based authentication fetchOptions: () => { - const token = localStorage.getItem('token'); + const token = window.localStorage.getItem('token'); return { credentials: 'include', headers: { diff --git a/packages/eslint-config/base.js b/packages/eslint-config/base.js index 80d5b42..b7a676c 100644 --- a/packages/eslint-config/base.js +++ b/packages/eslint-config/base.js @@ -1,4 +1,4 @@ -import js from '@eslint/js'; +import eslint from '@eslint/js'; import turboPlugin from 'eslint-plugin-turbo'; import tseslint from 'typescript-eslint'; @@ -7,18 +7,30 @@ import tseslint from 'typescript-eslint'; * * @type {import("eslint").Linter.Config[]} * */ -export const config = [ - js.configs.recommended, - ...tseslint.configs.recommended, - { - plugins: { - turbo: turboPlugin, +export const config = tseslint.config( + eslint.configs.recommended, + tseslint.configs.recommended, + [ + { + plugins: { + turbo: turboPlugin, + }, + rules: { + 'turbo/no-undeclared-env-vars': 'warn', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-empty-object-type': 'off', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + argsIgnorePattern: '^_', + varsIgnorePattern: '^_', + caughtErrorsIgnorePattern: '^_', + }, + ], + }, }, - rules: { - 'turbo/no-undeclared-env-vars': 'warn', + { + ignores: ['dist/**'], }, - }, - { - ignores: ['dist/**'], - }, -]; + ] +); diff --git a/packages/eslint-config/solid.js b/packages/eslint-config/solid.js index d32dc4b..951f157 100644 --- a/packages/eslint-config/solid.js +++ b/packages/eslint-config/solid.js @@ -1,4 +1,3 @@ -import js from '@eslint/js'; import solid from 'eslint-plugin-solid/configs/typescript'; import * as tsParser from '@typescript-eslint/parser'; import { config as baseConfig } from './base.js'; @@ -9,11 +8,10 @@ import { config as baseConfig } from './base.js'; * @type {import("eslint").Linter.Config[]} */ export const config = [ ...baseConfig, - js.configs.recommended, { files: ['**/*.{ts,tsx}'], ...solid, - ignores: ['turbo/generators/**'], + ignores: ['turbo/generators/**', 'vite.config.ts'], languageOptions: { parser: tsParser, parserOptions: { @@ -21,6 +19,7 @@ export const config = [ }, globals: { window: true, + console: true, }, }, },