Skip to content

WebSocketServer decorator gives unexpected value #2934

Open
@bryanrp

Description

@bryanrp

Is there an existing issue for this?

  • I have searched the existing issues

Current behavior

@WebSocketServer decorator returns a Namespace (socket.io) instead of Server (socket.io) when @WebSocketGateway is called with namespace option set. Without the namespace option, it returns a Server, as expected.

@WebSocketGateway()
export class AppGateway {
  @WebSocketServer()
  server: Server;

  @SubscribeMessage('server')
  handleServer() {
    return this.server instanceof Server; // true, as expected
  }
}
@WebSocketGateway({ namespace: 'foo' })
export class FooGateway {
  @WebSocketServer()
  server: Server;

  @SubscribeMessage('server')
  handleServer() {
    return this.server instanceof Server; // false, not as expected
  }
}

Minimum reproduction code

https://github.com/bryanrp/nestjs-issue-websocket

Steps to reproduce

  1. npm install
  2. npm run test:e2e

Expected behavior

All tests are expected to pass. The failed test shows that @WebSocketServer does not return a Server (socket.io) object.

Package

  • I don't know. Or some 3rd-party package
  • @nestjs/common
  • @nestjs/core
  • @nestjs/microservices
  • @nestjs/platform-express
  • @nestjs/platform-fastify
  • @nestjs/platform-socket.io
  • @nestjs/platform-ws
  • @nestjs/testing
  • @nestjs/websockets
  • Other (see below)

Other package

No response

NestJS version

^10.0.0

Packages versions

"dependencies": {
  "@nestjs/common": "^10.0.0",
  "@nestjs/core": "^10.0.0",
  "@nestjs/platform-express": "^10.0.0",
  "@nestjs/platform-socket.io": "^10.3.0",
  "@nestjs/websockets": "^10.3.0",
  "reflect-metadata": "^0.1.13",
  "rxjs": "^7.8.1",
  "socket.io": "^4.7.2"
},
"devDependencies": {
  "@nestjs/cli": "^10.0.0",
  "@nestjs/schematics": "^10.0.0",
  "@nestjs/testing": "^10.0.0",
  "@types/express": "^4.17.17",
  "@types/jest": "^29.5.2",
  "@types/node": "^20.3.1",
  "@types/supertest": "^2.0.12",
  "@typescript-eslint/eslint-plugin": "^6.0.0",
  "@typescript-eslint/parser": "^6.0.0",
  "eslint": "^8.42.0",
  "eslint-config-prettier": "^9.0.0",
  "eslint-plugin-prettier": "^5.0.0",
  "jest": "^29.5.0",
  "prettier": "^3.0.0",
  "socket.io-client": "^4.7.2",
  "source-map-support": "^0.5.21",
  "supertest": "^6.3.3",
  "ts-jest": "^29.1.0",
  "ts-loader": "^9.4.3",
  "ts-node": "^10.9.1",
  "tsconfig-paths": "^4.2.0",
  "typescript": "^5.1.3"
},

Node.js version

18.17.0

In which operating systems have you tested?

  • macOS
  • Windows
  • Linux

Other

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions