diff --git a/src/backend/PluginLoader.ts b/src/backend/PluginLoader.ts index 7f93227..c560c1d 100644 --- a/src/backend/PluginLoader.ts +++ b/src/backend/PluginLoader.ts @@ -4,28 +4,13 @@ import { FolderStatus } from "upgiter/js/src/Types"; import { Plugin } from "./Plugin"; import { FrontworkAdmin } from "./Admin"; -export type PluginLoaderIfc = { - PluginLoader: { - installPlugin: (name:string, force:boolean) => Promise - startPlugin: (name:string) => Promise - updatePlugin: (name:string) => Promise - setPluginVersion: (name:string, tag:string) => Promise - getLoadedPluginNames: () => Promise - selfUpdate: (force:boolean) => Promise - destroy: () => Promise - } -} - -class PluginLoader -implements RPCExporter{ - - name = "PluginLoader" as "PluginLoader"; +class PluginLoader { private runningPlugins: Plugin[] private pluginUpdaters:{[name in string]:Git.Updater} = {} constructor(private admin:FrontworkAdmin){} - private async selfUpdate(force:boolean = false){ + async selfUpdate(force:boolean = false){ const updater = new Git.Updater({ schema: 'https', localPath: './dist', @@ -39,7 +24,7 @@ implements RPCExporter{ //logger.warn("Cloning fb-dist/admin into ./dist ..."+(force?" USING FORCE!":"")) status = await updater.cloneRepo(force) - //this.destroy() + this.destroy() const installer = eval("require")("./Installer").installAdmin installer(this.getPlugins()) } @@ -55,7 +40,6 @@ implements RPCExporter{ remotePath: 'frontwork-distribution', repoName: name }) - //new GitUpdater("./plugins/"+name) const status = await this.pluginUpdaters[name].cloneRepo(force) return status } @@ -79,8 +63,8 @@ implements RPCExporter{ } */ - let str = "../plugins/"+name+"/Plugin" - const pluginClass = await eval('require')(str) + let evalstr = "../plugins/"+name+"/Plugin" + const pluginClass = await eval('require')(evalstr) const pluginObj = new pluginClass.default(this) try{ if(pluginObj.start) @@ -142,10 +126,31 @@ implements RPCExporter{ return [...this.runningPlugins] } - private async destroy(){ + async destroy(){ return } +} + + +export type PluginLoaderIfc = { + PluginLoader: { + installPlugin: (name:string, force:boolean) => Promise + startPlugin: (name:string) => Promise + updatePlugin: (name:string) => Promise + setPluginVersion: (name:string, tag:string) => Promise + getLoadedPluginNames: () => Promise + selfUpdate: (force:boolean) => Promise + destroy: () => Promise + } +} + +class RPCPluginLoader +extends PluginLoader +implements RPCExporter{ + + name = "PluginLoader" as "PluginLoader"; + exportRPCs(){ return [{ name: "installPlugin" as "installPlugin",