UNPKG

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