Improve error message when merging an override fails
This commit is contained in:
parent
b484ea005b
commit
f2d4458e15
4 changed files with 25 additions and 13 deletions
|
@ -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'")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"]
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue