Added ESLint

This commit is contained in:
Dennis Postma 2024-12-27 02:50:11 +01:00
parent 343c67a110
commit 30dc69ab4b
111 changed files with 3204 additions and 269 deletions

42
eslint.config.js Normal file
View File

@ -0,0 +1,42 @@
import eslint from '@eslint/js';
import tseslint from '@typescript-eslint/eslint-plugin';
import tsparser from '@typescript-eslint/parser';
import importPlugin from 'eslint-plugin-import';
export default [
eslint.configs.recommended,
{
files: ['**/*.ts'],
languageOptions: {
parser: tsparser,
parserOptions: {
project: './tsconfig.json',
ecmaVersion: 2023,
},
},
plugins: {
'@typescript-eslint': tseslint,
'import': importPlugin,
},
rules: {
...tseslint.configs['recommended'].rules,
...tseslint.configs['recommended-requiring-type-checking'].rules,
'import/order': ['error', {
'groups': [
'builtin',
'external',
'internal',
['parent', 'sibling'],
'index',
'object',
'type'
],
'newlines-between': 'always',
'alphabetize': {
'order': 'asc',
'caseInsensitive': true
}
}]
}
}
];

View File

@ -1,7 +1,8 @@
// import { defineConfig, MariaDbDriver } from '@mikro-orm/mariadb' // import { defineConfig, MariaDbDriver } from '@mikro-orm/mariadb'
import { defineConfig, MySqlDriver } from '@mikro-orm/mysql'
import { Migrator } from '@mikro-orm/migrations' import { Migrator } from '@mikro-orm/migrations'
import { defineConfig, MySqlDriver } from '@mikro-orm/mysql'
import { TsMorphMetadataProvider } from '@mikro-orm/reflection' import { TsMorphMetadataProvider } from '@mikro-orm/reflection'
import serverConfig from './src/application/config' import serverConfig from './src/application/config'
export default defineConfig({ export default defineConfig({

2745
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,9 @@
"start": "npx prisma migrate deploy && node dist/server.js", "start": "npx prisma migrate deploy && node dist/server.js",
"dev": "nodemon --ignore 'data/*' --exec tsx src/server.ts", "dev": "nodemon --ignore 'data/*' --exec tsx src/server.ts",
"build": "tsc", "build": "tsc",
"format": "prettier --write src/" "format": "prettier --write src/",
"lint": "eslint .",
"lint:fix": "eslint . --fix"
}, },
"dependencies": { "dependencies": {
"@mikro-orm/core": "^6.4.2", "@mikro-orm/core": "^6.4.2",
@ -37,6 +39,11 @@
"@types/jsonwebtoken": "^9.0.6", "@types/jsonwebtoken": "^9.0.6",
"@types/node": "^20.14.11", "@types/node": "^20.14.11",
"@types/nodemailer": "^6.4.16", "@types/nodemailer": "^6.4.16",
"@typescript-eslint/eslint-plugin": "^8.18.2",
"@typescript-eslint/parser": "^8.18.2",
"eslint": "^9.17.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-import": "^2.31.0",
"nodemon": "^3.1.4", "nodemon": "^3.1.4",
"prettier": "^3.3.3", "prettier": "^3.3.3",
"prisma": "^6.1.0", "prisma": "^6.1.0",

View File

@ -1,7 +1,8 @@
import { appLogger } from '../logger'
import { Database } from '../database'
import { EntityManager, MikroORM } from '@mikro-orm/core' import { EntityManager, MikroORM } from '@mikro-orm/core'
import { Database } from '../database'
import { appLogger } from '../logger'
export abstract class BaseRepository { export abstract class BaseRepository {
protected orm!: MikroORM protected orm!: MikroORM
protected em!: EntityManager protected em!: EntityManager

View File

@ -1,7 +1,8 @@
import config from '../../mikro-orm.config'
// import { MikroORM } from '@mikro-orm/mariadb' // import { MikroORM } from '@mikro-orm/mariadb'
import { MikroORM } from '@mikro-orm/mysql' import { MikroORM } from '@mikro-orm/mysql'
import { appLogger } from './logger' import { appLogger } from './logger'
import config from '../../mikro-orm.config'
/** /**
* Singleton class for initializing and managing the database connection * Singleton class for initializing and managing the database connection

View File

@ -1,5 +1,7 @@
import pino from 'pino'
import fs from 'fs' import fs from 'fs'
import pino from 'pino'
import { getRootPath } from './storage' import { getRootPath } from './storage'
// Array of log types // Array of log types

View File

@ -1,6 +1,7 @@
import config from './config'
import path from 'path'
import fs from 'fs' import fs from 'fs'
import path from 'path'
import config from './config'
export function getRootPath(folder: string, ...additionalSegments: string[]) { export function getRootPath(folder: string, ...additionalSegments: string[]) {
return path.join(process.cwd(), folder, ...additionalSegments) return path.join(process.cwd(), folder, ...additionalSegments)

View File

@ -1,4 +1,5 @@
import { Socket } from 'socket.io' import { Socket } from 'socket.io'
import { Character } from '#entities/character' import { Character } from '#entities/character'
import { ZoneEventTile } from '#entities/zoneEventTile' import { ZoneEventTile } from '#entities/zoneEventTile'
import { ZoneEventTileTeleport } from '#entities/zoneEventTileTeleport' import { ZoneEventTileTeleport } from '#entities/zoneEventTileTeleport'

View File

@ -1,22 +1,24 @@
import { Server } from 'socket.io'
import fs from 'fs' import fs from 'fs'
import { getPublicPath } from '#application/storage'
import sharp from 'sharp' import sharp from 'sharp'
import { Tile } from '#entities/tile' import { Server } from 'socket.io'
import { CharacterGender, CharacterRace } from '#application/enums'
import { getPublicPath } from '#application/storage'
import { UUID } from '#application/types'
import { Character } from '#entities/character'
import { CharacterHair } from '#entities/characterHair'
import { CharacterType } from '#entities/characterType'
import { MapObject } from '#entities/mapObject' import { MapObject } from '#entities/mapObject'
import { SpriteAction } from '#entities/spriteAction'
import { Sprite } from '#entities/sprite' import { Sprite } from '#entities/sprite'
import { SpriteAction } from '#entities/spriteAction'
import { Tile } from '#entities/tile'
import { User } from '#entities/user'
import { Zone } from '#entities/zone' import { Zone } from '#entities/zone'
import { ZoneEffect } from '#entities/zoneEffect' import { ZoneEffect } from '#entities/zoneEffect'
import { User } from '#entities/user'
import { Character } from '#entities/character'
import CharacterTypeRepository from '#repositories/characterTypeRepository'
import CharacterHairRepository from '#repositories/characterHairRepository' import CharacterHairRepository from '#repositories/characterHairRepository'
import CharacterTypeRepository from '#repositories/characterTypeRepository'
import ZoneRepository from '#repositories/zoneRepository' import ZoneRepository from '#repositories/zoneRepository'
import { CharacterType } from '#entities/characterType'
import { CharacterGender, CharacterRace } from '#application/enums'
import { CharacterHair } from '#entities/characterHair'
import { UUID } from '#application/types'
// @TODO : Replace this with seeding // @TODO : Replace this with seeding
// https://mikro-orm.io/docs/seeding // https://mikro-orm.io/docs/seeding

View File

@ -1,4 +1,5 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import ZoneManager from '#managers/zoneManager' import ZoneManager from '#managers/zoneManager'
type CommandInput = string[] type CommandInput = string[]

View File

@ -1,10 +1,12 @@
import fs from 'fs' import fs from 'fs'
import sharp from 'sharp'
import { commandLogger } from '#application/logger'
import { Server } from 'socket.io'
import { getPublicPath } from '#application/storage'
import path from 'path' import path from 'path'
import sharp from 'sharp'
import { Server } from 'socket.io'
import { commandLogger } from '#application/logger'
import { getPublicPath } from '#application/storage'
export default class TilesCommand { export default class TilesCommand {
constructor(private readonly io: Server) {} constructor(private readonly io: Server) {}

View File

@ -1,12 +1,14 @@
import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity'
import { User } from './user' import { CharacterEquipment } from './characterEquipment'
import { Zone } from './zone'
import { CharacterType } from './characterType'
import { CharacterHair } from './characterHair' import { CharacterHair } from './characterHair'
import { CharacterItem } from './characterItem' import { CharacterItem } from './characterItem'
import { CharacterEquipment } from './characterEquipment' import { CharacterType } from './characterType'
import { Chat } from './chat' import { Chat } from './chat'
import { User } from './user'
import { Zone } from './zone'
import { BaseEntity } from '#application/base/baseEntity'
@Entity() @Entity()
export class Character extends BaseEntity { export class Character extends BaseEntity {

View File

@ -1,7 +1,9 @@
import { Entity, Enum, ManyToOne, PrimaryKey } from '@mikro-orm/core' import { Entity, Enum, ManyToOne, PrimaryKey } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity'
import { Character } from './character' import { Character } from './character'
import { CharacterItem } from './characterItem' import { CharacterItem } from './characterItem'
import { BaseEntity } from '#application/base/baseEntity'
import { CharacterEquipmentSlotType } from '#application/enums' import { CharacterEquipmentSlotType } from '#application/enums'
@Entity() @Entity()

View File

@ -1,7 +1,9 @@
import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity'
import { Character } from './character' import { Character } from './character'
import { Sprite } from './sprite' import { Sprite } from './sprite'
import { BaseEntity } from '#application/base/baseEntity'
import { CharacterGender } from '#application/enums' import { CharacterGender } from '#application/enums'
@Entity() @Entity()

View File

@ -1,8 +1,10 @@
import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity'
import { Character } from './character' import { Character } from './character'
import { Item } from './item'
import { CharacterEquipment } from './characterEquipment' import { CharacterEquipment } from './characterEquipment'
import { Item } from './item'
import { BaseEntity } from '#application/base/baseEntity'
@Entity() @Entity()
export class CharacterItem extends BaseEntity { export class CharacterItem extends BaseEntity {

View File

@ -1,7 +1,9 @@
import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity'
import { Character } from './character' import { Character } from './character'
import { Sprite } from './sprite' import { Sprite } from './sprite'
import { BaseEntity } from '#application/base/baseEntity'
import { CharacterGender, CharacterRace } from '#application/enums' import { CharacterGender, CharacterRace } from '#application/enums'
@Entity() @Entity()

View File

@ -1,8 +1,10 @@
import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity'
import { Character } from './character' import { Character } from './character'
import { Zone } from './zone' import { Zone } from './zone'
import { BaseEntity } from '#application/base/baseEntity'
@Entity() @Entity()
export class Chat extends BaseEntity { export class Chat extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,9 +1,12 @@
import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity'
import { Sprite } from './sprite'
import { CharacterItem } from './characterItem'
import { ItemType, ItemRarity } from '#application/enums'
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import { CharacterItem } from './characterItem'
import { Sprite } from './sprite'
import { BaseEntity } from '#application/base/baseEntity'
import { ItemType, ItemRarity } from '#application/enums'
import { UUID } from '#application/types' import { UUID } from '#application/types'
@Entity() @Entity()

View File

@ -1,7 +1,10 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity'
import { ZoneObject } from './zoneObject' import { ZoneObject } from './zoneObject'
import { BaseEntity } from '#application/base/baseEntity'
import { UUID } from '#application/types' import { UUID } from '#application/types'
@Entity() @Entity()

View File

@ -1,7 +1,9 @@
import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity'
import { User } from './user' import { User } from './user'
import { BaseEntity } from '#application/base/baseEntity'
@Entity() @Entity()
export class PasswordResetToken extends BaseEntity { export class PasswordResetToken extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,7 +1,10 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity'
import { SpriteAction } from './spriteAction' import { SpriteAction } from './spriteAction'
import { BaseEntity } from '#application/base/baseEntity'
import { UUID } from '#application/types' import { UUID } from '#application/types'
@Entity() @Entity()

View File

@ -1,7 +1,10 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity'
import { Sprite } from './sprite' import { Sprite } from './sprite'
import { BaseEntity } from '#application/base/baseEntity'
import { UUID } from '#application/types' import { UUID } from '#application/types'
@Entity() @Entity()

View File

@ -1,5 +1,7 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { Entity, PrimaryKey, Property } from '@mikro-orm/core' import { Entity, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity' import { BaseEntity } from '#application/base/baseEntity'
import { UUID } from '#application/types' import { UUID } from '#application/types'

View File

@ -1,8 +1,11 @@
import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity' import bcrypt from 'bcryptjs'
import { Character } from './character' import { Character } from './character'
import { PasswordResetToken } from './passwordResetToken' import { PasswordResetToken } from './passwordResetToken'
import bcrypt from 'bcryptjs'
import { BaseEntity } from '#application/base/baseEntity'
@Entity() @Entity()
export class User extends BaseEntity { export class User extends BaseEntity {

View File

@ -1,4 +1,5 @@
import { Entity, PrimaryKey, Property } from '@mikro-orm/core' import { Entity, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity' import { BaseEntity } from '#application/base/baseEntity'
@Entity() @Entity()

View File

@ -1,11 +1,13 @@
import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity'
import { Character } from './character'
import { Chat } from './chat'
import { ZoneEffect } from './zoneEffect' import { ZoneEffect } from './zoneEffect'
import { ZoneEventTile } from './zoneEventTile' import { ZoneEventTile } from './zoneEventTile'
import { ZoneEventTileTeleport } from './zoneEventTileTeleport' import { ZoneEventTileTeleport } from './zoneEventTileTeleport'
import { ZoneObject } from './zoneObject' import { ZoneObject } from './zoneObject'
import { Character } from './character'
import { Chat } from './chat' import { BaseEntity } from '#application/base/baseEntity'
@Entity() @Entity()
export class Zone extends BaseEntity { export class Zone extends BaseEntity {

View File

@ -1,7 +1,10 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity'
import { Zone } from './zone' import { Zone } from './zone'
import { BaseEntity } from '#application/base/baseEntity'
import { UUID } from '#application/types' import { UUID } from '#application/types'
@Entity() @Entity()

View File

@ -1,11 +1,14 @@
import { Entity, Enum, ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity'
import { Zone } from './zone'
import { ZoneEventTileType } from '#application/enums'
import { ZoneEventTileTeleport } from './zoneEventTileTeleport'
import { UUID } from '#application/types'
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { Entity, Enum, ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { Zone } from './zone'
import { ZoneEventTileTeleport } from './zoneEventTileTeleport'
import { BaseEntity } from '#application/base/baseEntity'
import { ZoneEventTileType } from '#application/enums'
import { UUID } from '#application/types'
@Entity() @Entity()
export class ZoneEventTile extends BaseEntity { export class ZoneEventTile extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,8 +1,11 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { Entity, ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core' import { Entity, ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity'
import { Zone } from './zone' import { Zone } from './zone'
import { ZoneEventTile } from './zoneEventTile' import { ZoneEventTile } from './zoneEventTile'
import { BaseEntity } from '#application/base/baseEntity'
import { UUID } from '#application/types' import { UUID } from '#application/types'
@Entity() @Entity()

View File

@ -1,10 +1,13 @@
import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '#application/base/baseEntity'
import { Zone } from './zone'
import { MapObject } from '#entities/mapObject'
import { UUID } from '#application/types'
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { Zone } from './zone'
import { BaseEntity } from '#application/base/baseEntity'
import { UUID } from '#application/types'
import { MapObject } from '#entities/mapObject'
//@TODO : Rename mapObject //@TODO : Rename mapObject
@Entity() @Entity()
export class ZoneObject extends BaseEntity { export class ZoneObject extends BaseEntity {

View File

@ -1,12 +1,14 @@
import { Request, Response } from 'express'
import fs from 'fs' import fs from 'fs'
import { Request, Response } from 'express'
import { BaseController } from '#application/base/baseController' import { BaseController } from '#application/base/baseController'
import { httpLogger } from '#application/logger' import { httpLogger } from '#application/logger'
import { getPublicPath } from '#application/storage' import { getPublicPath } from '#application/storage'
import { AssetData, UUID } from '#application/types'
import SpriteRepository from '#repositories/spriteRepository'
import TileRepository from '#repositories/tileRepository' import TileRepository from '#repositories/tileRepository'
import ZoneRepository from '#repositories/zoneRepository' import ZoneRepository from '#repositories/zoneRepository'
import SpriteRepository from '#repositories/spriteRepository'
import { AssetData, UUID } from '#application/types'
export class AssetsController extends BaseController { export class AssetsController extends BaseController {
/** /**

View File

@ -1,9 +1,10 @@
import jwt from 'jsonwebtoken'
import { Request, Response } from 'express' import { Request, Response } from 'express'
import jwt from 'jsonwebtoken'
import { BaseController } from '#application/base/baseController' import { BaseController } from '#application/base/baseController'
import UserService from '#services/userService'
import config from '#application/config' import config from '#application/config'
import { loginAccountSchema, registerAccountSchema, resetPasswordSchema, newPasswordSchema } from '#application/zodTypes' import { loginAccountSchema, registerAccountSchema, resetPasswordSchema, newPasswordSchema } from '#application/zodTypes'
import UserService from '#services/userService'
export class AuthController extends BaseController { export class AuthController extends BaseController {
private userService: UserService private userService: UserService

View File

@ -1,11 +1,13 @@
import fs from 'fs'
import { Request, Response } from 'express' import { Request, Response } from 'express'
import sharp from 'sharp' import sharp from 'sharp'
import fs from 'fs'
import { BaseController } from '#application/base/baseController' import { BaseController } from '#application/base/baseController'
import CharacterRepository from '#repositories/characterRepository'
import CharacterHairRepository from '#repositories/characterHairRepository'
import CharacterTypeRepository from '#repositories/characterTypeRepository'
import { getPublicPath } from '#application/storage' import { getPublicPath } from '#application/storage'
import CharacterHairRepository from '#repositories/characterHairRepository'
import CharacterRepository from '#repositories/characterRepository'
import CharacterTypeRepository from '#repositories/characterTypeRepository'
interface AvatarOptions { interface AvatarOptions {
characterTypeId: number characterTypeId: number

View File

@ -1,7 +1,8 @@
import { Application } from 'express' import { Application } from 'express'
import { AssetsController } from './controllers/assets'
import { AuthController } from './controllers/auth' import { AuthController } from './controllers/auth'
import { AvatarController } from './controllers/avatar' import { AvatarController } from './controllers/avatar'
import { AssetsController } from './controllers/assets'
export class HttpRouter { export class HttpRouter {
private readonly app: Application private readonly app: Application

View File

@ -1,6 +1,7 @@
import { TSocket } from '#application/types'
import { Server as SocketServer } from 'socket.io' import { Server as SocketServer } from 'socket.io'
import { TSocket } from '#application/types'
export default class SomeJob { export default class SomeJob {
constructor(private params: any) {} constructor(private params: any) {}

View File

@ -1,7 +1,9 @@
import * as readline from 'readline'
import * as fs from 'fs' import * as fs from 'fs'
import * as path from 'path' import * as path from 'path'
import * as readline from 'readline'
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { commandLogger } from '#application/logger' import { commandLogger } from '#application/logger'
import { getAppPath } from '#application/storage' import { getAppPath } from '#application/storage'

View File

@ -1,7 +1,8 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { appLogger } from '#application/logger' import { appLogger } from '#application/logger'
import worldService from '#services/worldService'
import worldRepository from '#repositories/worldRepository' import worldRepository from '#repositories/worldRepository'
import worldService from '#services/worldService'
class DateManager { class DateManager {
private static readonly GAME_SPEED = 8 // 24 game hours / 3 real hours private static readonly GAME_SPEED = 8 // 24 game hours / 3 real hours

View File

@ -1,11 +1,14 @@
import IORedis from 'ioredis'
import { Job, Queue, Worker } from 'bullmq'
import config from '#application/config'
import { Server as SocketServer } from 'socket.io'
import { TSocket } from '#application/types'
import { queueLogger } from '#application/logger'
import fs from 'fs' import fs from 'fs'
import { Job, Queue, Worker } from 'bullmq'
import IORedis from 'ioredis'
import { Server as SocketServer } from 'socket.io'
import config from '#application/config'
import { queueLogger } from '#application/logger'
import { getAppPath } from '#application/storage' import { getAppPath } from '#application/storage'
import { TSocket } from '#application/types'
class QueueManager { class QueueManager {
private connection!: IORedis private connection!: IORedis

View File

@ -1,4 +1,5 @@
import { User } from '@prisma/client' import { User } from '@prisma/client'
import { appLogger } from '#application/logger' import { appLogger } from '#application/logger'
type TLoggedInUsers = { type TLoggedInUsers = {

View File

@ -1,7 +1,8 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { appLogger } from '#application/logger' import { appLogger } from '#application/logger'
import worldService from '#services/worldService'
import worldRepository from '#repositories/worldRepository' import worldRepository from '#repositories/worldRepository'
import worldService from '#services/worldService'
interface WeatherState { interface WeatherState {
isRainEnabled: boolean isRainEnabled: boolean

View File

@ -1,8 +1,8 @@
import ZoneRepository from '#repositories/zoneRepository'
import { gameLogger } from '#application/logger' import { gameLogger } from '#application/logger'
import ZoneCharacter from '#models/zoneCharacter'
import LoadedZone from '#models/loadedZone'
import { Zone } from '#entities/zone' import { Zone } from '#entities/zone'
import LoadedZone from '#models/loadedZone'
import ZoneCharacter from '#models/zoneCharacter'
import ZoneRepository from '#repositories/zoneRepository'
class ZoneManager { class ZoneManager {
private readonly zones = new Map<number, LoadedZone>() private readonly zones = new Map<number, LoadedZone>()

View File

@ -1,7 +1,8 @@
import { verify } from 'jsonwebtoken' import { verify } from 'jsonwebtoken'
import { TSocket } from '#application/types'
import config from '#application/config' import config from '#application/config'
import { gameLogger } from '#application/logger' import { gameLogger } from '#application/logger'
import { TSocket } from '#application/types'
class SocketAuthenticator { class SocketAuthenticator {
private socket: TSocket private socket: TSocket

View File

@ -1,7 +1,8 @@
import zoneEventTileRepository from '#repositories/zoneEventTileRepository'
import ZoneCharacter from './zoneCharacter' import ZoneCharacter from './zoneCharacter'
import { Character } from '#entities/character' import { Character } from '#entities/character'
import { Zone } from '#entities/zone' import { Zone } from '#entities/zone'
import zoneEventTileRepository from '#repositories/zoneEventTileRepository'
class LoadedZone { class LoadedZone {
private readonly zone: Zone private readonly zone: Zone

View File

@ -1,5 +1,5 @@
import { CharacterService } from '#services/characterService'
import { Character } from '#entities/character' import { Character } from '#entities/character'
import { CharacterService } from '#services/characterService'
class ZoneCharacter { class ZoneCharacter {
public readonly character: Character public readonly character: Character

View File

@ -1,5 +1,5 @@
import { appLogger } from '#application/logger'
import { BaseRepository } from '#application/base/baseRepository' import { BaseRepository } from '#application/base/baseRepository'
import { appLogger } from '#application/logger'
import { CharacterHair } from '#entities/characterHair' import { CharacterHair } from '#entities/characterHair'
class CharacterHairRepository extends BaseRepository { class CharacterHairRepository extends BaseRepository {

View File

@ -1,5 +1,5 @@
import { appLogger } from '#application/logger'
import { BaseRepository } from '#application/base/baseRepository' import { BaseRepository } from '#application/base/baseRepository'
import { appLogger } from '#application/logger'
import { Character } from '#entities/character' import { Character } from '#entities/character'
class CharacterRepository extends BaseRepository { class CharacterRepository extends BaseRepository {

View File

@ -1,5 +1,5 @@
import { appLogger } from '#application/logger'
import { BaseRepository } from '#application/base/baseRepository' import { BaseRepository } from '#application/base/baseRepository'
import { appLogger } from '#application/logger'
import { CharacterType } from '#entities/characterType' import { CharacterType } from '#entities/characterType'
class CharacterTypeRepository extends BaseRepository { class CharacterTypeRepository extends BaseRepository {

View File

@ -1,5 +1,5 @@
import { appLogger } from '#application/logger'
import { BaseRepository } from '#application/base/baseRepository' import { BaseRepository } from '#application/base/baseRepository'
import { appLogger } from '#application/logger'
import { Chat } from '#entities/chat' import { Chat } from '#entities/chat'
class ChatRepository extends BaseRepository { class ChatRepository extends BaseRepository {

View File

@ -1,5 +1,5 @@
import { appLogger } from '#application/logger'
import { BaseRepository } from '#application/base/baseRepository' import { BaseRepository } from '#application/base/baseRepository'
import { appLogger } from '#application/logger'
import { Item } from '#entities/item' import { Item } from '#entities/item'
class ItemRepository extends BaseRepository { class ItemRepository extends BaseRepository {

View File

@ -1,5 +1,5 @@
import { appLogger } from '#application/logger'
import { BaseRepository } from '#application/base/baseRepository' // Import the global Prisma instance import { BaseRepository } from '#application/base/baseRepository' // Import the global Prisma instance
import { appLogger } from '#application/logger'
import { PasswordResetToken } from '#entities/passwordResetToken' import { PasswordResetToken } from '#entities/passwordResetToken'
class PasswordResetTokenRepository extends BaseRepository { class PasswordResetTokenRepository extends BaseRepository {

View File

@ -1,4 +1,5 @@
import { FilterValue } from '@mikro-orm/core' import { FilterValue } from '@mikro-orm/core'
import { BaseRepository } from '#application/base/baseRepository' import { BaseRepository } from '#application/base/baseRepository'
import { Sprite } from '#entities/sprite' import { Sprite } from '#entities/sprite'

View File

@ -1,9 +1,10 @@
import { FilterValue } from '@mikro-orm/core' import { FilterValue } from '@mikro-orm/core'
import { BaseRepository } from '#application/base/baseRepository' import { BaseRepository } from '#application/base/baseRepository'
import { Tile } from '#entities/tile'
import { Zone } from '#entities/zone'
import { unduplicateArray } from '#application/utilities' import { unduplicateArray } from '#application/utilities'
import { FlattenZoneArray } from '#application/zone' import { FlattenZoneArray } from '#application/zone'
import { Tile } from '#entities/tile'
import { Zone } from '#entities/zone'
class TileRepository extends BaseRepository { class TileRepository extends BaseRepository {
async getById(id: FilterValue<`${string}-${string}-${string}-${string}-${string}`>): Promise<any> { async getById(id: FilterValue<`${string}-${string}-${string}-${string}-${string}`>): Promise<any> {

View File

@ -1,5 +1,5 @@
import { appLogger } from '#application/logger'
import { BaseRepository } from '#application/base/baseRepository' import { BaseRepository } from '#application/base/baseRepository'
import { appLogger } from '#application/logger'
import { User } from '#entities/user' import { User } from '#entities/user'
class UserRepository extends BaseRepository { class UserRepository extends BaseRepository {

View File

@ -1,5 +1,5 @@
import { gameLogger } from '#application/logger'
import { BaseRepository } from '#application/base/baseRepository' import { BaseRepository } from '#application/base/baseRepository'
import { gameLogger } from '#application/logger'
import { World } from '#entities/world' import { World } from '#entities/world'
class WorldRepository extends BaseRepository { class WorldRepository extends BaseRepository {

View File

@ -1,5 +1,5 @@
import { appLogger } from '#application/logger'
import { BaseRepository } from '#application/base/baseRepository' import { BaseRepository } from '#application/base/baseRepository'
import { appLogger } from '#application/logger'
import { ZoneEventTile } from '#entities/zoneEventTile' import { ZoneEventTile } from '#entities/zoneEventTile'
class ZoneEventTileRepository extends BaseRepository { class ZoneEventTileRepository extends BaseRepository {

View File

@ -1,8 +1,8 @@
import { appLogger } from '#application/logger'
import { BaseRepository } from '#application/base/baseRepository' import { BaseRepository } from '#application/base/baseRepository'
import { appLogger } from '#application/logger'
import { Zone } from '#entities/zone'
import { ZoneEventTile } from '#entities/zoneEventTile' import { ZoneEventTile } from '#entities/zoneEventTile'
import { ZoneObject } from '#entities/zoneObject' import { ZoneObject } from '#entities/zoneObject'
import { Zone } from '#entities/zone'
class ZoneRepository extends BaseRepository { class ZoneRepository extends BaseRepository {
async getFirst(): Promise<Zone | null> { async getFirst(): Promise<Zone | null> {

View File

@ -1,21 +1,23 @@
import fs from 'fs' import fs from 'fs'
import express, { Application } from 'express'
import config from '#application/config'
import { getAppPath } from '#application/storage'
import { createServer as httpServer, Server as HTTPServer } from 'http' import { createServer as httpServer, Server as HTTPServer } from 'http'
import cors from 'cors' import cors from 'cors'
import express, { Application } from 'express'
import { Server as SocketServer } from 'socket.io' import { Server as SocketServer } from 'socket.io'
import { Authentication } from '#middleware/authentication'
import { TSocket } from '#application/types' import config from '#application/config'
import { Database } from '#application/database' import { Database } from '#application/database'
import { appLogger, watchLogs } from '#application/logger' import { appLogger, watchLogs } from '#application/logger'
import ZoneManager from '#managers/zoneManager' import { getAppPath } from '#application/storage'
import UserManager from '#managers/userManager' import { TSocket } from '#application/types'
import CommandManager from '#managers/commandManager'
import QueueManager from '#managers/queueManager'
import DateManager from '#managers/dateManager'
import WeatherManager from '#managers/weatherManager'
import { HttpRouter } from '#http/router' import { HttpRouter } from '#http/router'
import CommandManager from '#managers/commandManager'
import DateManager from '#managers/dateManager'
import QueueManager from '#managers/queueManager'
import UserManager from '#managers/userManager'
import WeatherManager from '#managers/weatherManager'
import ZoneManager from '#managers/zoneManager'
import { Authentication } from '#middleware/authentication'
export class Server { export class Server {
private readonly app: Application private readonly app: Application

View File

@ -1,14 +1,14 @@
import { AStar } from '#application/character/aStar' import { AStar } from '#application/character/aStar'
import ZoneManager from '#managers/zoneManager'
import Rotation from '#application/character/rotation' import Rotation from '#application/character/rotation'
import { appLogger, gameLogger } from '#application/logger'
import { Database } from '#application/database' import { Database } from '#application/database'
import { appLogger, gameLogger } from '#application/logger'
import { Character } from '#entities/character' import { Character } from '#entities/character'
import UserRepository from '#repositories/userRepository'
import CharacterRepository from '#repositories/characterRepository'
import CharacterHairRepository from '#repositories/characterHairRepository'
import ZoneRepository from '#repositories/zoneRepository'
import { Zone } from '#entities/zone' import { Zone } from '#entities/zone'
import ZoneManager from '#managers/zoneManager'
import CharacterHairRepository from '#repositories/characterHairRepository'
import CharacterRepository from '#repositories/characterRepository'
import UserRepository from '#repositories/userRepository'
import ZoneRepository from '#repositories/zoneRepository'
interface Position { interface Position {
x: number x: number

View File

@ -1,10 +1,11 @@
import { gameLogger } from '#application/logger'
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { gameLogger } from '#application/logger'
import { TSocket } from '#application/types' import { TSocket } from '#application/types'
import ChatRepository from '#repositories/chatRepository'
import { Chat } from '#entities/chat' import { Chat } from '#entities/chat'
import ZoneRepository from '#repositories/zoneRepository'
import CharacterRepository from '#repositories/characterRepository' import CharacterRepository from '#repositories/characterRepository'
import ChatRepository from '#repositories/chatRepository'
import ZoneRepository from '#repositories/zoneRepository'
class ChatService { class ChatService {
async sendZoneMessage(io: Server, socket: TSocket, message: string, characterId: number, zoneId: number): Promise<boolean> { async sendZoneMessage(io: Server, socket: TSocket, message: string, characterId: number, zoneId: number): Promise<boolean> {

View File

@ -1,5 +1,5 @@
import passwordResetTokenRepository from '#repositories/passwordResetTokenRepository'
import { appLogger } from '#application/logger' import { appLogger } from '#application/logger'
import passwordResetTokenRepository from '#repositories/passwordResetTokenRepository'
class PasswordResetTokenService { class PasswordResetTokenService {
/** /**

View File

@ -1,13 +1,15 @@
import bcrypt from 'bcryptjs' import bcrypt from 'bcryptjs'
import UserRepository from '#repositories/userRepository'
import PasswordResetTokenRepository from '#repositories/passwordResetTokenRepository'
import config from '#application/config'
import NodeMailer from 'nodemailer' import NodeMailer from 'nodemailer'
import { httpLogger } from '#application/logger'
import PasswordResetTokenService from './passwordResetTokenService' // @TODO: Correctly implement this import PasswordResetTokenService from './passwordResetTokenService' // @TODO: Correctly implement this
import { User } from '#entities/user'
import config from '#application/config'
import { Database } from '#application/database' import { Database } from '#application/database'
import { httpLogger } from '#application/logger'
import { PasswordResetToken } from '#entities/passwordResetToken' import { PasswordResetToken } from '#entities/passwordResetToken'
import { User } from '#entities/user'
import PasswordResetTokenRepository from '#repositories/passwordResetTokenRepository'
import UserRepository from '#repositories/userRepository'
/** /**
* User service * User service

View File

@ -1,6 +1,6 @@
import { gameLogger } from '#application/logger' import { gameLogger } from '#application/logger'
import WorldRepository from '#repositories/worldRepository'
import { World } from '#entities/world' import { World } from '#entities/world'
import WorldRepository from '#repositories/worldRepository'
class WorldService { class WorldService {
async update(worldData: Partial<World>): Promise<boolean> { async update(worldData: Partial<World>): Promise<boolean> {

View File

@ -1,8 +1,9 @@
import { ExtendedCharacter, TSocket } from '#application/types'
import { Server } from 'socket.io' import { Server } from 'socket.io'
import ZoneManager from '#managers/zoneManager'
import { gameLogger } from '#application/logger' import { gameLogger } from '#application/logger'
import { ExtendedCharacter, TSocket } from '#application/types'
import { ZoneEventTileTeleport } from '#entities/zoneEventTileTeleport' import { ZoneEventTileTeleport } from '#entities/zoneEventTileTeleport'
import ZoneManager from '#managers/zoneManager'
export class ZoneEventTileService { export class ZoneEventTileService {
public async handleTeleport(io: Server, socket: TSocket, character: ExtendedCharacter, teleport: ZoneEventTileTeleport): Promise<void> { public async handleTeleport(io: Server, socket: TSocket, character: ExtendedCharacter, teleport: ZoneEventTileTeleport): Promise<void> {

View File

@ -1,7 +1,8 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types' import { TSocket } from '#application/types'
import characterHairRepository from '#repositories/characterHairRepository'
import { CharacterHair } from '#entities/characterHair' import { CharacterHair } from '#entities/characterHair'
import characterHairRepository from '#repositories/characterHairRepository'
interface IPayload {} interface IPayload {}

View File

@ -1,10 +1,11 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import CharacterRepository from '#repositories/characterRepository'
import { gameLogger } from '#application/logger' import { gameLogger } from '#application/logger'
import { TSocket } from '#application/types'
import ZoneManager from '#managers/zoneManager' import ZoneManager from '#managers/zoneManager'
import { CharacterService } from '#services/characterService'
import CharacterHairRepository from '#repositories/characterHairRepository' import CharacterHairRepository from '#repositories/characterHairRepository'
import CharacterRepository from '#repositories/characterRepository'
import { CharacterService } from '#services/characterService'
interface CharacterConnectPayload { interface CharacterConnectPayload {
characterId: number characterId: number
@ -33,7 +34,7 @@ export default class CharacterConnectEvent {
return return
} }
const character = await CharacterRepository.getByUserAndId(this.socket.userId!, characterId) const character = await CharacterRepository.getByUserAndId(this.socket.userId, characterId)
if (!character) { if (!character) {
this.emitError('Character not found or does not belong to this user') this.emitError('Character not found or does not belong to this user')

View File

@ -1,10 +1,11 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { ZodError } from 'zod'
import { gameLogger } from '#application/logger'
import { TSocket } from '#application/types' import { TSocket } from '#application/types'
import { ZCharacterCreate } from '#application/zodTypes'
import { Character } from '#entities/character' import { Character } from '#entities/character'
import CharacterRepository from '#repositories/characterRepository' import CharacterRepository from '#repositories/characterRepository'
import { ZCharacterCreate } from '#application/zodTypes'
import { gameLogger } from '#application/logger'
import { ZodError } from 'zod'
import UserRepository from '#repositories/userRepository' import UserRepository from '#repositories/userRepository'
export default class CharacterCreateEvent { export default class CharacterCreateEvent {

View File

@ -1,9 +1,10 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types' import { TSocket } from '#application/types'
import CharacterRepository from '#repositories/characterRepository'
import { CharacterService } from '#services/characterService'
import { Character } from '#entities/character' import { Character } from '#entities/character'
import { Zone } from '#entities/zone' import { Zone } from '#entities/zone'
import CharacterRepository from '#repositories/characterRepository'
import { CharacterService } from '#services/characterService'
type TypePayload = { type TypePayload = {
characterId: number characterId: number
@ -26,12 +27,12 @@ export default class CharacterDeleteEvent {
private async handleCharacterDelete(data: TypePayload, callback: (response: TypeResponse) => void): Promise<any> { private async handleCharacterDelete(data: TypePayload, callback: (response: TypeResponse) => void): Promise<any> {
try { try {
const character = await CharacterRepository.getByUserAndId(this.socket.userId!, data.characterId!) const character = await CharacterRepository.getByUserAndId(this.socket.userId!, data.characterId)
if (character) { if (character) {
await character.delete() await character.delete()
} }
const characters: Character[] = (await CharacterRepository.getByUserId(this.socket.userId!)) as Character[] const characters: Character[] = (await CharacterRepository.getByUserId(this.socket.userId!))
this.socket.emit('character:list', characters) this.socket.emit('character:list', characters)
} catch (error: any) { } catch (error: any) {

View File

@ -1,8 +1,9 @@
import { Socket, Server } from 'socket.io' import { Socket, Server } from 'socket.io'
import { TSocket } from '#application/types'
import CharacterRepository from '#repositories/characterRepository'
import { gameLogger } from '#application/logger' import { gameLogger } from '#application/logger'
import { TSocket } from '#application/types'
import { Character } from '#entities/character' import { Character } from '#entities/character'
import CharacterRepository from '#repositories/characterRepository'
export default class CharacterListEvent { export default class CharacterListEvent {
constructor( constructor(

View File

@ -1,8 +1,9 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import { getArgs, isCommand } from '#application/chat' import { getArgs, isCommand } from '#application/chat'
import CharacterRepository from '#repositories/characterRepository'
import { gameLogger } from '#application/logger' import { gameLogger } from '#application/logger'
import { TSocket } from '#application/types'
import CharacterRepository from '#repositories/characterRepository'
type TypePayload = { type TypePayload = {
message: string message: string

View File

@ -1,9 +1,10 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import { getArgs, isCommand } from '#application/chat' import { getArgs, isCommand } from '#application/chat'
import CharacterRepository from '#repositories/characterRepository'
import { gameLogger } from '#application/logger' import { gameLogger } from '#application/logger'
import { TSocket } from '#application/types'
import DateManager from '#managers/dateManager' import DateManager from '#managers/dateManager'
import CharacterRepository from '#repositories/characterRepository'
type TypePayload = { type TypePayload = {
message: string message: string

View File

@ -1,11 +1,12 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import { getArgs, isCommand } from '#application/chat' import { getArgs, isCommand } from '#application/chat'
import ZoneRepository from '#repositories/zoneRepository'
import { gameLogger, gameMasterLogger } from '#application/logger' import { gameLogger, gameMasterLogger } from '#application/logger'
import { TSocket } from '#application/types'
import ZoneManager from '#managers/zoneManager' import ZoneManager from '#managers/zoneManager'
import ZoneCharacter from '#models/zoneCharacter'
import zoneManager from '#managers/zoneManager' import zoneManager from '#managers/zoneManager'
import ZoneCharacter from '#models/zoneCharacter'
import ZoneRepository from '#repositories/zoneRepository'
type TypePayload = { type TypePayload = {
message: string message: string

View File

@ -1,9 +1,10 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import { isCommand } from '#application/chat' import { isCommand } from '#application/chat'
import CharacterRepository from '#repositories/characterRepository'
import { gameLogger } from '#application/logger' import { gameLogger } from '#application/logger'
import { TSocket } from '#application/types'
import WeatherManager from '#managers/weatherManager' import WeatherManager from '#managers/weatherManager'
import CharacterRepository from '#repositories/characterRepository'
type TypePayload = { type TypePayload = {
message: string message: string

View File

@ -1,9 +1,10 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import { isCommand } from '#application/chat' import { isCommand } from '#application/chat'
import CharacterRepository from '#repositories/characterRepository'
import { gameLogger } from '#application/logger' import { gameLogger } from '#application/logger'
import { TSocket } from '#application/types'
import WeatherManager from '#managers/weatherManager' import WeatherManager from '#managers/weatherManager'
import CharacterRepository from '#repositories/characterRepository'
type TypePayload = { type TypePayload = {
message: string message: string

View File

@ -1,9 +1,10 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import ZoneRepository from '#repositories/zoneRepository'
import { isCommand } from '#application/chat' import { isCommand } from '#application/chat'
import { gameLogger } from '#application/logger' import { gameLogger } from '#application/logger'
import { TSocket } from '#application/types'
import ZoneManager from '#managers/zoneManager' import ZoneManager from '#managers/zoneManager'
import ZoneRepository from '#repositories/zoneRepository'
import ChatService from '#services/chatService' import ChatService from '#services/chatService'
type TypePayload = { type TypePayload = {

View File

@ -1,6 +1,7 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import { gameLogger } from '#application/logger' import { gameLogger } from '#application/logger'
import { TSocket } from '#application/types'
import ZoneManager from '#managers/zoneManager' import ZoneManager from '#managers/zoneManager'
export default class DisconnectEvent { export default class DisconnectEvent {

View File

@ -1,6 +1,7 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import prisma from '#application/prisma' import prisma from '#application/prisma'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository' import characterRepository from '#repositories/characterRepository'
export default class CharacterHairCreateEvent { export default class CharacterHairCreateEvent {

View File

@ -1,8 +1,9 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import prisma from '#application/prisma'
import characterRepository from '#repositories/characterRepository'
import { gameMasterLogger } from '#application/logger' import { gameMasterLogger } from '#application/logger'
import prisma from '#application/prisma'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository'
interface IPayload { interface IPayload {
id: number id: number

View File

@ -1,9 +1,10 @@
import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import { CharacterHair } from '@prisma/client' import { CharacterHair } from '@prisma/client'
import { Server } from 'socket.io'
import { gameMasterLogger } from '#application/logger' import { gameMasterLogger } from '#application/logger'
import characterRepository from '#repositories/characterRepository' import { TSocket } from '#application/types'
import characterHairRepository from '#repositories/characterHairRepository' import characterHairRepository from '#repositories/characterHairRepository'
import characterRepository from '#repositories/characterRepository'
interface IPayload {} interface IPayload {}

View File

@ -1,9 +1,10 @@
import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import prisma from '#application/prisma'
import characterRepository from '#repositories/characterRepository'
import { CharacterGender, CharacterRace } from '@prisma/client' import { CharacterGender, CharacterRace } from '@prisma/client'
import { Server } from 'socket.io'
import { gameMasterLogger } from '#application/logger' import { gameMasterLogger } from '#application/logger'
import prisma from '#application/prisma'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository'
type Payload = { type Payload = {
id: number id: number

View File

@ -1,8 +1,9 @@
import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import prisma from '#application/prisma'
import characterRepository from '#repositories/characterRepository'
import { CharacterGender, CharacterRace } from '@prisma/client' import { CharacterGender, CharacterRace } from '@prisma/client'
import { Server } from 'socket.io'
import prisma from '#application/prisma'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository'
export default class CharacterTypeCreateEvent { export default class CharacterTypeCreateEvent {
constructor( constructor(

View File

@ -1,6 +1,7 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import { gameMasterLogger } from '#application/logger' import { gameMasterLogger } from '#application/logger'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository' import characterRepository from '#repositories/characterRepository'
import CharacterTypeRepository from '#repositories/characterTypeRepository' import CharacterTypeRepository from '#repositories/characterTypeRepository'

View File

@ -1,8 +1,9 @@
import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import { CharacterType } from '@prisma/client' import { CharacterType } from '@prisma/client'
import characterRepository from '#repositories/characterRepository' import { Server } from 'socket.io'
import { gameMasterLogger } from '#application/logger' import { gameMasterLogger } from '#application/logger'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository'
import CharacterTypeRepository from '#repositories/characterTypeRepository' import CharacterTypeRepository from '#repositories/characterTypeRepository'
interface IPayload {} interface IPayload {}

View File

@ -1,8 +1,9 @@
import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import prisma from '#application/prisma'
import characterRepository from '#repositories/characterRepository'
import { CharacterGender, CharacterRace } from '@prisma/client' import { CharacterGender, CharacterRace } from '@prisma/client'
import { Server } from 'socket.io'
import prisma from '#application/prisma'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository'
type Payload = { type Payload = {
id: number id: number

View File

@ -1,6 +1,7 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import prisma from '#application/prisma' import prisma from '#application/prisma'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository' import characterRepository from '#repositories/characterRepository'
export default class ItemCreateEvent { export default class ItemCreateEvent {

View File

@ -1,8 +1,9 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import prisma from '#application/prisma'
import characterRepository from '#repositories/characterRepository'
import { gameMasterLogger } from '#application/logger' import { gameMasterLogger } from '#application/logger'
import prisma from '#application/prisma'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository'
interface IPayload { interface IPayload {
id: string id: string

View File

@ -1,8 +1,9 @@
import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import { Item } from '@prisma/client' import { Item } from '@prisma/client'
import characterRepository from '#repositories/characterRepository' import { Server } from 'socket.io'
import { gameMasterLogger } from '#application/logger' import { gameMasterLogger } from '#application/logger'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository'
import itemRepository from '#repositories/itemRepository' import itemRepository from '#repositories/itemRepository'
interface IPayload {} interface IPayload {}

View File

@ -1,9 +1,10 @@
import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import prisma from '#application/prisma'
import characterRepository from '#repositories/characterRepository'
import { ItemType, ItemRarity } from '@prisma/client' import { ItemType, ItemRarity } from '@prisma/client'
import { Server } from 'socket.io'
import { gameMasterLogger } from '#application/logger' import { gameMasterLogger } from '#application/logger'
import prisma from '#application/prisma'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository'
type Payload = { type Payload = {
id: string id: string

View File

@ -1,8 +1,9 @@
import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import { Object } from '@prisma/client' import { Object } from '@prisma/client'
import ObjectRepository from '#repositories/objectRepository' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository' import characterRepository from '#repositories/characterRepository'
import ObjectRepository from '#repositories/objectRepository'
interface IPayload {} interface IPayload {}

View File

@ -1,10 +1,12 @@
import fs from 'fs' import fs from 'fs'
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import prisma from '#application/prisma'
import characterRepository from '#repositories/characterRepository'
import { getPublicPath } from '#application/storage'
import { gameLogger, gameMasterLogger } from '#application/logger' import { gameLogger, gameMasterLogger } from '#application/logger'
import prisma from '#application/prisma'
import { getPublicPath } from '#application/storage'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository'
interface IPayload { interface IPayload {
object: string object: string

View File

@ -1,6 +1,7 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import prisma from '#application/prisma' import prisma from '#application/prisma'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository' import characterRepository from '#repositories/characterRepository'
type Payload = { type Payload = {

View File

@ -1,12 +1,15 @@
import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import { writeFile } from 'node:fs/promises'
import fs from 'fs/promises' import fs from 'fs/promises'
import prisma from '#application/prisma' import { writeFile } from 'node:fs/promises'
import sharp from 'sharp' import sharp from 'sharp'
import characterRepository from '#repositories/characterRepository' import { Server } from 'socket.io'
import { gameMasterLogger } from '#application/logger' import { gameMasterLogger } from '#application/logger'
import prisma from '#application/prisma'
import { getPublicPath } from '#application/storage' import { getPublicPath } from '#application/storage'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository'
interface IObjectData { interface IObjectData {
[key: string]: Buffer [key: string]: Buffer

View File

@ -1,10 +1,13 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import prisma from '#application/prisma'
import CharacterRepository from '#repositories/characterRepository'
import { gameMasterLogger } from '#application/logger'
import type { Prisma } from '@prisma/client' import type { Prisma } from '@prisma/client'
import { gameMasterLogger } from '#application/logger'
import prisma from '#application/prisma'
import { TSocket } from '#application/types'
import CharacterRepository from '#repositories/characterRepository'
interface CopyPayload { interface CopyPayload {
id: string id: string
} }

View File

@ -1,9 +1,11 @@
import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import fs from 'fs/promises' import fs from 'fs/promises'
import { Server } from 'socket.io'
import prisma from '#application/prisma' import prisma from '#application/prisma'
import characterRepository from '#repositories/characterRepository'
import { getPublicPath } from '#application/storage' import { getPublicPath } from '#application/storage'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository'
export default class SpriteCreateEvent { export default class SpriteCreateEvent {
constructor( constructor(

View File

@ -1,9 +1,11 @@
import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import fs from 'fs' import fs from 'fs'
import prisma from '#application/prisma'
import { Server } from 'socket.io'
import { gameMasterLogger } from '#application/logger' import { gameMasterLogger } from '#application/logger'
import prisma from '#application/prisma'
import { getPublicPath } from '#application/storage' import { getPublicPath } from '#application/storage'
import { TSocket } from '#application/types'
import CharacterRepository from '#repositories/characterRepository' import CharacterRepository from '#repositories/characterRepository'
type Payload = { type Payload = {

View File

@ -1,8 +1,9 @@
import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import { Sprite } from '@prisma/client' import { Sprite } from '@prisma/client'
import SpriteRepository from '#repositories/spriteRepository' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository' import characterRepository from '#repositories/characterRepository'
import SpriteRepository from '#repositories/spriteRepository'
interface IPayload {} interface IPayload {}

View File

@ -1,12 +1,15 @@
import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import prisma from '#application/prisma'
import type { Prisma, SpriteAction } from '@prisma/client'
import { writeFile, mkdir } from 'node:fs/promises' import { writeFile, mkdir } from 'node:fs/promises'
import sharp from 'sharp' import sharp from 'sharp'
import { getPublicPath } from '#application/storage' import { Server } from 'socket.io'
import CharacterRepository from '#repositories/characterRepository'
import type { Prisma, SpriteAction } from '@prisma/client'
import { gameMasterLogger } from '#application/logger' import { gameMasterLogger } from '#application/logger'
import prisma from '#application/prisma'
import { getPublicPath } from '#application/storage'
import { TSocket } from '#application/types'
import CharacterRepository from '#repositories/characterRepository'
// Constants // Constants
const ISOMETRIC_CONFIG = { const ISOMETRIC_CONFIG = {

View File

@ -1,10 +1,12 @@
import fs from 'fs/promises' import fs from 'fs/promises'
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import prisma from '#application/prisma'
import characterRepository from '#repositories/characterRepository'
import { gameMasterLogger } from '#application/logger' import { gameMasterLogger } from '#application/logger'
import prisma from '#application/prisma'
import { getPublicPath } from '#application/storage' import { getPublicPath } from '#application/storage'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository'
type Payload = { type Payload = {
id: string id: string

View File

@ -1,8 +1,9 @@
import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import { Tile } from '@prisma/client' import { Tile } from '@prisma/client'
import TileRepository from '#repositories/tileRepository' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository' import characterRepository from '#repositories/characterRepository'
import TileRepository from '#repositories/tileRepository'
interface IPayload {} interface IPayload {}

View File

@ -1,6 +1,7 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types'
import prisma from '#application/prisma' import prisma from '#application/prisma'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository' import characterRepository from '#repositories/characterRepository'
type Payload = { type Payload = {

Some files were not shown because too many files have changed in this diff Show More