ms/packages/api/src/interfaces/plugin.ts

149 lines
3.5 KiB
TypeScript
Raw Normal View History

export namespace plugin {
/**
* MiaoScript Plugin
*/
export const Plugin = Symbol("Plugin")
/**
* MiaoScript Plugin Folder
*/
export const PluginFolder = Symbol("PluginFolder")
/**
* Runtime Plugin Instance
*/
export const PluginInstance = Symbol("PluginInstance")
/**
* MiaoScript Plugin Manager Symbol
*/
export const PluginManager = Symbol("PluginManager")
/**
* MiaoScript Plugin Manager Interface
*/
export interface PluginManager {
scan(folder: string): void
build(): void
loadFromFile(file: string, scanner?: plugin.PluginScanner): Plugin
load(...args: any[]): void
enable(...args: any[]): void
disable(...args: any[]): void
reload(...args: any[]): void
getPlugin(name: string): plugin.Plugin
getPlugins(): Map<string, plugin.Plugin>
}
export const PluginScanner = Symbol("PluginScanner")
/**
*
*/
export interface PluginScanner {
/**
*
*/
type: string
/**
*
* @param target
*/
scan(target: any): string[]
/**
*
* @param target
*/
load(target: any): any
}
export const PluginLoader = Symbol("PluginLoader")
/**
*
*/
export interface PluginLoader {
/**
*
*/
type: string
/**
*
* @param target
* @param result
*/
require(target: any, result: any): PluginMetadata
/**
*
* @param metadata
*/
build(metadata: any): Plugin
/**
* Load
* @param plugin
*/
load(plugin: Plugin): void
/**
* Enable
* @param plugin
*/
enable(plugin: Plugin): void
/**
* Disable
* @param plugin
*/
disable(plugin: Plugin): void
/**
* Reload
* @param plugin
*/
reload(plugin: Plugin): void
}
export interface Plugin {
description: PluginMetadata
logger: Console
load(): void
enable(): void
disable(): void
}
export interface BaseMetadata {
/**
*
*/
name?: string
/**
*
*/
servers?: string[]
}
export interface PluginMetadata extends BaseMetadata {
/**
*
*/
name: string
/**
*
*/
prefix?: string
/**
*
*/
version: string
/**
*
*/
author: string | string[]
/**
* __filename
*/
source: string
/**
* ioc MiaoScript
*/
type?: string
/**
*
*/
scanner?: PluginScanner
/**
*
*/
loader?: PluginLoader
/**
*
*/
target?: any
}
}