Die Pruefung der Rechtstexte war falsch gebaut: sie suchte [PLATZHALTER]-Markierungen in src/i18n/dictionaries/de.ts und en.ts. Diese Dateien sind aber nur der RUECKFALLWERT. Impressum, Datenschutz, AGB, Widerrufsbelehrung und die Telefonnummer sind im Admin-Bereich unter "Inhalte" pflegbar (lib/content-registry.ts, Tabelle SiteContent) — genau wie die uebrigen Firmendaten. Zwei Folgen davon: - Falsch-positiv: Wer sein Impressum im Admin-Bereich ausfuellt — ohne Deploy, so wie vorgesehen —, bekam trotzdem dauerhaft einen Blocker gemeldet, der sich ueber die Oberflaeche gar nicht schliessen liess. - Falsch-negativ: Wer einen Platzhaltertext erst im Admin eintraegt, kam ungeprueft durch. Das Skript ist deshalb von .mjs auf .ts gewechselt (ueber tsx, wie die Seed-Skripte) und fragt jetzt getContentValue() ab — also genau den Text, den Besucher auf /impressum tatsaechlich zu sehen bekommen, je Sprachfassung einzeln. Neben dem Impressum werden nun auch Datenschutz, AGB und Widerrufsbelehrung geprueft; der Befund benennt praezise, welcher Text in welcher Sprache noch offen ist, statt pauschal eine Datei zu nennen. Ist die Datenbank vom ausfuehrenden Rechner aus nicht erreichbar, meldet das Skript diese Punkte ausdruecklich als UNGEPRUEFT (Warnung) — es raet weder "in Ordnung" noch "blockiert". Beide Wege gegen die lokale Datenbank geprueft: mit Verbindung meldet es "Impressum (de), Impressum (en)" als einzigen offenen Rechtstext, ohne Verbindung die Warnung samt Ursache. Kein Top-Level-await: das Projekt hat kein "type": "module", tsx uebersetzt nach CommonJS. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
69 lines
2.1 KiB
JSON
69 lines
2.1 KiB
JSON
{
|
|
"name": "wabenhain",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "node scripts/generate-prisma-clients.mjs && next dev",
|
|
"build": "node scripts/generate-prisma-clients.mjs && next build",
|
|
"start": "node scripts/generate-prisma-clients.mjs && next start",
|
|
"lint": "eslint",
|
|
"postinstall": "node scripts/generate-prisma-clients.mjs",
|
|
"db:push": "node scripts/prisma-provider.mjs && prisma db push",
|
|
"db:migrate": "node scripts/prisma-provider.mjs && prisma migrate dev",
|
|
"db:deploy": "node scripts/prisma-provider.mjs && prisma migrate deploy",
|
|
"db:seed": "prisma db seed",
|
|
"db:seed:demo": "tsx prisma/seed-demo.ts",
|
|
"db:studio": "node scripts/prisma-provider.mjs && prisma studio",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"test:e2e": "playwright test",
|
|
"preflight": "tsx scripts/preflight.ts"
|
|
},
|
|
"dependencies": {
|
|
"@prisma/adapter-mariadb": "^7.10.0",
|
|
"@prisma/adapter-pg": "^7.10.0",
|
|
"@prisma/client": "^7.10.0",
|
|
"bcryptjs": "^3.0.3",
|
|
"ffmpeg-static": "^5.3.0",
|
|
"jose": "^6.2.8",
|
|
"mariadb": "^3.5.3",
|
|
"motion": "^13.0.0",
|
|
"next": "16.3.5",
|
|
"nodemailer": "^9.1.1",
|
|
"otpauth": "^9.5.1",
|
|
"pdfkit": "^0.19.1",
|
|
"prisma": "^7.10.0",
|
|
"qrcode": "^1.5.4",
|
|
"react": "19.2.8",
|
|
"react-dom": "19.2.8",
|
|
"sharp": "^0.35.4",
|
|
"stripe": "^22.4.0",
|
|
"zod": "^4.4.3",
|
|
"zustand": "^5.0.14"
|
|
},
|
|
"devDependencies": {
|
|
"@playwright/test": "^1.62.1",
|
|
"@tailwindcss/postcss": "^4",
|
|
"@testing-library/jest-dom": "^7.0.1",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@testing-library/user-event": "^14.6.4",
|
|
"@types/bcryptjs": "^3.0.0",
|
|
"@types/node": "^20.19.43",
|
|
"@types/nodemailer": "^8.0.1",
|
|
"@types/pdfkit": "^0.17.6",
|
|
"@types/qrcode": "^1.5.6",
|
|
"@types/react": "^19",
|
|
"@types/react-dom": "^19",
|
|
"@vitejs/plugin-react": "^6.0.5",
|
|
"dotenv": "^17.4.2",
|
|
"eslint": "^9",
|
|
"eslint-config-next": "16.3.5",
|
|
"jsdom": "^30.0.1",
|
|
"tailwindcss": "^4",
|
|
"tsx": "^4",
|
|
"typescript": "^5",
|
|
"vitest": "^4.1.10"
|
|
},
|
|
"packageManager": "[email protected]"
|
|
}
|