{
  "name": "flyer-crawler",
  "private": true,
  "version": "0.7.2",
  "type": "module",
  "scripts": {
    "dev": "concurrently \"npm:start:dev\" \"vite\"",
    "dev:container": "concurrently \"npm:start:dev\" \"vite --host\"",
    "start": "npm run start:prod",
    "build": "vite build",
    "preview": "vite preview",
    "test": "cross-env NODE_ENV=test tsx ./node_modules/vitest/vitest.mjs run",
    "test-wsl": "cross-env NODE_ENV=test vitest run",
    "test:coverage": "npm run clean && npm run test:unit -- --coverage && npm run test:integration -- --coverage",
    "test:unit": "NODE_ENV=test tsx --max-old-space-size=8192 ./node_modules/vitest/vitest.mjs run --project unit -c vite.config.ts",
    "test:integration": "NODE_ENV=test tsx --max-old-space-size=8192 ./node_modules/vitest/vitest.mjs run --project integration -c vitest.config.integration.ts",
    "format": "prettier --write .",
    "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
    "type-check": "tsc --noEmit",
    "validate": "(prettier --check . || true) && npm run type-check && (npm run lint || true)",
    "clean": "rimraf coverage .coverage",
    "start:dev": "NODE_ENV=development tsx watch server.ts",
    "start:prod": "NODE_ENV=production tsx server.ts",
    "start:test": "NODE_ENV=test NODE_V8_COVERAGE=.coverage/tmp/integration-server tsx server.ts",
    "db:reset:dev": "NODE_ENV=development tsx src/db/seed.ts",
    "db:reset:test": "NODE_ENV=test tsx src/db/seed.ts",
    "worker:prod": "NODE_ENV=production tsx src/services/queueService.server.ts"
  },
  "dependencies": {
    "@bull-board/api": "^6.14.2",
    "@bull-board/express": "^6.14.2",
    "@google/genai": "^1.30.0",
    "@tanstack/react-query": "^5.90.12",
    "@types/connect-timeout": "^1.9.0",
    "bcrypt": "^5.1.1",
    "bullmq": "^5.65.1",
    "connect-timeout": "^1.9.1",
    "cookie-parser": "^1.4.7",
    "date-fns": "^4.1.0",
    "exif-parser": "^0.1.12",
    "express": "^5.1.0",
    "express-list-endpoints": "^7.1.1",
    "express-rate-limit": "^8.2.1",
    "ioredis": "^5.8.2",
    "jsonwebtoken": "^9.0.2",
    "lucide-react": "^0.555.0",
    "multer": "^2.0.2",
    "node-cron": "^4.2.1",
    "nodemailer": "^7.0.10",
    "p-ratelimit": "^1.0.1",
    "passport": "^0.7.0",
    "passport-github2": "^0.1.12",
    "passport-google-oauth20": "^2.0.0",
    "passport-jwt": "^4.0.1",
    "passport-local": "^1.0.0",
    "pdfjs-dist": "^5.4.394",
    "pg": "^8.16.3",
    "piexifjs": "^1.0.6",
    "pino": "^10.1.0",
    "react": "^19.2.0",
    "react-dom": "^19.2.0",
    "react-hot-toast": "^2.6.0",
    "react-router-dom": "^7.9.6",
    "recharts": "^3.4.1",
    "sharp": "^0.34.5",
    "tsx": "^4.20.6",
    "zod": "^4.2.1",
    "zxcvbn": "^4.4.2"
  },
  "devDependencies": {
    "@tailwindcss/postcss": "4.1.17",
    "@testcontainers/postgresql": "^11.8.1",
    "@testing-library/jest-dom": "^6.9.1",
    "@testing-library/react": "^16.3.0",
    "@testing-library/user-event": "^14.6.1",
    "@types/bcrypt": "^5.0.2",
    "@types/cookie-parser": "^1.4.10",
    "@types/express": "^5.0.5",
    "@types/jsonwebtoken": "^9.0.10",
    "@types/multer": "^2.0.0",
    "@types/node": "^24.10.1",
    "@types/node-cron": "^3.0.11",
    "@types/nodemailer": "^7.0.4",
    "@types/passport": "^1.0.17",
    "@types/passport-github2": "^1.2.9",
    "@types/passport-google-oauth20": "^2.0.17",
    "@types/passport-jwt": "^4.0.1",
    "@types/passport-local": "^1.0.38",
    "@types/pg": "^8.15.6",
    "@types/piexifjs": "^1.0.0",
    "@types/pino": "^7.0.4",
    "@types/react": "^19.2.7",
    "@types/react-dom": "^19.2.3",
    "@types/sharp": "^0.31.1",
    "@types/supertest": "^6.0.3",
    "@types/zxcvbn": "^4.4.5",
    "@typescript-eslint/eslint-plugin": "^8.47.0",
    "@typescript-eslint/parser": "^8.47.0",
    "@vitejs/plugin-react": "5.1.1",
    "@vitest/coverage-v8": "^4.0.15",
    "@vitest/ui": "^4.0.15",
    "autoprefixer": "^10.4.22",
    "c8": "^10.1.3",
    "concurrently": "^9.2.1",
    "cross-env": "^10.1.0",
    "eslint": "9.39.1",
    "eslint-config-prettier": "^9.1.0",
    "eslint-plugin-react": "7.37.5",
    "eslint-plugin-react-hooks": "^7.0.1",
    "eslint-plugin-react-refresh": "^0.4.24",
    "glob": "^13.0.0",
    "globals": "16.5.0",
    "istanbul-reports": "^3.2.0",
    "jsdom": "^27.2.0",
    "msw": "^2.12.3",
    "nyc": "^17.1.0",
    "pino-pretty": "^13.1.3",
    "postcss": "^8.5.6",
    "prettier": "^3.3.2",
    "rimraf": "^6.1.2",
    "supertest": "^7.1.4",
    "tailwindcss": "^4.1.17",
    "testcontainers": "^11.8.1",
    "typescript": "^5.9.3",
    "typescript-eslint": "^8.47.0",
    "vite": "^7.2.4",
    "vitest": "^4.0.15"
  }
}
