Commit 860b1e6e authored by nanahira's avatar nanahira

improve http adapter search again

parent 2ed39af4
Pipeline #6158 passed with stages
in 1 minute and 21 seconds
{
"name": "koishi-nestjs",
"version": "1.0.32",
"version": "1.0.33",
"description": "Koishi.js as Nest.js Module",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
......
......@@ -4,7 +4,7 @@ import {
DiscoveryService,
HttpAdapterHost,
MetadataScanner,
ModulesContainer,
ModuleRef,
Reflector,
} from '@nestjs/core';
import { Argv, Command, Context } from 'koishi';
......@@ -29,34 +29,16 @@ export class KoishiMetascanService {
private readonly discoveryService: DiscoveryService,
private readonly metadataScanner: MetadataScanner,
private readonly reflector: Reflector,
private readonly moduleContainer: ModulesContainer,
private readonly moduleRef: ModuleRef,
) {}
getHttpAdapter(): AbstractHttpAdapter {
const possibleHttpAdapters: AbstractHttpAdapter[] = [];
for (const module of this.moduleContainer.values()) {
const adapterHost = module.providers.get(HttpAdapterHost);
if (adapterHost) {
const httpAdapter = (adapterHost as InstanceWrapper<HttpAdapterHost>)
.instance.httpAdapter;
possibleHttpAdapters.push(httpAdapter);
}
}
if (!possibleHttpAdapters.length) {
const apdaterHost = this.moduleRef.get(HttpAdapterHost, { strict: false });
if (apdaterHost) {
return apdaterHost.httpAdapter;
} else {
return null;
}
// Try those adapters one by one
const adapterTypesToTry = ['express', 'fastify', 'koa'];
for (const adapterType of adapterTypesToTry) {
const foundAdapter = possibleHttpAdapters.find(
(adapter) => adapter.getType() === adapterType,
);
if (foundAdapter) {
return foundAdapter;
}
}
// Fallback to first adapter
return possibleHttpAdapters[0];
}
private async handleInstance(
......
......@@ -23,7 +23,7 @@ import { createServer } from 'http';
import { AddressInfo } from 'net';
import { KoishiLoggerService } from './koishi-logger.service';
import { KoishiMetascanService } from './koishi-metascan.service';
import { DiscoveryModule, DiscoveryService } from '@nestjs/core';
import { DiscoveryModule } from '@nestjs/core';
const koishiContextProvider: Provider = {
provide: KOISHI_CONTEXT,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment