diff --git a/packages/app/src/module.ts b/packages/app/src/module.ts index 257aaeb74..bbae0480a 100644 --- a/packages/app/src/module.ts +++ b/packages/app/src/module.ts @@ -8,7 +8,7 @@ * You should have received a copy of the MIT License along with this program. */ -import { InjectorModule, ProviderWithScope, Token } from '@deepkit/injector'; +import { InjectorModule, ProviderWithScope, Token, NormalizedProvider } from '@deepkit/injector'; import { AbstractClassType, ClassType, CustomError, ExtractClassType, isClass } from '@deepkit/core'; import { EventListener, EventToken } from '@deepkit/event'; import { WorkflowDefinition } from '@deepkit/workflow'; @@ -23,7 +23,7 @@ export interface MiddlewareConfig { export type MiddlewareFactory = () => MiddlewareConfig; -export type ExportType = AbstractClassType | string | AppModule | Type; +export type ExportType = AbstractClassType | string | AppModule | Type | NormalizedProvider; /** * @reflection never diff --git a/packages/app/tests/module.spec.ts b/packages/app/tests/module.spec.ts index d37c65660..f801eed39 100644 --- a/packages/app/tests/module.spec.ts +++ b/packages/app/tests/module.spec.ts @@ -1,6 +1,6 @@ import { expect, test } from '@jest/globals'; import { Minimum, MinLength } from '@deepkit/type'; -import { injectorReference } from '@deepkit/injector'; +import { injectorReference, provide } from '@deepkit/injector'; import { ServiceContainer } from '../src/service-container.js'; import { ClassType } from '@deepkit/core'; import { AppModule, createModule } from '../src/module.js'; @@ -248,6 +248,22 @@ test('same module loaded twice', () => { } }); +test('interface provider can be exported', () => { + interface Test {} + + const TEST = {}; + + const Test = provide({ useValue: TEST }); + + const test = new AppModule({ providers: [Test], exports: [Test] }); + + const app = new AppModule({ imports: [test] }); + + const serviceContainer = new ServiceContainer(app); + + serviceContainer.getInjector(app).get().toBe(TEST); +}); + test('non-exported providers can not be overwritten', () => { class SubClass { }