mirror of
https://github.com/angular/angular.git
synced 2026-09-14 13:54:52 +08:00
fix(core): handle undefined meta in injectArgs (#31333)
In the recent versions of the CLI we introduced a ctor downleveler tranformer for VE JIT builds based on the one found in tsickle, to fix the TDZ issue of `forwardRef`. However this caused a regression as the injector is not handling that a position `paramType` can be undefined. Which is bubbled down to https://github.com/angular/angular/blob/c6b29f4c6d23b1510db3434cb030203d5bdea119/packages/core/src/di/injector_compatibility.ts#L162 and will crash https://github.com/angular/angular/blob/c6b29f4c6d23b1510db3434cb030203d5bdea119/packages/core/src/di/injector_compatibility.ts#L174-L186 Fixes https://github.com/angular/angular-cli/issues/14888 PR Close #31333
This commit is contained in:
@@ -64,7 +64,7 @@ export class ReflectionCapabilities implements PlatformReflectionCapabilities {
|
|||||||
// migration, but this can be revisited.
|
// migration, but this can be revisited.
|
||||||
if (typeof paramTypes === 'undefined') {
|
if (typeof paramTypes === 'undefined') {
|
||||||
result[i] = [];
|
result[i] = [];
|
||||||
} else if (paramTypes[i] != Object) {
|
} else if (paramTypes[i] && paramTypes[i] != Object) {
|
||||||
result[i] = [paramTypes[i]];
|
result[i] = [paramTypes[i]];
|
||||||
} else {
|
} else {
|
||||||
result[i] = [];
|
result[i] = [];
|
||||||
|
|||||||
@@ -109,6 +109,16 @@ class TestObj {
|
|||||||
class ForwardDep {}
|
class ForwardDep {}
|
||||||
expect(reflector.parameters(Forward)).toEqual([[ForwardDep]]);
|
expect(reflector.parameters(Forward)).toEqual([[ForwardDep]]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should not return undefined types for downleveled types', () => {
|
||||||
|
class Dep {}
|
||||||
|
|
||||||
|
class TestService {
|
||||||
|
constructor() {}
|
||||||
|
static ctorParameters = () => [{type: undefined, decorators: []}, {type: Dep}];
|
||||||
|
}
|
||||||
|
expect(reflector.parameters(TestService)).toEqual([[], [Dep]]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('propMetadata', () => {
|
describe('propMetadata', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user