Re-export logger field for plugins

This commit is contained in:
Asher 2021-01-13 16:25:39 -06:00
parent 6ce29311a8
commit 5f1fab7d27
No known key found for this signature in database
GPG Key ID: D63C1EF81242354A
5 changed files with 30 additions and 6 deletions

View File

@ -35,7 +35,7 @@ rules:
[error, { alphabetize: { order: "asc" }, groups: [["builtin", "external", "internal"], "parent", "sibling"] }] [error, { alphabetize: { order: "asc" }, groups: [["builtin", "external", "internal"], "parent", "sibling"] }]
no-async-promise-executor: off no-async-promise-executor: off
# This isn't a real module, just types, which apparently doesn't resolve. # This isn't a real module, just types, which apparently doesn't resolve.
import/no-unresolved: [error, { ignore: ["express-serve-static-core"] }] import/no-unresolved: [error, { ignore: ["express-serve-static-core", "code-server"] }]
settings: settings:
# Does not work with CommonJS unfortunately. # Does not work with CommonJS unfortunately.

View File

@ -8,6 +8,21 @@ import { version } from "./constants"
import * as util from "./util" import * as util from "./util"
const fsp = fs.promises const fsp = fs.promises
/**
* Inject code-server when `require`d. This is required because the API provides
* more than just types so these need to be provided at run-time.
*/
const originalLoad = require("module")._load
// eslint-disable-next-line @typescript-eslint/no-explicit-any
require("module")._load = function (request: string, parent: object, isMain: boolean): any {
if (request === "code-server") {
return {
field,
}
}
return originalLoad.apply(this, [request, parent, isMain])
}
interface Plugin extends pluginapi.Plugin { interface Plugin extends pluginapi.Plugin {
/** /**
* These fields are populated from the plugin's package.json * These fields are populated from the plugin's package.json

View File

@ -1,8 +1,8 @@
import * as cs from "code-server"
import * as express from "express" import * as express from "express"
import * as fspath from "path" import * as fspath from "path"
import * as pluginapi from "../../../typings/pluginapi"
export const plugin: pluginapi.Plugin = { export const plugin: cs.Plugin = {
displayName: "Test Plugin", displayName: "Test Plugin",
routerPath: "/test-plugin", routerPath: "/test-plugin",
homepageURL: "https://example.com", homepageURL: "https://example.com",

View File

@ -42,8 +42,10 @@
/* Module Resolution Options */ /* Module Resolution Options */
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ "baseUrl": "./" /* Base directory to resolve non-absolute module names. */,
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ "paths": {
"code-server": ["../../typings/pluginapi"]
} /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */,
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
// "typeRoots": [], /* List of folders to include type definitions from. */ // "typeRoots": [], /* List of folders to include type definitions from. */
// "types": [], /* Type declaration files to be included in compilation. */ // "types": [], /* Type declaration files to be included in compilation. */

View File

@ -1,7 +1,7 @@
/** /**
* This file describes the code-server plugin API for adding new applications. * This file describes the code-server plugin API for adding new applications.
*/ */
import { Logger } from "@coder/logger" import { field, Logger } from "@coder/logger"
import * as express from "express" import * as express from "express"
/** /**
@ -78,6 +78,13 @@ import * as express from "express"
* ] * ]
*/ */
/**
* Use to add a field to a log.
*
* Re-exported so plugins don't have to import duplicate copies of the logger.
*/
export { field }
/** /**
* Your plugin module must have a top level export "plugin" that implements this interface. * Your plugin module must have a top level export "plugin" that implements this interface.
* *