diff --git a/src/Models/ThemeConfig/Conversion/Conversion.ts b/src/Models/ThemeConfig/Conversion/Conversion.ts index dc6fd7d7e..23db13625 100644 --- a/src/Models/ThemeConfig/Conversion/Conversion.ts +++ b/src/Models/ThemeConfig/Conversion/Conversion.ts @@ -166,11 +166,11 @@ export class Each extends Conversion { } } -export class On extends DesugaringStep { - private readonly key: string +export class On> extends DesugaringStep { + private readonly key: S private readonly step: (t: T) => Conversion - constructor(key: string, step: Conversion | ((t: T) => Conversion)) { + constructor(key: S, step: Conversion | ((t: T) => Conversion)) { super(`On(${key}, ${step.name})`, "Applies " + step.name + " onto property `" + key + "`") if (typeof step === "function") { this.step = step @@ -181,7 +181,7 @@ export class On extends DesugaringStep { } convert(json: T, context: ConversionContext): T { - const key = this.key + const key: S = this.key const value: P = json?.[key] if (value === undefined || value === null) { return json @@ -189,7 +189,8 @@ export class On extends DesugaringStep { json = { ...json } const step = this.step(json) - json[key] = step.convert(value, context.enter(key).inOperation("on[" + key + "]")) + const converted = step.convert(value, context.enter(key).inOperation("on[" + key + "]")) + json[key] = converted return json } } diff --git a/src/Models/ThemeConfig/Conversion/PrevalidateLayer.ts b/src/Models/ThemeConfig/Conversion/PrevalidateLayer.ts index 623e073b3..08b267278 100644 --- a/src/Models/ThemeConfig/Conversion/PrevalidateLayer.ts +++ b/src/Models/ThemeConfig/Conversion/PrevalidateLayer.ts @@ -329,15 +329,15 @@ export class PrevalidateLayer extends DesugaringStep { } } - if (json.filter) { - new On("filter", new Each(new ValidateFilter())).convert(json, context) + if (json.filter && Array.isArray(json.filter)) { + new On("filter", new Each(new ValidateFilter())).convert( json, context) } if (json.tagRenderings !== undefined) { new On( "tagRenderings", new Each(new ValidateTagRenderings(json, this._doesImageExist)) - ).convert(json, context) + ).convert( json, context) } if (json.pointRendering !== null && json.pointRendering !== undefined) { diff --git a/src/Models/ThemeConfig/Conversion/Validation.ts b/src/Models/ThemeConfig/Conversion/Validation.ts index a3f7f4b1a..010efe3f7 100644 --- a/src/Models/ThemeConfig/Conversion/Validation.ts +++ b/src/Models/ThemeConfig/Conversion/Validation.ts @@ -901,12 +901,12 @@ export class ValidateLayer extends Conversion< } } -export class ValidateFilter extends DesugaringStep { +export class ValidateFilter extends DesugaringStep { constructor() { super("ValidateFilter", "Detect common errors in the filters") } - convert(filter: FilterConfigJson, context: ConversionContext): FilterConfigJson { + convert(filter: string | FilterConfigJson, context: ConversionContext): string | FilterConfigJson { if (typeof filter === "string") { // Calling another filter, we skip return filter