Tracking: evaluate decorator metadata values imported from other files
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
- 難度
- 5/5
- 預估耗時
- 一週以上
- 新手友好度
- 35/100
- Issue 類型
- 功能
- 描述清晰度
- 需要釐清
- 活躍度
- 活躍
- 技術堆疊
- angular, rust, typescript
- 領域
- compilers
研究方向
Start in crates/oxc_angular_compiler/src/directive/decorator.rs around the reported error and read directive/evaluator.rs. Compare the resolver and dependency handling in component/cross_file_elision.rs with TransformOptions::resolved_imports and the Vite transform path. A complete direction should define how imported literal values are evaluated, dependent files are re-transformed, and unsupported cases retain a clear fallback.
由索引模型根據 Issue 內容生成。
描述
OXC compiles one file at a time. ngtsc has the whole program, so its static evaluator follows an import into the other file and reads the value. OXC can't do that. Since #493 (fix/decorator-metadata-inputs-outputs) and #495 (feat/decorator-metadata-queries), OXC reports a clear error in these cases. Main silently emits wrong metadata.
Error: @Directive.inputs depends on 'INPUTS', which is imported from another module. OXC compiles one file at a time and cannot evaluate values from other files.
This issue tracks the gap and possible ways to close it.
Affected forms (other.ts exports a plain const)
| Source | ngtsc 22.1.7 | OXC #504 tip | OXC main |
|---|---|---|---|
@Directive({inputs: INPUTS}), INPUTS = ['a'] |
inputs: { a: "a" } |
error | input dropped (no inputs) |
@Directive({inputs: [NAME]}), NAME = 'a' |
inputs: { a: "a" } |
error | input dropped |
@Directive({outputs: OUTPUTS}), OUTPUTS = ['o: oo'] |
outputs: { o: "oo" } |
error | output dropped |
@Input(OPTS) a, OPTS = {alias: 'b', required: true} |
inputs: { a: [0, "b", "a"] } ("required": true in .d.ts) |
error | inputs:{a:"a"} (alias and required ignored) |
@Input({alias: ALIAS}) a, ALIAS = 'b' |
inputs: { a: [0, "b", "a"] } |
error | inputs:{a:"a"} |
@Output(ONAME) o, ONAME = 'oo' |
outputs: { o: "oo" } |
error | outputs:{o:"o"} |
@ViewChild('a', {static: STATIC}), STATIC = true |
ɵɵviewQuery(_c0, 7) |
error | ɵɵviewQuery(_c0,5) (not static) |
@Input({transform: T}), T a function in other.ts |
.d.ts: ngAcceptInputType_a: string |
ngAcceptInputType_a: unknown |
unknown |
@ViewChild(SEL), SEL = 'a' |
ɵɵviewQuery(_c0, 5), _c0 = ["a"] |
ɵɵviewQuery(SEL,5) |
same as tip |
The last row works at runtime (ɵɵviewQuery accepts a string predicate), so only the shape differs.
These are not gaps, because ngtsc rejects them too and the tip matches it:
@ViewChild('a', QOPTS)→NG1001: @ViewChild options must be an object literalqueries: Q→NG1010: Decorator queries metadata must be an object literalinput(0, {alias: ALIAS})→NG1010: Alias needs to be a string that is statically analyzable.(OXC misses this one; it's in the diagnostics issue)
Example:
// test.ts
import {Directive} from '@angular/core';
import {INPUTS} from './other';
@Directive({selector: '[d]', inputs: INPUTS})
export class D { a: any; }
// other.ts
export const INPUTS = ['a'];
Where
- The error comes from
crates/oxc_angular_compiler/src/directive/decorator.rs(~L706). The static evaluator isdirective/evaluator.rs. Both are in the stack.
Possible approaches (not decided)
- Resolver hook from the Vite plugin.
transformAngularFiletakes a callback, or a precomputed map, that returns the value of an imported binding (specifier+exportName). The plugin resolves with Vite's resolver and reads the file. There is already a similar input,TransformOptions::resolved_imports(identifier → path), which only rewrites import paths today. - Reuse
component/cross_file_elision.rs. Behind thecross_file_elisionfeature (off by default, "intended for compare test purposes only") it already resolves imports withoxc_resolver(tsconfig paths included), parses the target withoxc_parser, and walks re-exports. It could be extended to evaluate exportedconstinitializers and feed the result to the evaluator. - Leave it as is. Keep the error and document the workaround: inline the value, or declare it in the same file.
For 1 and 2: the importing file has to be re-transformed when the other file changes. TransformResult::dependencies exists today for template and style files, and the Vite plugin links some of them to this.addWatchFile. A dependency on another file's value would need the same kind of wiring. Cycles, re-exports, export *, values that are not literals, and .d.ts-only packages need a defined fallback (keep today's error).
- 主要語言
- Rust
- 星號
- 244
- 分支
- 26
- 平均合併
- 1 天 14 小時
- 30 天內合併 PR
- 77
環境準備
這個專案沒有提供開發容器、Dockerfile 或貢獻指南,環境需要你自己搭建:先看它的 README,通用步驟見我們的新手貢獻指南。
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
voidzero-dev/oxc-angular-compiler 的其他 Issue
-
Support useDefineForClassFields: false (Class Field Lowering)可能已有人在做 關聯的 PR 仍在進行中或已合併。 未關閉
難度 5/5 一週以上 新手友好度 35/100
voidzero-dev/oxc-angular-compiler#73 · 11 則留言 ·
維護者通常 1 天內回覆
-
Angular 21.2.0 + @oxc-angular/vite 0.0.7 SSR runtime parity regressions (RouterLinkActive, Forms DI, Apollo DI) require app-level shims可能重新可做 @Brooooooklyn 於 235 天前認領,目前沒有進行中的 PR。 未關閉
voidzero-dev/oxc-angular-compiler#61 · 已指派 1 人 ·
維護者通常 1 天內回覆
-
Angular 21.2.0 + @oxc-angular/vite 0.0.7 SSR: AngularNodeAppEngine is unusable (missing app-engine manifest)可能重新可做 @Brooooooklyn 於 235 天前認領,目前沒有進行中的 PR。 未關閉
voidzero-dev/oxc-angular-compiler#60 · 4 則留言 · 已指派 1 人 ·
維護者通常 1 天內回覆
查看 voidzero-dev/oxc-angular-compiler 的全部 Issue
相似的 Issue
-
Small glitch未關閉priority: medium
難度 2/5 1-3 小時 新手友好度 66/100
storytold/photocraft#9538 ·
維護者通常 1 天內回覆
-
bug P2 rust
難度 2/5 1-3 小時 新手友好度 82/100
維護者通常 1 天內回覆
-
enhancement
難度 2/5 1-3 小時 新手友好度 72/100
jscott3201/rusty-bacnet#2085 ·
維護者通常 1 天內回覆
-
area:tag area:tag---json---markdown--n bug factory:dogfood factory:triaged persona:scripter platform:linux-cloud priority:p3 type:bug
難度 2/5 1-3 小時 新手友好度 74/100
gitbutlerapp/grit#1940 · 1 則留言 ·
維護者通常 1 天內回覆
-
Inconsistent case in names for Windows installation packages compared to all other assets可能已有人在做 關聯的 PR 仍在進行中或已合併。 未關閉area:ui bug in progress needs-triage
難度 1/5 1 小時以內 新手友好度 65/100
bherbruck/solvecraft#6769 · 2 則留言 ·