From e33d06a5cc62925a9e005f3d388474e4b2bc7c89 Mon Sep 17 00:00:00 2001 From: Bastiaan <17990055+bbassie@users.noreply.github.com> Date: Wed, 14 Oct 2026 19:54:39 +0200 Subject: [PATCH] Merge pull request #1075 from bbassie/fix/ctl-config-fields Register plugin ctl config fields --- packages/lib/src/config/definitions.ts | 4 ++++ test/lib/config/definitions.js | 30 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 test/lib/config/definitions.js diff --git a/packages/lib/src/config/definitions.ts b/packages/lib/src/config/definitions.ts index 671eec66..cfed9f21 100644 --- a/packages/lib/src/config/definitions.ts +++ b/packages/lib/src/config/definitions.ts @@ -842,6 +842,10 @@ export function addPluginConfigFields(pluginInfos: PluginNodeEnvInfo[] | PluginW if (pluginInfo.instanceEntrypoint) { addPluginFieldDefinitions(pluginInfo, "instanceConfigFields", InstanceConfig); } + if (pluginInfo.ctlConfigFields) { + validateFieldNames(pluginInfo.name, pluginInfo.ctlConfigFields); + Object.assign(CtlConfig.fieldDefinitions, pluginInfo.ctlConfigFields); + } } } diff --git a/test/lib/config/definitions.js b/test/lib/config/definitions.js new file mode 100644 index 00000000..a406f579 --- /dev/null +++ b/test/lib/config/definitions.js @@ -0,0 +1,30 @@ +import assert from "node:assert/strict"; + +import * as lib from "@clusterio/lib"; + + +describe("lib/config/definitions", function() { + describe("addPluginConfigFields()", function() { + after(function() { + delete lib.CtlConfig.fieldDefinitions["ctl_test.field"]; + }); + + it("should add ctl config fields", function() { + lib.addPluginConfigFields([{ + name: "ctl_test", + ctlConfigFields: { "ctl_test.field": { type: "string", initialValue: "value" } }, + }]); + const config = new lib.CtlConfig("control"); + assert.equal(config.get("ctl_test.field"), "value"); + }); + it("should reject ctl config fields not named after the plugin", function() { + assert.throws( + () => lib.addPluginConfigFields([{ + name: "ctl_test", + ctlConfigFields: { "other.field": { type: "string" } }, + }]), + new Error("Expected name of config field 'other.field' for ctl_test to start with 'ctl_test.'") + ); + }); + }); +});