Round 2 of the E32 review found the key whitelists blind: a line regex saw neither a [lint.per-file-ignores] table nor a quoted key, and pytest.ini's continuation lines and key: value form slipped past. Ruff's config is now parsed (smol-toml) and held to its key paths; pytest.ini to its whole lines; the CI ruff steps to --config backend/ruff.toml, which is what makes that file the whole configuration. ESLint: every glob of a block must reach a sample (reactPlugin.ts and devOnlyGuard.ts rode along unseen), a block's own severity is held to src, a no-restricted-* list is held to the src block's declaration rather than Feed.tsx's effective config, named global ignores count, an ignored sample is named, and linterOptions are checked. tsconfig.node must keep allowJs + checkJs while it lists a .js file; knip's positive glob is pinned.
73 lines
2.2 KiB
JSON
73 lines
2.2 KiB
JSON
{
|
|
"name": "siftlode-frontend",
|
|
"private": true,
|
|
"license": "AGPL-3.0-only",
|
|
"type": "module",
|
|
"engines": {
|
|
"node": "24.x"
|
|
},
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"typecheck": "npm run typecheck:app && npm run typecheck:node && npm run typecheck:e2e",
|
|
"typecheck:app": "tsc --noEmit -p tsconfig.json",
|
|
"typecheck:node": "tsc -p tsconfig.node.json",
|
|
"typecheck:e2e": "tsc --noEmit -p e2e/tsconfig.json",
|
|
"build": "npm run typecheck:app && npm run typecheck:node && vite build",
|
|
"preview": "vite preview",
|
|
"knip": "knip && knip --production",
|
|
"lint": "eslint . --max-warnings 0",
|
|
"format": "prettier --write .",
|
|
"format:check": "prettier --check .",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"e2e": "playwright test"
|
|
},
|
|
"dependencies": {
|
|
"@dnd-kit/core": "^6.3.1",
|
|
"@dnd-kit/sortable": "^10.0.0",
|
|
"@dnd-kit/utilities": "^3.2.2",
|
|
"@floating-ui/react": "^0.27.20",
|
|
"@tanstack/react-query": "^5.51.0",
|
|
"@tanstack/react-virtual": "^3.14.3",
|
|
"clsx": "^2.1.1",
|
|
"flag-icons": "^7.5.0",
|
|
"hls.js": "^1.6.16",
|
|
"i18next": "^23.11.5",
|
|
"lucide-react": "^0.408.0",
|
|
"react": "19.3.0",
|
|
"react-dom": "19.3.0",
|
|
"react-i18next": "^15.7.4"
|
|
},
|
|
"devDependencies": {
|
|
"@babel/core": "7.29.7",
|
|
"@eslint-community/eslint-plugin-eslint-comments": "4.8.1",
|
|
"@eslint/js": "9.39.1",
|
|
"@playwright/test": "^1.61.1",
|
|
"@tailwindcss/postcss": "^4.3.3",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@types/node": "^24.13.6",
|
|
"@types/react": "19.3.0",
|
|
"@types/react-dom": "19.3.0",
|
|
"@vitejs/plugin-react": "^4.3.1",
|
|
"@vitest/coverage-v8": "4.1.11",
|
|
"@vitest/eslint-plugin": "1.6.27",
|
|
"babel-plugin-react-compiler": "1.0.0",
|
|
"eslint": "9.39.1",
|
|
"eslint-config-prettier": "10.1.8",
|
|
"eslint-plugin-playwright": "2.12.0",
|
|
"eslint-plugin-react-hooks": "7.1.1",
|
|
"eslint-plugin-react-refresh": "0.4.24",
|
|
"globals": "16.5.0",
|
|
"jsdom": "^25.0.1",
|
|
"knip": "6.27.0",
|
|
"postcss": "^8.4.39",
|
|
"prettier": "3.6.2",
|
|
"smol-toml": "1.9.0",
|
|
"tailwindcss": "^4.3.3",
|
|
"typescript": "^5.5.3",
|
|
"typescript-eslint": "8.71.0",
|
|
"vite": "^6.4.3",
|
|
"vitest": "^4.1.11"
|
|
}
|
|
}
|