Skip to content
Permalink
Browse files

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 angular/angular-cli#14888

PR Close #31333
  • Loading branch information...
alan-agius4 authored and alxhub committed Jun 28, 2019
1 parent b7e3d80 commit 80ccd6c19b14130ae6f97db89c8931fa2afce05f
@@ -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] = [];
@@ -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', () => {

0 comments on commit 80ccd6c

Please sign in to comment.
You can’t perform that action at this time.