gatito de poca edad  marron con negro, con un letrero delante que dice provider as value on nest

No todo se trata de lógica compleja en los providers

Hasta ahora sabemos como implementar providers que son practicamente la lógica que utiliza los controller retornar una respuesta. 

Muchas veces esta estos providers son clases que nest necesita instancear para acceder a los métodos que contiene el provider. 

Pero que pasa si lo que deseamos es usar un simple json, esto es un valor estático, no necesita ser instanceado. Tambien podemos instancear nuestra propia clase y pasar el valor de la clase instanceada. 

Como ya puedes tener una pista de que puede tener useValue podemos definir que: se usa cuando quieres inyectar un valor fijo, ya sea un objeto, constante, configuración o un mock. Es útil cuando no necesitas lógica de creación (como con useFactory) ni una clase (como con useClass) segun la info dada por la IA.

Analicemos varios ejemplos: 

// config.constants.ts
export const APP_CONFIG = 'APP_CONFIG';
export const staticConfig = {
   apiUrl: 'https://api.miapp.com',
   timeout: 5000,

}

Si leemos bien este código nos damos cuenta que tenemos una constante y un json, ambos valores estaticos por lo que bien podemos usar useValue como provider ya este archivo no tiene lógica. 

// app.module.ts
{
provide: APP_CONFIG,
useValue: staticConfig,
}

De esta misma manera podemos implementar el segundo ejemplo en donde pasamos a useValue una clase ya instanceada por lo que nest no tiene la nececidad de instancearla en RT. 

const logger = new Logger('CustomLogger');
{
   provide: 'LOGGER',
   useValue: logger,
}

Ya tengo el valor listo y no necesito que Nest lo construya.” es lo que debes tener presente a la hora de saber si es useValue como provider.