diff --git a/lib/common/core.helpers.ts b/lib/common/core.helpers.ts index 703f339272..e327abf2ff 100644 --- a/lib/common/core.helpers.ts +++ b/lib/common/core.helpers.ts @@ -1,7 +1,7 @@ import { InjectionToken } from '@angular/core'; import { getTestBed } from '@angular/core/testing'; -import { jitReflector } from './core.reflect'; +import coreReflectJit from './core.reflect.jit'; import { Type } from './core.types'; export const getTestBedInjection = (token: Type | InjectionToken): I | undefined => { @@ -110,7 +110,7 @@ export const extendClass = (base: Type): Type => { parameters: any[][]; }> = extendClassicClass(base); - const parameters = jitReflector.parameters(base); + const parameters = coreReflectJit().parameters(base); if (parameters.length) { Object.defineProperty(child, 'parameters', { value: [...parameters], diff --git a/lib/common/core.reflect.directive-resolve.ts b/lib/common/core.reflect.directive-resolve.ts index 95fb64d4ba..7507dc2fc7 100644 --- a/lib/common/core.reflect.directive-resolve.ts +++ b/lib/common/core.reflect.directive-resolve.ts @@ -1,6 +1,6 @@ import { Directive } from '@angular/core'; -import { directiveResolver } from './core.reflect'; import coreReflectBody from './core.reflect.body'; +import coreReflectDirective from './core.reflect.directive'; -export default (def: any): Directive => coreReflectBody((arg: any) => directiveResolver.resolve(arg))(def); +export default (def: any): Directive => coreReflectBody((arg: any) => coreReflectDirective().resolve(arg))(def); diff --git a/lib/common/core.reflect.directive.ts b/lib/common/core.reflect.directive.ts new file mode 100644 index 0000000000..af65f5c7c7 --- /dev/null +++ b/lib/common/core.reflect.directive.ts @@ -0,0 +1,12 @@ +import { MockDirectiveResolver } from '@angular/compiler/testing'; + +import coreReflectJit from './core.reflect.jit'; +import ngMocksUniverse from './ng-mocks-universe'; + +export default (): MockDirectiveResolver => { + if (!ngMocksUniverse.global.has(MockDirectiveResolver)) { + ngMocksUniverse.global.set(MockDirectiveResolver, new MockDirectiveResolver(coreReflectJit())); + } + + return ngMocksUniverse.global.get(MockDirectiveResolver); +}; diff --git a/lib/common/core.reflect.jit.ts b/lib/common/core.reflect.jit.ts new file mode 100644 index 0000000000..5fe490aa3f --- /dev/null +++ b/lib/common/core.reflect.jit.ts @@ -0,0 +1,10 @@ +import { JitReflector } from './jit-reflector'; +import ngMocksUniverse from './ng-mocks-universe'; + +export default (): JitReflector => { + if (!ngMocksUniverse.global.has(JitReflector)) { + ngMocksUniverse.global.set(JitReflector, new JitReflector()); + } + + return ngMocksUniverse.global.get(JitReflector); +}; diff --git a/lib/common/core.reflect.module-resolve.ts b/lib/common/core.reflect.module-resolve.ts index a2e0faea7a..b6bba0b53b 100644 --- a/lib/common/core.reflect.module-resolve.ts +++ b/lib/common/core.reflect.module-resolve.ts @@ -1,6 +1,6 @@ import { NgModule } from '@angular/core'; -import { ngModuleResolver } from './core.reflect'; import coreReflectBody from './core.reflect.body'; +import coreReflectModule from './core.reflect.module'; -export default (def: any): NgModule => coreReflectBody((arg: any) => ngModuleResolver.resolve(arg))(def); +export default (def: any): NgModule => coreReflectBody((arg: any) => coreReflectModule().resolve(arg))(def); diff --git a/lib/common/core.reflect.module.ts b/lib/common/core.reflect.module.ts new file mode 100644 index 0000000000..09441df15e --- /dev/null +++ b/lib/common/core.reflect.module.ts @@ -0,0 +1,12 @@ +import { MockNgModuleResolver } from '@angular/compiler/testing'; + +import coreReflectJit from './core.reflect.jit'; +import ngMocksUniverse from './ng-mocks-universe'; + +export default (): MockNgModuleResolver => { + if (!ngMocksUniverse.global.has(MockNgModuleResolver)) { + ngMocksUniverse.global.set(MockNgModuleResolver, new MockNgModuleResolver(coreReflectJit())); + } + + return ngMocksUniverse.global.get(MockNgModuleResolver); +}; diff --git a/lib/common/core.reflect.pipe-resolve.ts b/lib/common/core.reflect.pipe-resolve.ts index a9834eacd1..65c5020e7d 100644 --- a/lib/common/core.reflect.pipe-resolve.ts +++ b/lib/common/core.reflect.pipe-resolve.ts @@ -1,6 +1,6 @@ import { Pipe } from '@angular/core'; -import { pipeResolver } from './core.reflect'; import coreReflectBody from './core.reflect.body'; +import coreReflectPipe from './core.reflect.pipe'; -export default (def: any): Pipe => coreReflectBody((arg: any) => pipeResolver.resolve(arg))(def); +export default (def: any): Pipe => coreReflectBody((arg: any) => coreReflectPipe().resolve(arg))(def); diff --git a/lib/common/core.reflect.pipe.ts b/lib/common/core.reflect.pipe.ts new file mode 100644 index 0000000000..c793e18061 --- /dev/null +++ b/lib/common/core.reflect.pipe.ts @@ -0,0 +1,12 @@ +import { MockPipeResolver } from '@angular/compiler/testing'; + +import coreReflectJit from './core.reflect.jit'; +import ngMocksUniverse from './ng-mocks-universe'; + +export default (): MockPipeResolver => { + if (!ngMocksUniverse.global.has(MockPipeResolver)) { + ngMocksUniverse.global.set(MockPipeResolver, new MockPipeResolver(coreReflectJit())); + } + + return ngMocksUniverse.global.get(MockPipeResolver); +}; diff --git a/lib/common/core.reflect.ts b/lib/common/core.reflect.ts deleted file mode 100644 index dc309cc27d..0000000000 --- a/lib/common/core.reflect.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { MockDirectiveResolver, MockNgModuleResolver, MockPipeResolver } from '@angular/compiler/testing'; - -import { JitReflector } from './jit-reflector'; - -export const jitReflector = new JitReflector(); -export const directiveResolver = new MockDirectiveResolver(jitReflector); -export const pipeResolver = new MockPipeResolver(jitReflector); -export const ngModuleResolver = new MockNgModuleResolver(jitReflector); diff --git a/lib/common/func.is-ng-type.ts b/lib/common/func.is-ng-type.ts index 84a746e528..d82b759027 100644 --- a/lib/common/func.is-ng-type.ts +++ b/lib/common/func.is-ng-type.ts @@ -1,5 +1,7 @@ -import { jitReflector } from './core.reflect'; +import coreReflectJit from './core.reflect.jit'; import { Type } from './core.types'; export const isNgType = (declaration: Type, type: string): boolean => - jitReflector.annotations(declaration).some(annotation => annotation.ngMetadataName === type); + coreReflectJit() + .annotations(declaration) + .some(annotation => annotation.ngMetadataName === type); diff --git a/lib/mock-builder/promise/get-override-meta.ts b/lib/mock-builder/promise/get-override-meta.ts index 73455c8611..efd6d50170 100644 --- a/lib/mock-builder/promise/get-override-meta.ts +++ b/lib/mock-builder/promise/get-override-meta.ts @@ -1,14 +1,14 @@ import { Directive } from '@angular/core'; -import { directiveResolver } from '../../common/core.reflect'; +import coreReflectDirective from '../../common/core.reflect.directive'; import { isNgDef } from '../../common/func.is-ng-def'; export default (value: any): Directive | undefined => { if (isNgDef(value, 'c')) { - return directiveResolver.resolve(value); + return coreReflectDirective().resolve(value); } if (isNgDef(value, 'd')) { - return directiveResolver.resolve(value); + return coreReflectDirective().resolve(value); } return undefined; diff --git a/lib/mock-builder/promise/get-root-provider-parameters.ts b/lib/mock-builder/promise/get-root-provider-parameters.ts index 55a924f464..14d1e9ad12 100644 --- a/lib/mock-builder/promise/get-root-provider-parameters.ts +++ b/lib/mock-builder/promise/get-root-provider-parameters.ts @@ -1,4 +1,4 @@ -import { jitReflector } from '../../common/core.reflect'; +import coreReflectJit from '../../common/core.reflect.jit'; import { NG_MOCKS_ROOT_PROVIDERS } from '../../common/core.tokens'; import ngMocksUniverse from '../../common/ng-mocks-universe'; @@ -17,7 +17,7 @@ export default (mockDef: BuilderData['mockDef']): Set => { for (const def of bucket) { addDefToRootProviderParameters(parameters, mockDef, def); - for (const decorators of jitReflector.parameters(def)) { + for (const decorators of coreReflectJit().parameters(def)) { const provide: any = extractDep(decorators); if (skipRootProviderDependency(provide)) { continue; diff --git a/lib/mock-module/mock-module.spec.ts b/lib/mock-module/mock-module.spec.ts index 81cd9280d8..8a9e0e7758 100644 --- a/lib/mock-module/mock-module.spec.ts +++ b/lib/mock-module/mock-module.spec.ts @@ -19,7 +19,7 @@ import { import { BrowserModule, By } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { ngModuleResolver } from '../common/core.reflect'; +import coreReflectModule from '../common/core.reflect.module'; import ngMocksUniverse from '../common/ng-mocks-universe'; import { MockComponent } from '../mock-component/mock-component'; import { MockRender } from '../mock-render/mock-render'; @@ -242,7 +242,7 @@ describe('mockProvider', () => { it('should skip multi tokens in a mock module', () => { const mock = MockModule(CustomTokenModule); - const def = ngModuleResolver.resolve(mock); + const def = coreReflectModule().resolve(mock); expect(def.providers).toEqual([ { deps: [Injector], diff --git a/tests/issue-145/components.spec.ts b/tests/issue-145/components.spec.ts index 966d0ffe0b..a376f76ab7 100644 --- a/tests/issue-145/components.spec.ts +++ b/tests/issue-145/components.spec.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms'; import { MockComponent } from 'ng-mocks'; -import { directiveResolver } from 'ng-mocks/dist/lib/common/core.reflect'; +import coreReflectDirective from 'ng-mocks/dist/lib/common/core.reflect.directive'; @Component({ selector: 'component', @@ -38,7 +38,7 @@ export class ComponentValidator {} describe('issue-145:components', () => { it('does not add NG_VALUE_ACCESSOR to components', () => { const mock = MockComponent(ComponentDefault); - const { providers } = directiveResolver.resolve(mock); + const { providers } = coreReflectDirective().resolve(mock); expect(providers).toEqual([ { provide: ComponentDefault, @@ -49,7 +49,7 @@ describe('issue-145:components', () => { it('adds NG_VALUE_ACCESSOR to components that provide it', () => { const mock = MockComponent(ComponentValueAccessor); - const { providers } = directiveResolver.resolve(mock); + const { providers } = coreReflectDirective().resolve(mock); expect(providers).toEqual([ { provide: ComponentValueAccessor, @@ -65,7 +65,7 @@ describe('issue-145:components', () => { it('respects NG_VALIDATORS too', () => { const mock = MockComponent(ComponentValidator); - const { providers } = directiveResolver.resolve(mock); + const { providers } = coreReflectDirective().resolve(mock); expect(providers).toEqual([ { provide: ComponentValidator, diff --git a/tests/issue-145/directives.spec.ts b/tests/issue-145/directives.spec.ts index 934146ea70..5695187e9c 100644 --- a/tests/issue-145/directives.spec.ts +++ b/tests/issue-145/directives.spec.ts @@ -1,7 +1,7 @@ import { Directive } from '@angular/core'; import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms'; import { MockDirective } from 'ng-mocks'; -import { directiveResolver } from 'ng-mocks/dist/lib/common/core.reflect'; +import coreReflectDirective from 'ng-mocks/dist/lib/common/core.reflect.directive'; @Directive({ selector: 'directive', @@ -36,7 +36,7 @@ export class DirectiveValidator {} describe('issue-145:directives', () => { it('does not add NG_VALUE_ACCESSOR to directives', () => { const mock = MockDirective(DirectiveDefault); - const { providers } = directiveResolver.resolve(mock); + const { providers } = coreReflectDirective().resolve(mock); expect(providers).toEqual([ { provide: DirectiveDefault, @@ -47,7 +47,7 @@ describe('issue-145:directives', () => { it('adds NG_VALUE_ACCESSOR to directives that provide it', () => { const mock = MockDirective(DirectiveValueAccessor); - const { providers } = directiveResolver.resolve(mock); + const { providers } = coreReflectDirective().resolve(mock); expect(providers).toEqual([ { provide: DirectiveValueAccessor, @@ -63,7 +63,7 @@ describe('issue-145:directives', () => { it('respects NG_VALIDATORS too', () => { const mock = MockDirective(DirectiveValidator); - const { providers } = directiveResolver.resolve(mock); + const { providers } = coreReflectDirective().resolve(mock); expect(providers).toEqual([ { provide: DirectiveValidator,