feat(ivy): require 'token' for ngInjectableDef (#30855)

The compiler generates a 'token' field when it emits an ngInjectableDef,
but this field was not required by defineInjectable or the InjectableDef
interface, nor was it added by InjectionToken.

This commit makes 'token' required and adds it where missing.

PR Close #30855
This commit is contained in:
Alex Rickabaugh
2019-06-07 10:12:07 -07:00
committed by Andrew Kushnir
parent b0866769b0
commit a4b4f35533
16 changed files with 77 additions and 14 deletions

View File

@ -13,6 +13,7 @@ import {expect} from '@angular/platform-browser/testing/src/matchers';
describe('InjectorDef-based createInjector()', () => {
class CircularA {
static ngInjectableDef = ɵɵdefineInjectable({
token: CircularA,
providedIn: null,
factory: () => ɵɵinject(CircularB),
});
@ -20,6 +21,7 @@ describe('InjectorDef-based createInjector()', () => {
class CircularB {
static ngInjectableDef = ɵɵdefineInjectable({
token: CircularB,
providedIn: null,
factory: () => ɵɵinject(CircularA),
});
@ -27,6 +29,7 @@ describe('InjectorDef-based createInjector()', () => {
class Service {
static ngInjectableDef = ɵɵdefineInjectable({
token: Service,
providedIn: null,
factory: () => new Service(),
});
@ -34,6 +37,7 @@ describe('InjectorDef-based createInjector()', () => {
class OptionalService {
static ngInjectableDef = ɵɵdefineInjectable({
token: OptionalService,
providedIn: null,
factory: () => new OptionalService(),
});
@ -56,6 +60,7 @@ describe('InjectorDef-based createInjector()', () => {
constructor(readonly service: Service) {}
static ngInjectableDef = ɵɵdefineInjectable({
token: ServiceWithDep,
providedIn: null,
factory: () => new ServiceWithDep(ɵɵinject(Service)),
});
@ -65,6 +70,7 @@ describe('InjectorDef-based createInjector()', () => {
constructor(@Optional() readonly service: OptionalService|null) {}
static ngInjectableDef = ɵɵdefineInjectable({
token: ServiceWithOptionalDep,
providedIn: null,
factory: () => new ServiceWithOptionalDep(ɵɵinject(OptionalService, InjectFlags.Optional)),
});
@ -74,6 +80,7 @@ describe('InjectorDef-based createInjector()', () => {
constructor(readonly service: Service) {}
static ngInjectableDef = ɵɵdefineInjectable({
token: ServiceWithMissingDep,
providedIn: null,
factory: () => new ServiceWithMissingDep(ɵɵinject(Service)),
});
@ -83,6 +90,7 @@ describe('InjectorDef-based createInjector()', () => {
constructor(readonly locale: string[]) {}
static ngInjectableDef = ɵɵdefineInjectable({
token: ServiceWithMultiDep,
providedIn: null,
factory: () => new ServiceWithMultiDep(ɵɵinject(LOCALE)),
});
@ -90,6 +98,7 @@ describe('InjectorDef-based createInjector()', () => {
class ServiceTwo {
static ngInjectableDef = ɵɵdefineInjectable({
token: ServiceTwo,
providedIn: null,
factory: () => new ServiceTwo(),
});
@ -98,6 +107,7 @@ describe('InjectorDef-based createInjector()', () => {
let deepServiceDestroyed = false;
class DeepService {
static ngInjectableDef = ɵɵdefineInjectable({
token: DeepService,
providedIn: null,
factory: () => new DeepService(),
});
@ -108,6 +118,7 @@ describe('InjectorDef-based createInjector()', () => {
let eagerServiceCreated: boolean = false;
class EagerService {
static ngInjectableDef = ɵɵdefineInjectable({
token: EagerService,
providedIn: undefined,
factory: () => new EagerService(),
});
@ -203,6 +214,7 @@ describe('InjectorDef-based createInjector()', () => {
let scopedServiceDestroyed = false;
class ScopedService {
static ngInjectableDef = ɵɵdefineInjectable({
token: ScopedService,
providedIn: Module,
factory: () => new ScopedService(),
});
@ -212,6 +224,7 @@ describe('InjectorDef-based createInjector()', () => {
class WrongScopeService {
static ngInjectableDef = ɵɵdefineInjectable({
token: WrongScopeService,
providedIn: OtherModule,
factory: () => new WrongScopeService(),
});