Commit 25d8e0b8 authored by nanahira's avatar nanahira

add plugin factory

parent c8eaf2bd
......@@ -4,5 +4,6 @@ export * from './src/decorators';
export * from './src/cosmotype-exports';
export * from './src/base-plugin';
export * from './src/multi-plugin';
export * from './src/plugin-factory';
export * from './src/def/interfaces';
export * from 'schemastery-gen';
import { Context } from 'koishi';
import { ClassType, Mixin, SchemaProperty } from 'schemastery-gen';
import { PluginSchema } from './decorators';
import { BasePlugin } from './base-plugin';
export function CreatePluginFactory<C, P>(
basePlugin: new (ctx: Context, config: C) => P,
baseConfig: ClassType<C>,
): <S>(specificConfig?: ClassType<S>) => new (ctx: Context, config: S & C) => P;
export function CreatePluginFactory<C, P>(
basePlugin: new (ctx: Context, config: C) => any,
baseConfig: ClassType<C>,
): <S>(
specificConfig?: ClassType<S>,
) => new (ctx: Context, config: S & C) => P {
return (specificConfig) => {
const plugin = class specificPlugin extends basePlugin {};
const config = specificConfig
? Mixin(specificConfig, baseConfig)
: baseConfig;
PluginSchema(config)(plugin);
return plugin;
};
}
class TestConfig {
@SchemaProperty()
foo: string;
}
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