fix: reload & download error

Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
MiaoWoo 2020-05-07 18:33:10 +08:00
parent 937b24ecda
commit 2dda9bd0fc
7 changed files with 31 additions and 18 deletions

View File

@ -11,7 +11,6 @@
"watch": "lerna run watch --parallel", "watch": "lerna run watch --parallel",
"build": "lerna run build --scope=\"@ccms/!(plugins)\"", "build": "lerna run build --scope=\"@ccms/!(plugins)\"",
"build:plugins": "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", "ug": "yarn upgrade-interactive --latest",
"lp": "lerna publish" "lp": "lerna publish"
}, },

View File

@ -23,9 +23,7 @@ export function concat(...args: string[]) {
* @returns {*} * @returns {*}
*/ */
export function file(...opts: any[]): any { export function file(...opts: any[]): any {
if (!opts[0]) { if (!opts[0]) { throw new Error("文件名称不得为 undefined 或者 null !") }
console.warn("文件名称不得为 undefined 或者 null !");
}
switch (opts.length) { switch (opts.length) {
case 1: case 1:
var f = opts[0]; var f = opts[0];

View File

@ -10,14 +10,13 @@ import { getPluginMetadatas, getPluginCommandMetadata, getPluginListenerMetadata
export function plugin(metadata: interfaces.PluginMetadata) { export function plugin(metadata: interfaces.PluginMetadata) {
return function (target: any) { return function (target: any) {
metadata.target = target; metadata.target = target;
metadata.source = metadata.source + '';
decorate(injectable(), target); decorate(injectable(), target);
Reflect.defineMetadata(METADATA_KEY.plugin, metadata, target); Reflect.defineMetadata(METADATA_KEY.plugin, metadata, target);
const previousMetadata: Map<string, interfaces.PluginMetadata> = getPluginMetadatas(); const previousMetadata: Map<string, interfaces.PluginMetadata> = getPluginMetadatas();
previousMetadata.set(metadata.name, metadata); previousMetadata.set(metadata.name, metadata);
Reflect.defineMetadata(METADATA_KEY.plugin, previousMetadata, Reflect); Reflect.defineMetadata(METADATA_KEY.plugin, previousMetadata, Reflect);
const previousSources: Map<string, interfaces.PluginMetadata> = getPluginSources(); 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); Reflect.defineMetadata(METADATA_KEY.souece, previousSources, Reflect);
}; };
} }

View File

@ -1,5 +1,5 @@
import { server, MiaoScriptConsole, event } from "@ccms/api"; import { server, MiaoScriptConsole, event } from "@ccms/api";
import { injectable, inject } from "@ccms/container"; import { injectable, inject, postConstruct } from "@ccms/container";
import { getPluginMetadata } from "./utils"; import { getPluginMetadata } from "./utils";
export namespace interfaces { export namespace interfaces {
@ -7,11 +7,17 @@ export namespace interfaces {
export abstract class Plugin { export abstract class Plugin {
public description: PluginMetadata; public description: PluginMetadata;
public logger: Console; public logger: Console;
@inject(server.Console)
private Console: MiaoScriptConsole;
constructor(@inject(server.Console) Console: MiaoScriptConsole) { constructor() {
this.description = getPluginMetadata(this) this.description = getPluginMetadata(this)
}
@postConstruct()
private initialize() {
// @ts-ignore // @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() { } public load() { }

View File

@ -35,7 +35,7 @@ export class PluginManagerImpl implements plugin.PluginManager {
this.pluginMap = new Map() this.pluginMap = new Map()
console.i18n('ms.plugin.event.map', { count: this.EventManager.mapEventName().toFixed(0), type: this.serverType }); console.i18n('ms.plugin.event.map', { count: this.EventManager.mapEventName().toFixed(0), type: this.serverType });
this.initialized = true; this.initialized = true;
this.plugnMappings = getPluginSources() this.plugnMappings = getPluginSources();
} }
} }
@ -62,9 +62,13 @@ export class PluginManagerImpl implements plugin.PluginManager {
this.execPluginStage(plugin, stage) this.execPluginStage(plugin, stage)
} }
/**
*
* @param file java.io.File
*/
loadFromFile(file: string): interfaces.Plugin { loadFromFile(file: string): interfaces.Plugin {
this.loadPlugin(file) this.loadPlugin(file)
let plugin = this.buildPlugin(this.plugnMappings.get(file)) let plugin = this.buildPlugin(this.plugnMappings.get(file.toString()))
this.load(plugin) this.load(plugin)
this.enable(plugin) this.enable(plugin)
return plugin; return plugin;

View File

@ -1,6 +1,8 @@
import { interfaces } from './interfaces' import { interfaces } from './interfaces'
import { METADATA_KEY } from './constants' import { METADATA_KEY } from './constants'
const pluginSourceCache = new Map<string, interfaces.PluginMetadata>();
function getPlugins() { function getPlugins() {
return [...getPluginMetadatas().values()].map((target) => target.target); return [...getPluginMetadatas().values()].map((target) => target.target);
} }
@ -13,7 +15,7 @@ function getPluginSources() {
let pluginSources: Map<string, interfaces.PluginMetadata> = Reflect.getMetadata( let pluginSources: Map<string, interfaces.PluginMetadata> = Reflect.getMetadata(
METADATA_KEY.souece, METADATA_KEY.souece,
Reflect Reflect
) || new Map<string, interfaces.PluginMetadata>(); ) || pluginSourceCache;
return pluginSources; return pluginSources;
} }

View File

@ -34,6 +34,7 @@ let langMap = {
'download.url': '§6插件下载地址: §b{url}', 'download.url': '§6插件下载地址: §b{url}',
'download.finish': '§6插件 §b{name} §a下载完毕 开始加载 ...', 'download.finish': '§6插件 §b{name} §a下载完毕 开始加载 ...',
'install.finish': '§6插件 §b{name} §a安装成功!', 'install.finish': '§6插件 §b{name} §a安装成功!',
'update.finish': '§6插件 §b{name} §a更新成功!',
} }
let fallbackMap = langMap let fallbackMap = langMap
@ -56,6 +57,8 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
private translate: Translate; private translate: Translate;
private subCommnadNameCache: string[];
load() { load() {
this.translate = new Translate({ this.translate = new Translate({
langMap, langMap,
@ -118,6 +121,7 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
} }
cmdreload(sender: any, name: string) { cmdreload(sender: any, name: string) {
name = name || this.description.name
if (this.checkPlugin(sender, name)) { if (this.checkPlugin(sender, name)) {
this.pluginManager.reload(name); this.pluginManager.reload(name);
this.i18n(sender, 'plugin.reload.finish', { name }) this.i18n(sender, 'plugin.reload.finish', { name })
@ -179,13 +183,13 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
update(sender: any, name: string) { update(sender: any, name: string) {
if (this.checkCloudPlugin(sender, name)) { if (this.checkCloudPlugin(sender, name)) {
this.download(sender, name, true);
} }
} }
@tab() @tab()
tabmpm(sender: any, command: any, args: string | any[]) { 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) { if (args.length > 1) {
switch (args[0]) { switch (args[0]) {
case "list": case "list":
@ -197,6 +201,7 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
case "load": case "load":
case "unload": case "unload":
case "reload": case "reload":
case "deploy":
return [...this.pluginManager.getPlugins().keys()]; return [...this.pluginManager.getPlugins().keys()];
} }
} }
@ -211,15 +216,15 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
}).async().submit(); }).async().submit();
} }
download(sender: any, name: string) { download(sender: any, name: string, update: boolean = false) {
this.taskManager.create(() => { this.taskManager.create(() => {
this.i18n(sender, 'download.start', { name }) this.i18n(sender, 'download.start', { name })
this.i18n(sender, 'download.url', { url: this.packageCache[name].url }) 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) http.download(this.packageCache[name].url, pluginFile)
this.i18n(sender, 'download.finish', { name }) this.i18n(sender, 'download.finish', { name })
this.pluginManager.loadFromFile(pluginFile) this.pluginManager.loadFromFile(pluginFile)
this.i18n(sender, 'install.finish', { name }) this.i18n(sender, update ? 'update.finish' : 'install.finish', { name })
}).async().submit() }).async().submit()
} }
} }