Added to web/package.json devDeps: eslint (9, flat config) + eslint-plugin-svelte + typescript-eslint + globals; prettier + prettier-plugin-svelte; vitest (jsdom env) + jsdom. New scripts: lint, lint:fix, format, format:check, test, test:watch. Configs: - web/eslint.config.js — flat config, TS + Svelte, browser/node globals, no-explicit-any as warn, unused-vars as error (ignores _-prefixed). - web/.prettierrc.json — single-quote, 100 width, svelte parser override. - web/.prettierignore — dist/node_modules/build/lockfiles. - web/vite.config.ts — vitest test block via reference directive, jsdom env, globals enabled. Sample test: web/src/lib/utils.test.ts (6 tests covering relativeTime, truncateMiddle, debounce — all passing). CI: new web job in .gitea/workflows/ci.yml (npm ci, check [advisory], lint [advisory], format:check [advisory], test [gate], build [gate]). Advisory steps use continue-on-error until the baseline is clean — matching the existing golangci-lint advisory pattern. Known baseline surfaced by the new toolchain (pre-existing, not caused by R8): svelte-check 154 errors (133-file config cascade), eslint 126 errors + 12 warnings (unused vars, @html XSS, unused CSS), prettier 175 unformatted files. Fixing these is a follow-up cleanup. VERSION 0.7.9 -> 0.7.10. Plan R8 marked done; C.1 updated.
51 lines
1.3 KiB
JSON
51 lines
1.3 KiB
JSON
{
|
|
"name": "oikos-web",
|
|
"private": true,
|
|
"version": "0.1.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "vite build",
|
|
"preview": "vite preview",
|
|
"check": "svelte-check --tsconfig ./tsconfig.json",
|
|
"typecheck": "tsc --noEmit",
|
|
"lint": "eslint .",
|
|
"lint:fix": "eslint . --fix",
|
|
"format": "prettier --write .",
|
|
"format:check": "prettier --check .",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest"
|
|
},
|
|
"devDependencies": {
|
|
"@lucide/svelte": "^1.23.0",
|
|
"@sveltejs/vite-plugin-svelte": "^5.0.0",
|
|
"@tailwindcss/vite": "^4.3.2",
|
|
"@tsconfig/svelte": "^5.0.0",
|
|
"@types/d3-force": "^3.0.10",
|
|
"bits-ui": "^2.18.1",
|
|
"eslint": "^9.0.0",
|
|
"eslint-plugin-svelte": "^2.46.0",
|
|
"globals": "^15.0.0",
|
|
"jsdom": "^25.0.0",
|
|
"prettier": "^3.3.0",
|
|
"prettier-plugin-svelte": "^3.3.0",
|
|
"svelte": "^5.0.0",
|
|
"svelte-check": "^4.0.0",
|
|
"svelte-sonner": "^1.1.1",
|
|
"tailwind-variants": "^3.2.2",
|
|
"tailwindcss": "^4.3.2",
|
|
"typescript": "^5.5.0",
|
|
"typescript-eslint": "^8.0.0",
|
|
"vite": "^6.0.0",
|
|
"vitest": "^2.0.0"
|
|
},
|
|
"dependencies": {
|
|
"clsx": "^2.1.1",
|
|
"d3-force": "^3.0.0",
|
|
"dompurify": "^3.4.11",
|
|
"marked": "^18.0.5",
|
|
"tailwind-merge": "^3.6.0",
|
|
"uplot": "^1.6.32"
|
|
}
|
|
}
|