import LineRenderingConfigJson from "./Json/LineRenderingConfigJson"; export default class LegacyJsonConvert { /** * Updates the config file in-place * @param config * @private */ public static fixLayerConfig(config: any): void { if (config["overpassTags"]) { config.source = config.source ?? {} config.source.osmTags = config["overpassTags"] delete config["overpassTags"] } if (config.tagRenderings !== undefined) { for (const tagRendering of config.tagRenderings) { if (tagRendering["id"] === undefined) { if (tagRendering["#"] !== undefined) { tagRendering["id"] = tagRendering["#"] delete tagRendering["#"] } else if (tagRendering["freeform"]?.key !== undefined) { tagRendering["id"] = config.id + "-" + tagRendering["freeform"]["key"] } } } } if (config.mapRendering === undefined && config.id !== "sidewalks") { // This is a legacy format, lets create a pointRendering let location: ("point" | "centroid")[] = ["point"] let wayHandling: number = config["wayHandling"] ?? 0 if (wayHandling === 2) { location = ["point", "centroid"] } config.mapRendering = [ { icon: config["icon"], iconBadges: config["iconOverlays"], label: config["label"], iconSize: config["iconSize"], location, rotation: config["rotation"] } ] if (wayHandling !== 1) { const lineRenderConfig = { color: config["color"], width: config["width"], dashArray: config["dashArray"] } if (Object.keys(lineRenderConfig).length > 0) { config.mapRendering.push(lineRenderConfig) } } delete config["color"] delete config["width"] delete config["dashArray"] delete config["icon"] delete config["iconOverlays"] delete config["label"] delete config["iconSize"] delete config["rotation"] delete config["wayHandling"] } for (const mapRenderingElement of config.mapRendering) { if (mapRenderingElement["iconOverlays"] !== undefined) { mapRenderingElement["iconBadges"] = mapRenderingElement["iconOverlays"] } for (const overlay of mapRenderingElement["iconBadges"] ?? []) { if (overlay["badge"] !== true) { console.log("Warning: non-overlay element for ", config.id) } delete overlay["badge"] } } } /** * Given an old (parsed) JSON-config, will (in place) fix some issues * @param oldThemeConfig: the config to update to the latest format */ public static fixThemeConfig(oldThemeConfig: any): void { for (const layerConfig of oldThemeConfig.layers ?? []) { if (typeof layerConfig === "string" || layerConfig["builtin"] !== undefined) { continue } // @ts-ignore LegacyJsonConvert.fixLayerConfig(layerConfig) } if (oldThemeConfig["roamingRenderings"] !== undefined && oldThemeConfig["roamingRenderings"].length == 0) { delete oldThemeConfig["roamingRenderings"] } } }