• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

toonvanstrijp / nestjs-i18n / 24854003834

23 Apr 2026 07:14PM UTC coverage: 82.563% (-1.2%) from 83.75%
24854003834

push

github

web-flow
feat: add websocket support for language resolution (#757)

435 of 577 branches covered (75.39%)

Branch coverage included in aggregate %.

2 of 12 new or added lines in 4 files covered. (16.67%)

976 of 1132 relevant lines covered (86.22%)

139.72 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

68.42
/src/resolvers/header.resolver.ts
1
import { I18nResolver } from '../index';
2
import { Injectable, ExecutionContext, Logger } from '@nestjs/common';
29✔
3
import { I18nResolverOptions } from '../decorators';
29✔
4

5
@Injectable()
6
export class HeaderResolver implements I18nResolver {
29✔
7
  private logger = new Logger('I18nService');
16✔
8
  constructor(
9
    @I18nResolverOptions()
10
    private keys: string[] = [],
16!
11
  ) {}
12

13
  resolve(context: ExecutionContext): Promise<string | string[] | undefined> {
14
    let req: any;
15

16
    switch (context.getType() as string) {
328!
17
      case 'http':
18
        req = context.switchToHttp().getRequest();
310✔
19
        break;
310✔
20
      case 'ws': {
NEW
21
        const client: any = context.switchToWs().getClient();
×
NEW
22
        req = client?.handshake ?? client?.upgradeReq ?? client?.request ?? client;
×
NEW
23
        break;
×
24
      }
25
      case 'graphql':
26
        [, , { req }] = context.getArgs();
18✔
27
        break;
18✔
28
    }
29

30
    let lang = undefined;
328✔
31

32
    if (req) {
328!
33
      for (const key of this.keys) {
328✔
34
        if (key === 'accept-language') {
328!
35
          this.logger.warn(
×
36
            'HeaderResolver does not support RFC4647 Accept-Language header. Please use AcceptLanguageResolver instead.',
37
          );
38
        }
39
        if (req.headers !== undefined && req.headers[key] !== undefined) {
328✔
40
          lang = req.headers[key];
165✔
41
          break;
165✔
42
        }
43
      }
44
    }
45

46
    return lang;
328✔
47
  }
48
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc