Add deinit for plugins
This commit is contained in:
parent
3c6fac9ce4
commit
017b1cc633
@ -46,7 +46,7 @@ interface Application extends pluginapi.Application {
|
|||||||
/*
|
/*
|
||||||
* Clone of the above without functions.
|
* Clone of the above without functions.
|
||||||
*/
|
*/
|
||||||
plugin: Omit<Plugin, "init" | "router" | "applications">
|
plugin: Omit<Plugin, "init" | "deinit" | "router" | "applications">
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -254,6 +254,21 @@ export class PluginAPI {
|
|||||||
|
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async dispose(): Promise<void> {
|
||||||
|
await Promise.all(
|
||||||
|
Array.from(this.plugins.values()).map(async (p) => {
|
||||||
|
if (!p.deinit) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
await p.deinit()
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error("plugin failed to deinit", field("name", p.name), field("error", error.message))
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface PackageJSON {
|
interface PackageJSON {
|
||||||
|
@ -15,6 +15,7 @@ import { Heart } from "../heart"
|
|||||||
import { redirect, replaceTemplates } from "../http"
|
import { redirect, replaceTemplates } from "../http"
|
||||||
import { PluginAPI } from "../plugin"
|
import { PluginAPI } from "../plugin"
|
||||||
import { getMediaMime, paths } from "../util"
|
import { getMediaMime, paths } from "../util"
|
||||||
|
import { wrapper } from "../wrapper"
|
||||||
import * as apps from "./apps"
|
import * as apps from "./apps"
|
||||||
import * as domainProxy from "./domainProxy"
|
import * as domainProxy from "./domainProxy"
|
||||||
import * as health from "./health"
|
import * as health from "./health"
|
||||||
@ -148,6 +149,7 @@ export const register = async (
|
|||||||
await papi.loadPlugins()
|
await papi.loadPlugins()
|
||||||
papi.mount(app, wsApp)
|
papi.mount(app, wsApp)
|
||||||
app.use("/api/applications", apps.router(papi))
|
app.use("/api/applications", apps.router(papi))
|
||||||
|
wrapper.onDispose(() => papi.dispose())
|
||||||
|
|
||||||
app.use(() => {
|
app.use(() => {
|
||||||
throw new HttpError("Not Found", HttpCode.NotFound)
|
throw new HttpError("Not Found", HttpCode.NotFound)
|
||||||
|
5
typings/pluginapi.d.ts
vendored
5
typings/pluginapi.d.ts
vendored
@ -167,6 +167,11 @@ export interface Plugin {
|
|||||||
*/
|
*/
|
||||||
init(config: PluginConfig): void
|
init(config: PluginConfig): void
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the plugin should dispose/shutdown everything.
|
||||||
|
*/
|
||||||
|
deinit?(): Promise<void>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the plugin's router.
|
* Returns the plugin's router.
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user