plugin: Plugin modules now export a single top level identifier
Makes typing much easier. Addresse's Will's last comment.
This commit is contained in:
parent
8a8159c683
commit
14f408a837
@ -189,11 +189,16 @@ export class PluginAPI {
|
||||
)
|
||||
}
|
||||
|
||||
const pluginModule = require(dir)
|
||||
if (!pluginModule.plugin) {
|
||||
throw new Error("plugin module does not export a plugin")
|
||||
}
|
||||
|
||||
const p = {
|
||||
name: packageJSON.name,
|
||||
version: packageJSON.version,
|
||||
modulePath: dir,
|
||||
...require(dir),
|
||||
...pluginModule.plugin,
|
||||
} as Plugin
|
||||
|
||||
if (!p.displayName) {
|
||||
|
@ -2,33 +2,35 @@ import * as express from "express"
|
||||
import * as fspath from "path"
|
||||
import * as pluginapi from "../../../typings/pluginapi"
|
||||
|
||||
export const displayName = "Test Plugin"
|
||||
export const routerPath = "/test-plugin"
|
||||
export const homepageURL = "https://example.com"
|
||||
export const description = "Plugin used in code-server tests."
|
||||
export const plugin: pluginapi.Plugin = {
|
||||
displayName: "Test Plugin",
|
||||
routerPath: "/test-plugin",
|
||||
homepageURL: "https://example.com",
|
||||
description: "Plugin used in code-server tests.",
|
||||
|
||||
export function init(config: pluginapi.PluginConfig) {
|
||||
config.logger.debug("test-plugin loaded!")
|
||||
}
|
||||
|
||||
export function router(): express.Router {
|
||||
const r = express.Router()
|
||||
r.get("/goland/icon.svg", (req, res) => {
|
||||
res.sendFile(fspath.resolve(__dirname, "../public/icon.svg"))
|
||||
})
|
||||
return r
|
||||
}
|
||||
|
||||
export function applications(): pluginapi.Application[] {
|
||||
return [
|
||||
{
|
||||
name: "Test App",
|
||||
version: "4.0.0",
|
||||
iconPath: "/icon.svg",
|
||||
path: "/test-app",
|
||||
|
||||
description: "This app does XYZ.",
|
||||
homepageURL: "https://example.com",
|
||||
},
|
||||
]
|
||||
init: (config) => {
|
||||
config.logger.debug("test-plugin loaded!")
|
||||
},
|
||||
|
||||
router: () => {
|
||||
const r = express.Router()
|
||||
r.get("/goland/icon.svg", (req, res) => {
|
||||
res.sendFile(fspath.resolve(__dirname, "../public/icon.svg"))
|
||||
})
|
||||
return r
|
||||
},
|
||||
|
||||
applications: () => {
|
||||
return [
|
||||
{
|
||||
name: "Test App",
|
||||
version: "4.0.0",
|
||||
iconPath: "/icon.svg",
|
||||
path: "/test-app",
|
||||
|
||||
description: "This app does XYZ.",
|
||||
homepageURL: "https://example.com",
|
||||
},
|
||||
]
|
||||
},
|
||||
}
|
||||
|
5
typings/pluginapi.d.ts
vendored
5
typings/pluginapi.d.ts
vendored
@ -16,7 +16,8 @@ import * as express from "express"
|
||||
/**
|
||||
* Plugins
|
||||
*
|
||||
* Plugins are just node modules.
|
||||
* Plugins are just node modules that contain a top level export "plugin" that implements
|
||||
* the Plugin interface.
|
||||
*
|
||||
* 1. code-server uses $CS_PLUGIN to find plugins.
|
||||
*
|
||||
@ -78,7 +79,7 @@ import * as express from "express"
|
||||
*/
|
||||
|
||||
/**
|
||||
* Your plugin module must implement this interface.
|
||||
* Your plugin module must have a top level export "plugin" that implements this interface.
|
||||
*
|
||||
* The plugin's router will be mounted at <code-sever-root>/<plugin-path>
|
||||
*/
|
||||
|
Reference in New Issue
Block a user