window.confirm und window.prompt sind raus - alle vierzehn Stellen. Sie sahen nicht nur fremd aus: Wer sie im Browser abschaltet, bekommt stillschweigend "nein" zurueck, und eine Aktion passiert einfach nicht, ohne dass jemand erfaehrt warum. Stattdessen gibt es einen Dialog-Dienst mit drei Formen - bestaetigen, abfragen, waehlen -, der sich wie der Rest der Anwendung anfuehlt. Die Wahl kam dazu, weil eine Stelle ein Ja/Nein fuer eine Auswahl missbrauchte: "OK = Kulanz, Abbrechen = bezahltes Redesign". Das fuehrt jeden in die Irre, der es zum ersten Mal sieht. Neu: Steht der bezahlte Redesign-Topf im Minus, waehrend Kulanz uebrig ist, erscheint "Minus mit Kulanz ausgleichen". Es bucht so viele Uebergaenge um, wie beide Seiten hergeben - die aeltesten zuerst, damit das Ergebnis wiederholbar ist. Unterm Strich aendert sich nichts, nur die Verteilung. Ebenfalls neu: Ein Redesign laesst sich ausnahmsweise aus dem CC-Topf bezahlen. Damit das Ausrichten an den Ketten so eine Entscheidung nicht beim naechsten Umsortieren wieder einebnet, tragen von Hand gewaehlte Buchungen jetzt einen Merker. Dabei aufgefallen: Die Tests wurden gar nicht typgeprueft - tsconfig schloss nur src ein. Sieben Aufrufe von bookKulanz hatten vertauschte Argumente und liefen trotzdem durch, weil JavaScript das hinnimmt; sie pruefte damit etwas anderes als gedacht. Tests haengen jetzt in der Typpruefung.
43 lines
1.2 KiB
JSON
43 lines
1.2 KiB
JSON
{
|
|
"name": "@cc-manager/server",
|
|
"version": "1.0.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"main": "dist/index.js",
|
|
"scripts": {
|
|
"dev": "tsx watch --env-file-if-exists=.env src/index.ts",
|
|
"build": "prisma generate && tsc -p tsconfig.json",
|
|
"start": "node dist/index.js",
|
|
"generate": "prisma generate",
|
|
"migrate": "prisma migrate deploy",
|
|
"migrate:dev": "prisma migrate dev",
|
|
"studio": "prisma studio",
|
|
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json",
|
|
"test": "node --import tsx --test test/*.test.ts"
|
|
},
|
|
"dependencies": {
|
|
"@fastify/cookie": "^11.0.2",
|
|
"@fastify/helmet": "^13.0.1",
|
|
"@fastify/multipart": "^9.0.3",
|
|
"@fastify/rate-limit": "^10.2.2",
|
|
"@fastify/static": "^8.1.1",
|
|
"@node-rs/argon2": "^2.0.2",
|
|
"@prisma/client": "^6.5.0",
|
|
"csv-parse": "^5.6.0",
|
|
"csv-stringify": "^6.8.3",
|
|
"fastify": "^5.2.1",
|
|
"otplib": "^13.5.0",
|
|
"prisma": "^6.5.0",
|
|
"qrcode": "^1.5.4",
|
|
"zod": "^3.24.2"
|
|
},
|
|
"devDependencies": {
|
|
"@electric-sql/pglite": "^0.5.8",
|
|
"@electric-sql/pglite-socket": "^0.2.11",
|
|
"@types/node": "^22.13.10",
|
|
"@types/qrcode": "^1.5.5",
|
|
"tsx": "^4.19.3",
|
|
"typescript": "^5.8.2"
|
|
}
|
|
}
|