1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.TestingInjector = void 0;
|
4 | const constants_1 = require("@nestjs/core/injector/constants");
|
5 | const injector_1 = require("@nestjs/core/injector/injector");
|
6 | const instance_wrapper_1 = require("@nestjs/core/injector/instance-wrapper");
|
7 |
|
8 |
|
9 |
|
10 | class TestingInjector extends injector_1.Injector {
|
11 | setMocker(mocker) {
|
12 | this.mocker = mocker;
|
13 | }
|
14 | setContainer(container) {
|
15 | this.container = container;
|
16 | }
|
17 | async resolveComponentInstance(moduleRef, name, dependencyContext, wrapper, contextId = constants_1.STATIC_CONTEXT, inquirer, keyOrIndex) {
|
18 | try {
|
19 | const existingProviderWrapper = await super.resolveComponentInstance(moduleRef, name, dependencyContext, wrapper, contextId, inquirer, keyOrIndex);
|
20 | return existingProviderWrapper;
|
21 | }
|
22 | catch (err) {
|
23 | if (this.mocker) {
|
24 | const mockedInstance = this.mocker(name);
|
25 | if (!mockedInstance) {
|
26 | throw err;
|
27 | }
|
28 | const newWrapper = new instance_wrapper_1.InstanceWrapper({
|
29 | name,
|
30 | isAlias: false,
|
31 | scope: wrapper.scope,
|
32 | instance: mockedInstance,
|
33 | isResolved: true,
|
34 | host: moduleRef,
|
35 | metatype: wrapper.metatype,
|
36 | });
|
37 | const internalCoreModule = this.container.getInternalCoreModuleRef();
|
38 | internalCoreModule.addCustomProvider({
|
39 | provide: name,
|
40 | useValue: mockedInstance,
|
41 | }, internalCoreModule.providers);
|
42 | internalCoreModule.addExportedProvider(name);
|
43 | return newWrapper;
|
44 | }
|
45 | else {
|
46 | throw err;
|
47 | }
|
48 | }
|
49 | }
|
50 | }
|
51 | exports.TestingInjector = TestingInjector;
|