Commit b2c6e97e authored by nanahira's avatar nanahira

add decorated name

parent 6528f1da
......@@ -128,6 +128,9 @@ export function UsingService(
export const PluginSchema = (schema: Schema | ClassType<any>) =>
Metadata.set('KoishiPredefineSchema', schema);
export const PluginName = (name: string) =>
Metadata.set('KoishiPredefineName', name);
export const If = <T>(func: Condition<boolean, T>): MethodDecorator =>
Metadata.append('KoishiIf', func);
......
......@@ -26,4 +26,5 @@ export interface MetadataMap {
KoishiServiceInjectSym: keyof Context.Services;
KoishiSystemInjectSym: SystemInjectFun;
KoishiPredefineSchema: Schema | ClassType<any>;
KoishiPredefineName: string;
}
......@@ -52,10 +52,15 @@ export function DefinePlugin<T = any>(
new (...args: any[]): any;
} & KoishiPluginRegistrationOptions<T>,
>(originalClass: C) {
const schemaType =
options.schema || reflector.get('KoishiPredefineSchema', originalClass);
const newClass = class extends originalClass implements PluginClass {
static Config = schemaType ? SchemaClass(schemaType) : undefined;
static get Config() {
const schemaType =
reflector.get('KoishiPredefineSchema', newClass) ||
reflector.get('KoishiPredefineSchema', originalClass) ||
options.schema;
return schemaType ? SchemaClass(schemaType) : undefined;
}
static get using() {
const list = reflector
.getArray(KoishiAddUsingList, originalClass)
......@@ -225,8 +230,11 @@ export function DefinePlugin<T = any>(
Object.defineProperty(newClass, 'name', {
enumerable: true,
configurable: true,
writable: true,
value: options.name || originalClass.name,
get: () =>
reflector.get('KoishiPredefineName', newClass) ||
reflector.get('KoishiPredefineName', originalClass) ||
options.name ||
originalClass.name,
});
return newClass;
};
......
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