UNPKG

@deepkit/framework

Version:

107 lines 5.96 kB
/*@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