1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const common_1 = require("@nestjs/common");
|
4 | const application_config_1 = require("@nestjs/core/application-config");
|
5 | const container_1 = require("@nestjs/core/injector/container");
|
6 | const instance_loader_1 = require("@nestjs/core/injector/instance-loader");
|
7 | const scanner_1 = require("@nestjs/core/scanner");
|
8 | const testing_logger_service_1 = require("./services/testing-logger.service");
|
9 | const testing_module_1 = require("./testing-module");
|
10 | class 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 |
|
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 | }
|
77 | exports.TestingModuleBuilder = TestingModuleBuilder;
|