50 Unit-Tests mit Vitest fuer die Stellen, an denen ein Fehler teuer waere: Besitzstatus, Mehrfachauswahl inklusive Ueberspringen von Dubletten und bereits besessenen Sets, Token-Erzeugung und -Vergleich, Cent-Umrechnung und Slugs. Der Playwright-Smoke-Test laeuft den ganzen Weg: Registrierung des ersten Nutzers, Hersteller anlegen, Set anlegen, auf eine neue Wunschliste setzen, Link holen und als Besucher ohne Konto reservieren. Er nutzt ein eigenes Datenverzeichnis (./data-e2e), das vor jedem Lauf geleert wird. Dabei aufgefallen und behoben: eine spontan aus dem Katalog angelegte Wunschliste war nicht teilbar, weil das Feld isPublic ohne Formular auf false fiel. Ausserdem ist das Sternchen an Pflichtfeldern jetzt aria-hidden, damit der zugaengliche Name des Feldes sauber bleibt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
73 lines
2.0 KiB
JSON
73 lines
2.0 KiB
JSON
{
|
|
"name": "bricktrack",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"description": "Self-hosted Verwaltung fuer Spielzeug-Set-Sammlungen (Lego, Playmobil, Cobi, ...)",
|
|
"packageManager": "pnpm@10.34.5",
|
|
"engines": {
|
|
"node": ">=22"
|
|
},
|
|
"scripts": {
|
|
"dev": "next dev",
|
|
"build": "next build",
|
|
"start": "next start",
|
|
"lint": "eslint .",
|
|
"typecheck": "tsc --noEmit",
|
|
"db:generate": "drizzle-kit generate",
|
|
"db:migrate": "tsx scripts/migrate.ts",
|
|
"db:seed": "tsx scripts/seed.ts",
|
|
"db:studio": "drizzle-kit studio",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"test:e2e": "node scripts/reset-e2e.mjs && playwright test",
|
|
"screenshots": "playwright test --config=playwright.screenshots.config.ts"
|
|
},
|
|
"dependencies": {
|
|
"@better-auth/passkey": "^1.7.3",
|
|
"better-auth": "^1.7.3",
|
|
"better-sqlite3": "^13.0.3",
|
|
"class-variance-authority": "^0.7.1",
|
|
"cn": "^0.2.6",
|
|
"date-fns": "^4.4.0",
|
|
"drizzle-orm": "^0.45.2",
|
|
"lucide-react": "^1.41.0",
|
|
"next": "15.5.25",
|
|
"next-themes": "^0.4.6",
|
|
"pdfjs-dist": "^6.3.289",
|
|
"radix-ui": "^1.6.7",
|
|
"react": "19.1.0",
|
|
"react-dom": "19.1.0",
|
|
"server-only": "^0.0.1",
|
|
"sharp": "^0.35.4",
|
|
"sonner": "^2.0.8",
|
|
"tw-animate-css": "^1.4.0",
|
|
"zod": "^4.5.4"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/eslintrc": "^3",
|
|
"@playwright/test": "^1.63.0",
|
|
"@tailwindcss/postcss": "^4",
|
|
"@types/better-sqlite3": "^9.6.0",
|
|
"@types/node": "^20",
|
|
"@types/react": "^19",
|
|
"@types/react-dom": "^19",
|
|
"dotenv": "^17.4.2",
|
|
"drizzle-kit": "^0.31.10",
|
|
"eslint": "^9",
|
|
"eslint-config-next": "15.5.25",
|
|
"shadcn": "^4.21.0",
|
|
"tailwindcss": "^4",
|
|
"tsx": "^4.23.13",
|
|
"typescript": "^5",
|
|
"vitest": "^5.0.0"
|
|
},
|
|
"pnpm": {
|
|
"onlyBuiltDependencies": [
|
|
"better-sqlite3",
|
|
"esbuild",
|
|
"sharp",
|
|
"unrs-resolver"
|
|
]
|
|
}
|
|
}
|