plugin.ts: Make application endpoint paths absolute

This commit is contained in:
Anmol Sethi 2020-11-03 21:42:21 -05:00
parent 139a28e0ea
commit 687094802e
No known key found for this signature in database
GPG Key ID: 8CEF1878FF10ADEB
5 changed files with 20 additions and 13 deletions

View File

@ -60,6 +60,8 @@ export class PluginAPI {
// Add plugin key to each app.
apps.push(
...pluginApps.map((app) => {
app = {...app, path: path.join(p.routerPath, app.path || "")}
app = {...app, iconPath: path.join(app.path || "", app.iconPath)}
return {
...app,
plugin: {
@ -69,7 +71,7 @@ export class PluginAPI {
displayName: p.displayName,
description: p.description,
path: p.path,
routerPath: p.routerPath,
},
}
}),
@ -192,8 +194,8 @@ export class PluginAPI {
if (!p.description) {
throw new Error("plugin missing description")
}
if (!p.path) {
throw new Error("plugin missing path")
if (!p.routerPath) {
throw new Error("plugin missing router path")
}
p.init({

View File

@ -21,7 +21,8 @@ describe("plugin", () => {
version: "4.0.0",
description: "This app does XYZ.",
iconPath: "/icon.svg",
iconPath: "/test-plugin/test-app/icon.svg",
path: "/test-plugin/test-app",
plugin: {
name: "test-plugin",
@ -30,7 +31,7 @@ describe("plugin", () => {
displayName: "Test Plugin",
description: "Plugin used in code-server tests.",
path: "/test-plugin",
routerPath: "/test-plugin",
},
},
],

View File

@ -1,5 +1,6 @@
out/index.js: src/index.ts
yarn build
# Typescript always emits, even on errors.
yarn build || rm out/index.js
node_modules: package.json yarn.lock
yarn

View File

@ -3,7 +3,7 @@ import * as fspath from "path"
import * as pluginapi from "../../../typings/pluginapi"
export const displayName = "Test Plugin"
export const path = "/test-plugin"
export const routerPath = "/test-plugin"
export const description = "Plugin used in code-server tests."
export function init(config: pluginapi.PluginConfig) {
@ -24,6 +24,7 @@ export function applications(): pluginapi.Application[] {
name: "Test App",
version: "4.0.0",
iconPath: "/icon.svg",
path: "/test-app",
description: "This app does XYZ.",
},

View File

@ -45,7 +45,9 @@ import * as express from "express"
*
* There is also a /api/applications endpoint to allow programmatic access to all
* available applications. It could be used to create a custom application dashboard
* for example.
* for example. An important difference with the API is that all application paths
* will be absolute (i.e have the plugin path prepended) so that they may be used
* directly.
*/
/**
@ -60,30 +62,30 @@ export interface Plugin {
*
* Fetched from package.json.
*/
name?: string
readonly name?: string
/**
* The version for the plugin in the overlay.
*
* Fetched from package.json.
*/
version?: string
readonly version?: string
/**
* Name used in the overlay.
*/
displayName: string
readonly displayName: string
/**
* Used in overlay.
* Should be a full sentence describing the plugin.
*/
description: string
readonly description: string
/**
* The path at which the plugin router is to be registered.
*/
path: string
readonly routerPath: string
/**
* init is called so that the plugin may initialize itself with the config.