diff --git a/package.json b/package.json index 22fb32f4..336edd58 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "cover": "nyc pnpm test", "fast-cover": "FAST_TEST=y nyc pnpm test", "ci-cover": "nyc --reporter=lcovonly pnpm run-script test", - "lint": "eslint \"*.js\" packages plugins test", - "lint-fix": "eslint --fix \"*.js\" packages plugins test", + "lint": "eslint packages plugins test", + "lint-fix": "eslint --fix packages plugins test", "docs": "typedoc", "bundle-dependencies": "bundle-dependencies" }, diff --git a/packages/controller/src/ControlConnection.ts b/packages/controller/src/ControlConnection.ts index 4e0ba940..940bdec3 100644 --- a/packages/controller/src/ControlConnection.ts +++ b/packages/controller/src/ControlConnection.ts @@ -230,10 +230,10 @@ export default class ControlConnection extends BaseConnection { await hostConfig.init(); hostConfig.set("host.controller_url", this._controller.getControllerUrl()); - if (request.id !== null) { + if (request.id !== undefined) { hostConfig.set("host.id", request.id); } - if (request.name !== null) { + if (request.name !== undefined) { hostConfig.set("host.name", request.name); } if (request.generateToken) { diff --git a/packages/controller/src/Controller.ts b/packages/controller/src/Controller.ts index ce132d28..e21bfe68 100644 --- a/packages/controller/src/Controller.ts +++ b/packages/controller/src/Controller.ts @@ -113,7 +113,7 @@ export default class Controller { constructor( clusterLogger: winston.Logger, - pluginInfos: any[], + pluginInfos: lib.PluginNodeEnvInfo[], configPath: string, config: lib.ControllerConfig, @@ -656,7 +656,7 @@ export default class Controller { host.name, host.id, this.wsServer.hostConnections.has(host.id), - host.public_address === null ? undefined : host.public_address, + host.public_address, host.token_valid_after, ); @@ -778,7 +778,7 @@ export default class Controller { // Assign to target instance.config.set("instance.assigned_host", hostId); this.instancesDirty = true; - if (hostId !== null && newHostConnection) { + if (hostId !== undefined && newHostConnection) { await newHostConnection.send( new lib.InstanceAssignInternalRequest(instanceId, instance.config.serialize("host")) ); diff --git a/packages/controller/src/HostConnection.ts b/packages/controller/src/HostConnection.ts index 9dec091e..71ffafc2 100644 --- a/packages/controller/src/HostConnection.ts +++ b/packages/controller/src/HostConnection.ts @@ -284,9 +284,7 @@ export default class HostConnection extends BaseConnection { this._controller.userManager.notifyLeave(user, instanceId); } - if (event.stats) { - user.instanceStats.set(instanceId, event.stats); - } + user.instanceStats.set(instanceId, event.stats); user.recalculatePlayerStats(); this._controller.userUpdated(user); diff --git a/packages/controller/src/routes.ts b/packages/controller/src/routes.ts index 708c090b..719584ba 100644 --- a/packages/controller/src/routes.ts +++ b/packages/controller/src/routes.ts @@ -95,7 +95,7 @@ async function getMetrics(req: Request, res: Response, next: any) { function getPlugins(req: Request, res: Response) { let plugins: lib.PluginWebApi[] = []; - for (let pluginInfo of req.app.locals.controller.pluginInfos) { + for (let pluginInfo of (req.app.locals.controller as Controller).pluginInfos) { let name = pluginInfo.name; let loaded = req.app.locals.controller.plugins.has(name); let enabled = loaded && req.app.locals.controller.config.group(pluginInfo.name).get("load_plugin"); @@ -115,7 +115,7 @@ function getPlugins(req: Request, res: Response) { if (web.main === "remoteEntry.js") { web.error = "Incompatible old remoteEntry.js entrypoint."; } - plugins.push({ name, version: pluginInfo.version, enabled, loaded, web, requirePath: pluginInfo.requirePath }); + plugins.push({ name, version: pluginInfo.version, enabled, loaded, web, npmPackage: pluginInfo.npmPackage }); } res.send(plugins); } diff --git a/packages/controller/typedoc.json b/packages/controller/typedoc.json index 006af7ed..ff5edcb9 100644 --- a/packages/controller/typedoc.json +++ b/packages/controller/typedoc.json @@ -1,4 +1,4 @@ { - "entryPoints": ["controller.ts"], + "entryPoints": ["index.ts"], "includeVersion": true } diff --git a/packages/ctl/src/commands.ts b/packages/ctl/src/commands.ts index ecacb86e..a1cfdcfe 100644 --- a/packages/ctl/src/commands.ts +++ b/packages/ctl/src/commands.ts @@ -109,7 +109,7 @@ controllerConfigCommands.add(new lib.Command({ "stdin": { describe: "read value from stdin", nargs: 0, type: "boolean" }, }); }], - handler: async function(args: { field: string, value: string, stdin?: boolean }, control: Control) { + handler: async function(args: { field: string, value?: string, stdin?: boolean }, control: Control) { if (args.stdin) { args.value = (await lib.readStream(process.stdin)).toString().replace(/\r?\n$/, ""); } else if (args.value === undefined) { @@ -128,7 +128,7 @@ controllerConfigCommands.add(new lib.Command({ "stdin": { describe: "read value from stdin", nargs: 0, type: "boolean" }, }); }], - handler: async function(args: { field: string, prop: string, value: string, stdin?: boolean }, control: Control) { + handler: async function(args: { field: string, prop: string, value?: string, stdin?: boolean }, control: Control) { if (args.stdin) { args.value = (await lib.readStream(process.stdin)).toString().replace(/\r?\n$/, ""); } @@ -139,7 +139,7 @@ controllerConfigCommands.add(new lib.Command({ } } catch (err: any) { // See note for the instance version of set-prop - if (args.stdin || /^(\[.*]|{.*}|".*")$/.test(args.value)) { + if (args.stdin || /^(\[.*]|{.*}|".*")$/.test(args.value!)) { throw new lib.CommandError(`In parsing value '${args.value}': ${err.message}`); } value = args.value; @@ -354,7 +354,7 @@ instanceConfigCommands.add(new lib.Command({ }); }], handler: async function( - args: { instance: string, field: string, value: string, stdin?: boolean }, + args: { instance: string, field: string, value?: string, stdin?: boolean }, control: Control, ) { let instanceId = await lib.resolveInstance(control, args.instance); @@ -378,7 +378,7 @@ instanceConfigCommands.add(new lib.Command({ }); }], handler: async function( - args: { instance: string, field: string, prop: string, value: string, stdin?: boolean }, + args: { instance: string, field: string, prop: string, value?: string, stdin?: boolean }, control: Control ) { let instanceId = await lib.resolveInstance(control, args.instance); @@ -407,7 +407,7 @@ instanceConfigCommands.add(new lib.Command({ // bash : '""That'\''s a \" quote""' // bash + npx : '""That'\''s a \" quote""' // bash + npx -s sh : "'\"\"That'\\''s a \\\" quote\"\"'" - if (args.stdin || /^(\[.*]|{.*}|".*")$/.test(args.value)) { + if (args.stdin || /^(\[.*]|{.*}|".*")$/.test(args.value!)) { throw new lib.CommandError(`In parsing value '${args.value}': ${err.message}`); } value = args.value; diff --git a/packages/ctl/typedoc.json b/packages/ctl/typedoc.json new file mode 100644 index 00000000..ff5edcb9 --- /dev/null +++ b/packages/ctl/typedoc.json @@ -0,0 +1,4 @@ +{ + "entryPoints": ["index.ts"], + "includeVersion": true +} diff --git a/packages/host/src/Instance.ts b/packages/host/src/Instance.ts index 39945525..6be4638e 100644 --- a/packages/host/src/Instance.ts +++ b/packages/host/src/Instance.ts @@ -446,7 +446,7 @@ rcon.print(game.table_to_json(players))`.replace(/\r?\n/g, " "); new lib.InstanceStatusChangedEvent( this.id, status, - this.server && this.server.gamePort || this.config.get("factorio.game_port") || undefined, + this.server.gamePort || this.config.get("factorio.game_port") || undefined, ), ); } diff --git a/packages/host/src/server.ts b/packages/host/src/server.ts index 98144abb..81d6936f 100644 --- a/packages/host/src/server.ts +++ b/packages/host/src/server.ts @@ -713,7 +713,7 @@ export class FactorioServer extends events.EventEmitter { async init() { this._check(["new"]); [this._dataDir, this._version] = await findVersion(this._factorioDir, this._targetVersion); - this.rconPassword = this.rconPassword ?? await generatePassword(10); + this.rconPassword = this.rconPassword as string | undefined ?? await generatePassword(10); this._state = "init"; } diff --git a/packages/host/typedoc.json b/packages/host/typedoc.json new file mode 100644 index 00000000..ff5edcb9 --- /dev/null +++ b/packages/host/typedoc.json @@ -0,0 +1,4 @@ +{ + "entryPoints": ["index.ts"], + "includeVersion": true +} diff --git a/packages/lib/src/api.ts b/packages/lib/src/api.ts index b9ecc4d0..43289178 100644 --- a/packages/lib/src/api.ts +++ b/packages/lib/src/api.ts @@ -7,5 +7,10 @@ export type PluginWebApi = { main: string; error?: string; }; - requirePath: string; + /** + * NPM package this plugin is published as. Not present if the package + * is private or the path used to load it does not match the name of the + * package. + */ + npmPackage?: string; } diff --git a/packages/lib/src/data/ExportManifest.ts b/packages/lib/src/data/ExportManifest.ts index f1abc319..f3edfe06 100644 --- a/packages/lib/src/data/ExportManifest.ts +++ b/packages/lib/src/data/ExportManifest.ts @@ -19,9 +19,7 @@ export default class ExportManifest { * - locale: JSON of flattened Map entries of en locale strings from the game. */ public assets: Record - ) { - if (assets) { this.assets = assets; } - } + ) { } static jsonSchema = Type.Object({ "assets": Type.Record(Type.String(), Type.String()), diff --git a/packages/lib/src/data/ModPack.ts b/packages/lib/src/data/ModPack.ts index 14fc7f29..e0366420 100644 --- a/packages/lib/src/data/ModPack.ts +++ b/packages/lib/src/data/ModPack.ts @@ -281,7 +281,7 @@ export default class ModPack { function propertyTreeBytes(element: PropertyType) { let type: number; let dataBytes: Buffer; - if (typeof element === null) { + if (element === null) { type = 1; dataBytes = Buffer.alloc(0); } else if (typeof element === "boolean") { diff --git a/packages/lib/src/link/link.ts b/packages/lib/src/link/link.ts index b27cbfe7..deabd028 100644 --- a/packages/lib/src/link/link.ts +++ b/packages/lib/src/link/link.ts @@ -89,10 +89,10 @@ export class Link { router?: Router = undefined; validateSent = true; - _requestHandlers = new Map(); - _requestFallbacks = new Map(); - _eventHandlers = new Map(); - _eventSnoopers = new Map(); + _requestHandlers = new Map, RequestHandler>(); + _requestFallbacks = new Map, RequestHandler>(); + _eventHandlers = new Map, EventHandler>(); + _eventSnoopers = new Map, EventHandler>(); _pendingRequests = new Map(); _forwardedRequests = new Map(); _nextRequestId = 1; @@ -189,7 +189,7 @@ export class Link { } if (message.type === "event" && this._eventSnoopers.has((entry as EventEntry).Event)) { - let handler = this._eventSnoopers.get((entry as EventEntry).Event); + let handler = this._eventSnoopers.get((entry as EventEntry).Event)!; let event = message as libData.MessageEvent; handler((entry as EventEntry).eventFromJSON(event.data), event.src, event.dst).catch((err: Error) => { logger.error(`Unexpected error snooping ${event.name}:\n${err.stack}`); @@ -350,7 +350,7 @@ export class Link { _processRequest( message: libData.MessageRequest, entry: RequestEntry, - handler: RequestHandler, + handler?: RequestHandler, spoofedSrc?: libData.Address ) { if (!handler) { @@ -579,7 +579,7 @@ export class Link { if (this._requestHandlers.has(Request)) { throw new Error(`Request ${entry.name} is already registered`); } - this._requestHandlers.set(Request, handler); + this._requestHandlers.set(Request, handler as RequestHandler); } fallbackRequest(Request: RequestClass, handler: RequestHandler) { @@ -590,7 +590,7 @@ export class Link { if (this._requestFallbacks.has(Request)) { throw new Error(`Request ${entry.name} is already fallbacked`); } - this._requestFallbacks.set(Request, handler); + this._requestFallbacks.set(Request, handler as RequestHandler); } handleEvent(Event: EventClass, handler: EventHandler) { @@ -601,7 +601,7 @@ export class Link { if (this._eventHandlers.has(Event)) { throw new Error(`Event ${entry.name} is already registered`); } - this._eventHandlers.set(Event, handler); + this._eventHandlers.set(Event, handler as EventHandler); } snoopEvent(Event: EventClass, handler: EventHandler) { @@ -612,7 +612,7 @@ export class Link { if (this._eventSnoopers.has(Event)) { throw new Error(`Event ${entry.name} is already snooped`); } - this._eventSnoopers.set(Event, handler); + this._eventSnoopers.set(Event, handler as EventHandler); } static register(Class: RequestClass): void; @@ -646,7 +646,7 @@ export class Link { return () => new Request(); } - static responseFromJSON(Response: JSONDeserialisable, name: string) { + static responseFromJSON(Response: Partial>, name: string) { if (!Response.jsonSchema) { throw new Error(`Response for Request ${name} is missing static jsonSchema`); } @@ -661,12 +661,12 @@ export class Link { `Response for request ${name} failed validation`, validate.errors ); } - return Response.fromJSON(json); + return Response.fromJSON!(json); }; } static allowedTypes( - types: libData.AddressType | readonly libData.AddressType[], + types: libData.AddressType | readonly libData.AddressType[] | undefined, name: string, side: "src" | "dst" ) { diff --git a/packages/lib/src/plugin.ts b/packages/lib/src/plugin.ts index 2f6b71a9..6cf323af 100644 --- a/packages/lib/src/plugin.ts +++ b/packages/lib/src/plugin.ts @@ -35,6 +35,12 @@ export type PluginNodeEnvInfo = PluginDeclaration & { requirePath: string; version: string; manifest: any; + /** + * NPM package this plugin is published as. Not present if the package + * is private or the path used to load it does not match the name of the + * package. + */ + npmPackage?: string; }; export type PluginWebpackEnvInfo = PluginDeclaration & { diff --git a/packages/lib/src/plugin_loader.ts b/packages/lib/src/plugin_loader.ts index e99ac0c2..207e17ed 100644 --- a/packages/lib/src/plugin_loader.ts +++ b/packages/lib/src/plugin_loader.ts @@ -24,7 +24,7 @@ export async function loadPluginInfos(pluginList: Map) { let plugins: libPlugin.PluginNodeEnvInfo[] = []; for (let [pluginName, pluginPath] of pluginList) { let pluginInfo: libPlugin.PluginNodeEnvInfo; - let pluginPackage: { version: string, main?: string }; + let pluginPackage: { name?: string, version: string, main?: string, private?: boolean }; try { pluginInfo = require(pluginPath).default; @@ -47,6 +47,7 @@ export async function loadPluginInfos(pluginList: Map) { pluginInfo.requirePath = pluginPath; pluginInfo.version = pluginPackage.version; + pluginInfo.npmPackage = !pluginPackage.private && pluginPath === pluginPackage.name ? pluginPath : undefined; plugins.push(pluginInfo); } return plugins; diff --git a/packages/lib/src/schema.ts b/packages/lib/src/schema.ts index de8032f4..c783a3c9 100644 --- a/packages/lib/src/schema.ts +++ b/packages/lib/src/schema.ts @@ -21,7 +21,7 @@ export function compile(schema: JSONSchemaType) { return ajv.compile(schema); } - let doValidate: ValidateFunction; + let doValidate: ValidateFunction | undefined; const validate = > function (data) { if (!doValidate) { doValidate = ajv.compile(schema); diff --git a/packages/lib/src/stream.ts b/packages/lib/src/stream.ts index 315e6a13..351cb89a 100644 --- a/packages/lib/src/stream.ts +++ b/packages/lib/src/stream.ts @@ -150,7 +150,7 @@ export async function createReverseReadStream(path: string, options?: ReadStream buffer: Buffer, offset: number, length: number, - position: number, + position: number | null | undefined, callback: () => void, ) { assert(fd === fileFd); diff --git a/packages/lib/tsconfig.json b/packages/lib/tsconfig.json index e64350e1..dbc005eb 100644 --- a/packages/lib/tsconfig.json +++ b/packages/lib/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "../../tsconfig.node.json", - "include": ["index.ts", "build_mod.js", "src/**/*.ts", "src/**/*.js"], + "include": ["index.ts", "browser.ts", "build_mod.js", "src/**/*.ts", "src/**/*.js"], "compilerOptions": { "outDir": "dist", "allowJs": true, diff --git a/packages/web_ui/src/components/AssignInstanceModal.tsx b/packages/web_ui/src/components/AssignInstanceModal.tsx index 06d05be4..b033469f 100644 --- a/packages/web_ui/src/components/AssignInstanceModal.tsx +++ b/packages/web_ui/src/components/AssignInstanceModal.tsx @@ -74,7 +74,7 @@ export default function AssignInstanceModal(props: AssignInstanceModalProps) { the instance. Note that reassigning an instance from one host to another will not move the server save over. -
+ @@ -836,7 +834,7 @@ export default function ModPackViewPage() { @@ -853,7 +851,7 @@ export default function ModPackViewPage() { }]} > diff --git a/packages/web_ui/src/components/PluginViewPage.tsx b/packages/web_ui/src/components/PluginViewPage.tsx index ef33ef45..01aef936 100644 --- a/packages/web_ui/src/components/PluginViewPage.tsx +++ b/packages/web_ui/src/components/PluginViewPage.tsx @@ -11,7 +11,7 @@ import notify from "../util/notify"; export default function PluginViewPage() { let params = useParams(); let plugins = useContext(ControlContext).plugins; - let [pluginList, setPluginList] = useState([]); + let [pluginList, setPluginList] = useState(); let pluginName = String(params.name); useEffect(() => { diff --git a/packages/web_ui/src/components/RolesPage.tsx b/packages/web_ui/src/components/RolesPage.tsx index 5c257289..cd8ca8ed 100644 --- a/packages/web_ui/src/components/RolesPage.tsx +++ b/packages/web_ui/src/components/RolesPage.tsx @@ -74,7 +74,7 @@ export default function RolesPage() { return || undefined} + extra={account.hasPermission("core.role.create") ? : undefined} /> - {roles && [...roles.values()].map(r => {r.name})} @@ -182,7 +182,7 @@ export default function UserViewPage() { {account.hasPermission("core.user.update_roles") ? roleSelector : [...user.roleIds!].map(id => { - roles ? (roles.get(id) || { name: id }).name : id + roles?.get(id)?.name ?? id }) } diff --git a/packages/web_ui/src/components/UsersPage.tsx b/packages/web_ui/src/components/UsersPage.tsx index 9942fce0..e0966187 100644 --- a/packages/web_ui/src/components/UsersPage.tsx +++ b/packages/web_ui/src/components/UsersPage.tsx @@ -75,7 +75,7 @@ export default function UsersPage() { return || undefined} + extra={account.hasPermission("core.user.create") ? : undefined} />
(exportManifestCache || emptyCache); diff --git a/packages/web_ui/src/model/item_metadata.ts b/packages/web_ui/src/model/item_metadata.ts index 6ef564f3..0b1658ed 100644 --- a/packages/web_ui/src/model/item_metadata.ts +++ b/packages/web_ui/src/model/item_metadata.ts @@ -17,7 +17,6 @@ export function useItemMetadata() { async function load() { if ( !exportManifest - || !exportManifest.assets || !exportManifest.assets["item-metadata"] || !exportManifest.assets["item-spritesheet"] ) { diff --git a/packages/web_ui/src/model/locale.ts b/packages/web_ui/src/model/locale.ts index cce48be2..95b136ef 100644 --- a/packages/web_ui/src/model/locale.ts +++ b/packages/web_ui/src/model/locale.ts @@ -9,7 +9,7 @@ export function useLocale(): Map { let [locale, setLocale] = useState>(localeCache || new Map()); useEffect(() => { async function load() { - if (!exportManifest?.assets?.["locale"]) { + if (!exportManifest?.assets["locale"]) { return; } let response = await fetch(`${staticRoot}static/${exportManifest.assets["locale"]}`); @@ -27,4 +27,3 @@ export function useLocale(): Map { return locale; } - diff --git a/packages/web_ui/src/util/clipboard.ts b/packages/web_ui/src/util/clipboard.ts index ce15d42d..4d80e9f3 100644 --- a/packages/web_ui/src/util/clipboard.ts +++ b/packages/web_ui/src/util/clipboard.ts @@ -10,12 +10,9 @@ class Permission extends EventEmitter { status => { this.status = status; this.emit("change", this.status.state); - - if (status.addEventListener) { - status.addEventListener("change", () => { - this.emit("change", this.status.state); - }); - } + status.addEventListener("change", () => { + this.emit("change", this.status.state); + }); }, // Pretend the clipboard will work if this query fails. () => { diff --git a/packages/web_ui/typedoc.json b/packages/web_ui/typedoc.json new file mode 100644 index 00000000..5aab5474 --- /dev/null +++ b/packages/web_ui/typedoc.json @@ -0,0 +1,4 @@ +{ + "entryPoints": ["src/index.ts"], + "includeVersion": true +} diff --git a/plugins/inventory_sync/controller.ts b/plugins/inventory_sync/controller.ts index 24e83643..e29e9f80 100644 --- a/plugins/inventory_sync/controller.ts +++ b/plugins/inventory_sync/controller.ts @@ -24,7 +24,7 @@ async function loadDatabase(config: lib.ControllerConfig, logger: lib.Logger) { async function saveDatabase( controllerConfig: lib.ControllerConfig, - playerDatastore: Map, + playerDatastore: Map | undefined, logger: lib.Logger, ) { if (playerDatastore) { diff --git a/plugins/research_sync/controller.ts b/plugins/research_sync/controller.ts index 79decf82..f1f3f12d 100644 --- a/plugins/research_sync/controller.ts +++ b/plugins/research_sync/controller.ts @@ -141,6 +141,7 @@ export class ControllerPlugin extends BaseControllerPlugin { let { name, level } = event; let tech = this.technologies.get(name); if (!tech || tech.level <= level) { + this.controller.sendTo("allInstances", event); this.progressToBroadcast.delete(name); this.technologies.set(name, { level, progress: null, researched: true }); this.technologiesDirty = true; diff --git a/plugins/research_sync/instance.ts b/plugins/research_sync/instance.ts index 77feb72d..0b47531f 100644 --- a/plugins/research_sync/instance.ts +++ b/plugins/research_sync/instance.ts @@ -56,7 +56,7 @@ export class InstancePlugin extends BaseInstancePlugin { } async researchFinished(tech: IpcFinished) { - this.instance.sendTo("allInstances", new FinishedEvent(tech.name, tech.level)); + this.instance.sendTo("controller", new FinishedEvent(tech.name, tech.level)); } async handleFinishedEvent(event: FinishedEvent) { diff --git a/plugins/research_sync/messages.ts b/plugins/research_sync/messages.ts index b7768287..99eff2a5 100644 --- a/plugins/research_sync/messages.ts +++ b/plugins/research_sync/messages.ts @@ -69,7 +69,7 @@ export class FinishedEvent { declare ["constructor"]: typeof FinishedEvent; static type = "event" as const; static src = ["instance", "controller"] as const; - static dst = "instance" as const; + static dst = ["instance", "controller"] as const; static plugin = "research_sync" as const; constructor( diff --git a/plugins/subspace_storage/controller.ts b/plugins/subspace_storage/controller.ts index e0c36f8d..a6135b2f 100644 --- a/plugins/subspace_storage/controller.ts +++ b/plugins/subspace_storage/controller.ts @@ -57,7 +57,7 @@ async function loadDatabase( async function saveDatabase( controllerConfig: lib.ControllerConfig, - items: lib.ItemDatabase, + items: lib.ItemDatabase | undefined, logger: lib.Logger, ) { if (items && items.size < 50000) { diff --git a/plugins/subspace_storage/dole.ts b/plugins/subspace_storage/dole.ts index 6410b93e..85e86b59 100644 --- a/plugins/subspace_storage/dole.ts +++ b/plugins/subspace_storage/dole.ts @@ -134,7 +134,7 @@ export function doleDivider( // Update existing items if item name already exists if (itemCount > object.count) { // If successful, increase dole - _doleDivisionFactor[object.name] = Math.max((_doleDivisionFactor[object.name] || 0) || 1, 1) - 1; + _doleDivisionFactor[object.name] = Math.max(_doleDivisionFactor[object.name] || 1, 1) - 1; items.removeItem(object.name, object.count); prometheusDoleFactorGauge.labels(object.name).set(_doleDivisionFactor[object.name] || 0); @@ -143,7 +143,7 @@ export function doleDivider( // if we didn't have enough, attempt giving out a smaller amount next time _doleDivisionFactor[object.name] = Math.min( - maxDoleDivision, Math.max((_doleDivisionFactor[object.name] || 0) || 1, 1) * 2 + maxDoleDivision, Math.max(_doleDivisionFactor[object.name] || 1, 1) * 2 ); prometheusDoleFactorGauge.labels(object.name).set(_doleDivisionFactor[object.name] || 0); return 0; diff --git a/test/lib/plugin_loader.js b/test/lib/plugin_loader.js index 8d1639c6..2e113210 100644 --- a/test/lib/plugin_loader.js +++ b/test/lib/plugin_loader.js @@ -42,7 +42,7 @@ describe("lib/plugin_loader", function() { it("should load test plugin", async function() { assert.deepEqual( await lib.loadPluginInfos(new Map([["test", path.resolve(testPlugin)]])), - [{ name: "test", version: "0.0.1", requirePath: path.resolve(testPlugin) }] + [{ name: "test", version: "0.0.1", npmPackage: undefined, requirePath: path.resolve(testPlugin) }] ); }); it("should reject on broken plugin", async function() { diff --git a/typedoc.json b/typedoc.json index dc05d5ca..1523eca2 100644 --- a/typedoc.json +++ b/typedoc.json @@ -1,6 +1,12 @@ { "$schema": "https://typedoc.org/schema.json", - "entryPoints": ["packages/lib/"], + "entryPoints": [ + "packages/lib/", + "packages/controller/", + "packages/host/", + "packages/ctl/", + "packages/web_ui/", + ], "entryPointStrategy": "packages", "cleanOutputDir": false, "out": "docs/api"