@deepkit/framework
Version:
114 lines • 6.56 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.BrokerMemoryServer = exports.TestingFacade = exports.TestHttpResponse = void 0;
exports.createTestingApp = createTestingApp;
/*@ts-ignore*/
const { __ΩLogMessage } = require('@deepkit/logger');
/*@ts-ignore*/
const { __ΩClassType } = require('@deepkit/core');
function __assignType(fn, args) {
fn.__type = args;
return fn;
}
/*
* Deepkit Framework
* Copyright (C) 2021 Deepkit UG, Marc J. Schmidt
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the MIT License.
*
* You should have received a copy of the MIT License along with this program.
*/
const broker_1 = require("@deepkit/broker");
const logger_1 = require("@deepkit/logger");
const orm_1 = require("@deepkit/orm");
const application_server_js_1 = require("./application-server.js");
const broker_js_1 = require("./broker/broker.js");
const app_1 = require("@deepkit/app");
const worker_js_1 = require("./worker.js");
const http_1 = require("@deepkit/http");
const rpc_1 = require("@deepkit/rpc");
const module_js_1 = require("./module.js");
const broker_js_2 = require("./debug/broker.js");
/**
* @deprecated use {@link MemoryHttpResponse} instead
*/
class TestHttpResponse extends http_1.MemoryHttpResponse {
}
exports.TestHttpResponse = TestHttpResponse;
TestHttpResponse.__type = [() => http_1.MemoryHttpResponse, 'TestHttpResponse', 'P7!5w"'];
class TestingFacade {
constructor(app) {
this.app = app;
}
getLogger() {
return this.app.get(logger_1.MemoryLoggerTransport);
}
async startServer() {
await this.app.get(application_server_js_1.ApplicationServer).start();
}
async stopServer(graceful = false) {
await this.app.get(application_server_js_1.ApplicationServer).close(graceful);
}
async request(requestBuilder) {
const request = requestBuilder.build();
const response = new http_1.MemoryHttpResponse(request);
await this.app.get(application_server_js_1.ApplicationServer).getHttpWorker().handleRequest(request, response);
return response;
}
createRpcClient() {
return this.app.get(application_server_js_1.ApplicationServer).createClient();
}
getLogMessages() {
return this.app.get(logger_1.MemoryLoggerTransport).messages;
}
}
exports.TestingFacade = TestingFacade;
TestingFacade.__type = ['A', 'app', 'constructor', () => logger_1.MemoryLoggerTransport, 'getLogger', 'startServer', 'graceful', 'stopServer', () => http_1.RequestBuilder, 'requestBuilder', () => http_1.MemoryHttpResponse, 'request', () => rpc_1.RpcClient, 'createRpcClient', () => __ΩLogMessage, 'getLogMessages', 'TestingFacade', 'b!Pe"!2":"0#PP7$0%P"0&P"2\'"0(PP7)2*P7+`0,PP7-0.Pn/F005w1'];
class BrokerMemoryServer extends broker_js_1.BrokerServer {
constructor() {
super(...arguments);
this.kernel = new broker_1.BrokerKernel();
}
async start() {
}
async stop() {
}
}
exports.BrokerMemoryServer = BrokerMemoryServer;
BrokerMemoryServer.__type = [() => broker_js_1.BrokerServer, 'kernel', function () { return new broker_1.BrokerKernel(); }, 'start', 'stop', 'BrokerMemoryServer', 'P7!!3">#P"0$P"0%5w&'];
/**
* Creates a new App instance, but with kernel services in place that work in memory.
* For example RPC/Broker/HTTP communication without TCP stack. Logger uses MemoryLogger.
*/
function createTestingApp(options, entities = [], setup) {
const module = new app_1.RootAppModule({}, options);
(module.configureProvider.Ω = [[() => logger_1.Logger, 'P7!']], module.configureProvider(__assignType((v, t) => v.removeTransport(t), ['v', () => logger_1.ConsoleTransport, 't', '', 'P"2!P7"2#"/$'])));
(module.configureProvider.Ω = [[() => logger_1.Logger, 'P7!']], module.configureProvider(__assignType((v, t) => v.addTransport(t), ['v', () => logger_1.MemoryLoggerTransport, 't', '', 'P"2!P7"2#"/$'])));
module.addProvider({ provide: worker_js_1.WebWorkerFactory, useClass: worker_js_1.WebMemoryWorkerFactory }); //don't start HTTP-server
module.addProvider({ provide: broker_js_1.BrokerServer, useExisting: BrokerMemoryServer }); //don't start Broker TCP-server
module.addProvider(BrokerMemoryServer);
module.addProvider(logger_1.MemoryLoggerTransport);
module.addProvider({
provide: broker_1.BrokerDeepkitAdapter, useFactory: __assignType((server) => {
const transport = new rpc_1.RpcDirectClientAdapter(server.kernel);
return new broker_1.BrokerDeepkitAdapter({ servers: [{ url: '', transport }] });
}, [() => BrokerMemoryServer, 'server', '', 'PP7!2""/#'])
});
module.addProvider({ provide: broker_1.BrokerCache, useFactory: __assignType((adapter) => new broker_1.BrokerCache(adapter), [() => broker_1.BrokerDeepkitAdapter, 'adapter', '', 'PP7!2""/#']) });
module.addProvider({ provide: broker_1.BrokerLock, useFactory: __assignType((adapter) => new broker_1.BrokerLock(adapter), [() => broker_1.BrokerDeepkitAdapter, 'adapter', '', 'PP7!2""/#']) });
module.addProvider({ provide: broker_1.BrokerQueue, useFactory: __assignType((adapter) => new broker_1.BrokerQueue(adapter), [() => broker_1.BrokerDeepkitAdapter, 'adapter', '', 'PP7!2""/#']) });
module.addProvider({ provide: broker_1.BrokerBus, useFactory: __assignType((adapter) => new broker_1.BrokerBus(adapter), [() => broker_1.BrokerDeepkitAdapter, 'adapter', '', 'PP7!2""/#']) });
module.addProvider({ provide: broker_js_2.DebugBrokerBus, useFactory: __assignType((adapter) => new broker_1.BrokerBus(adapter), [() => broker_1.BrokerDeepkitAdapter, 'adapter', '', 'PP7!2""/#']) });
if (!module.hasImport(module_js_1.FrameworkModule))
module.addImportAtBeginning(new module_js_1.FrameworkModule);
if (entities.length) {
module.addProvider({ provide: orm_1.Database, useValue: new orm_1.Database(new orm_1.MemoryDatabaseAdapter, entities) });
(module.configureProvider.Ω = [[() => orm_1.DatabaseRegistry, 'P7!']], module.configureProvider(__assignType(v => v.addDatabase(orm_1.Database, {}, module), ['v', '', 'P"2!"/"'])));
}
if (setup)
module.setup(setup);
return new TestingFacade(app_1.App.fromModule(module));
}
createTestingApp.__type = ['options', () => __ΩClassType, 'entities', () => [], () => app_1.AppModule, 'module', '', 'setup', () => app_1.App, () => TestingFacade, 'createTestingApp', 'P"2!n"F2#>$PP"7%2&$/\'2(8PP"7)7*/+'];
//# sourceMappingURL=testing.js.map
;