Commit 8b1b1dfc authored by nanahira's avatar nanahira

add HttpClientPlugin

parent 54b40592
import { Quester, Schema } from 'koishi';
import { CreatePluginFactory, SchemaProperty } from 'cordis-decorators';
import { StarterPlugin } from '../registrar';
import { Apply } from 'cordis-decorators/dist/src/decorators';
const questerConfigDict = { ...Quester.Config.dict };
delete questerConfigDict.endpoint;
export class HttpClientPluginConfig {
@SchemaProperty({
type: Schema.object(questerConfigDict),
description: '请求设置',
default: {},
})
http: Omit<Quester.Config, 'endpoint'>;
}
export class HttpClientPluginBase extends StarterPlugin(
HttpClientPluginConfig,
) {
http: Quester;
@Apply()
_initializeQuester() {
this.http = this.ctx.http.extend(this.config.http || {});
}
}
export const HttpClientPlugin = CreatePluginFactory(
HttpClientPluginBase,
HttpClientPluginConfig,
);
export * from './map-plugin';
export * from './merge-plugin';
export * from './multi-plugin';
export * from './http-client';
import { Provide } from 'cordis-decorators/dist/src/decorators';
import { DefinePlugin } from '../src/decorators';
import { HttpClientPlugin } from '../src/plugin-operators';
import { App } from 'koishi';
import { RegisterSchema, SchemaProperty } from 'cordis-decorators';
@RegisterSchema()
class TestHttpPluginConfig {
@SchemaProperty({ default: 'https://sapi.moecube.com:444/apps.json' })
endpoint: string;
}
@Provide('testHttp', { immediate: true })
@DefinePlugin()
class TestHttpPlugin extends HttpClientPlugin(TestHttpPluginConfig) {
req() {
return this.http.get(this.config.endpoint);
}
}
describe('register map plugin instance', () => {
it('should make http ok', async () => {
const app = new App();
app.plugin(TestHttpPlugin, {
http: {
headers: {
'User-Agent': 'test',
},
},
});
await app.start();
expect(app['testHttp'].req()).resolves.toBeInstanceOf(Array);
});
});
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