Skip to content

Commit a93e809

Browse files
feat(core): add register req provider helper
1 parent b1af335 commit a93e809

6 files changed

Lines changed: 33 additions & 35 deletions

File tree

packages/core/helpers/external-context-creator.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { GuardsConsumer } from '../guards/guards-consumer';
1212
import { GuardsContextCreator } from '../guards/guards-context-creator';
1313
import { STATIC_CONTEXT } from '../injector/constants';
1414
import { NestContainer } from '../injector/container';
15+
import { ContextId } from '../injector/instance-wrapper';
1516
import { Module } from '../injector/module';
1617
import { ModulesContainer } from '../injector/modules-container';
1718
import { InterceptorsConsumer } from '../interceptors/interceptors-consumer';
@@ -40,6 +41,7 @@ export class ExternalContextCreator {
4041
private readonly handlerMetadataStorage = new HandlerMetadataStorage<
4142
ExternalHandlerMetadata
4243
>();
44+
private container: NestContainer;
4345

4446
constructor(
4547
private readonly guardsContextCreator: GuardsContextCreator,
@@ -72,7 +74,8 @@ export class ExternalContextCreator {
7274
container,
7375
container.applicationConfig,
7476
);
75-
return new ExternalContextCreator(
77+
78+
const externalContextCreator = new ExternalContextCreator(
7679
guardsContextCreator,
7780
guardsConsumer,
7881
interceptorsContextCreator,
@@ -82,6 +85,8 @@ export class ExternalContextCreator {
8285
pipesConsumer,
8386
filtersContextCreator,
8487
);
88+
externalContextCreator.container = container;
89+
return externalContextCreator;
8590
}
8691

8792
public create<
@@ -342,4 +347,8 @@ export class ExternalContextCreator {
342347
};
343348
return guards.length ? canActivateFn : null;
344349
}
350+
351+
public registerRequestProvider<T = any>(request: T, contextId: ContextId) {
352+
this.container.registerRequestProvider<T>(request, contextId);
353+
}
345354
}

packages/core/injector/container.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ import { InvalidModuleException } from '../errors/exceptions/invalid-module.exce
88
import { UnknownModuleException } from '../errors/exceptions/unknown-module.exception';
99
import { ExternalContextCreator } from '../helpers/external-context-creator';
1010
import { HttpAdapterHost } from '../helpers/http-adapter-host';
11+
import { REQUEST } from '../router/request/request-constants';
1112
import { ModuleCompiler } from './compiler';
13+
import { ContextId } from './instance-wrapper';
1214
import { InternalCoreModule } from './internal-core-module';
1315
import { InternalProvidersStorage } from './internal-providers-storage';
1416
import { Module } from './module';
@@ -236,4 +238,12 @@ export class NestContainer {
236238
public getModuleTokenFactory(): ModuleTokenFactory {
237239
return this.moduleTokenFactory;
238240
}
241+
242+
public registerRequestProvider<T = any>(request: T, contextId: ContextId) {
243+
const wrapper = this.internalCoreModule.getProviderByKey(REQUEST);
244+
wrapper.setInstanceByContextId(contextId, {
245+
instance: request,
246+
isResolved: true,
247+
});
248+
}
239249
}

packages/core/middleware/middleware-module.ts

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,14 @@ import { InvalidMiddlewareException } from '../errors/exceptions/invalid-middlew
1313
import { RuntimeException } from '../errors/exceptions/runtime.exception';
1414
import { createContextId } from '../helpers/context-id-factory';
1515
import { ExecutionContextHost } from '../helpers/execution-context-host';
16+
import { STATIC_CONTEXT } from '../injector/constants';
1617
import { NestContainer } from '../injector/container';
17-
import { ContextId, InstanceWrapper } from '../injector/instance-wrapper';
18+
import { Injector } from '../injector/injector';
19+
import { InstanceWrapper } from '../injector/instance-wrapper';
1820
import { Module } from '../injector/module';
19-
import {
20-
REQUEST,
21-
REQUEST_CONTEXT_ID,
22-
} from '../router/request/request-constants';
21+
import { REQUEST_CONTEXT_ID } from '../router/request/request-constants';
2322
import { RouterExceptionFilters } from '../router/router-exception-filters';
2423
import { RouterProxy } from '../router/router-proxy';
25-
import { STATIC_CONTEXT } from '../injector/constants';
26-
import { Injector } from '../injector/injector';
2724
import { MiddlewareBuilder } from './builder';
2825
import { MiddlewareContainer } from './container';
2926
import { MiddlewareResolver } from './resolver';
@@ -216,7 +213,7 @@ export class MiddlewareModule {
216213
writable: false,
217214
configurable: false,
218215
});
219-
this.registerRequestProvider(req, contextId);
216+
this.container.registerRequestProvider(req, contextId);
220217
}
221218
const contextInstance = await this.injector.loadPerContext(
222219
instance,
@@ -278,14 +275,4 @@ export class MiddlewareModule {
278275
}
279276
router(basePath + path, proxy);
280277
}
281-
282-
private registerRequestProvider<T = any>(request: T, contextId: ContextId) {
283-
const coreModuleRef = this.container.getInternalCoreModuleRef();
284-
const wrapper = coreModuleRef.getProviderByKey(REQUEST);
285-
286-
wrapper.setInstanceByContextId(contextId, {
287-
instance: request,
288-
isResolved: true,
289-
});
290-
}
291278
}

