{ "name": "invoice-generation-api", "version": "1.0.0", "description": "Enterprise Invoice Generation Backend API", "main": "src/app.js", "scripts": { "start": "node src/server.js", "dev": "nodemon src/server.js", "test": "jest --coverage --detectOpenHandles", "lint": "eslint . --fix", "migrate": "sequelize-cli db:migrate", "seed": "sequelize-cli db:seed:all", "security-check": "snyk test", "prepare": "husky install", "audit": "npm audit", "docs": "jsdoc -c jsdoc.json", "format": "prettier --write 'src/**/*.js'" }, "dependencies": { "express": "^4.18.2", "helmet": "^7.0.0", "cors": "^2.8.5", "dotenv": "^16.0.3", "winston": "^3.8.2", "express-rate-limit": "^6.7.0", "pg": "^8.10.0", "sequelize": "^6.31.1", "joi": "^17.9.2", "jsonwebtoken": "^9.0.0", "bcryptjs": "^2.4.3", "compression": "^1.7.4", "swagger-ui-express": "^4.6.3", "express-async-handler": "^1.2.0", "morgan": "^1.10.0", "express-validator": "^7.0.1", "uuid": "^9.0.0", "sanitize-html": "^2.10.0", "express-mongo-sanitize": "^2.2.0", "hpp": "^0.2.3", "helmet-csp": "^3.4.0", "express-brute": "^1.0.1", "express-slow-down": "^1.5.0", "rate-limit-redis": "^3.0.1", "ioredis": "^5.3.2", "prom-client": "^14.2.0", "express-openapi-validator": "^5.0.4", "class-validator": "^0.14.0", "class-transformer": "^0.5.1", "celebrate": "^15.0.1", "express-jwt": "^8.4.1", "express-rate-limit-flexible": "^3.0.0", "express-validator": "^7.0.1", "helmet-csp": "^3.4.0", "rate-limit-redis": "^3.0.1" }, "devDependencies": { "jest": "^29.5.0", "nodemon": "^2.0.22", "supertest": "^6.3.3", "eslint": "^8.40.0", "eslint-config-airbnb-base": "^15.0.0", "husky": "^8.0.3", "lint-staged": "^13.2.2", "snyk": "^1.1130.0", "jest-sonar-reporter": "^2.0.0", "prettier": "^2.8.8", "jsdoc": "^4.0.2", "typescript": "^5.0.4", "@types/express": "^4.17.17", "@types/jest": "^29.5.2", "ts-jest": "^29.1.0", "@typescript-eslint/parser": "^5.59.9", "@typescript-eslint/eslint-plugin": "^5.59.9" }, "lint-staged": { "*.js": ["eslint --fix", "prettier --write"] }, "jest": { "testEnvironment": "node", "coverageThreshold": { "global": { "branches": 90, "functions": 90, "lines": 90, "statements": 90 } }, "collectCoverageFrom": [ "src/**/*.js", "!src/docs/**", "!src/tests/**" ] } }