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 c6b29f4c6d/packages/core/src/di/injector_compatibility.ts (L162) and will crash c6b29f4c6d/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:
Alan 2019-06-28 13:14:47 +02:00 committed by Alex Rickabaugh
parent dd36f3ac99
commit f83dfd6f5a
2 changed files with 11 additions and 1 deletions

View File

@ -64,7 +64,7 @@ export class ReflectionCapabilities implements PlatformReflectionCapabilities {
// migration, but this can be revisited.
if (typeof paramTypes === 'undefined') {
result[i] = [];
} else if (paramTypes[i] != Object) {
} else if (paramTypes[i] && paramTypes[i] != Object) {
result[i] = [paramTypes[i]];
} else {
result[i] = [];

View File

@ -109,6 +109,16 @@ class TestObj {
class 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', () => {