UNPKG

3.41 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.TestingModuleBuilder = void 0;
4const common_1 = require("@nestjs/common");
5const application_config_1 = require("@nestjs/core/application-config");
6const container_1 = require("@nestjs/core/injector/container");
7const scanner_1 = require("@nestjs/core/scanner");
8const testing_logger_service_1 = require("./services/testing-logger.service");
9const testing_instance_loader_1 = require("./testing-instance-loader");
10const testing_module_1 = require("./testing-module");
11class TestingModuleBuilder {
12 constructor(metadataScanner, metadata) {
13 this.applicationConfig = new application_config_1.ApplicationConfig();
14 this.container = new container_1.NestContainer(this.applicationConfig);
15 this.overloadsMap = new Map();
16 this.instanceLoader = new testing_instance_loader_1.TestingInstanceLoader(this.container);
17 this.scanner = new scanner_1.DependenciesScanner(this.container, metadataScanner, this.applicationConfig);
18 this.module = this.createModule(metadata);
19 }
20 setLogger(testingLogger) {
21 this.testingLogger = testingLogger;
22 return this;
23 }
24 overridePipe(typeOrToken) {
25 return this.override(typeOrToken, false);
26 }
27 useMocker(mocker) {
28 this.mocker = mocker;
29 return this;
30 }
31 overrideFilter(typeOrToken) {
32 return this.override(typeOrToken, false);
33 }
34 overrideGuard(typeOrToken) {
35 return this.override(typeOrToken, false);
36 }
37 overrideInterceptor(typeOrToken) {
38 return this.override(typeOrToken, false);
39 }
40 overrideProvider(typeOrToken) {
41 return this.override(typeOrToken, true);
42 }
43 async compile() {
44 this.applyLogger();
45 await this.scanner.scan(this.module);
46 this.applyOverloadsMap();
47 await this.instanceLoader.createInstancesOfDependencies(this.container.getModules(), this.mocker);
48 this.scanner.applyApplicationProviders();
49 const root = this.getRootModule();
50 return new testing_module_1.TestingModule(this.container, [], root, this.applicationConfig);
51 }
52 override(typeOrToken, isProvider) {
53 const addOverload = (options) => {
54 this.overloadsMap.set(typeOrToken, Object.assign(Object.assign({}, options), { isProvider }));
55 return this;
56 };
57 return this.createOverrideByBuilder(addOverload);
58 }
59 createOverrideByBuilder(add) {
60 return {
61 useValue: value => add({ useValue: value }),
62 useFactory: (options) => add(Object.assign(Object.assign({}, options), { useFactory: options.factory })),
63 useClass: metatype => add({ useClass: metatype }),
64 };
65 }
66 applyOverloadsMap() {
67 [...this.overloadsMap.entries()].forEach(([item, options]) => {
68 this.container.replace(item, options);
69 });
70 }
71 getRootModule() {
72 const modules = this.container.getModules().values();
73 return modules.next().value;
74 }
75 createModule(metadata) {
76 class RootTestModule {
77 }
78 (0, common_1.Module)(metadata)(RootTestModule);
79 return RootTestModule;
80 }
81 applyLogger() {
82 common_1.Logger.overrideLogger(this.testingLogger || new testing_logger_service_1.TestingLogger());
83 }
84}
85exports.TestingModuleBuilder = TestingModuleBuilder;