Align lint and type-check configuration

This commit is contained in:
Kari Lintulaakso
2025-11-20 15:19:21 +02:00
parent 65e5c0175b
commit 69a093e7e1
5 changed files with 64 additions and 17 deletions
+17 -2
View File
@@ -1,14 +1,29 @@
import { sleep } from './common' import { sleep } from './common'
import { logger } from './logger' import { logger } from './logger'
import { PrismaClient as NowClient } from '../../prisma/generated/now_test_client' import { PrismaClient as NowClient } from '../../prisma/generated/now_test_client'
import { PrismaClient as LogClient } from '../../prisma/generated/now_log_test_client' import { PrismaClient as LogClient } from '../../prisma/generated/now_log_test_client/default'
import mariadb from 'mariadb' import mariadb from 'mariadb'
import { MARIADB_HOST, MARIADB_PASSWORD, DB_CONNECTION_LIMIT, MARIADB_USER, RUNNING_ENV } from './config' import { MARIADB_HOST, MARIADB_PASSWORD, DB_CONNECTION_LIMIT, MARIADB_USER, RUNNING_ENV } from './config'
import { readFile } from 'fs/promises' import { readFile } from 'fs/promises'
import { PathLike } from 'fs' import { PathLike } from 'fs'
export const logDb = new LogClient() type LogRecord = Record<string, unknown> & {
luid?: number
suid?: number
buid?: number
tuid?: number
}
type LogModel = {
findMany: (...args: unknown[]) => Promise<LogRecord[]>
findFirst: (...args: unknown[]) => Promise<LogRecord | null>
fields: Record<string, unknown>
}
type LogPrismaClient = LogClient & { log: LogModel }
export const logDb = new LogClient() as unknown as LogPrismaClient
export const nowDb = new NowClient() export const nowDb = new NowClient()
export const getCrossSearchFields = () => { export const getCrossSearchFields = () => {
+8 -1
View File
@@ -4,13 +4,20 @@
"outDir": "./build/", "outDir": "./build/",
"module": "CommonJS", "module": "CommonJS",
"moduleResolution": "node", "moduleResolution": "node",
"baseUrl": ".",
"strict": true, "strict": true,
"noUnusedLocals": true, "noUnusedLocals": true,
"noUnusedParameters": true, "noUnusedParameters": true,
"noImplicitReturns": true, "noImplicitReturns": true,
"noFallthroughCasesInSwitch": true, "noFallthroughCasesInSwitch": true,
"esModuleInterop": true, "esModuleInterop": true,
"noImplicitAny": true "noImplicitAny": true,
"resolveJsonModule": true,
"skipLibCheck": true,
"types": ["node"],
"paths": {
"../../prisma/generated/now_log_test_client": ["./prisma/generated/now_log_test_client/default.ts"]
}
}, },
"include": ["src"] "include": ["src"]
} }
+26 -7
View File
@@ -1,28 +1,47 @@
import globals from 'globals' import globals from 'globals'
import jsPlugin from '@eslint/js'
import cypressPlugin from 'eslint-plugin-cypress/flat' import cypressPlugin from 'eslint-plugin-cypress/flat'
import prettierPlugin from 'eslint-plugin-prettier/recommended' import prettierPlugin from 'eslint-plugin-prettier/recommended'
import mochaPlugin from 'eslint-plugin-mocha' import mochaPlugin from 'eslint-plugin-mocha'
// NOTE: This config is only used for running ESLint on the Cypress tests. Frontend and backend use their own configs. // NOTE: This config is only used for running ESLint on the Cypress tests. Frontend and backend use their own configs.
const mochaRecommended = mochaPlugin.configs.flat.recommended
const cypressRecommended = cypressPlugin.configs.recommended
const mochaLanguageOptions = mochaRecommended.languageOptions ?? {}
const cypressLanguageOptions = cypressRecommended.languageOptions ?? {}
const mochaRules = mochaRecommended.rules ?? {}
const cypressRules = cypressRecommended.rules ?? {}
/** @type {import('eslint').Linter.Config[]} */ /** @type {import('eslint').Linter.Config[]} */
export default [ export default [
mochaPlugin.configs.flat.recommended,
cypressPlugin.configs.recommended,
{ {
files: ['cypress/**/*.{cy,spec}.{js,ts,tsx}'],
...mochaRecommended,
...cypressRecommended,
rules: { rules: {
...jsPlugin.configs.recommended.rules, ...mochaRules,
...cypressRules,
'mocha/no-mocha-arrows': 'off', 'mocha/no-mocha-arrows': 'off',
'mocha/no-skipped-tests': 'off', 'mocha/no-skipped-tests': 'off',
'mocha/max-top-level-suites': 'off', 'mocha/max-top-level-suites': 'off',
'mocha/no-top-level-hooks': 'off', 'mocha/no-top-level-hooks': 'off',
'mocha/no-sibling-hooks': 'off', 'mocha/no-sibling-hooks': 'off',
}, },
languageOptions: { languageOptions: {
globals: globals.browser, ...mochaLanguageOptions,
...cypressLanguageOptions,
globals: {
...globals.browser,
...globals.node,
},
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
},
},
plugins: {
mocha: mochaPlugin,
cypress: cypressPlugin,
}, },
}, },
+3 -3
View File
@@ -22,7 +22,7 @@
"noFallthroughCasesInSwitch": true, "noFallthroughCasesInSwitch": true,
"noImplicitAny": true, "noImplicitAny": true,
"baseUrl": ".", "baseUrl": ".",
"types": ["node", "jest"], "types": ["vite/client", "jest", "node"],
"paths": { "paths": {
"@/*": ["./src/*"], "@/*": ["./src/*"],
"@components/*": ["./src/components/*"], "@components/*": ["./src/components/*"],
@@ -30,8 +30,8 @@
"@shared/*": ["../shared/*"] "@shared/*": ["../shared/*"]
} }
}, },
"include": ["src", "tests"], "include": ["src", "tests", "vite.config.ts", "jest.config.ts"],
"exclude": ["../backend/**/*", "./src/country_data/**"], "exclude": ["../backend/**/*", "./src/country_data/**", "node_modules", "dist"],
"references": [{ "path": "./tsconfig.node.json" }] "references": [{ "path": "./tsconfig.node.json" }]
} }
+10 -4
View File
@@ -12,11 +12,17 @@
"dev": "docker compose -f docker-compose.dev.yml up", "dev": "docker compose -f docker-compose.dev.yml up",
"dev:down": "docker compose -f docker-compose.dev.yml down -v", "dev:down": "docker compose -f docker-compose.dev.yml down -v",
"anon:down": "docker compose -f docker-compose.anon.yml down -v", "anon:down": "docker compose -f docker-compose.anon.yml down -v",
"check": "echo \"Running checks for both services and cypress tests...\" && npm run check:frontend && npm run check:backend && npm run check:cypress && echo \"All good! :)\"", "check": "echo \"Running checks for both services and cypress tests...\" && npm run tsc && npm run lint && echo \"All good! :)\"",
"check:backend": "echo \"Running backend tsc ...\" && cd backend && npx tsc --noEmit && echo \"Running backend eslint ...\"&& npm run lint", "check:backend": "npm run tsc:backend && npm run lint:backend",
"check:frontend": "echo \"Running frontend tsc ...\" && cd frontend && npx tsc --noEmit && echo \"Running frontend eslint ...\" && npm run lint", "check:frontend": "npm run tsc:frontend && npm run lint:frontend",
"check:cypress": "echo \"Running cypress eslint ...\" && npm run lint:cypress", "check:cypress": "npm run lint:cypress",
"lint": "npm run lint:backend && npm run lint:frontend && npm run lint:cypress",
"lint:backend": "cd backend && npm run lint",
"lint:frontend": "cd frontend && npm run lint",
"lint:cypress": "eslint --report-unused-disable-directives --max-warnings 0 cypress/e2e/**.cy.js", "lint:cypress": "eslint --report-unused-disable-directives --max-warnings 0 cypress/e2e/**.cy.js",
"tsc": "npm run tsc:backend && npm run tsc:frontend",
"tsc:backend": "cd backend && npx tsc --noEmit",
"tsc:frontend": "cd frontend && npx tsc --noEmit",
"test:backend": "npm run test:unit:backend && npm run test:api", "test:backend": "npm run test:unit:backend && npm run test:api",
"test:api": "npm run test:api:build && npm run test:api:run", "test:api": "npm run test:api:build && npm run test:api:run",
"test:api:build": "docker build -t nowdb-api-tests . -f backend/dev.Dockerfile --target api-tests", "test:api:build": "docker build -t nowdb-api-tests . -f backend/dev.Dockerfile --target api-tests",