packages/core/router/router-explorer.ts

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import { MetadataScanner } from '../metadata-scanner';
2828
import { PipesConsumer } from '../pipes/pipes-consumer';
2929
import { PipesContextCreator } from '../pipes/pipes-context-creator';
3030
import { ExceptionsFilter } from './interfaces/exceptions-filter.interface';
31-
import { REQUEST } from './request';
3231
import { REQUEST_CONTEXT_ID } from './request/request-constants';
3332
import { RouteParamsFactory } from './route-params-factory';
3433
import { RouterExecutionContext } from './router-execution-context';
@@ -250,7 +249,7 @@ export class RouterExplorer {
250249
) => {
251250
try {
252251
const contextId = this.getContextId(req);
253-
this.registerRequestProvider(req, contextId);
252+
this.container.registerRequestProvider(req, contextId);
254253

255254
const contextInstance = await this.injector.loadPerContext(
256255
instance,
@@ -285,16 +284,6 @@ export class RouterExplorer {
285284
};
286285
}
287286

288-
private registerRequestProvider<T = any>(request: T, contextId: ContextId) {
289-
const coreModuleRef = this.container.getInternalCoreModuleRef();
290-
const wrapper = coreModuleRef.getProviderByKey(REQUEST);
291-
292-
wrapper.setInstanceByContextId(contextId, {
293-
instance: request,
294-
isResolved: true,
295-
});
296-
}
297-
298287
private getContextId<T extends Record<any, any> = any>(
299288
request: T,
300289
): ContextId {

packages/microservices/listeners-controller.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,13 @@ export class ListenersController {
121121
try {
122122
const [data, reqCtx] = args;
123123
const contextId = createContextId();
124-
this.registerRequestProvider(
125-
RequestContextHost.create(pattern, data, reqCtx as BaseRpcContext),
126-
contextId,
124+
125+
const req = RequestContextHost.create(
126+
pattern,
127+
data,
128+
reqCtx as BaseRpcContext,
127129
);
130+
this.container.registerRequestProvider(req, contextId);
128131

129132
const contextInstance = await this.injector.loadPerContext(
130133
instance,

packages/microservices/test/listeners-controller.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ describe('ListenersController', () => {
9595
);
9696

9797
sinon
98-
.stub(instance as any, 'registerRequestProvider')
98+
.stub((instance as any).container, 'registerRequestProvider')
9999
.callsFake(() => ({} as any));
100100
});
101101

0 commit comments

Comments
 (0)