diff --git a/integration/inspector/e2e/fixtures/post-init-graph.json b/integration/inspector/e2e/fixtures/post-init-graph.json index 9e384a127e5..be476d57e32 100644 --- a/integration/inspector/e2e/fixtures/post-init-graph.json +++ b/integration/inspector/e2e/fixtures/post-init-graph.json @@ -60,10 +60,10 @@ "sourceModuleName": "InternalCoreModule", "durable": false, "static": true, - "scope": 0, "transient": false, "exported": true, - "token": "ExternalContextCreator" + "token": "ExternalContextCreator", + "initTime": 0 } }, "208171089": { @@ -800,10 +800,10 @@ "sourceModuleName": "InternalCoreModule", "durable": false, "static": true, - "scope": 0, "transient": false, "exported": true, - "token": "ModulesContainer" + "token": "ModulesContainer", + "initTime": 0 } }, "-326832201": { @@ -816,10 +816,10 @@ "sourceModuleName": "InternalCoreModule", "durable": false, "static": true, - "scope": 0, "transient": false, "exported": true, - "token": "HttpAdapterHost" + "token": "HttpAdapterHost", + "initTime": 0 } }, "-702581189": { @@ -848,10 +848,10 @@ "sourceModuleName": "InternalCoreModule", "durable": false, "static": true, - "scope": 0, "transient": false, "exported": true, - "token": "SerializedGraph" + "token": "SerializedGraph", + "initTime": 0 } }, "-1251270035": { diff --git a/integration/inspector/e2e/fixtures/pre-init-graph.json b/integration/inspector/e2e/fixtures/pre-init-graph.json index 2152f9a5e87..7f35f11538f 100644 --- a/integration/inspector/e2e/fixtures/pre-init-graph.json +++ b/integration/inspector/e2e/fixtures/pre-init-graph.json @@ -60,10 +60,10 @@ "sourceModuleName": "InternalCoreModule", "durable": false, "static": true, - "scope": 0, "transient": false, "exported": true, - "token": "ExternalContextCreator" + "token": "ExternalContextCreator", + "initTime": 0 } }, "208171089": { @@ -784,10 +784,10 @@ "sourceModuleName": "InternalCoreModule", "durable": false, "static": true, - "scope": 0, "transient": false, "exported": true, - "token": "ModulesContainer" + "token": "ModulesContainer", + "initTime": 0 } }, "-326832201": { @@ -800,10 +800,10 @@ "sourceModuleName": "InternalCoreModule", "durable": false, "static": true, - "scope": 0, "transient": false, "exported": true, - "token": "HttpAdapterHost" + "token": "HttpAdapterHost", + "initTime": 0 } }, "-702581189": { @@ -832,10 +832,10 @@ "sourceModuleName": "InternalCoreModule", "durable": false, "static": true, - "scope": 0, "transient": false, "exported": true, - "token": "SerializedGraph" + "token": "SerializedGraph", + "initTime": 0 } }, "-1251270035": { diff --git a/package.json b/package.json index 4f1fb0ef409..8536bc226b2 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "test:dev": "mocha -w --watch-files \"packages\" packages/**/*.spec.ts", "pretest:cov": "npm run clean", "test:cov": "nyc mocha packages/**/*.spec.ts --reporter spec", - "test:integration": "mocha \"integration/*/{,!(node_modules)/**/}/*.spec.ts\"", + "test:integration": "mocha --reporter-option maxDiffSize=0 \"integration/*/{,!(node_modules)/**/}/*.spec.ts\"", "test:docker:up": "docker-compose -f integration/docker-compose.yml up -d", "test:docker:down": "docker-compose -f integration/docker-compose.yml down", "lint": "concurrently 'npm run lint:packages' 'npm run lint:integration' 'npm run lint:spec'", diff --git a/packages/common/module-utils/configurable-module.builder.ts b/packages/common/module-utils/configurable-module.builder.ts index dc2f8eec694..29a31eb04b9 100644 --- a/packages/common/module-utils/configurable-module.builder.ts +++ b/packages/common/module-utils/configurable-module.builder.ts @@ -209,7 +209,7 @@ export class ConfigurableModuleBuilder< const providers: Array = [ { provide: self.options.optionsInjectionToken, - useValue: this.omitExtras(options, self.extras), + useFactory: () => this.omitExtras(options, self.extras), }, ]; if (self.options.alwaysTransient) { diff --git a/packages/core/injector/internal-core-module/internal-core-module-factory.ts b/packages/core/injector/internal-core-module/internal-core-module-factory.ts index 7abf2766a57..5635a5abaab 100644 --- a/packages/core/injector/internal-core-module/internal-core-module-factory.ts +++ b/packages/core/injector/internal-core-module/internal-core-module-factory.ts @@ -45,15 +45,15 @@ export class InternalCoreModuleFactory { return InternalCoreModule.register([ { provide: ExternalContextCreator, - useValue: ExternalContextCreator.fromContainer(container), + useFactory: () => ExternalContextCreator.fromContainer(container), }, { provide: ModulesContainer, - useValue: container.getModules(), + useFactory: () => container.getModules(), }, { provide: HttpAdapterHost, - useValue: httpAdapterHost, + useFactory: () => httpAdapterHost, }, { provide: LazyModuleLoader, @@ -61,7 +61,7 @@ export class InternalCoreModuleFactory { }, { provide: SerializedGraph, - useValue: container.serializedGraph, + useFactory: () => container.serializedGraph, }, ]); } diff --git a/packages/core/test/router/router-module.spec.ts b/packages/core/test/router/router-module.spec.ts index 5b7223196a1..472c391e060 100644 --- a/packages/core/test/router/router-module.spec.ts +++ b/packages/core/test/router/router-module.spec.ts @@ -7,6 +7,7 @@ import { ROUTES, targetModulesByContainer, } from '../../router/router-module'; +import { FactoryProvider } from '@nestjs/common'; class TestModuleClass {} diff --git a/packages/microservices/module/clients.module.ts b/packages/microservices/module/clients.module.ts index 0f48e785df6..dad7c69f231 100644 --- a/packages/microservices/module/clients.module.ts +++ b/packages/microservices/module/clients.module.ts @@ -17,10 +17,13 @@ import { export class ClientsModule { static register(options: ClientsModuleOptions): DynamicModule { const clientsOptions = !Array.isArray(options) ? options.clients : options; - const clients = (clientsOptions || []).map(item => ({ - provide: item.name, - useValue: this.assignOnAppShutdownHook(ClientProxyFactory.create(item)), - })); + const clients = (clientsOptions || []).map(item => { + return { + provide: item.name, + useFactory: () => + this.assignOnAppShutdownHook(ClientProxyFactory.create(item)), + }; + }); return { module: ClientsModule, global: !Array.isArray(options) && options.isGlobal, diff --git a/packages/microservices/test/module/clients.module.spec.ts b/packages/microservices/test/module/clients.module.spec.ts index 5b2ef509ee2..5b9b28e7123 100644 --- a/packages/microservices/test/module/clients.module.spec.ts +++ b/packages/microservices/test/module/clients.module.spec.ts @@ -21,14 +21,13 @@ describe('ClientsModule', () => { expect(dynamicModule.module).to.be.eql(ClientsModule); }); it('should return an expected providers array', () => { - expect(dynamicModule.providers).to.be.deep.eq([ - { - provide: 'test', - useValue: ClientsModule['assignOnAppShutdownHook']( - ClientProxyFactory.create({}), - ), - }, - ]); + const provider = dynamicModule.providers.find( + p => 'useFactory' in p && p.provide === 'test', + ) as FactoryProvider; + expect(provider).to.not.be.undefined; + expect(provider.useFactory()).to.be.deep.eq( + ClientsModule['assignOnAppShutdownHook'](ClientProxyFactory.create({})), + ); }); }); describe('registerAsync', () => { diff --git a/packages/platform-express/multer/multer.module.ts b/packages/platform-express/multer/multer.module.ts index d77edd4ed89..04823c95885 100644 --- a/packages/platform-express/multer/multer.module.ts +++ b/packages/platform-express/multer/multer.module.ts @@ -17,7 +17,7 @@ export class MulterModule { return { module: MulterModule, providers: [ - { provide: MULTER_MODULE_OPTIONS, useValue: options }, + { provide: MULTER_MODULE_OPTIONS, useFactory: () => options }, { provide: MULTER_MODULE_ID, useValue: randomStringGenerator(), diff --git a/packages/platform-express/test/multer/multer/multer.module.spec.ts b/packages/platform-express/test/multer/multer/multer.module.spec.ts index e8c92f44ada..35a34f7a02d 100644 --- a/packages/platform-express/test/multer/multer/multer.module.spec.ts +++ b/packages/platform-express/test/multer/multer/multer.module.spec.ts @@ -2,6 +2,7 @@ import { expect } from 'chai'; import * as sinon from 'sinon'; import { MULTER_MODULE_OPTIONS } from '../../../multer/files.constants'; import { MulterModule } from '../../../multer/multer.module'; +import { FactoryProvider } from '@nestjs/common'; describe('MulterModule', () => { describe('register', () => { @@ -14,10 +15,12 @@ describe('MulterModule', () => { expect(dynamicModule.providers).to.have.length(2); expect(dynamicModule.imports).to.be.undefined; expect(dynamicModule.exports).to.include(MULTER_MODULE_OPTIONS); - expect(dynamicModule.providers).to.deep.include({ - provide: MULTER_MODULE_OPTIONS, - useValue: options, - }); + + const moduleOptionsProvider = dynamicModule.providers.find( + p => 'useFactory' in p && p.provide === MULTER_MODULE_OPTIONS, + ) as FactoryProvider; + expect(moduleOptionsProvider).to.not.be.undefined; + expect(moduleOptionsProvider.useFactory()).to.be.eq(options); }); });