{
  "name": "deathwatch-roller",
  "version": "0.1.0",
  "private": true,
  "proxy": "http://localhost:5000",
  "dependencies": {
    "@testing-library/jest-dom": "^5.16.5",
    "@testing-library/user-event": "^13.5.0",
    "bcrypt": "^5.1.0",
    "cors": "^2.8.5",
    "express": "^5.1.0",
    "http-proxy-middleware": "^3.0.5",
    "mysql2": "^3.14.4",
    "pdf-parse": "^1.1.1",
    "pdfjs-dist": "^3.9.179",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "web-vitals": "^2.1.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "start:with-tests": "npm test && react-scripts start",
    "dev": "react-scripts start",
    "build": "npm run test:unit && react-scripts build",
    "build:with-integration": "npm run test:unit && npm run test:integration && react-scripts build && npm run pm2:start",
    "build:fast": "react-scripts build && npm run pm2:reload",
    "test-build-test": "npm run test:unit && npm run test:integration && npm run build && npm run test:unit",
    "test": "jest --runInBand --passWithNoTests",
    "test:unit": "jest --runInBand --passWithNoTests",
    "test:integration": "npm run pm2:start && sleep 2 && jest --config jest.integration.config.js --runInBand --passWithNoTests && npm run pm2:stop",
    "deploy:build": "npm run build && npm run pm2:start && npm run pm2:reload",
    "eject": "react-scripts eject",
    "serve": "npm test && serve -s build",
    "extract:armoury": "node scripts/extract-armoury.js \"$PWD/Deathwatch-Core-Rulebook.pdf\" public/deathwatch-armoury.json",
    "server": "npm test && cd database && node server.js",
    "server:notest": "cd database && node server.js",
    "rules:build": "python3 scripts/build-midgame-rules.py",
    "rules:import": "node scripts/import-midgame-rules-to-db.js",
    "rules:simulate": "node scripts/simulate-midplay-rules.js",
    "rules:verify-scenarios": "node scripts/verify-rules-ingame-scenarios.js",
    "bestiary:index:40krpgtools": "node scripts/import-40krpgtools-bestiary-index.js",
    "bestiary:hydrate": "node scripts/hydrate-bestiary-from-40krpgtools.js",
    "bestiary:import-hordes": "node scripts/import-40krpgtools-hordes.js",
    "bestiary:import-db": "node scripts/import-bestiary-json-to-db.js",
    "db:sqlite": "cd database && ./switch-db.sh sqlite",
    "pm2:start": "cd database && pm2 start pm2.config.js --env production --update-env",
    "pm2:stop": "pm2 stop deathwatch-server || true",
    "pm2:reload": "cd database && pm2 reload pm2.config.js --env production --update-env",
    "sanitize:openai": "node scripts/sanitize-rules-openai.js",
    "generate:images": "node scripts/generate-weapon-images.js --provider huggingface",
    "generate:images:test": "node scripts/generate-weapon-images.js --provider huggingface --limit 3",
    "generate:images:openai": "node scripts/generate-weapon-images.js --provider openai",
    "prestart": "",
    "preserver": ""
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest",
      "prettier"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "@pmmmwh/react-refresh-webpack-plugin": "^0.6.1",
    "@testing-library/react": "^16.3.2",
    "autoprefixer": "^10.4.14",
    "axios": "^1.11.0",
    "babel-loader": "^10.0.0",
    "canvas": "^2.11.2",
    "cheerio": "^1.1.2",
    "eslint-config-prettier": "^10.1.8",
    "html-webpack-plugin": "^5.6.4",
    "node-fetch": "^2.7.0",
    "pm2": "^5.2.0",
    "postcss": "^8.4.23",
    "prettier-eslint": "^16.4.2",
    "react-scripts": "^5.0.1",
    "tailwindcss": "^3.3.2",
    "tesseract.js": "^4.1.1",
    "webpack-dev-server": "^5.2.2"
  }
}
