@@ -11,7 +11,6 @@
 | 
			
		||||
        "watch": "lerna run watch --parallel",
 | 
			
		||||
        "build": "lerna run build --scope=\"@ccms/!(plugins)\"",
 | 
			
		||||
        "build:plugins": "lerna run build --scope=\"@ccms/plugins\"",
 | 
			
		||||
        "publish": "yarn lerna exec \"npm publish --access=public\" --scope=\"@ccms/!(plugins|client|types)\"",
 | 
			
		||||
        "ug": "yarn upgrade-interactive --latest",
 | 
			
		||||
        "lp": "lerna publish"
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -23,9 +23,7 @@ export function concat(...args: string[]) {
 | 
			
		||||
 * @returns {*}
 | 
			
		||||
 */
 | 
			
		||||
export function file(...opts: any[]): any {
 | 
			
		||||
    if (!opts[0]) {
 | 
			
		||||
        console.warn("文件名称不得为 undefined 或者 null !");
 | 
			
		||||
    }
 | 
			
		||||
    if (!opts[0]) { throw new Error("文件名称不得为 undefined 或者 null !") }
 | 
			
		||||
    switch (opts.length) {
 | 
			
		||||
        case 1:
 | 
			
		||||
            var f = opts[0];
 | 
			
		||||
@@ -143,7 +141,7 @@ export function del(file) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    if (file.isDirectory()) {
 | 
			
		||||
        Files.list(file.toPath()).collect(Collector.toList()).forEach(function(f) {
 | 
			
		||||
        Files.list(file.toPath()).collect(Collector.toList()).forEach(function (f) {
 | 
			
		||||
            del(f);
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -10,14 +10,13 @@ import { getPluginMetadatas, getPluginCommandMetadata, getPluginListenerMetadata
 | 
			
		||||
export function plugin(metadata: interfaces.PluginMetadata) {
 | 
			
		||||
    return function (target: any) {
 | 
			
		||||
        metadata.target = target;
 | 
			
		||||
        metadata.source = metadata.source + '';
 | 
			
		||||
        decorate(injectable(), target);
 | 
			
		||||
        Reflect.defineMetadata(METADATA_KEY.plugin, metadata, target);
 | 
			
		||||
        const previousMetadata: Map<string, interfaces.PluginMetadata> = getPluginMetadatas();
 | 
			
		||||
        previousMetadata.set(metadata.name, metadata);
 | 
			
		||||
        Reflect.defineMetadata(METADATA_KEY.plugin, previousMetadata, Reflect);
 | 
			
		||||
        const previousSources: Map<string, interfaces.PluginMetadata> = getPluginSources();
 | 
			
		||||
        previousSources.set(metadata.source, metadata);
 | 
			
		||||
        previousSources.set(metadata.source.toString(), metadata);
 | 
			
		||||
        Reflect.defineMetadata(METADATA_KEY.souece, previousSources, Reflect);
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
import { server, MiaoScriptConsole, event } from "@ccms/api";
 | 
			
		||||
import { injectable, inject } from "@ccms/container";
 | 
			
		||||
import { injectable, inject, postConstruct } from "@ccms/container";
 | 
			
		||||
import { getPluginMetadata } from "./utils";
 | 
			
		||||
 | 
			
		||||
export namespace interfaces {
 | 
			
		||||
@@ -7,11 +7,17 @@ export namespace interfaces {
 | 
			
		||||
    export abstract class Plugin {
 | 
			
		||||
        public description: PluginMetadata;
 | 
			
		||||
        public logger: Console;
 | 
			
		||||
        @inject(server.Console)
 | 
			
		||||
        private Console: MiaoScriptConsole;
 | 
			
		||||
 | 
			
		||||
        constructor(@inject(server.Console) Console: MiaoScriptConsole) {
 | 
			
		||||
        constructor() {
 | 
			
		||||
            this.description = getPluginMetadata(this)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @postConstruct()
 | 
			
		||||
        private initialize() {
 | 
			
		||||
            // @ts-ignore
 | 
			
		||||
            this.logger = new Console(this.description.prefix || this.description.name)
 | 
			
		||||
            this.logger = new this.Console(this.description.prefix || this.description.name)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public load() { }
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ export class PluginManagerImpl implements plugin.PluginManager {
 | 
			
		||||
            this.pluginMap = new Map()
 | 
			
		||||
            console.i18n('ms.plugin.event.map', { count: this.EventManager.mapEventName().toFixed(0), type: this.serverType });
 | 
			
		||||
            this.initialized = true;
 | 
			
		||||
            this.plugnMappings = getPluginSources()
 | 
			
		||||
            this.plugnMappings = getPluginSources();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -62,9 +62,13 @@ export class PluginManagerImpl implements plugin.PluginManager {
 | 
			
		||||
        this.execPluginStage(plugin, stage)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 从文件加载插件
 | 
			
		||||
     * @param file java.io.File
 | 
			
		||||
     */
 | 
			
		||||
    loadFromFile(file: string): interfaces.Plugin {
 | 
			
		||||
        this.loadPlugin(file)
 | 
			
		||||
        let plugin = this.buildPlugin(this.plugnMappings.get(file))
 | 
			
		||||
        let plugin = this.buildPlugin(this.plugnMappings.get(file.toString()))
 | 
			
		||||
        this.load(plugin)
 | 
			
		||||
        this.enable(plugin)
 | 
			
		||||
        return plugin;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,8 @@
 | 
			
		||||
import { interfaces } from './interfaces'
 | 
			
		||||
import { METADATA_KEY } from './constants'
 | 
			
		||||
 | 
			
		||||
const pluginSourceCache = new Map<string, interfaces.PluginMetadata>();
 | 
			
		||||
 | 
			
		||||
function getPlugins() {
 | 
			
		||||
    return [...getPluginMetadatas().values()].map((target) => target.target);
 | 
			
		||||
}
 | 
			
		||||
@@ -13,7 +15,7 @@ function getPluginSources() {
 | 
			
		||||
    let pluginSources: Map<string, interfaces.PluginMetadata> = Reflect.getMetadata(
 | 
			
		||||
        METADATA_KEY.souece,
 | 
			
		||||
        Reflect
 | 
			
		||||
    ) || new Map<string, interfaces.PluginMetadata>();
 | 
			
		||||
    ) || pluginSourceCache;
 | 
			
		||||
    return pluginSources;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -34,6 +34,7 @@ let langMap = {
 | 
			
		||||
    'download.url': '§6插件下载地址: §b{url}',
 | 
			
		||||
    'download.finish': '§6插件 §b{name} §a下载完毕 开始加载 ...',
 | 
			
		||||
    'install.finish': '§6插件 §b{name} §a安装成功!',
 | 
			
		||||
    'update.finish': '§6插件 §b{name} §a更新成功!',
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
let fallbackMap = langMap
 | 
			
		||||
@@ -56,6 +57,8 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
 | 
			
		||||
 | 
			
		||||
    private translate: Translate;
 | 
			
		||||
 | 
			
		||||
    private subCommnadNameCache: string[];
 | 
			
		||||
 | 
			
		||||
    load() {
 | 
			
		||||
        this.translate = new Translate({
 | 
			
		||||
            langMap,
 | 
			
		||||
@@ -118,6 +121,7 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    cmdreload(sender: any, name: string) {
 | 
			
		||||
        name = name || this.description.name
 | 
			
		||||
        if (this.checkPlugin(sender, name)) {
 | 
			
		||||
            this.pluginManager.reload(name);
 | 
			
		||||
            this.i18n(sender, 'plugin.reload.finish', { name })
 | 
			
		||||
@@ -179,13 +183,13 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
 | 
			
		||||
 | 
			
		||||
    update(sender: any, name: string) {
 | 
			
		||||
        if (this.checkCloudPlugin(sender, name)) {
 | 
			
		||||
 | 
			
		||||
            this.download(sender, name, true);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @tab()
 | 
			
		||||
    tabmpm(sender: any, command: any, args: string | any[]) {
 | 
			
		||||
        if (args.length === 1) return ['list', 'install', 'update', 'upgrade', 'reload', 'restart', 'run', 'help', 'create'];
 | 
			
		||||
        if (args.length === 1) { return ['list', 'install', 'update', 'upgrade', 'reload', 'restart', 'run', 'help', 'create', 'deploy'] }
 | 
			
		||||
        if (args.length > 1) {
 | 
			
		||||
            switch (args[0]) {
 | 
			
		||||
                case "list":
 | 
			
		||||
@@ -197,6 +201,7 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
 | 
			
		||||
                case "load":
 | 
			
		||||
                case "unload":
 | 
			
		||||
                case "reload":
 | 
			
		||||
                case "deploy":
 | 
			
		||||
                    return [...this.pluginManager.getPlugins().keys()];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -211,15 +216,15 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
 | 
			
		||||
        }).async().submit();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    download(sender: any, name: string) {
 | 
			
		||||
    download(sender: any, name: string, update: boolean = false) {
 | 
			
		||||
        this.taskManager.create(() => {
 | 
			
		||||
            this.i18n(sender, 'download.start', { name })
 | 
			
		||||
            this.i18n(sender, 'download.url', { url: this.packageCache[name].url })
 | 
			
		||||
            let pluginFile = fs.concat(this.pluginFolder, name + '.js')
 | 
			
		||||
            let pluginFile = update ? fs.concat(this.pluginFolder, 'update', name + '.js') : fs.concat(this.pluginFolder, name + '.js')
 | 
			
		||||
            http.download(this.packageCache[name].url, pluginFile)
 | 
			
		||||
            this.i18n(sender, 'download.finish', { name })
 | 
			
		||||
            this.pluginManager.loadFromFile(pluginFile)
 | 
			
		||||
            this.i18n(sender, 'install.finish', { name })
 | 
			
		||||
            this.i18n(sender, update ? 'update.finish' : 'install.finish', { name })
 | 
			
		||||
        }).async().submit()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user