Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

@Injectable deps entries written as [new Optional(), new Self(), Dep] inject the array as the token

Fechada
#626 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
52/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
rust, typescript
Domínio
compilers

Direção de pesquisa

Start with injectable/decorator.rs and trace how extract_dependency handles each deps entry; compare it with ngtsc’s getDep in compiler-cli/src/ngtsc/annotations/src/injectable.ts. Run the named ngtsc_spec.ts case, including the array-literal token scenario. Done means flagged array entries produce the token and injection flags expected by ngc across the listed forms.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

Summary

In @Injectable({ useFactory | useClass, deps }), a dep written as flags plus a token ([new Optional(), new Self(), Dep]) compiles as one token: the whole array goes to ɵɵinject, so injection fails at runtime. ngc reads it as the token Dep with the Optional and Self flags.

Found by running Angular's ngtsc spec ngtsc_spec.ts: "should compile Injectables with providedIn and factory with deps with array literal tokens" against oxc.

Reproduction

import {Injectable, Optional, Self} from '@angular/core';

@Injectable()
export class Dep {}

@Injectable({
  providedIn: 'root',
  useFactory: (dep: Dep) => new Service(dep),
  deps: [[new Optional(), new Self(), Dep]],
})
export class Service {
  constructor(dep: Dep) {}
}
Actual
__ngConditionalFactory__ = ((dep) => new Service(dep))(i0.ɵɵinject([new Optional(), new Self(), Dep]));
Expected (ngc)
__ngConditionalFactory__ = ((dep) => new Service(dep))(i0.ɵɵinject(Dep, 10));

useClass + deps, the bare form ([Optional, SkipSelf, Dep]) and new Inject(TOKEN) hit the same problem.

Cause

extract_dependency (injectable/decorator.rs) turns each deps element straight into a token. It has no port of ngtsc's getDep (compiler-cli/src/ngtsc/annotations/src/injectable.ts), which splits an array entry into a token and Inject/Optional/Self/SkipSelf flags.

Linguagem predominante
Rust
Estrelas
244
Forks
26
Merge médio
23h 41min
PRs com merge (30d)
106

Preparar o ambiente

Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de voidzero-dev/oxc-angular-compiler

Todas as issues de voidzero-dev/oxc-angular-compiler

Issues semelhantes

Mais issues de Rust

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.