More typescript improvements

This commit is contained in:
Dennis Postma 2025-02-07 20:54:55 +01:00
parent f5e7d10fb4
commit 52b8a9b7ad
12 changed files with 35 additions and 14 deletions

View File

@ -1,4 +1,5 @@
import pino from 'pino'
const logger = pino.pino
export enum LoggerType {
HTTP = 'http',
@ -13,13 +14,13 @@ export enum LoggerType {
}
class Logger {
private instances: Map<LoggerType, ReturnType<typeof pino>> = new Map()
private instances: Map<LoggerType, pino.Logger> = new Map()
private getLogger(type: LoggerType): ReturnType<typeof pino> {
private getLogger(type: LoggerType): pino.Logger {
if (!this.instances.has(type)) {
this.instances.set(
type,
pino({
logger({
level: process.env.LOG_LEVEL || 'debug',
transport: {
target: 'pino/file',

View File

@ -27,7 +27,7 @@ export class AvatarController extends BaseController {
* @param res
*/
public async getByName(req: Request, res: Response) {
const character = await this.characterRepository.getByName(req.params.characterName)
const character = await this.characterRepository.getByName(req.params.characterName!)
if (!character?.characterType) {
return this.sendError(res, 'Character or character type not found', 404)
}

View File

@ -12,6 +12,10 @@ export class TexturesController extends BaseController {
public async download(req: Request, res: Response) {
const { type, spriteId, file } = req.params
if (!type || !file) {
return this.sendError(res, 'Invalid request', 400)
}
const texture = type === 'sprites' && spriteId ? Storage.getPublicPath(type, spriteId, file) : Storage.getPublicPath(type, file)
this.sendFile(res, texture)

View File

@ -64,7 +64,7 @@ export default class CharacterCreateEvent extends BaseEvent {
} catch (error: any) {
this.logger.error(`character:create error: ${error.message}`)
if (error instanceof ZodError) {
return this.socket.emit('notification', { title: 'Error', message: error.issues[0].message })
return this.socket.emit('notification', { title: 'Error', message: error.issues[0]!.message })
}
return this.socket.emit('notification', { title: 'Error', message: 'Could not create character. Please try again (later).' })
}

View File

@ -1,5 +1,7 @@
import type { MapCacheT } from '#entities/map'
import { BaseEvent } from '#application/base/baseEvent'
import { Map, MapCacheT } from '#entities/map'
import { Map } from '#entities/map'
type Payload = {
name: string

View File

@ -63,9 +63,11 @@ export default class MapUpdateEvent extends BaseEvent {
if (data.tiles.length > data.height) {
data.tiles = data.tiles.slice(0, data.height)
}
for (let i = 0; i < data.tiles.length; i++) {
if (data.tiles[i].length > data.width) {
data.tiles[i] = data.tiles[i].slice(0, data.width)
const row = data.tiles[i]
if (row !== undefined && row.length > data.width) {
data.tiles[i] = row.slice(0, data.width)
}
}

View File

@ -1,5 +1,6 @@
import type { MapEventTileWithTeleport } from '#application/types'
import { BaseEvent } from '#application/base/baseEvent'
import { MapEventTileWithTeleport } from '#application/types'
import MapManager from '#managers/mapManager'
import MapCharacter from '#models/mapCharacter'
import MapEventTileRepository from '#repositories/mapEventTileRepository'
@ -75,6 +76,11 @@ export default class CharacterMove extends BaseEvent {
const [start, end] = [path[i], path[i + 1]]
if (!start || !end) {
this.logger.error('Invalid path step detected')
break
}
// Validate each step
if (Math.abs(end.positionX - start.positionX) > 1 || Math.abs(end.positionY - start.positionY) > 1) {
this.logger.error('Invalid path step detected')

View File

@ -28,6 +28,11 @@ export class ConsoleManager {
private async processCommand(commandLine: string): Promise<void> {
const [cmd, ...args] = commandLine.trim().split(' ')
if (!cmd) {
console.log('No command provided')
return
}
if (cmd === 'exit') {
this.prompt.close()
return

View File

@ -61,6 +61,7 @@ class DateManager {
if (timeOnlyPattern.test(timeString)) {
const [hours, minutes] = timeString.split(':').map(Number)
if (!hours || !minutes) return null
const newDate = new Date(this.currentDate)
newDate.setHours(hours, minutes)
return newDate

View File

@ -12,7 +12,7 @@ import Storage from '#application/storage'
import SocketManager from '#managers/socketManager'
class QueueManager {
private connection!: IORedis
private connection!: IORedis.Redis
private queue!: Queue
private worker!: Worker
private io!: SocketServer
@ -21,7 +21,7 @@ class QueueManager {
public async boot() {
this.io = SocketManager.getIO()
this.connection = new IORedis(config.REDIS_URL, {
this.connection = new IORedis.Redis(config.REDIS_URL, {
maxRetriesPerRequest: null
})

View File

@ -47,7 +47,7 @@ class LoadedMap {
// Set the grid values based on the event tiles, these are strings
eventTiles.forEach((eventTile) => {
if (eventTile.type === 'BLOCK') {
grid[eventTile.positionY][eventTile.positionX] = 1
grid[eventTile.positionY]![eventTile.positionX] = 1
}
})

View File

@ -133,9 +133,9 @@ class CharacterMoveService extends BaseService {
return (
pos.positionX >= 0 &&
pos.positionY >= 0 &&
pos.positionX < grid[0].length &&
pos.positionX < grid[0]!.length &&
pos.positionY < grid.length &&
(grid[pos.positionY][pos.positionX] === 0 || (pos.positionX === end.positionX && pos.positionY === end.positionY))
(grid[pos.positionY]![pos.positionX] === 0 || (pos.positionX === end.positionX && pos.positionY === end.positionY))
)
}