Skip to content

Release v1.4.0

Latest

Choose a tag to compare

@Danrley-Ruan-Saquetti Danrley-Ruan-Saquetti released this 22 Jul 14:31

Suporte a dependências circulares

Novidades

  • forwardRef(() => Token) — adia a leitura da referência de classe para o momento do uso, resolvendo o caso em que um import circular entre módulos deixa o token undefined na avaliação do decorator. Aceito em parâmetro de construtor, propriedade, parâmetro de método e também em token / useClass no register.
// b.service.ts
export class ServiceB {
  @Inject(forwardRef(() => ServiceA)) a: ServiceA
}
  • Ciclos de resolução agora funcionam quando pelo menos um dos lados injeta por propriedade: o container expõe a instância parcial durante a construção (a.b.a === a). Antes, qualquer ciclo estourava com RangeError: Maximum call stack size exceeded.
  • CircularDependencyInjectionException (código CIRCULAR_DEPENDENCY) para o ciclo construtor ↔ construtor, com o caminho do ciclo na mensagem (ServiceA -> ServiceB -> ServiceA) em vez do estouro de pilha.
  • Novos exports: forwardRef, resolveForwardRef, isForwardRef, ForwardReference e o tipo DependencyTokenInput.

Correções de comportamento

  • Import circular sem forwardRef não injeta mais null silenciosamente — passa a lançar exceção tipada apontando o parâmetro ou a propriedade. Parâmetro que nunca foi decorado continua recebendo null, como antes.
  • Token undefined em propriedade lançava um TypeError cru (Cannot read properties of undefined); agora lança CircularDependencyInjectionException. getTokenName(undefined) deixou de estourar.

Nota de tipos

getInjectTokensParams e getInjectTokensProperties passam a devolver DependencyTokenInput (a metadata guarda o ForwardReference cru, sem desembrulhar). Quem precisar do token concreto aplica resolveForwardRef. É mudança apenas de tipo, sem alteração de runtime.