All files / lib/resolvers accept-language.resolver.ts

93.75% Statements 15/16
85.71% Branches 6/7
100% Functions 2/2
92.86% Lines 13/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36  5x 5x       5x               14x   12x 12x 12x   2x 2x         14x     14x 6x   8x      
import { I18nResolver } from '../index';
import { Injectable, ExecutionContext } from '@nestjs/common';
import { pick } from 'accept-language-parser';
import { I18nService } from '../services/i18n.service';
 
@Injectable()
export class AcceptLanguageResolver implements I18nResolver {
  constructor() {}
 
  async resolve(
    context: ExecutionContext,
  ): Promise<string | string[] | undefined> {
    let req, service: I18nService;
 
    switch (context.getType() as string) {
      case 'http':
        req = context.switchToHttp().getRequest();
        service = req.i18nService;
        break;
      case 'graphql':
        [, , { req, i18nService: service }] = context.getArgs();
        break;
      default:
        return undefined;
    }
 
    const lang = req.raw
      ? req.raw.headers['accept-language']
      : req.headers['accept-language'];
    if (lang) {
      return pick(await service.getSupportedLanguages(), lang);
    }
    return lang;
  }
}