feat: 优化插件加载逻辑
This commit is contained in:
@@ -26,6 +26,7 @@ global.setGlobal('MiaoScriptSourceFileMaps', sourceFileMaps)
|
||||
|
||||
export namespace jsconsole {
|
||||
export function readSourceMap(fileName: string, lineNumber: any) {
|
||||
if (lineNumber == 1) return { fileName, lineNumber }
|
||||
try {
|
||||
if (fileName.endsWith('js') || fileName.endsWith('ms')) {
|
||||
if (sourceMaps[fileName] === undefined) {
|
||||
@@ -68,10 +69,7 @@ export namespace jsconsole {
|
||||
console.ex(error)
|
||||
}
|
||||
}
|
||||
return {
|
||||
fileName,
|
||||
lineNumber
|
||||
}
|
||||
return { fileName, lineNumber }
|
||||
}
|
||||
|
||||
export function getStackTrace(ex: Error, color: boolean = true): string[] {
|
||||
|
||||
@@ -19,14 +19,23 @@ export namespace plugin {
|
||||
@injectable()
|
||||
export abstract class PluginManager {
|
||||
abstract scan(folder: string): void
|
||||
abstract build(): void
|
||||
abstract loadFromFile(file: string, ext?: any): Plugin
|
||||
abstract load(...args: any[]): void
|
||||
abstract enable(...args: any[]): void
|
||||
abstract disable(...args: any[]): void
|
||||
abstract reload(...args: any[]): void
|
||||
abstract require(loadMetadata: PluginLoadMetadata): PluginMetadata
|
||||
abstract build(metadata: PluginMetadata): Plugin
|
||||
abstract rebuild(plugin: plugin.Plugin): void
|
||||
abstract load(plugin: plugin.Plugin): void
|
||||
abstract enable(plugin: plugin.Plugin): void
|
||||
abstract disable(plugin: plugin.Plugin): void
|
||||
abstract reload(plugin: plugin.Plugin): void
|
||||
abstract has(name: string): boolean
|
||||
abstract get(name: string): plugin.Plugin
|
||||
abstract getPlugin(name: string): plugin.Plugin
|
||||
abstract getPlugins(): Map<string, plugin.Plugin>
|
||||
abstract buildPlugins(): void
|
||||
abstract rebuildPlugins(): void
|
||||
abstract loadPlugins(): void
|
||||
abstract enablePlugins(): void
|
||||
abstract disablePlugins(): void
|
||||
}
|
||||
export const PluginScanner = Symbol("PluginScanner")
|
||||
/**
|
||||
@@ -38,9 +47,13 @@ export namespace plugin {
|
||||
*/
|
||||
type: string
|
||||
/**
|
||||
* 插件文件
|
||||
* 插件文件(java.io.File)
|
||||
*/
|
||||
file?: string
|
||||
file?: any
|
||||
/**
|
||||
* 插件规范路径 canonicalPath
|
||||
*/
|
||||
path?: string
|
||||
/**
|
||||
* 插件实例
|
||||
*/
|
||||
@@ -122,11 +135,6 @@ export namespace plugin {
|
||||
* @param plugin 插件
|
||||
*/
|
||||
disable?(plugin: Plugin): void
|
||||
/**
|
||||
* Reload 阶段
|
||||
* @param plugin 插件
|
||||
*/
|
||||
reload?(plugin: Plugin): void
|
||||
}
|
||||
export interface Plugin {
|
||||
description: PluginMetadata
|
||||
|
||||
@@ -14,6 +14,7 @@ export namespace task {
|
||||
|
||||
constructor() {
|
||||
this.taskId = new AtomicInteger(0)
|
||||
process.on('core.disable', () => { this.disable() })
|
||||
process.on('task.finish', (task: task.Task) => {
|
||||
let taskId = task.getTaskId()
|
||||
this.cacheTasks.delete(taskId)
|
||||
@@ -24,28 +25,6 @@ export namespace task {
|
||||
})
|
||||
}
|
||||
|
||||
protected pluginCreate(plugin: plugin.Plugin, task: task.Task) {
|
||||
if (!this.pluginCacheTasks.has(plugin.description.name)) {
|
||||
this.pluginCacheTasks.set(plugin.description.name, new Map())
|
||||
}
|
||||
this.pluginCacheTasks.get(plugin.description.name).set(task.getTaskId(), task)
|
||||
return task
|
||||
}
|
||||
|
||||
protected pluginDisable(plugin: plugin.Plugin) {
|
||||
if (this.pluginCacheTasks.has(plugin.description.name)) {
|
||||
this.pluginCacheTasks.get(plugin.description.name).forEach((task) => task.cancel())
|
||||
this.pluginCacheTasks.delete(plugin.description.name)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得自增的任务ID
|
||||
*/
|
||||
protected nextId() {
|
||||
return this.taskId.incrementAndGet()
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建任务
|
||||
* @param func 任务内容
|
||||
@@ -73,6 +52,28 @@ export namespace task {
|
||||
if (plugin) { return this.pluginDisable(plugin) }
|
||||
this.disable0()
|
||||
}
|
||||
|
||||
protected pluginCreate(plugin: plugin.Plugin, task: task.Task) {
|
||||
if (!this.pluginCacheTasks.has(plugin.description.name)) {
|
||||
this.pluginCacheTasks.set(plugin.description.name, new Map())
|
||||
}
|
||||
this.pluginCacheTasks.get(plugin.description.name).set(task.getTaskId(), task)
|
||||
return task
|
||||
}
|
||||
|
||||
protected pluginDisable(plugin: plugin.Plugin) {
|
||||
if (this.pluginCacheTasks.has(plugin.description.name)) {
|
||||
this.pluginCacheTasks.get(plugin.description.name).forEach((task) => task.cancel())
|
||||
this.pluginCacheTasks.delete(plugin.description.name)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得自增的任务ID
|
||||
*/
|
||||
protected nextId() {
|
||||
return this.taskId.incrementAndGet()
|
||||
}
|
||||
protected abstract create0(owner: plugin.Plugin, func: Function, id: number): task.Task
|
||||
protected abstract disable0()
|
||||
}
|
||||
@@ -95,6 +96,9 @@ export namespace task {
|
||||
this.owner = owner
|
||||
this.func = func
|
||||
this.taskId = id
|
||||
this.on('finish', () => {
|
||||
process.emit('task.finish', this)
|
||||
})
|
||||
}
|
||||
|
||||
getOwner() {
|
||||
@@ -163,7 +167,6 @@ export namespace task {
|
||||
}
|
||||
|
||||
protected finish() {
|
||||
process.emit('task.finish', this)
|
||||
this.emit('finish', this)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user