{
  "name": "bank-management-backend",
  "version": "1.0.0",
  "description": "银行管理后台系统后端API服务",
  "main": "server.js",
  "author": "Bank Development Team",
  "license": "MIT",
  "keywords": [
    "nodejs",
    "express",
    "sequelize",
    "mysql",
    "api",
    "banking",
    "financial",
    "management"
  ],
  "engines": {
    "node": ">=16.0.0",
    "npm": ">=8.0.0"
  },
  "scripts": {
    "start": "node server.js",
    "dev": "nodemon server.js",
    "init-db": "node scripts/init-db.js",
    "test-connection": "node scripts/test-connection.js",
    "migrate": "node scripts/migration-manager.js",
    "seed": "node scripts/seed-manager.js",
    "backup": "node scripts/backup-db.js",
    "restore": "node scripts/restore-db.js",
    "lint": "eslint . --ext .js",
    "lint:fix": "eslint . --ext .js --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:coverage": "jest --coverage",
    "build": "echo 'No build step required for Node.js backend'",
    "clean": "node -e \"const fs = require('fs'); const path = require('path'); try { const logDir = 'logs'; const tempDir = 'uploads/temp'; if (fs.existsSync(logDir)) { fs.readdirSync(logDir).forEach(file => { if (file.endsWith('.log')) fs.unlinkSync(path.join(logDir, file)); }); } if (fs.existsSync(tempDir)) { fs.rmSync(tempDir, { recursive: true, force: true }); } console.log('✅ Cleanup completed'); } catch (err) { console.error('❌ Cleanup failed:', err.message); }\"",
    "health-check": "node -e \"const { sequelize } = require('./config/database'); sequelize.authenticate().then(() => { console.log('✅ Database connection healthy'); process.exit(0); }).catch(err => { console.error('❌ Database connection failed:', err.message); process.exit(1); });\""
  },
  "dependencies": {
    "archiver": "^6.0.1",
    "axios": "^1.6.0",
    "bcryptjs": "^2.4.3",
    "compression": "^1.7.4",
    "cors": "^2.8.5",
    "dotenv": "^16.3.1",
    "ejs": "^3.1.9",
    "exceljs": "^4.4.0",
    "express": "^4.18.2",
    "express-rate-limit": "^7.1.5",
    "express-validator": "^7.0.1",
    "helmet": "^7.1.0",
    "jsonwebtoken": "^9.0.2",
    "moment": "^2.29.4",
    "multer": "^1.4.5-lts.1",
    "mysql2": "^3.6.5",
    "node-cron": "^3.0.3",
    "nodemailer": "^6.9.8",
    "pdfkit": "^0.17.2",
    "redis": "^4.6.12",
    "sequelize": "^6.35.2",
    "sharp": "^0.33.2",
    "socket.io": "^4.7.4",
    "swagger-jsdoc": "^6.2.8",
    "swagger-ui-express": "^5.0.0",
    "tslib": "^2.8.1",
    "winston": "^3.11.0",
    "xlsx": "^0.18.5"
  },
  "devDependencies": {
    "@types/jest": "^29.5.8",
    "eslint": "^8.55.0",
    "eslint-config-standard": "^17.1.0",
    "eslint-plugin-import": "^2.29.0",
    "eslint-plugin-node": "^11.1.0",
    "eslint-plugin-promise": "^6.1.1",
    "jest": "^29.7.0",
    "nodemon": "^3.0.2",
    "rimraf": "^5.0.5",
    "supertest": "^6.3.3"
  },
  "jest": {
    "testEnvironment": "node",
    "collectCoverageFrom": [
      "controllers/**/*.js",
      "models/**/*.js",
      "routes/**/*.js",
      "utils/**/*.js",
      "!**/node_modules/**",
      "!**/migrations/**",
      "!**/seeds/**"
    ],
    "coverageDirectory": "coverage",
    "coverageReporters": [
      "text",
      "lcov",
      "html"
    ]
  },
  "eslintConfig": {
    "extends": [
      "standard"
    ],
    "env": {
      "node": true,
      "es2021": true,
      "jest": true
    },
    "rules": {
      "no-console": "warn",
      "no-unused-vars": "error",
      "prefer-const": "error"
    }
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/bank-management/bank-backend.git"
  },
  "bugs": {
    "url": "https://github.com/bank-management/bank-backend/issues"
  },
  "homepage": "https://github.com/bank-management/bank-backend#readme"
}
