From 776387a640dec720a42f88a47cdbeb49b16366ea Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Mon, 14 Feb 2022 02:39:33 +0100 Subject: [PATCH] Better error message for invalid rewrites --- Models/ThemeConfig/Conversion/PrepareLayer.ts | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/Models/ThemeConfig/Conversion/PrepareLayer.ts b/Models/ThemeConfig/Conversion/PrepareLayer.ts index 673e131e80..70b9815d74 100644 --- a/Models/ThemeConfig/Conversion/PrepareLayer.ts +++ b/Models/ThemeConfig/Conversion/PrepareLayer.ts @@ -157,7 +157,7 @@ class ExpandGroupRewrite extends Conversion<{ { rewrite: { sourceString: string; into: string[] }[]; renderings: (string | { builtin: string; override: any } | TagRenderingConfigJson)[] - } | TagRenderingConfigJson, context: string): { result: TagRenderingConfigJson[]; errors: string[]; warnings: string[] } { + } | TagRenderingConfigJson, context: string): { result: TagRenderingConfigJson[]; errors: string[]; warnings?: string[] } { if (json["rewrite"] === undefined) { return {result: [json], errors: [], warnings: []} @@ -167,20 +167,33 @@ class ExpandGroupRewrite extends Conversion<{ { sourceString: string[]; into: (string | any)[][] }; renderings: (string | { builtin: string; override: any } | TagRenderingConfigJson)[] }>json; + { const errors = [] - + + if(!Array.isArray(config.rewrite.sourceString)){ + let extra = ""; + if(typeof config.rewrite.sourceString === "string"){ + extra=`
Try "sourceString": [ "${config.rewrite.sourceString}" ] instead (note the [ and ])` + } + const msg = context+"
Invalid format: a rewrite block is defined, but the 'sourceString' should be an array of strings, but it is a "+typeof config.rewrite.sourceString + extra + errors.push(msg) + } + + const expectedLength = config.rewrite.sourceString.length for (let i = 0; i < config.rewrite.into.length; i++){ const targets = config.rewrite.into[i]; - if(targets.length !== expectedLength){ - errors.push(context+".rewrite.into["+i+"]: expected "+expectedLength+" values, but got "+targets.length) - } + if(!Array.isArray(targets)){ + errors.push(`${context}.rewrite.into[${i}] should be an array of values, but it is a `+typeof targets) + } else if(targets.length !== expectedLength){ + errors.push(`${context}.rewrite.into[${i}]:
The rewrite specified ${config.rewrite.sourceString} as sourcestring, which consists of ${expectedLength} values. The target ${JSON.stringify(targets)} has ${targets.length} items`) if(typeof targets[0] !== "string"){ errors.push(context+".rewrite.into["+i+"]: expected a string as first rewrite value values, but got "+targets[0]) } + } } if (errors.length > 0) {