NestJS 8 ¿Qué hay de nuevo?

Hace muy poco se ha anunciado el lanzamiento oficial de NestJS 8.

Este es un lanzamiento importante que abarca mejoras en toda toda la plataforma, incluido el framework, numerosas mejoras en los paquetes nestjs/graphql y nestjs/config, CLI y se ha actualizado toda la documentación.

Esta versión trae muchas características geniales y mejoras tan esperadas. Hay demasiados para enumerar aquí, pero echemos un vistazo de alto nivel a algunos de los mejores.

Si quieres ver la lista completa, click aquí: https://github.com/nestjs/nest/releases

API versioning

Tradicionalmente, en las aplicaciones Node.js (y NestJS), el control de versiones de API nunca ha tenido una "forma correcta" de realizarse, ya que hay muchas formas de lograrlo.

En v8, podrás tener diferentes versiones de tus controladores o rutas individuales ejecutándose dentro de la misma aplicación. También se admiten 3 tipos diferentes de control de versiones: control de versiones de URI, control de versiones de encabezado y control de versiones de tipo de medio.

@Controller({
  path: 'cats',
  version: '1', // 👈
})
export class CatsController {
  @Get()
  findAll(): string {
    return 'This action returns all cats for version 1';
  }
}

Lazy-loading modules

Por defecto, los módulos se cargan activamente, lo que significa que tan pronto como se carga la aplicación, al igual que todos los módulos, sean o no necesarios de inmediato. Si bien esto está bien para la mayoría de las aplicaciones, puede convertirse en un cuello de botella para las aplicaciones/workers que se ejecutan en el entorno sin servidor, donde la latencia de inicio es crucial.

La carga "lazy loading" puede ayudar a disminuir el tiempo de arranque al cargar solo los módulos requeridos por la invocación de la función sin servidor específica. Además, también puede cargar otros módulos de forma asíncrona una vez que la función sin servidor esté "caliente" para acelerar aún más el tiempo de arranque para llamadas posteriores (conocido como: deferred modules registration).

Template literal types and ConfigService

Con los tipos de literales de plantilla (template literals) ahora disponibles en TypeScript v4.2, podemos implementar una nueva función que nos permite inferir el tipo de propiedad de un objeto de configuración personalizado anidado, incluso cuando se usa la notación de puntos, como se muestra aquí:

constructor(private configService: ConfigService<{ database: { host: string } }>) {
  const dbHost = this.configService.get('database.host', { infer: true });
  // typeof dbHost === "string"
}

Upgraded dependencies

Nest v8 finalmente ofrece soporte para Socket.io 4.0 y NATS v2 que no eran compatibles con v7. Además, Nest v8 utilizará la última versión de RxJS (v7).

Más y mejor en el post oficial de Nest: https://trilon.io/blog/announcing-nestjs-8-whats-new