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 | class TestingInjector extends injector_1.Injector {
|
8 | setMocker(mocker) {
|
9 | this.mocker = mocker;
|
10 | }
|
11 | setContainer(container) {
|
12 | this.container = container;
|
13 | }
|
14 | async resolveComponentInstance(moduleRef, name, dependencyContext, wrapper, contextId = constants_1.STATIC_CONTEXT, inquirer, keyOrIndex) {
|
15 | try {
|
16 | const existingProviderWrapper = await super.resolveComponentInstance(moduleRef, name, dependencyContext, wrapper, contextId, inquirer, keyOrIndex);
|
17 | return existingProviderWrapper;
|
18 | }
|
19 | catch (err) {
|
20 | if (this.mocker) {
|
21 | const mockedInstance = this.mocker(name);
|
22 | if (!mockedInstance) {
|
23 | throw err;
|
24 | }
|
25 | const newWrapper = new instance_wrapper_1.InstanceWrapper({
|
26 | name,
|
27 | isAlias: false,
|
28 | scope: wrapper.scope,
|
29 | instance: mockedInstance,
|
30 | isResolved: true,
|
31 | host: moduleRef,
|
32 | metatype: wrapper.metatype,
|
33 | });
|
34 | const internalCoreModule = this.container.getInternalCoreModuleRef();
|
35 | internalCoreModule.addCustomProvider({
|
36 | provide: name,
|
37 | useValue: mockedInstance,
|
38 | }, internalCoreModule.providers);
|
39 | internalCoreModule.addExportedProvider(name);
|
40 | return newWrapper;
|
41 | }
|
42 | else {
|
43 | throw err;
|
44 | }
|
45 | }
|
46 | }
|
47 | }
|
48 | exports.TestingInjector = TestingInjector;
|