Improve error message when merging an override fails

This commit is contained in:
Pieter Vander Vennet 2024-04-22 23:43:30 +02:00
parent b484ea005b
commit f2d4458e15
4 changed files with 25 additions and 13 deletions

View file

@ -1,4 +1,5 @@
import { ConversionMessage, ConversionMsgLevel } from "./Conversion"
import { Utils } from "../../../Utils"
export class ConversionContext {
private static reported = false
@ -148,4 +149,18 @@ export class ConversionContext {
debug(message: string) {
this.messages.push({ context: this, level: "debug", message })
}
/**
* Exactly the same as Utils.Merge, except that it wraps the error message
* @param source
* @param target
* @constructor
*/
MergeObjectsForOverride<T, S>(source: Readonly<S>, target: T): T & S {
try{
return Utils.Merge(source,target)
}catch (e) {
this.err("Could not apply an override: due to "+e+"\n\tHINT: did you just pull changes from the repository or switch branches? Try 'npm run reset:layeroverview'")
}
}
}

View file

@ -212,7 +212,7 @@ class ExpandTagRendering extends Conversion<
return result
}
private lookup(name: string): TagRenderingConfigJson[] | undefined {
private lookup(name: string, ctx: ConversionContext): TagRenderingConfigJson[] | undefined {
const direct = this.directLookup(name)
if (direct === undefined) {
@ -224,13 +224,13 @@ class ExpandTagRendering extends Conversion<
if (nm !== undefined) {
let indirect: TagRenderingConfigJson[]
if (typeof nm === "string") {
indirect = this.lookup(nm)
indirect = this.lookup(nm, ctx)
} else {
indirect = [].concat(...nm.map((n) => this.lookup(n)))
indirect = [].concat(...nm.map((n) => this.lookup(n, ctx)))
}
for (let foundTr of indirect) {
foundTr = Utils.Clone<any>(foundTr)
Utils.Merge(tagRenderingConfigJson["override"] ?? {}, foundTr)
ctx.Merge(tagRenderingConfigJson["override"] ?? {}, foundTr)
foundTr["id"] = tagRenderingConfigJson["id"] ?? foundTr["id"]
result.push(foundTr)
}
@ -318,7 +318,7 @@ class ExpandTagRendering extends Conversion<
if (typeof tr === "string") {
let lookup
if (this._state.tagRenderings !== null) {
lookup = this.lookup(tr)
lookup = this.lookup(tr, ctx)
}
if (lookup === undefined) {
if (
@ -382,7 +382,7 @@ class ExpandTagRendering extends Conversion<
const trs: TagRenderingConfigJson[] = []
for (const name of names) {
const lookup = this.lookup(name)
const lookup = this.lookup(name, ctx)
if (lookup === undefined) {
let candidates = Array.from(state.tagRenderings.keys())
if (name.indexOf(".") > 0) {
@ -433,7 +433,7 @@ class ExpandTagRendering extends Conversion<
}
for (let foundTr of lookup) {
foundTr = Utils.Clone<any>(foundTr)
Utils.Merge(tr["override"] ?? {}, foundTr)
ctx.MergeObjectsForOverride(tr["override"] ?? {}, foundTr)
if (names.length == 1) {
foundTr["id"] = tr["id"] ?? foundTr["id"]
}

View file

@ -97,7 +97,7 @@ class SubstituteLayer extends Conversion<string | LayerConfigJson, LayerConfigJs
delete json["override"]["tagRenderings+"]
}
Utils.Merge(json["override"], found)
context.MergeObjectsForOverride(json["override"], found)
layers.push(found)
} catch (e) {
context.err(
@ -305,7 +305,7 @@ class ApplyOverrideAll extends DesugaringStep<LayoutConfigJson> {
)
}
convert(json: LayoutConfigJson, _: ConversionContext): LayoutConfigJson {
convert(json: LayoutConfigJson, ctx: ConversionContext): LayoutConfigJson {
const overrideAll = json.overrideAll
if (overrideAll === undefined) {
return json
@ -324,7 +324,7 @@ class ApplyOverrideAll extends DesugaringStep<LayoutConfigJson> {
for (let layer of json.layers) {
layer = Utils.Clone(<LayerConfigJson>layer)
Utils.Merge(overrideAll, layer)
ctx.MergeObjectsForOverride(overrideAll, layer)
if (tagRenderingsPlus) {
if (!layer.tagRenderings) {
layer.tagRenderings = tagRenderingsPlus

View file

@ -622,9 +622,6 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be
}
for (const key in source) {
if (!source.hasOwnProperty(key)) {
continue
}
if (key.startsWith("=")) {
const trimmedKey = key.substr(1)
target[trimmedKey] = source[key]