{ "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" } }