forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			79 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 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
 | |
|     }
 | |
| }
 |