import TilesourceConfigJson from "./Json/TilesourceConfigJson" import Translations from "../../UI/i18n/Translations" import { Translation } from "../../UI/i18n/Translation" export default class TilesourceConfig { public readonly source: string public readonly id: string public readonly isOverlay: boolean public readonly name: Translation public readonly minzoom: number public readonly maxzoom: number public readonly defaultState: boolean constructor(config: TilesourceConfigJson, ctx: string = "") { this.id = config.id this.source = config.source this.isOverlay = config.isOverlay ?? false this.name = Translations.T(config.name) this.minzoom = config.minZoom ?? 0 this.maxzoom = config.maxZoom ?? 999 this.defaultState = config.defaultState ?? true if (this.id === undefined) { throw "An id is obligated" } if (this.minzoom > this.maxzoom) { throw ( "Invalid tilesourceConfig: minzoom should be smaller then maxzoom (at " + ctx + ")" ) } if (this.minzoom < 0) { throw "minzoom should be > 0 (at " + ctx + ")" } if (this.maxzoom < 0) { throw "maxzoom should be > 0 (at " + ctx + ")" } if (this.source.indexOf("{zoom}") >= 0) { throw "Invalid source url: use {z} instead of {zoom} (at " + ctx + ".source)" } if (!this.defaultState && config.name === undefined) { throw "Disabling an overlay without a name is not possible" } } }