{ "name": "openfront-client", "scripts": { "build-map": "node --loader ts-node/esm --experimental-specifier-resolution=node src/scripts/TerrainMapGenerator.ts", "build-dev": "webpack --config webpack.config.js --mode development", "build-prod": "webpack --config webpack.config.js --mode production", "start:client": "webpack serve --open --node-env development", "start:server": "node --loader ts-node/esm --experimental-specifier-resolution=node src/server/Server.ts", "start:server-dev": "cross-env GAME_ENV=dev node --loader ts-node/esm --experimental-specifier-resolution=node src/server/Server.ts", "dev": "cross-env GAME_ENV=dev concurrently \"npm run start:client\" \"npm run start:server-dev\"", "tunnel": "npm run build-prod && npm run start:server", "test": "jest", "format": "prettier --write .", "prepare": "husky" }, "lint-staged": { "**/*": [ "prettier --write" ] }, "devDependencies": { "@babel/core": "^7.25.2", "@babel/preset-env": "^7.25.3", "@babel/preset-typescript": "^7.24.7", "@types/chai": "^4.3.17", "@types/d3": "^7.4.3", "@types/jest": "^29.5.12", "@types/jquery": "^3.5.31", "@types/mocha": "^10.0.7", "@types/node": "^22.10.2", "@types/pg": "^8.11.11", "@types/sinon": "^17.0.3", "@types/uuid": "^10.0.0", "@types/ws": "^8.5.11", "autoprefixer": "^10.4.20", "babel-jest": "^29.7.0", "binary-base64-loader": "^1.0.0", "chai": "^5.1.1", "concurrently": "^8.2.2", "copy-webpack-plugin": "^12.0.2", "cross-env": "^7.0.3", "css-loader": "^7.1.2", "file-loader": "^6.2.0", "html-inline-script-webpack-plugin": "^3.2.1", "html-loader": "^5.1.0", "html-webpack-plugin": "^5.6.0", "husky": "^9.1.7", "jest": "^29.7.0", "lint-staged": "^15.4.3", "mocha": "^10.7.0", "mrmime": "^2.0.0", "postcss": "^8.5.1", "postcss-loader": "^8.1.1", "prettier": "^3.5.0", "raw-loader": "^4.0.2", "sinon": "^18.0.0", "sinon-chai": "^4.0.0", "style-loader": "^4.0.0", "tailwindcss": "^3.4.17", "ts-jest": "^29.2.4", "ts-loader": "^9.5.1", "ts-mocha": "^10.0.0", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", "tsx": "^4.17.0", "typescript": "^5.7.2", "webpack": "^5.91.0", "webpack-cli": "^5.1.4", "webpack-dev-server": "^5.0.4", "worker-loader": "^3.0.8" }, "dependencies": { "@datastructures-js/priority-queue": "^6.3.1", "@google-cloud/bigquery": "^7.9.1", "@google-cloud/secret-manager": "^5.6.0", "@google-cloud/storage": "^7.14.0", "@types/dompurify": "^3.0.5", "@types/express": "^4.17.21", "@types/google-protobuf": "^3.15.12", "@types/hammerjs": "^2.0.45", "@types/jimp": "^0.2.28", "@types/msgpack5": "^3.4.6", "@types/raphael": "^2.3.9", "@types/twemoji": "^13.1.1", "binary-loader": "^0.0.1", "colord": "^2.9.3", "crypto": "^1.0.1", "d3": "^7.9.0", "discord.js": "^14.16.3", "dompurify": "^3.1.7", "dotenv": "^16.4.7", "express": "^4.21.1", "express-rate-limit": "^7.5.0", "google-auth-library": "^9.14.0", "googleapis": "^143.0.0", "hammerjs": "^2.0.8", "ip-anonymize": "^0.1.0", "jimp": "^0.22.12", "lit": "^3.2.1", "msgpack5": "^6.0.2", "nanoid": "^5.0.9", "node-addon-api": "^8.1.0", "node-gyp": "^10.2.0", "obscenity": "^0.4.3", "page": "^1.11.6", "pg": "^8.13.3", "priority-queue-typescript": "^1.0.1", "protobufjs": "^7.3.2", "pureimage": "^0.4.13", "raphael": "^2.3.0", "rate-limiter-flexible": "^5.0.5", "twemoji": "^14.0.2", "uuid": "^10.0.0", "wheelnav": "^1.7.1", "ws": "^8.18.0", "zod": "^3.23.8" }, "type": "module" }