forked from MapComplete/MapComplete
Fix partial compilation, fix tests
This commit is contained in:
parent
9f41e719f2
commit
a08a49abb2
3 changed files with 36 additions and 34 deletions
|
@ -31,6 +31,7 @@ import {FixedUiElement} from "../../UI/Base/FixedUiElement";
|
|||
|
||||
export default class LayerConfig extends WithContextLoader {
|
||||
|
||||
public static readonly syncSelectionAllowed = ["no", "local", "theme-only", "global"] as const;
|
||||
public readonly id: string;
|
||||
public readonly name: Translation;
|
||||
public readonly description: Translation;
|
||||
|
@ -44,10 +45,8 @@ export default class LayerConfig extends WithContextLoader {
|
|||
public readonly maxzoom: number;
|
||||
public readonly title?: TagRenderingConfig;
|
||||
public readonly titleIcons: TagRenderingConfig[];
|
||||
|
||||
public readonly mapRendering: PointRenderingConfig[]
|
||||
public readonly lineRendering: LineRenderingConfig[]
|
||||
|
||||
public readonly units: Unit[];
|
||||
public readonly deletion: DeleteConfig | null;
|
||||
public readonly allowMove: MoveConfig | null
|
||||
|
@ -57,15 +56,11 @@ export default class LayerConfig extends WithContextLoader {
|
|||
* In seconds
|
||||
*/
|
||||
public readonly maxAgeOfCache: number
|
||||
|
||||
public readonly presets: PresetConfig[];
|
||||
|
||||
public readonly tagRenderings: TagRenderingConfig[];
|
||||
public readonly filters: FilterConfig[];
|
||||
public readonly filterIsSameAs: string;
|
||||
public readonly forceLoad: boolean;
|
||||
|
||||
public static readonly syncSelectionAllowed = ["no" , "local" , "theme-only" , "global"] as const;
|
||||
public readonly syncSelection: (typeof LayerConfig.syncSelectionAllowed)[number] // this is a trick to conver a constant array of strings into a type union of these values
|
||||
|
||||
constructor(
|
||||
|
@ -74,18 +69,24 @@ export default class LayerConfig extends WithContextLoader {
|
|||
official: boolean = true
|
||||
) {
|
||||
context = context + "." + json.id;
|
||||
const translationContext = "layers:"+json.id
|
||||
const translationContext = "layers:" + json.id
|
||||
super(json, context)
|
||||
this.id = json.id;
|
||||
|
||||
if (typeof json === "string") {
|
||||
throw `Not a valid layer: the layerConfig is a string. 'npm run generate:layeroverview' might be needed (at ${context})`
|
||||
}
|
||||
|
||||
|
||||
if (json.id === undefined) {
|
||||
throw "Not a valid layer: id is undefined: " + JSON.stringify(json)
|
||||
throw `Not a valid layer: id is undefined: ${JSON.stringify(json)} (At ${context})`
|
||||
}
|
||||
|
||||
if (json.source === undefined) {
|
||||
throw "Layer " + this.id + " does not define a source section (" + context + ")"
|
||||
}
|
||||
|
||||
|
||||
if (json.source.osmTags === undefined) {
|
||||
throw "Layer " + this.id + " does not define a osmTags in the source section - these should always be present, even for geojson layers (" + context + ")"
|
||||
}
|
||||
|
@ -98,8 +99,8 @@ export default class LayerConfig extends WithContextLoader {
|
|||
}
|
||||
|
||||
this.maxAgeOfCache = json.source.maxCacheAge ?? 24 * 60 * 60 * 30
|
||||
if(json.syncSelection !== undefined && LayerConfig.syncSelectionAllowed.indexOf(json.syncSelection) < 0){
|
||||
throw context+ " Invalid sync-selection: must be one of "+LayerConfig.syncSelectionAllowed.map(v => `'${v}'`).join(", ")+" but got '"+json.syncSelection+"'"
|
||||
if (json.syncSelection !== undefined && LayerConfig.syncSelectionAllowed.indexOf(json.syncSelection) < 0) {
|
||||
throw context + " Invalid sync-selection: must be one of " + LayerConfig.syncSelectionAllowed.map(v => `'${v}'`).join(", ") + " but got '" + json.syncSelection + "'"
|
||||
}
|
||||
this.syncSelection = json.syncSelection ?? "no";
|
||||
const osmTags = TagUtils.Tag(
|
||||
|
@ -107,10 +108,10 @@ export default class LayerConfig extends WithContextLoader {
|
|||
context + "source.osmTags"
|
||||
);
|
||||
|
||||
if(Constants.priviliged_layers.indexOf(this.id) < 0 && osmTags.isNegative()){
|
||||
throw context + "The source states tags which give a very wide selection: it only uses negative expressions, which will result in too much and unexpected data. Add at least one required tag. The tags are:\n\t"+osmTags.asHumanString(false, false, {});
|
||||
if (Constants.priviliged_layers.indexOf(this.id) < 0 && osmTags.isNegative()) {
|
||||
throw context + "The source states tags which give a very wide selection: it only uses negative expressions, which will result in too much and unexpected data. Add at least one required tag. The tags are:\n\t" + osmTags.asHumanString(false, false, {});
|
||||
}
|
||||
|
||||
|
||||
if (json.source["geoJsonSource"] !== undefined) {
|
||||
throw context + "Use 'geoJson' instead of 'geoJsonSource'";
|
||||
}
|
||||
|
@ -118,7 +119,7 @@ export default class LayerConfig extends WithContextLoader {
|
|||
if (json.source["geojson"] !== undefined) {
|
||||
throw context + "Use 'geoJson' instead of 'geojson' (the J is a capital letter)";
|
||||
}
|
||||
|
||||
|
||||
|
||||
this.source = new SourceConfig(
|
||||
{
|
||||
|
@ -138,8 +139,8 @@ export default class LayerConfig extends WithContextLoader {
|
|||
|
||||
this.allowSplit = json.allowSplit ?? false;
|
||||
this.name = Translations.T(json.name, translationContext + ".name");
|
||||
if(json.units!==undefined && !Array.isArray(json.units)){
|
||||
throw "At "+context+".units: the 'units'-section should be a list; you probably have an object there"
|
||||
if (json.units !== undefined && !Array.isArray(json.units)) {
|
||||
throw "At " + context + ".units: the 'units'-section should be a list; you probably have an object there"
|
||||
}
|
||||
this.units = (json.units ?? []).map(((unitJson, i) => Unit.fromJson(unitJson, `${context}.unit[${i}]`)))
|
||||
|
||||
|
@ -167,8 +168,8 @@ export default class LayerConfig extends WithContextLoader {
|
|||
const index = kv.indexOf("=");
|
||||
let key = kv.substring(0, index).trim();
|
||||
const r = "[a-z_][a-z0-9:]*"
|
||||
if(key.match(r) === null){
|
||||
throw "At "+context+" invalid key for calculated tag: "+key+"; it should match "+r
|
||||
if (key.match(r) === null) {
|
||||
throw "At " + context + " invalid key for calculated tag: " + key + "; it should match " + r
|
||||
}
|
||||
const isStrict = key.endsWith(':')
|
||||
if (isStrict) {
|
||||
|
@ -343,14 +344,14 @@ export default class LayerConfig extends WithContextLoader {
|
|||
}
|
||||
|
||||
public GenerateDocumentation(usedInThemes: string[], layerIsNeededBy?: Map<string, string[]>, dependencies: {
|
||||
context?: string;
|
||||
reason: string;
|
||||
neededLayer: string;
|
||||
}[] = []
|
||||
, addedByDefault = false, canBeIncluded = true): BaseUIElement {
|
||||
context?: string;
|
||||
reason: string;
|
||||
neededLayer: string;
|
||||
}[] = []
|
||||
, addedByDefault = false, canBeIncluded = true): BaseUIElement {
|
||||
const extraProps = []
|
||||
|
||||
extraProps.push("This layer is shown at zoomlevel **"+this.minzoom+"** and higher")
|
||||
|
||||
extraProps.push("This layer is shown at zoomlevel **" + this.minzoom + "** and higher")
|
||||
|
||||
if (canBeIncluded) {
|
||||
if (addedByDefault) {
|
||||
|
@ -440,7 +441,7 @@ export default class LayerConfig extends WithContextLoader {
|
|||
let overpassLink: BaseUIElement = undefined;
|
||||
if (Constants.priviliged_layers.indexOf(this.id) < 0) {
|
||||
try {
|
||||
overpassLink = new Link("Execute on overpass", Overpass.AsOverpassTurboLink(<TagsFilter> new And(neededTags).optimize()))
|
||||
overpassLink = new Link("Execute on overpass", Overpass.AsOverpassTurboLink(<TagsFilter>new And(neededTags).optimize()))
|
||||
} catch (e) {
|
||||
console.error("Could not generate overpasslink for " + this.id)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue