import { TagsFilter } from "../../Logic/Tags/TagsFilter" import { RegexTag } from "../../Logic/Tags/RegexTag" export default class SourceConfig { public osmTags?: TagsFilter public geojsonSource?: string public geojsonZoomLevel?: number public isOsmCacheLayer: boolean public readonly mercatorCrs: boolean public readonly idKey: string constructor( params: { mercatorCrs?: boolean osmTags?: TagsFilter overpassScript?: string geojsonSource?: string isOsmCache?: boolean geojsonSourceLevel?: number idKey?: string }, context?: string ) { let defined = 0 if (params.osmTags) { defined++ } if (params.overpassScript) { defined++ } if (params.geojsonSource) { defined++ } if (defined == 0) { throw `Source: nothing correct defined in the source (in ${context}) (the params are ${JSON.stringify( params )})` } if (params.isOsmCache && params.geojsonSource == undefined) { console.error(params) throw `Source said it is a OSM-cached layer, but didn't define the actual source of the cache (in context ${context})` } if (params.geojsonSource !== undefined && params.geojsonSourceLevel !== undefined) { if ( !["x", "y", "x_min", "x_max", "y_min", "Y_max"].some( (toSearch) => params.geojsonSource.indexOf(toSearch) > 0 ) ) { throw `Source defines a geojson-zoomLevel, but does not specify {x} nor {y} (or equivalent), this is probably a bug (in context ${context})` } } if (params.osmTags !== undefined) { const optimized = params.osmTags.optimize() if (optimized === false) { throw ( "Error at " + context + ": the specified tags are conflicting with each other: they will never match anything at all.\n" + "\tThe offending tags are: " + params.osmTags.asHumanString(false, false, {}) + "\tThey optmize into 'false' " ) } if (optimized === true) { throw ( "Error at " + context + ": the specified tags are very wide: they will always match everything" ) } } this.osmTags = params.osmTags ?? new RegexTag("id", /.*/) this.geojsonSource = params.geojsonSource this.geojsonZoomLevel = params.geojsonSourceLevel this.isOsmCacheLayer = params.isOsmCache ?? false this.mercatorCrs = params.mercatorCrs ?? false this.idKey = params.idKey } }