diff --git a/eslint.config.js b/eslint.config.js index ada18ae08..730888658 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -109,11 +109,12 @@ export default [ "max-lines-per-function": ["error", { max: 561 }], "no-loss-of-precision": "error", "no-multi-spaces": "error", + "no-multiple-empty-lines": ["error", { max: 1, maxEOF: 0 }], "no-trailing-spaces": "error", "object-curly-newline": ["error", { multiline: true, consistent: true }], "object-curly-spacing": ["error", "always"], "object-property-newline": ["error", { allowAllPropertiesOnSameLine: true }], - "no-multiple-empty-lines": ["warn", { max: 1, maxEOF: 0 }], + "object-shorthand": ["error", "always"], "no-undef": "error", "no-unused-vars": "off", // @typescript-eslint/no-unused-vars "quote-props": ["error", "consistent-as-needed"], diff --git a/src/client/ClientGameRunner.ts b/src/client/ClientGameRunner.ts index a7cda04bc..a24f6a2ec 100644 --- a/src/client/ClientGameRunner.ts +++ b/src/client/ClientGameRunner.ts @@ -477,7 +477,7 @@ export class ClientGameRunner { upgradeUnits.push({ unitId: bu.canUpgrade, unitType: bu.type, - distance: distance, + distance, }); } } diff --git a/src/client/Cosmetics.ts b/src/client/Cosmetics.ts index bc9f9948b..be185cee4 100644 --- a/src/client/Cosmetics.ts +++ b/src/client/Cosmetics.ts @@ -44,7 +44,7 @@ export async function handlePurchase(priceId: string) { "authorization": getAuthHeader(), }, body: JSON.stringify({ - priceId: priceId, + priceId, successUrl: `${window.location.origin}#purchase-completed=true`, cancelUrl: `${window.location.origin}#purchase-completed=false`, }), diff --git a/src/client/SinglePlayerModal.ts b/src/client/SinglePlayerModal.ts index 97cfd1c36..c6e0395c1 100644 --- a/src/client/SinglePlayerModal.ts +++ b/src/client/SinglePlayerModal.ts @@ -430,10 +430,10 @@ export class SinglePlayerModal extends LitElement { this.dispatchEvent( new CustomEvent("join-lobby", { detail: { - clientID: clientID, - gameID: gameID, + clientID, + gameID, gameStartInfo: { - gameID: gameID, + gameID, players: [ { clientID, diff --git a/src/client/Transport.ts b/src/client/Transport.ts index bee171add..ac27db411 100644 --- a/src/client/Transport.ts +++ b/src/client/Transport.ts @@ -633,7 +633,7 @@ export class Transport { if (this.isLocal || this.socket?.readyState === WebSocket.OPEN) { const msg = { type: "intent", - intent: intent, + intent, } satisfies ClientIntentMessage; this.sendMsg(msg); } else { diff --git a/src/client/graphics/NameBoxCalculator.ts b/src/client/graphics/NameBoxCalculator.ts index 40b41aea1..94bec5d2c 100644 --- a/src/client/graphics/NameBoxCalculator.ts +++ b/src/client/graphics/NameBoxCalculator.ts @@ -151,8 +151,8 @@ export function largestRectangleInHistogram(widths: number[]): Rectangle { largestRect = { x: stack.length === 0 ? 0 : stack[stack.length - 1] + 1, y: 0, - width: width, - height: height, + width, + height, }; } } diff --git a/src/client/graphics/layers/EventsDisplay.ts b/src/client/graphics/layers/EventsDisplay.ts index b57af219f..1e7906bc8 100644 --- a/src/client/graphics/layers/EventsDisplay.ts +++ b/src/client/graphics/layers/EventsDisplay.ts @@ -358,7 +358,7 @@ export class EventsDisplay extends LitElement implements Layer { } this.addEvent({ - description: description, + description, createdAt: this.game.ticks(), highlight: true, type: event.messageType, @@ -534,8 +534,8 @@ export class EventsDisplay extends LitElement implements Layer { this.addEvent({ description: translateText("events_display.betrayal_description", { name: betrayed.name(), - malusPercent: malusPercent, - durationText: durationText, + malusPercent, + durationText, }), type: MessageType.ALLIANCE_BROKEN, highlight: true, @@ -685,7 +685,7 @@ export class EventsDisplay extends LitElement implements Layer { unsafeDescription: false, highlight: true, createdAt: this.game.ticks(), - unitView: unitView, + unitView, }); } diff --git a/src/client/graphics/layers/Leaderboard.ts b/src/client/graphics/layers/Leaderboard.ts index 2b5646e5f..b702a63ed 100644 --- a/src/client/graphics/layers/Leaderboard.ts +++ b/src/client/graphics/layers/Leaderboard.ts @@ -115,7 +115,7 @@ export class Leaderboard extends LitElement implements Layer { gold: renderNumber(player.gold()), troops: renderNumber(troops), isMyPlayer: player === myPlayer, - player: player, + player, }; }); diff --git a/src/client/graphics/layers/RadialMenu.ts b/src/client/graphics/layers/RadialMenu.ts index a05ef5e5a..65451f121 100644 --- a/src/client/graphics/layers/RadialMenu.ts +++ b/src/client/graphics/layers/RadialMenu.ts @@ -328,7 +328,7 @@ export class RadialMenu implements Layer { return color; } - return d3.color(color)?.copy({ opacity: opacity })?.toString() ?? color; + return d3.color(color)?.copy({ opacity })?.toString() ?? color; }) .attr("stroke", "#ffffff") .attr("stroke-width", "2") @@ -438,7 +438,7 @@ export class RadialMenu implements Layer { const opacity = disabled ? 0.5 : 0.7; path.attr( "fill", - d3.color(color)?.copy({ opacity: opacity })?.toString() ?? color, + d3.color(color)?.copy({ opacity })?.toString() ?? color, ); }; @@ -983,7 +983,7 @@ export class RadialMenu implements Layer { // Update path appearance path.attr( "fill", - d3.color(color)?.copy({ opacity: opacity })?.toString() ?? color, + d3.color(color)?.copy({ opacity })?.toString() ?? color, ); path.style("opacity", disabled ? 0.5 : 1); path.style("cursor", disabled ? "not-allowed" : "pointer"); diff --git a/src/client/graphics/layers/TerritoryLayer.ts b/src/client/graphics/layers/TerritoryLayer.ts index 5773039a3..5cae9e17b 100644 --- a/src/client/graphics/layers/TerritoryLayer.ts +++ b/src/client/graphics/layers/TerritoryLayer.ts @@ -525,7 +525,7 @@ export class TerritoryLayer implements Layer { enqueueTile(tile: TileRef) { this.tileToRenderQueue.push({ - tile: tile, + tile, lastUpdate: this.game.ticks() + this.random.nextFloat(0, 0.5), }); } diff --git a/src/core/GameRunner.ts b/src/core/GameRunner.ts index 7f21d5292..6599d84dc 100644 --- a/src/core/GameRunner.ts +++ b/src/core/GameRunner.ts @@ -168,7 +168,7 @@ export class GameRunner { packedTileUpdates: new BigUint64Array(packedTileUpdates), playerNameViewData: this.playerViewData, tick: this.game.ticks(), - updates: updates, + updates, }); this.isExecuting = false; } diff --git a/src/core/game/PlayerImpl.ts b/src/core/game/PlayerImpl.ts index d50fb80ae..babdca2b6 100644 --- a/src/core/game/PlayerImpl.ts +++ b/src/core/game/PlayerImpl.ts @@ -165,7 +165,7 @@ export class PlayerImpl implements Player { retreating: a.retreating(), } satisfies AttackUpdate; }), - outgoingAllianceRequests: outgoingAllianceRequests, + outgoingAllianceRequests, alliances: this.alliances().map( (a) => ({ @@ -706,7 +706,7 @@ export class PlayerImpl implements Player { this.embargoes.set(other.id(), { createdAt: this.mg.ticks(), - isTemporary: isTemporary, + isTemporary, target: other, }); } @@ -887,7 +887,7 @@ export class PlayerImpl implements Player { canBuild: this.mg.inSpawnPhase() ? false : this.canBuild(u, tile, validTiles), - canUpgrade: canUpgrade, + canUpgrade, cost: this.mg.config().unitInfo(u).cost(this), type: u, } as BuildableUnit; diff --git a/src/core/game/TerrainMapLoader.ts b/src/core/game/TerrainMapLoader.ts index 6661c9097..dc4bc4156 100644 --- a/src/core/game/TerrainMapLoader.ts +++ b/src/core/game/TerrainMapLoader.ts @@ -52,9 +52,9 @@ export async function loadTerrainMap( await mapFiles.miniMapBin(), ); const result = { - gameMap: gameMap, + gameMap, manifest: await mapFiles.manifest(), - miniGameMap: miniGameMap, + miniGameMap, }; loadedMaps.set(map, result); return result; diff --git a/src/core/pathfinding/SerialAStar.ts b/src/core/pathfinding/SerialAStar.ts index 06325b4d5..01f166f72 100644 --- a/src/core/pathfinding/SerialAStar.ts +++ b/src/core/pathfinding/SerialAStar.ts @@ -148,7 +148,7 @@ export class SerialAStar implements AStar { totalG + this.heuristic(neighbor, isForward ? this.dst : this.closestSource); // eslint-disable-next-line sort-keys - openSet.add({ tile: neighbor, fScore: fScore }); + openSet.add({ tile: neighbor, fScore }); } } } diff --git a/src/core/worker/WorkerClient.ts b/src/core/worker/WorkerClient.ts index e83e0befa..a41cf55f9 100644 --- a/src/core/worker/WorkerClient.ts +++ b/src/core/worker/WorkerClient.ts @@ -184,8 +184,8 @@ export class WorkerClient { id: messageId, playerID, type: "player_actions", - x: x, - y: y, + x, + y, }); }); } diff --git a/src/server/Archive.ts b/src/server/Archive.ts index 722e808f8..bda347292 100644 --- a/src/server/Archive.ts +++ b/src/server/Archive.ts @@ -48,9 +48,9 @@ export async function archive(gameRecord: GameRecord) { const { message, stack, name } = error; log.error(`${gameRecord.info.gameID}: Final archive error: ${error}`, { - message: message, - stack: stack, - name: name, + message, + stack, + name, ...(error && typeof error === "object" ? error : {}), }); } @@ -90,9 +90,9 @@ async function archiveAnalyticsToR2(gameRecord: GameRecord) { const { message, stack, name } = error; log.error(`${info.gameID}: Error writing game analytics to R2: ${error}`, { - message: message, - stack: stack, - name: name, + message, + stack, + name, ...(error && typeof error === "object" ? error : {}), }); throw error; @@ -147,9 +147,9 @@ export async function readGameRecord( const { message, stack, name } = error; // Log the error for monitoring purposes log.error(`${gameId}: Error reading game record from R2: ${error}`, { - message: message, - stack: stack, - name: name, + message, + stack, + name, ...(error && typeof error === "object" ? error : {}), }); @@ -178,9 +178,9 @@ export async function gameRecordExists(gameId: GameID): Promise { return false; } log.error(`${gameId}: Error checking archive existence: ${error}`, { - message: message, - stack: stack, - name: name, + message, + stack, + name, ...(error && typeof error === "object" ? error : {}), }); return false; diff --git a/src/server/Cloudflare.ts b/src/server/Cloudflare.ts index 11de727a1..d3b2e2125 100644 --- a/src/server/Cloudflare.ts +++ b/src/server/Cloudflare.ts @@ -189,7 +189,7 @@ export class Cloudflare { ...Array.from(subdomainToService.entries()).map( ([subdomain, service]) => ({ hostname: `${subdomain}.${domain}`, - service: service, + service, }), ), { diff --git a/src/server/GameServer.ts b/src/server/GameServer.ts index 019413432..6260e24a5 100644 --- a/src/server/GameServer.ts +++ b/src/server/GameServer.ts @@ -562,7 +562,7 @@ export class GameServer { this.clientsDisconnectedStatus.set(clientID, isDisconnected); this.addIntent({ clientID, - isDisconnected: isDisconnected, + isDisconnected, type: "mark_disconnected", }); } diff --git a/src/server/MapPlaylist.ts b/src/server/MapPlaylist.ts index 5f84554ad..a0a1ce507 100644 --- a/src/server/MapPlaylist.ts +++ b/src/server/MapPlaylist.ts @@ -158,7 +158,7 @@ export class MapPlaylist { continue; } nextEls.splice(i, 1); - playlist.push({ map: next, mode: mode }); + playlist.push({ map: next, mode }); return true; } return false; diff --git a/src/server/Worker.ts b/src/server/Worker.ts index 74ae4cc6f..82f85d5de 100644 --- a/src/server/Worker.ts +++ b/src/server/Worker.ts @@ -266,7 +266,7 @@ export async function startWorker() { return res.status(200).json({ exists: true, - gameRecord: gameRecord, + gameRecord, success: true, }); }), @@ -340,7 +340,7 @@ export async function startWorker() { if (process.send) { process.send({ type: "WORKER_READY", - workerId: workerId, + workerId, }); log.info("signaled ready state to master"); } diff --git a/src/server/worker/websocket/handler/message/PostJoinHandler.ts b/src/server/worker/websocket/handler/message/PostJoinHandler.ts index 06130984b..a31eab538 100644 --- a/src/server/worker/websocket/handler/message/PostJoinHandler.ts +++ b/src/server/worker/websocket/handler/message/PostJoinHandler.ts @@ -155,7 +155,7 @@ function handleWinner( `Winner determined by ${potentialWinner.ips.size}/${activeUniqueIPs.size} active IPs`, { gameID: gs.id, - winnerKey: winnerKey, + winnerKey, }, ); gs.archiveGame();