Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

unit-test builder (Vitest, 22.2.0 OXC linker): ReferenceError on class referenced by name before its own declaration in a partially-compiled npm library

オープン
#34,198 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
48/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
活発
技術スタック
angular, typescript

調査の方向性

Start with the @angular/build:unit-test builder and the emitted node_modules/@openng/optimus-ui/fesm2022/openng-optimus-ui-cascadeselect.mjs file, focusing on the OXC-based Angular linker handling of the partial declarations for CascadeSelectSub and CascadeSelect. Compare this path with the classic Karma pipeline. Done means the affected import graph loads without the ReferenceError and the unit-test suite reports its tests instead of zero.

索引モデルが issue の本文から書いたものです。

説明

area: @angular/build gemini-triaged
Command

test

Is this a regression?

Not sure — this may be a regression introduced by the linker rewrite in 22.2.0 ("migrate Angular Linker to oxc-parser and magic-string"), since I have not tested this with 22.1.x.

The previous version in which this bug was not present was

No response

Description

When running ng test with the @angular/build:unit-test builder (Vitest runner) on Angular CLI / @angular/build 22.2.0, several test files fail to load at all (0 tests reported, whole suite crashes) with:

ReferenceError: Cannot access 'CascadeSelect' before initialization
at CascadeSelectSub.<static_initializer> node_modules/@openng/src/cascadeselect/cascadeselect.ts:131:30

I traced this to the actual shipped file (the path above is a sourcemap reference, not a real file on disk):
node_modules/@openng/optimus-ui/fesm2022/openng-optimus-ui-cascadeselect.mjs

In that file, CascadeSelectSub is declared at line 176, and its static Ivy partial declaration at line 274 includes:

static ɵfac = i0.ɵɵngDeclareFactory({ ..., type: CascadeSelectSub, deps: [{ token: CascadeSelect }], target: i0.ɵɵFactoryTarget.Component });

CascadeSelect (the referenced class) is not declared until line 452, further down in the same file. Since this is emitted as a literal class declaration (temporal dead zone applies), referencing the identifier CascadeSelect before its declaration executes throws a ReferenceError — unless the Angular linker processes this partial-compilation output (ɵɵngDeclareFactory, ɵɵngDeclareComponent) into a fully-linked form first, which is presumably not order-sensitive.

This same package builds and tests fine under the classic Karma + @angular-devkit/build-angular pipeline, which suggests the linker is applied correctly there but not (or not correctly) for this specific cross-class-reference pattern under the unit-test builder in 22.2.0.

Minimal Reproduction

I don't have an isolated reproduction yet, but you've provided the full trace and the exact line of the affected packet.

Exception or Error
ReferenceError: Cannot access 'CascadeSelect' before initialization
❯ CascadeSelectSub.<static_initializer> node_modules/@openng/src/cascadeselect/cascadeselect.ts:131:30
❯ node_modules/@openng/src/cascadeselect/cascadeselect.ts:131:39

(Note: the path shown is from the package's sourcemap; the real file evaluated is `node_modules/@openng/optimus-ui/fesm2022/openng-optimus-ui-cascadeselect.mjs`.)
Your Environment
Angular CLI: 22.2.0
@angular/build: 22.2.0
Vitest: 5.0.2
Node: v24.21.0
OS: Windows
Anything else relevant?
  • The affected npm package is @openng/optimus-ui (latest version at time of reporting).
  • The broken class is CascadeSelect / CascadeSelectSub, distributed in Ivy partial-compilation format (ɵɵngDeclareComponent, ɵɵngDeclareFactory).
  • CascadeSelectSub is declared earlier in the file than CascadeSelect, and its factory's deps array references CascadeSelect by identifier without going through forwardRef.
  • This surfaced right after upgrading to 22.2.0, which per the changelog migrated the Angular Linker to oxc-parser/magic-string and included several linker-related fixes in the same release (syntax corruption, parenthesized expressions, source mapping). This may be an edge case not yet covered by the new OXC-based linker implementation.
  • Affects every test file whose import graph pulls in this component (via a shared header/footer module), causing the whole suite (not just one test) to fail to load — reported as "(0 test)" by Vitest.
主要言語
TypeScript
スター
27k
フォーク
11.8k
平均マージ
21時間 31分
マージ済み PR(30日)
168

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

angular/angular-cli のほかの issue

angular/angular-cli の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。