{ "name": "draw-a-cat-server", "version": "1.0.0", "description": "手绘猫乐园后端服务", "main": "dist/index.js", "scripts": { "dev": "ts-node-dev --respawn --transpile-only src/index.ts", "build": "tsc && node -e \"const fs=require('fs');const p=require('path');const s=p.join('src','model');const d=p.join('dist','model');fs.mkdirSync(d,{recursive:true});fs.readdirSync(s).forEach(f=>fs.copyFileSync(p.join(s,f),p.join(d,f)));console.log('Model files copied')\"", "start": "node dist/index.js", "test": "vitest --run", "test:watch": "vitest", "lint": "eslint . --ext .ts --fix" }, "dependencies": { "@tensorflow/tfjs": "^4.22.0", "@types/sharp": "^0.31.1", "bcryptjs": "^2.4.3", "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.19.2", "express-validator": "^7.0.1", "jsonwebtoken": "^9.0.2", "mongodb": "^6.5.0", "multer": "^1.4.5-lts.1", "sharp": "^0.34.5" }, "devDependencies": { "@types/bcryptjs": "^2.4.6", "@types/cors": "^2.8.17", "@types/express": "^4.17.21", "@types/jsonwebtoken": "^9.0.6", "@types/multer": "^1.4.11", "@types/node": "^20.12.7", "@typescript-eslint/eslint-plugin": "^7.7.1", "@typescript-eslint/parser": "^7.7.1", "eslint": "^8.57.0", "fast-check": "^3.17.2", "ts-node-dev": "^2.0.0", "typescript": "^5.4.5", "vitest": "^1.5.2" } }