diff --git a/packages/lib/src/config/definitions.ts b/packages/lib/src/config/definitions.ts index 798f90b3..dc4ca4d9 100644 --- a/packages/lib/src/config/definitions.ts +++ b/packages/lib/src/config/definitions.ts @@ -3,7 +3,7 @@ import * as classes from "./classes"; import * as validate from "./validators"; import type { PluginNodeEnvInfo, PluginWebpackEnvInfo } from "../plugin"; import { Static } from "@sinclair/typebox"; -import { isTargetVersion } from "../data"; +import { isTargetVersion } from "../data/version"; type configFromJSON = (...args: Parameters) => T; type configFromFile = (...args: Parameters) => Promise; @@ -574,7 +574,7 @@ export class InstanceConfig extends classes.Config { initialValue: 5, extendedValidation: function(value, config) { const factorioSettings = config.get("factorio.settings"); - const autosaveSlots = factorioSettings.autosave_slot; + const autosaveSlots = factorioSettings.autosave_slots; if (typeof autosaveSlots === "number" && value < autosaveSlots) { throw new Error("Value cannot be less than the number of autosave slots"); } diff --git a/packages/lib/src/config/validators.ts b/packages/lib/src/config/validators.ts index d4f1dabd..fa26c7c1 100644 --- a/packages/lib/src/config/validators.ts +++ b/packages/lib/src/config/validators.ts @@ -1,4 +1,4 @@ -import path from "node:path"; +import path from "path"; /** Combine multiple validators into a single one. */ export function all ( diff --git a/packages/web_ui/src/components/BaseConfigTree.tsx b/packages/web_ui/src/components/BaseConfigTree.tsx index 07e3c6ab..dc9e94c5 100644 --- a/packages/web_ui/src/components/BaseConfigTree.tsx +++ b/packages/web_ui/src/components/BaseConfigTree.tsx @@ -391,6 +391,18 @@ function computeTreeData( help={errorFields.get(fieldName)} tooltip={def.description} valuePropName={def.type === "boolean" ? "checked" : "value"} + rules={[{ + validator: function(_, fieldValue) { + if (def.extendedValidation) { + try { + def.extendedValidation(fieldValue, config); + } catch (err: any) { + return Promise.reject(err); + } + } + return Promise.resolve(); + }, + }]} > {renderInput(control.inputComponents, def, !canWrite)} ;