fix: reload & download error
Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
parent
937b24ecda
commit
2dda9bd0fc
@ -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"
|
||||||
},
|
},
|
||||||
|
@ -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];
|
||||||
|
@ -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);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -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() { }
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user