{
  "name": "us-iran-military-dashboard",
  "private": true,
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "start": "./start.sh",
    "dev": "vite",
    "api": "node server/index.js",
    "api:seed": "node server/seed.js",
    "crawler": "cd crawler && python main.py",
    "gdelt": "cd crawler && uvicorn realtime_conflict_service:app --host 0.0.0.0 --port 8000",
    "crawler:test": "cd crawler && python3 -c \"import sys; sys.path.insert(0,'.'); from scrapers.rss_scraper import fetch_all; n=len(fetch_all()); print('RSS 抓取:', n, '条' if n else '(0 条，检查网络或关键词过滤)')\"",
    "build": "vite build",
    "typecheck": "tsc --noEmit",
    "lint": "eslint .",
    "preview": "vite preview",
    "verify": "./scripts/verify-pipeline.sh",
    "verify:full": "./scripts/verify-pipeline.sh --start-crawler"
  },
  "dependencies": {
    "better-sqlite3": "^11.6.0",
    "cors": "^2.8.5",
    "echarts": "^5.5.0",
    "echarts-for-react": "^3.0.2",
    "express": "^4.21.1",
    "lucide-react": "^0.576.0",
    "mapbox-gl": "^3.6.0",
    "react": "^18.3.1",
    "react-dom": "^18.3.1",
    "react-map-gl": "^7.1.7",
    "react-router-dom": "^7.13.1",
    "swagger-ui-express": "^5.0.1",
    "ws": "^8.19.0",
    "zustand": "^5.0.0"
  },
  "devDependencies": {
    "@eslint/js": "^9.13.0",
    "@types/react": "^18.3.12",
    "@types/react-dom": "^18.3.1",
    "@vitejs/plugin-react": "^4.3.3",
    "autoprefixer": "^10.4.20",
    "eslint": "^9.14.0",
    "eslint-plugin-react-hooks": "^5.0.0",
    "eslint-plugin-react-refresh": "^0.4.14",
    "globals": "^15.11.0",
    "postcss": "^8.4.47",
    "tailwindcss": "^3.4.14",
    "typescript": "~5.6.2",
    "typescript-eslint": "^8.11.0",
    "vite": "^5.4.10"
  }
}
