@deepkit/framework
Version:
107 lines • 5.96 kB
JavaScript
/*@ts-ignore*/
import { __ΩLogMessage } from '@deepkit/logger';
/*@ts-ignore*/
import { __ΩClassType } from '@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.
*/
import { BrokerBus, BrokerCache, BrokerDeepkitAdapter, BrokerKernel, BrokerLock, BrokerQueue } from '@deepkit/broker';
import { ConsoleTransport, Logger, MemoryLoggerTransport } from '@deepkit/logger';
import { Database, DatabaseRegistry, MemoryDatabaseAdapter } from '@deepkit/orm';
import { ApplicationServer } from './application-server.js';
import { BrokerServer } from './broker/broker.js';
import { App, AppModule, RootAppModule } from '@deepkit/app';
import { WebMemoryWorkerFactory, WebWorkerFactory } from './worker.js';
import { MemoryHttpResponse, RequestBuilder } from '@deepkit/http';
import { RpcClient, RpcDirectClientAdapter } from '@deepkit/rpc';
import { FrameworkModule } from './module.js';
import { DebugBrokerBus } from './debug/broker.js';
/**
* @deprecated use {@link MemoryHttpResponse} instead
*/
export class TestHttpResponse extends MemoryHttpResponse {
}
TestHttpResponse.__type = [() => MemoryHttpResponse, 'TestHttpResponse', 'P7!5w"'];
export class TestingFacade {
constructor(app) {
this.app = app;
}
getLogger() {
return this.app.get(MemoryLoggerTransport);
}
async startServer() {
await this.app.get(ApplicationServer).start();
}
async stopServer(graceful = false) {
await this.app.get(ApplicationServer).close(graceful);
}
async request(requestBuilder) {
const request = requestBuilder.build();
const response = new MemoryHttpResponse(request);
await this.app.get(ApplicationServer).getHttpWorker().handleRequest(request, response);
return response;
}
createRpcClient() {
return this.app.get(ApplicationServer).createClient();
}
getLogMessages() {
return this.app.get(MemoryLoggerTransport).messages;
}
}
TestingFacade.__type = ['A', 'app', 'constructor', () => MemoryLoggerTransport, 'getLogger', 'startServer', 'graceful', 'stopServer', () => RequestBuilder, 'requestBuilder', () => MemoryHttpResponse, 'request', () => RpcClient, 'createRpcClient', () => __ΩLogMessage, 'getLogMessages', 'TestingFacade', 'b!Pe"!2":"0#PP7$0%P"0&P"2\'"0(PP7)2*P7+`0,PP7-0.Pn/F005w1'];
export class BrokerMemoryServer extends BrokerServer {
constructor() {
super(...arguments);
this.kernel = new BrokerKernel();
}
async start() {
}
async stop() {
}
}
BrokerMemoryServer.__type = [() => BrokerServer, 'kernel', function () { return new 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.
*/
export function createTestingApp(options, entities = [], setup) {
const module = new RootAppModule({}, options);
(module.configureProvider.Ω = [[() => Logger, 'P7!']], module.configureProvider(__assignType((v, t) => v.removeTransport(t), ['v', () => ConsoleTransport, 't', '', 'P"2!P7"2#"/$'])));
(module.configureProvider.Ω = [[() => Logger, 'P7!']], module.configureProvider(__assignType((v, t) => v.addTransport(t), ['v', () => MemoryLoggerTransport, 't', '', 'P"2!P7"2#"/$'])));
module.addProvider({ provide: WebWorkerFactory, useClass: WebMemoryWorkerFactory }); //don't start HTTP-server
module.addProvider({ provide: BrokerServer, useExisting: BrokerMemoryServer }); //don't start Broker TCP-server
module.addProvider(BrokerMemoryServer);
module.addProvider(MemoryLoggerTransport);
module.addProvider({
provide: BrokerDeepkitAdapter, useFactory: __assignType((server) => {
const transport = new RpcDirectClientAdapter(server.kernel);
return new BrokerDeepkitAdapter({ servers: [{ url: '', transport }] });
}, [() => BrokerMemoryServer, 'server', '', 'PP7!2""/#'])
});
module.addProvider({ provide: BrokerCache, useFactory: __assignType((adapter) => new BrokerCache(adapter), [() => BrokerDeepkitAdapter, 'adapter', '', 'PP7!2""/#']) });
module.addProvider({ provide: BrokerLock, useFactory: __assignType((adapter) => new BrokerLock(adapter), [() => BrokerDeepkitAdapter, 'adapter', '', 'PP7!2""/#']) });
module.addProvider({ provide: BrokerQueue, useFactory: __assignType((adapter) => new BrokerQueue(adapter), [() => BrokerDeepkitAdapter, 'adapter', '', 'PP7!2""/#']) });
module.addProvider({ provide: BrokerBus, useFactory: __assignType((adapter) => new BrokerBus(adapter), [() => BrokerDeepkitAdapter, 'adapter', '', 'PP7!2""/#']) });
module.addProvider({ provide: DebugBrokerBus, useFactory: __assignType((adapter) => new BrokerBus(adapter), [() => BrokerDeepkitAdapter, 'adapter', '', 'PP7!2""/#']) });
if (!module.hasImport(FrameworkModule))
module.addImportAtBeginning(new FrameworkModule);
if (entities.length) {
module.addProvider({ provide: Database, useValue: new Database(new MemoryDatabaseAdapter, entities) });
(module.configureProvider.Ω = [[() => DatabaseRegistry, 'P7!']], module.configureProvider(__assignType(v => v.addDatabase(Database, {}, module), ['v', '', 'P"2!"/"'])));
}
if (setup)
module.setup(setup);
return new TestingFacade(App.fromModule(module));
}
createTestingApp.__type = ['options', () => __ΩClassType, 'entities', () => [], () => AppModule, 'module', '', 'setup', () => App, () => TestingFacade, 'createTestingApp', 'P"2!n"F2#>$PP"7%2&$/\'2(8PP"7)7*/+'];
//# sourceMappingURL=testing.js.map