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" } } }