{"version":3,"file":"hslayers-ng-services-get-capabilities.mjs","sources":["../../../projects/hslayers/services/get-capabilities/capability-cache.service.ts","../../../projects/hslayers/services/get-capabilities/arcgis-get-capabilities.service.ts","../../../projects/hslayers/services/get-capabilities/dimension-time.service.ts","../../../projects/hslayers/services/get-capabilities/dimension.service.ts","../../../projects/hslayers/services/get-capabilities/wfs-get-capabilities.service.ts","../../../projects/hslayers/services/get-capabilities/wms-get-capabilities.service.ts","../../../projects/hslayers/services/get-capabilities/wmts-get-capabilities.service.ts","../../../projects/hslayers/services/get-capabilities/xyz-get-capabilities.service.ts","../../../projects/hslayers/services/get-capabilities/hslayers-ng-services-get-capabilities.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\n\nimport {CapabilitiesResponseWrapper} from 'hslayers-ng/types';\n\nexport interface CapabilityCacheList {\n  [key: string]: CapabilitiesResponseWrapper;\n}\n\n@Injectable({providedIn: 'platform'})\nexport class HsCapabilityCacheService {\n  cache: CapabilityCacheList = {};\n  private pendingRequests = new Map<\n    string,\n    Promise<CapabilitiesResponseWrapper>\n  >();\n  constructor() {}\n  set(url: string, wrap: CapabilitiesResponseWrapper): void {\n    if (!wrap?.error) {\n      this.cache[url] = wrap;\n    }\n  }\n\n  get(url: string): CapabilitiesResponseWrapper {\n    return this.cache[url];\n  }\n\n  /**\n   * Get cached response or fetch with deduplication\n   * Prevents duplicate concurrent requests for the same URL\n   *\n   * @param url - URL to fetch\n   * @param fetcher - Function that performs the actual HTTP request\n   * @param owrCache - Overwrites cache for the requested url\n   * @returns Promise with the capabilities response\n   */\n  async getOrFetch(\n    url: string,\n    fetcher: () => Promise<CapabilitiesResponseWrapper>,\n    owrCache?: boolean,\n  ): Promise<CapabilitiesResponseWrapper> {\n    // Check cache first (unless owrCache is true)\n    if (!owrCache && this.cache[url]) {\n      return this.cache[url];\n    }\n\n    // Check if there's a pending request\n    if (this.pendingRequests.has(url)) {\n      return this.pendingRequests.get(url);\n    }\n\n    // Create new request\n    const requestPromise = fetcher()\n      .then((response) => {\n        if (!response?.error) {\n          this.set(url, response);\n        }\n        this.pendingRequests.delete(url);\n        return response;\n      })\n      .catch((error) => {\n        this.pendingRequests.delete(url);\n        throw error;\n      });\n\n    this.pendingRequests.set(url, requestPromise);\n\n    return requestPromise;\n  }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable, inject} from '@angular/core';\n\nimport {Layer, Tile} from 'ol/layer';\nimport {Source, TileWMS} from 'ol/source';\nimport {lastValueFrom, takeUntil} from 'rxjs';\n\nimport {CapabilitiesResponseWrapper} from 'hslayers-ng/types';\nimport {HsCapabilityCacheService} from './capability-cache.service';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {\n  getParamsFromUrl,\n  HsProxyService,\n  getPreferredFormat,\n} from 'hslayers-ng/services/utils';\nimport {IGetCapabilities} from './get-capabilities.interface';\n\n@Injectable({providedIn: 'root'})\nexport class HsArcgisGetCapabilitiesService implements IGetCapabilities {\n  private httpClient = inject(HttpClient);\n  hsEventBusService = inject(HsEventBusService);\n  hsMapService = inject(HsMapService);\n  hsLogService = inject(HsLogService);\n  hsCapabilityCacheService = inject(HsCapabilityCacheService);\n  private hsProxyService = inject(HsProxyService);\n\n  /**\n   * Get WMS service location without parameters from url string\n   *\n   * @param str - Url string to parse\n   * @returns WMS service Url\n   */\n  getPathFromUrl(str: string): string {\n    if (str.indexOf('?') > -1) {\n      return str.substring(0, str.indexOf('?'));\n    }\n    return str;\n  }\n\n  /**\n   * Create WMS parameter string from parameter object\n   * TODO: Probably the same as utils.paramsToURL\n   *\n   * @param obj - Object with stored WMS service parameters\n   * @returns Parameter string or empty string if no object given\n   */\n  params2String(obj): string {\n    return obj\n      ? Object.keys(obj)\n          .map((key) => {\n            const val = obj[key];\n\n            if (Array.isArray(val)) {\n              return val\n                .map((val2) => {\n                  return (\n                    encodeURIComponent(key) + '=' + encodeURIComponent(val2)\n                  );\n                })\n                .join('&');\n            }\n\n            return encodeURIComponent(key) + '=' + encodeURIComponent(val);\n          })\n          .join('&')\n      : '';\n  }\n\n  /**\n   * Parse added service url and sends GetCapabilities request to WMS service\n   *\n   * @param service_url - Raw Url localization of service\n   * @param owrCache - Overwrites cache for the requested url\n   * @returns Promise object - Response to GetCapabilities request\n   */\n  async request(\n    service_url: string,\n    owrCache?: boolean,\n  ): Promise<CapabilitiesResponseWrapper> {\n    service_url = service_url.replace(/&amp;/g, '&');\n    const params = getParamsFromUrl(service_url);\n    const path = this.getPathFromUrl(service_url);\n    params.f = 'json';\n    let url = [path, this.params2String(params)].join('?');\n\n    url = this.hsProxyService.proxify(url);\n\n    return this.hsCapabilityCacheService.getOrFetch(\n      url,\n      async () => {\n        try {\n          const r = await lastValueFrom(\n            this.httpClient\n              .get(url, {\n                responseType: 'json',\n                observe: 'response', // Set observe to 'response' to get headers as well\n              })\n              .pipe(takeUntil(this.hsEventBusService.cancelAddDataUrlRequest)),\n          );\n          return {response: r.body};\n        } catch (e) {\n          const contentType = e.headers?.get('Content-Type');\n          if (contentType?.includes('text/html')) {\n            return {\n              error: true,\n              response: {\n                message: 'ERROR.noValidData',\n              },\n            };\n          }\n          return {response: e, error: true};\n        }\n      },\n      owrCache,\n    );\n  }\n\n  /**\n   * Load all layers of selected service to the map\n   *\n   * @param caps - XML response of GetCapabilities of selected service\n   * @returns List of layers from service\n   */\n  service2layers(caps): Layer<Source>[] {\n    const service = caps.layers;\n    //onst srss = caps.spatialReference.wkid;\n    const image_formats = caps.supportedImageFormatTypes.split(',');\n    const query_formats = caps.supportedQueryFormats\n      ? caps.supportedQueryFormats.split(',')\n      : [];\n    const image_format = getPreferredFormat(image_formats, [\n      'image/png; mode=8bit',\n      'image/png',\n      'image/gif',\n      'image/jpeg',\n    ]);\n    const query_format = getPreferredFormat(query_formats, [\n      'application/vnd.esri.wms_featureinfo_xml',\n      'application/vnd.ogc.gml',\n      'application/vnd.ogc.wms_xml',\n      'text/plain',\n      'text/html',\n    ]);\n\n    const tmp = [];\n    for (const subservice of service) {\n      this.hsLogService.log('Load service', subservice);\n      for (const layer of subservice.Layer) {\n        this.hsLogService.log('Load service', this);\n        let attributions = [];\n        if (layer.Attribution) {\n          attributions = [\n            `<a href=\"${layer.Attribution.OnlineResource}\">${layer.Attribution.Title}</a>`,\n          ];\n        }\n        const new_layer = new Tile({\n          properties: {\n            title: layer.Title.replace(/\\//g, '&#47;'),\n            abstract: layer.Abstract,\n          },\n          source: new TileWMS({\n            url: caps.Capability.Request.GetMap.DCPType[0].HTTP.Get\n              .OnlineResource,\n            attributions: attributions,\n\n            params: {\n              LAYERS: layer.Name,\n              INFO_FORMAT: layer.queryable ? query_format : undefined,\n              FORMAT: image_format,\n              styles:\n                layer.Style && layer.Style.length > 0\n                  ? layer.Style[0].Name\n                  : undefined,\n            },\n            crossOrigin: 'anonymous',\n          }),\n          useInterimTilesOnError: false,\n          extent: layer.BoundingBox,\n        });\n        this.hsMapService.proxifyLayerLoader(new_layer, true);\n        tmp.push(new_layer);\n      }\n    }\n    return tmp;\n  }\n}\n","import {Injectable, inject} from '@angular/core';\nimport {Subject} from 'rxjs';\n\nimport {ImageWMS, Source, TileWMS} from 'ol/source';\nimport {Layer} from 'ol/layer';\n\nimport {HsLayerDescriptor, HsWmsLayer} from 'hslayers-ng/types';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {instOf} from 'hslayers-ng/services/utils';\nimport {getDimensions, setDimension} from 'hslayers-ng/common/extensions';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsDimensionTimeService {\n  hsLog = inject(HsLogService);\n\n  /**\n   * To communicate changes between this service and HsDimensionService\n   */\n  layerTimeChanges: Subject<{\n    layer: HsLayerDescriptor;\n    time: string;\n  }> = new Subject();\n\n  /**\n   * Parse interval string to get interval as a number\n   * @param interval - Interval time string\n   * @returns - Number of milliseconds representing the interval\n   */\n  parseInterval(interval: string): number {\n    let dateComponent;\n    let timeComponent;\n\n    let year;\n    let month;\n    let day;\n    let hour;\n    let minute;\n    let second;\n\n    // eslint-disable-next-line no-multi-assign\n    year = month = day = hour = minute = second = 0;\n\n    const indexOfT = interval.search('T');\n\n    if (indexOfT > -1) {\n      dateComponent = interval.substring(1, indexOfT);\n      timeComponent = interval.substring(indexOfT + 1);\n    } else {\n      dateComponent = interval.substring(1);\n    }\n\n    // parse date\n    if (dateComponent) {\n      const indexOfY =\n        dateComponent.search('Y') > -1 ? dateComponent.search('Y') : undefined;\n      const indexOfM =\n        dateComponent.search('M') > -1 ? dateComponent.search('M') : undefined;\n      const indexOfD =\n        dateComponent.search('D') > -1 ? dateComponent.search('D') : undefined;\n\n      if (indexOfY !== undefined) {\n        year = parseFloat(dateComponent.substring(0, indexOfY));\n      }\n      if (indexOfM !== undefined) {\n        month = parseFloat(\n          dateComponent.substring((indexOfY || -1) + 1, indexOfM),\n        );\n      }\n      if (indexOfD !== undefined) {\n        day = parseFloat(\n          dateComponent.substring((indexOfM || indexOfY || -1) + 1, indexOfD),\n        );\n      }\n    }\n\n    // parse time\n    if (timeComponent) {\n      const indexOfH =\n        timeComponent.search('H') > -1 ? timeComponent.search('H') : undefined;\n      const indexOfm =\n        timeComponent.search('M') > -1 ? timeComponent.search('M') : undefined;\n      const indexOfS =\n        timeComponent.search('S') > -1 ? timeComponent.search('S') : undefined;\n\n      if (indexOfH !== undefined) {\n        hour = parseFloat(timeComponent.substring(0, indexOfH));\n      }\n      if (indexOfm !== undefined) {\n        minute = parseFloat(\n          timeComponent.substring((indexOfH || -1) + 1, indexOfm),\n        );\n      }\n      if (indexOfS !== undefined) {\n        second = parseFloat(\n          timeComponent.substring((indexOfm || indexOfH || -1) + 1, indexOfS),\n        );\n      }\n    }\n    // year, month, day, hours, minutes, seconds, milliseconds)\n    const zero = new Date(0, 0, 0, 0, 0, 0, 0).getTime();\n    const step = new Date(year, month, day, hour, minute, second, 0).getTime();\n    return step - zero;\n  }\n\n  /**\n   * Test if WMS layer has time support (WMS-T). WMS layer has to have dimension property\n   * @param layer - Container object of layer (layerContainer.layer expected)\n   * @returns True for WMS layer with time support\n   */\n  layerIsWmsT(layer: HsLayerDescriptor | Layer<Source>): boolean {\n    const olLayer: Layer<Source> =\n      (layer as HsLayerDescriptor).layer ?? (layer as Layer<Source>);\n    if (!olLayer) {\n      return false;\n    }\n    if ((layer as HsLayerDescriptor).time) {\n      return true;\n    }\n    if (getDimensions(olLayer)?.time) {\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Make initial setup for WM(T)S-t layers\n   * @param currentLayer - Layer for which the time is being set up\n   * @param serviceLayer - Description of that layer's capabilities in a service\n   */\n  setupTimeLayer(\n    currentLayer: HsLayerDescriptor,\n    serviceLayer?: HsWmsLayer,\n  ): void {\n    const olLayer = currentLayer.layer;\n    //parse config set at a Layer level\n    const hsLayerTimeConfig = getDimensions(olLayer)?.time;\n    //parse parametres available at the WM(T)S level\n    let serviceLayerTimeConfig;\n    if (serviceLayer) {\n      if (!Array.isArray(serviceLayer.Dimension)) {\n        serviceLayerTimeConfig = serviceLayer.Dimension;\n      } else {\n        serviceLayerTimeConfig = serviceLayer.Dimension?.find(\n          (dim) => dim.name == 'time',\n        ); // Let's assume there will be only one time dimension..\n      }\n    } else if (hsLayerTimeConfig) {\n      serviceLayerTimeConfig = hsLayerTimeConfig;\n    }\n\n    const timePoints = Array.isArray(serviceLayerTimeConfig.values)\n      ? serviceLayerTimeConfig.values\n      : this.parseTimePoints(serviceLayerTimeConfig.values);\n    // Gracefully fallback through time settings to find the best default value\n    let today = new Date().toISOString();\n    today = today.slice(0, today.indexOf('T'));\n    let defaultTime;\n    let layerParams = {};\n\n    const isTileWms = instOf(olLayer.getSource(), TileWMS);\n    const isImgWms = instOf(olLayer.getSource(), ImageWMS);\n\n    if (isTileWms || isImgWms) {\n      const src = olLayer.getSource() as TileWMS;\n      layerParams = src.getParams();\n      src.on('change', () => {\n        this.syncQueryParamToDimension(src, olLayer, currentLayer);\n      });\n    }\n\n    if (layerParams['TIME'] && timePoints.includes(layerParams['TIME'])) {\n      defaultTime = layerParams['TIME'];\n    } else if (timePoints.includes(hsLayerTimeConfig?.default)) {\n      defaultTime = hsLayerTimeConfig.default;\n    } else if (timePoints.includes(serviceLayerTimeConfig?.default)) {\n      defaultTime = serviceLayerTimeConfig.default;\n    } else if (timePoints.some((point) => point.startsWith(today))) {\n      defaultTime = timePoints.find((point) => point.startsWith(today));\n    } else {\n      defaultTime = timePoints[0];\n    }\n    currentLayer.time = {\n      default: defaultTime,\n      timePoints,\n    };\n    this.polyfillLayerDimensionsValues(currentLayer);\n    this.setLayerTime(currentLayer, defaultTime);\n  }\n\n  /**\n   * When PARAMS object on layer source is set directly from outside\n   * we want to monitor it and set time dimension separately to\n   * update the time selector. The actual dimension value will be\n   * set in postProcessDimensionValue function of\n   * get-capabilities/dimension class.\n   */\n  private syncQueryParamToDimension(\n    src: TileWMS | ImageWMS,\n    olLayer,\n    currentLayer: HsLayerDescriptor,\n  ) {\n    const timeFromParams = src.getParams()['TIME'];\n    if (\n      timeFromParams &&\n      timeFromParams != getDimensions(olLayer)?.time.value\n    ) {\n      this.setLayerTime(currentLayer, timeFromParams);\n    }\n  }\n\n  /**\n   * Update layer TIME parameter\n   * @param currentLayer - Selected layer\n   * @param newTime - ISO8601 string of a date and time to set\n   */\n  setLayerTime(currentLayer: HsLayerDescriptor, newTime: string): void {\n    if (currentLayer === undefined || currentLayer.layer === undefined) {\n      return;\n    }\n    this.layerTimeChanges.next({\n      layer: currentLayer,\n      time: newTime,\n    });\n  }\n\n  /**\n   * Reads a time dimension definition and transforms it into a canonical form of an array of time points\n   * @param values - Stringified time definition. Either defined by a list of values or by an ISO 8601 duration pattern\n   * @returns Array of time points in ISO 8601 format\n   */\n  parseTimePoints(values: string): Array<string> {\n    values = values.trim();\n    if (values.includes('/')) {\n      const timeValues = values.split('/');\n      if (timeValues.length == 3 && timeValues[2].trim().startsWith('P')) {\n        // Duration, pattern: \"1999-01-22T19:00:00/2018-01-22T13:00:00/PT8766H\"\n        return this.timePointsFromInterval(\n          timeValues[0],\n          timeValues[1],\n          this.parseInterval(timeValues[2]),\n        );\n      }\n      if (timeValues.length == 2) {\n        // Duration, pattern: \"1999-01-22T19:00:00/2018-01-22T13:00:00\"\n        // Daily interval is a pure guessing here and might be overkill for common cases\n        // TODO: => try better guessing\n        return this.timePointsFromInterval(\n          timeValues[0],\n          timeValues[1],\n          24 * 60 * 60 * 1000,\n        );\n      }\n      throw new Error(`Invalid ISO8601 time definition provided: ${values}`);\n    }\n    return values.split(',');\n  }\n\n  /**\n   * Because of the way the HsDimension interface is set up,\n   * we need to fill all parsed and currently undefined values\n   * into the \"dimensions\" property of OL Layer as well.\n   * Nevertheless we are duplicating some information.\n   */\n  private polyfillLayerDimensionsValues(\n    layerDescriptor: HsLayerDescriptor,\n  ): void {\n    if (!getDimensions(layerDescriptor.layer)?.time) {\n      setDimension(layerDescriptor.layer, {label: 'time'}, 'time');\n    }\n    const dimensionTimeProp = getDimensions(layerDescriptor.layer).time;\n    dimensionTimeProp.label = dimensionTimeProp.label ?? 'time';\n    dimensionTimeProp.default =\n      dimensionTimeProp.default ?? layerDescriptor.time.default;\n    dimensionTimeProp.value =\n      dimensionTimeProp.value ?? layerDescriptor.time.default;\n    dimensionTimeProp.values =\n      dimensionTimeProp.values ?? layerDescriptor.time.timePoints;\n  }\n\n  private timePointsFromInterval(\n    start: string,\n    end: string,\n    step: number,\n  ): Array<string> {\n    const timePoints = [];\n    const endMillis = new Date(end).getTime();\n    let tempMillis = new Date(start).getTime();\n    while (tempMillis <= endMillis) {\n      timePoints.push(new Date(tempMillis).toISOString());\n      tempMillis += step;\n    }\n    return timePoints;\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {Layer} from 'ol/layer';\nimport {Source, Vector as VectorSource, XYZ} from 'ol/source';\n\nimport {HsDimensionDescriptor} from 'hslayers-ng/common/dimensions';\nimport {HsDimensionTimeService} from './dimension-time.service';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {\n  instOf,\n  hasNestedLayers,\n  isLayerWMS,\n  getLayerParams,\n  updateLayerParams,\n} from 'hslayers-ng/services/utils';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsWmsLayer, WmsDimension} from 'hslayers-ng/types';\nimport {getDimensions} from 'hslayers-ng/common/extensions';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsDimensionService {\n  $log = inject(HsLogService);\n  hsDimensionTimeService = inject(HsDimensionTimeService);\n  hsEventBusService = inject(HsEventBusService);\n  hsMapService = inject(HsMapService);\n\n  constructor() {\n    this.hsDimensionTimeService.layerTimeChanges.subscribe(\n      ({layer: layerDescriptor, time: newTime}) => {\n        const dimensions = getDimensions(layerDescriptor.layer);\n        if (dimensions && (dimensions['time'] || dimensions['TIME'])) {\n          const dimensionDesc = new HsDimensionDescriptor(\n            'time',\n            dimensions['time'] ?? dimensions['TIME'],\n          );\n          dimensionDesc.modelValue = newTime;\n          this.dimensionChanged(dimensionDesc);\n        }\n      },\n    );\n  }\n\n  getDimensionValues(dimension: WmsDimension): Array<string> {\n    try {\n      if (typeof dimension.values === 'string') {\n        return this.hsDimensionTimeService.parseTimePoints(dimension.values);\n      }\n      return dimension.values;\n    } catch (ex) {\n      this.$log.error(ex);\n    }\n  }\n\n  paramsFromDimensions(layer) {\n    if (!layer.Dimension) {\n      return;\n    }\n    const tmp = {};\n    for (const dimension of layer.Dimension) {\n      if (dimension.value) {\n        tmp[dimension.name] = dimension.value;\n      }\n    }\n    return tmp;\n  }\n\n  /**\n   * A recursive function with goes through layers\n   * children and sets the possible dimension values used in dropdown.\n   *\n   * @param layer - Layer to fill the dimension values\n   */\n  fillDimensionValues(layer: HsWmsLayer): void {\n    if (!Array.isArray(layer.Layer)) {\n      return;\n    }\n    if (hasNestedLayers(layer) && Array.isArray(layer.Layer)) {\n      for (const sublayer of layer.Layer) {\n        this.fillDimensionValues(sublayer);\n      }\n    }\n    if (layer.Dimension && Array.isArray(layer.Dimension)) {\n      for (const dimension of layer.Dimension) {\n        /* Since we augment the 'values' property here in the WmsLayer definition\n         * it shall not be needed again in the HsDimensionTimeService.setupTimeLayer()\n         */\n        dimension.values = this.getDimensionValues(dimension);\n      }\n    }\n  }\n\n  dimensionChanged(dimension: HsDimensionDescriptor): void {\n    dimension.postProcessDimensionValue();\n    //Dimension can be linked to multiple layers\n    for (const layer of this.hsMapService.getLayersArray()) {\n      const iteratedDimensions = getDimensions(layer);\n      if (\n        iteratedDimensions &&\n        Object.keys(iteratedDimensions).filter(\n          (dimensionIterator) =>\n            iteratedDimensions[dimensionIterator] ==\n            dimension.originalDimension,\n        ).length > 0 //Dimension also linked to this layer?\n      ) {\n        const src = layer.getSource();\n        if (isLayerWMS(layer)) {\n          const params = getLayerParams(layer);\n          params[dimension.name == 'time' ? 'TIME' : dimension.name] =\n            dimension.value;\n          updateLayerParams(layer, params);\n        } else if (instOf(src, XYZ)) {\n          src.refresh();\n        } else if (instOf(src, VectorSource)) {\n          (src as VectorSource).refresh();\n        }\n        this.hsEventBusService.layermanagerDimensionChanges.next({\n          layer,\n          dimension: dimension.originalDimension,\n        });\n      }\n    }\n  }\n\n  /**\n   * Test if layer has dimensions\n   * @param layer - OL Layer\n   * @returns true if layer has any dimensions\n   */\n  isLayerWithDimensions(layer: Layer<Source>): boolean {\n    if (!layer) {\n      return false;\n    }\n    const dimensions = getDimensions(layer);\n    if (dimensions === undefined) {\n      return false;\n    }\n    return (\n      Object.keys(dimensions).filter((k) => {\n        return k == 'time' ? dimensions[k].onlyInEditor : true;\n      }).length > 0\n    );\n  }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable, WritableSignal, signal, inject} from '@angular/core';\n\nimport {lastValueFrom, takeUntil} from 'rxjs';\n\nimport {CapabilitiesResponseWrapper} from 'hslayers-ng/types';\nimport {HsCapabilityCacheService} from './capability-cache.service';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {getParamsFromUrl, HsProxyService} from 'hslayers-ng/services/utils';\nimport {IGetCapabilities} from './get-capabilities.interface';\nimport {HsCommonLaymanService} from 'hslayers-ng/common/layman';\n\n@Injectable({providedIn: 'root'})\nexport class HsWfsGetCapabilitiesService implements IGetCapabilities {\n  private httpClient = inject(HttpClient);\n  private hsEventBusService = inject(HsEventBusService);\n  private hsCapabilityCacheService = inject(HsCapabilityCacheService);\n  private hsCommonLaymanService = inject(HsCommonLaymanService);\n  private hsProxyService = inject(HsProxyService);\n\n  service_url: WritableSignal<string> = signal('');\n\n  /**\n   * Get WFS service location without parameters from url string\n   *\n   * @param str - Url string to parse\n   * @returns WFS service Url without params\n   */\n  getPathFromUrl(str: string): string {\n    if (str.indexOf('?') > -1) {\n      return str.substring(0, str.indexOf('?'));\n    }\n    return str;\n  }\n\n  /**\n   * Create WFS parameter string from parameter object\n   * TODO: Probably the same as utils.paramsToURL\n   *\n   * @param obj - Object with stored WFS service parameters\n   * @returns Parameter string or empty string if no object given\n   */\n  params2String(obj): string {\n    return obj\n      ? Object.keys(obj)\n          .map((key) => {\n            const val = obj[key];\n\n            if (Array.isArray(val)) {\n              return val\n                .map((val2) => {\n                  return (\n                    encodeURIComponent(key) + '=' + encodeURIComponent(val2)\n                  );\n                })\n                .join('&');\n            }\n\n            return encodeURIComponent(key) + '=' + encodeURIComponent(val);\n          })\n          .join('&')\n      : '';\n  }\n\n  /**\n   * Parse added service url and sends request GetCapabilities to WFS service\n   *\n   * @param service_url - Raw Url localization of service\n   * @param owrCache - Overwrites cache for the requested url\n   * @returns Promise object - Response to GetCapabilities request\n   */\n  async request(\n    service_url: string,\n    owrCache?: boolean,\n  ): Promise<CapabilitiesResponseWrapper> {\n    service_url = service_url.replace(/&amp;/g, '&');\n    this.service_url.set(service_url);\n    const params = getParamsFromUrl(service_url);\n    const path = this.getPathFromUrl(service_url);\n    if (params.request == undefined && params.REQUEST == undefined) {\n      params.request = 'GetCapabilities';\n    } else if (params.request !== undefined) {\n      params.request = 'GetCapabilities';\n    } else if (params.REQUEST !== undefined) {\n      params.REQUEST = 'GetCapabilities';\n    }\n    if (params.service == undefined && params.SERVICE == undefined) {\n      params.service = 'WFS';\n    }\n    if (params.version == undefined && params.VERSION == undefined) {\n      params.version = '2.0.0';\n    }\n    let url = [path, this.params2String(params)].join('?');\n\n    url = this.hsProxyService.proxify(url);\n    return this.hsCapabilityCacheService.getOrFetch(\n      url,\n      async () => {\n        try {\n          const withCredentials = this.hsCommonLaymanService.isLaymanUrl(\n            url,\n            this.hsCommonLaymanService.layman(),\n          );\n          let r = await lastValueFrom(\n            this.httpClient\n              .get(url, {\n                responseType: 'text',\n                observe: 'response', // Set observe to 'response' to get headers as well\n                withCredentials,\n              })\n              .pipe(takeUntil(this.hsEventBusService.cancelAddDataUrlRequest)),\n          );\n          /**\n           * Retry with different version number\n           */\n          if (r.body.includes('ServiceException')) {\n            r = await lastValueFrom(\n              this.httpClient\n                .get(url.replace('version=2.0.0', 'version=1.1.0'), {\n                  responseType: 'text',\n                  observe: 'response', // Set observe to 'response' to get headers as well\n                })\n                .pipe(\n                  takeUntil(this.hsEventBusService.cancelAddDataUrlRequest),\n                ),\n            );\n          }\n          const contentType = r.headers.get('Content-Type');\n          if (contentType?.includes('text/html')) {\n            return {\n              error: true,\n              response: {\n                message: 'ERROR.noValidData',\n              },\n            };\n          }\n          return {response: r.body};\n        } catch (e) {\n          return {response: e, error: true};\n        }\n      },\n      owrCache,\n    );\n  }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable, inject} from '@angular/core';\nimport {lastValueFrom, takeUntil} from 'rxjs';\n\nimport {Layer, Tile} from 'ol/layer';\nimport {Source, TileWMS} from 'ol/source';\nimport {WMSCapabilities} from 'ol/format';\n\nimport {CapabilitiesResponseWrapper, Metadata} from 'hslayers-ng/types';\nimport {HsCapabilityCacheService} from './capability-cache.service';\nimport {HsCommonLaymanService} from 'hslayers-ng/common/layman';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {\n  getParamsFromUrl,\n  HsProxyService,\n  getPreferredFormat,\n} from 'hslayers-ng/services/utils';\nimport {IGetCapabilities} from './get-capabilities.interface';\n\n@Injectable({providedIn: 'root'})\nexport class HsWmsGetCapabilitiesService implements IGetCapabilities {\n  private httpClient = inject(HttpClient);\n  hsEventBusService = inject(HsEventBusService);\n  hsMapService = inject(HsMapService);\n  hsCommonLaymanService = inject(HsCommonLaymanService);\n  private hsCapabilityCacheService = inject(HsCapabilityCacheService);\n  private hsProxyService = inject(HsProxyService);\n\n  /**\n   * Get WMS service location without parameters from URL string\n   *\n   * @param str - URL string to parse\n   * @returns WMS service URL\n   */\n  getPathFromUrl(str: string): string {\n    if (str.indexOf('?') > -1) {\n      return str.substring(0, str.indexOf('?'));\n    }\n    return str;\n  }\n\n  /**\n   * Create WMS parameter string from parameter object\n   * TODO: Probably the same as utils.paramsToURL\n   *\n   * @param obj - Object with stored WMS service parameters\n   * @returns Parameter string or empty string if no object given\n   */\n  params2String(obj): string {\n    return obj\n      ? Object.keys(obj)\n          .map((key) => {\n            const val = obj[key];\n\n            if (Array.isArray(val)) {\n              return val\n                .map((val2) => {\n                  return (\n                    encodeURIComponent(key) + '=' + encodeURIComponent(val2)\n                  );\n                })\n                .join('&');\n            }\n\n            return encodeURIComponent(key) + '=' + encodeURIComponent(val);\n          })\n          .join('&')\n      : '';\n  }\n\n  /**\n   * Parse added service url and sends GetCapabilities request to WMS service\n   *\n   * @param service_url - Raw Url localization of service\n   * @param owrCache - Overwrites cache for the requested url\n   * @returns Promise object - Response to GetCapabilities request\n   */\n  async request(\n    service_url: string,\n    owrCache?: boolean,\n  ): Promise<CapabilitiesResponseWrapper> {\n    service_url = service_url.replace(/&amp;/g, '&');\n    const params = getParamsFromUrl(service_url);\n    const path = this.getPathFromUrl(service_url);\n    if (params.request === undefined && params.REQUEST === undefined) {\n      params.request = 'GetCapabilities';\n    } else if (params.request !== undefined) {\n      params.request = 'GetCapabilities';\n    } else if (params.REQUEST !== undefined) {\n      params.REQUEST = 'GetCapabilities';\n    }\n    if (params.service === undefined && params.SERVICE === undefined) {\n      params.service = 'WMS';\n    }\n    if (params.version === undefined && params.VERSION === undefined) {\n      params.version = '1.3.0';\n    }\n    let url = [path, this.params2String(params)].join('?');\n\n    url = this.hsProxyService.proxify(url);\n\n    return this.hsCapabilityCacheService.getOrFetch(\n      url,\n      async () => {\n        try {\n          const withCredentials = this.hsCommonLaymanService.isLaymanUrl(\n            url,\n            this.hsCommonLaymanService.layman(),\n          );\n          const r = await lastValueFrom(\n            this.httpClient\n              .get(url, {\n                responseType: 'text',\n                withCredentials,\n                observe: 'response', // Set observe to 'response' to get headers as well\n              })\n              .pipe(takeUntil(this.hsEventBusService.cancelAddDataUrlRequest)),\n          );\n          const contentType = r.headers.get('Content-Type');\n          if (contentType?.includes('text/html')) {\n            return {\n              error: true,\n              response: {\n                message: 'ERROR.noValidData',\n              },\n            };\n          }\n          return {response: r.body};\n        } catch (e) {\n          return {\n            response: e,\n            error: true,\n          };\n        }\n      },\n      owrCache,\n    );\n  }\n\n  /**\n   * Load all layers of selected service to the map\n   *\n   * @param capabilitiesXml - XML response of GetCapabilities of selected service\n   * @returns List of layers from service\n   */\n  service2layers(capabilitiesXml, path: string): Layer<Source>[] {\n    const parser = new WMSCapabilities();\n    const caps = parser.read(capabilitiesXml);\n    let service = caps.Capability.Layer;\n    if (service.length === undefined && service.Layer != undefined) {\n      service = [service];\n    }\n    //const srss = caps.Capability.Layer.CRS;\n    const imageFormats = caps.Capability.Request.GetMap.Format;\n    const queryFormats = caps.Capability.Request.GetFeatureInfo\n      ? caps.Capability.Request.GetFeatureInfo.Format\n      : [];\n    const image_format = getPreferredFormat(imageFormats, [\n      'image/png; mode=8bit',\n      'image/png',\n      'image/gif',\n      'image/jpeg',\n    ]);\n    const query_format = getPreferredFormat(queryFormats, [\n      'application/vnd.esri.wms_featureinfo_xml',\n      'application/vnd.ogc.gml',\n      'application/vnd.ogc.wms_xml',\n      'text/plain',\n      'text/html',\n    ]);\n\n    const tmp = [];\n    service.forEach((service) => {\n      service.Layer.forEach((layer) => {\n        let attributions = [];\n        if (layer.Attribution) {\n          attributions = [\n            `<a href=\"${layer.Attribution.OnlineResource}\">${layer.Attribution.Title}</a>`,\n          ];\n        }\n        const metadata: Metadata = this.getMetadataObjectWithUrls(layer);\n        const new_layer = new Tile({\n          properties: {\n            title: layer.Title.replace(/\\//g, '&#47;'),\n            name: layer.Name.replace(/\\//g, '&#47;'),\n            path,\n            abstract: layer.Abstract,\n            metadata,\n          },\n          source: new TileWMS({\n            url: caps.Capability.Request.GetMap.DCPType[0].HTTP.Get\n              .OnlineResource,\n            attributions: attributions,\n            params: {\n              LAYERS: layer.Name,\n              INFO_FORMAT: layer.queryable ? query_format : undefined,\n              FORMAT: image_format,\n              styles:\n                layer.Style && layer.Style.length > 0\n                  ? layer.Style[0].Name\n                  : undefined,\n            },\n            crossOrigin: 'anonymous',\n          }),\n          useInterimTilesOnError: false,\n          extent: layer.BoundingBox,\n        });\n        this.hsMapService.proxifyLayerLoader(new_layer, true);\n        tmp.push(new_layer);\n      });\n    });\n    return tmp;\n  }\n\n  getMetadataObjectWithUrls(layer: any): Metadata {\n    if (layer.MetadataURL) {\n      const metadata = {\n        urls: layer.MetadataURL.map((url) => {\n          return {\n            type: url.type,\n            format: url.Format,\n            onlineResource: url.OnlineResource,\n          };\n        }),\n      };\n      return metadata;\n    }\n  }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable, inject} from '@angular/core';\n\nimport {Layer, Tile} from 'ol/layer';\nimport {Source, WMTS} from 'ol/source';\nimport {WMTSCapabilities} from 'ol/format';\nimport {lastValueFrom, takeUntil} from 'rxjs';\n\nimport {CapabilitiesResponseWrapper} from 'hslayers-ng/types';\nimport {HsCapabilityCacheService} from './capability-cache.service';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {\n  getParamsFromUrl,\n  HsProxyService,\n  getPreferredFormat,\n} from 'hslayers-ng/services/utils';\nimport {HsWmsGetCapabilitiesService} from './wms-get-capabilities.service';\nimport {IGetCapabilities} from './get-capabilities.interface';\n\n@Injectable({providedIn: 'root'})\nexport class HsWmtsGetCapabilitiesService implements IGetCapabilities {\n  private httpClient = inject(HttpClient);\n  hsEventBusService = inject(HsEventBusService);\n  hsMapService = inject(HsMapService);\n  hsWmsGetCapabilitiesService = inject(HsWmsGetCapabilitiesService);\n  hsCapabilityCacheService = inject(HsCapabilityCacheService);\n  private hsProxyService = inject(HsProxyService);\n\n  service_url: any;\n\n  /**\n   * Get WMTS service location without parameters from URL string\n   *\n   * @param str - URL string to parse\n   * @returns WMTS service URL\n   */\n  getPathFromUrl(str: string): string {\n    if (str.indexOf('?') > -1) {\n      return str.substring(0, str.indexOf('?'));\n    }\n    return str;\n  }\n\n  /**\n   * Create WMTS parameter string from parameter object\n   * TODO: Probably the same as utils.paramsToURL\n   *\n   * @param obj - Object with stored WMS service parameters\n   * @returns Parameter string or empty string if no object given\n   */\n  params2String(obj): string {\n    return obj\n      ? Object.keys(obj)\n          .map((key) => {\n            const val = obj[key];\n\n            if (Array.isArray(val)) {\n              return val\n                .map((val2) => {\n                  return (\n                    encodeURIComponent(key) + '=' + encodeURIComponent(val2)\n                  );\n                })\n                .join('&');\n            }\n\n            return encodeURIComponent(key) + '=' + encodeURIComponent(val);\n          })\n          .join('&')\n      : '';\n  }\n\n  /**\n   * Parse added service url and sends GetCapabilities request to WMTS service\n   *\n   * @param service_url - Raw Url localization of service\n   * @param owrCache - Overwrites cache for the requested url\n   * @returns Promise object -  Response to GetCapabilities request\n   */\n  async request(\n    service_url: string,\n    owrCache?: boolean,\n  ): Promise<CapabilitiesResponseWrapper> {\n    service_url = service_url.replace(/&amp;/g, '&');\n    const params = getParamsFromUrl(service_url);\n    const path = this.getPathFromUrl(service_url);\n    if (params.request == undefined && params.REQUEST == undefined) {\n      params.request = 'GetCapabilities';\n    } else if (params.request != undefined) {\n      params.request = 'GetCapabilities';\n    } else if (params.REQUEST != undefined) {\n      params.REQUEST = 'GetCapabilities';\n    }\n    if (params.service == undefined && params.SERVICE == undefined) {\n      params.service = 'wmts';\n    }\n    if (params.version == undefined && params.VERSION == undefined) {\n      params.version = '1.3.0';\n    }\n    let url = [path, this.params2String(params)].join('?');\n\n    url = this.hsProxyService.proxify(url);\n\n    return this.hsCapabilityCacheService.getOrFetch(\n      url,\n      async () => {\n        try {\n          const r = await lastValueFrom(\n            this.httpClient\n              .get(url, {\n                responseType: 'text',\n                observe: 'response', // Set observe to 'response' to get headers as well\n              })\n              .pipe(takeUntil(this.hsEventBusService.cancelAddDataUrlRequest)),\n          );\n          const contentType = r.headers.get('Content-Type');\n          if (contentType?.includes('text/html')) {\n            return {\n              error: true,\n              response: {\n                message: 'ERROR.noValidData',\n              },\n            };\n          }\n          return {response: r.body};\n        } catch (error) {\n          return {\n            response: error,\n            error: true,\n          };\n        }\n      },\n      owrCache,\n    );\n  }\n\n  /**\n   * Load all layers of selected service to the map\n   *\n   * @param capabilities_xml - XML response of GetCapabilities of selected service\n   * @returns List of layers from service\n   */\n  service2layers(capabilities_xml): Layer<Source>[] {\n    const parser = new WMTSCapabilities();\n    const caps = parser.read(capabilities_xml);\n    const service = caps.Capability.Layer;\n    //const srss = caps.Capability.Layer.CRS;\n    const image_formats = caps.Capability.Request.GetMap.Format;\n    const query_formats = caps.Capability.Request.GetFeatureInfo\n      ? caps.Capability.Request.GetFeatureInfo.Format\n      : [];\n    const image_format = getPreferredFormat(image_formats, [\n      'image/png; mode=8bit',\n      'image/png',\n      'image/gif',\n      'image/jpeg',\n    ]);\n    const query_format = getPreferredFormat(query_formats, [\n      'application/vnd.esri.wmts_featureinfo_xml',\n      'application/vnd.ogc.gml',\n      'application/vnd.ogc.wmts_xml',\n      'text/plain',\n      'text/html',\n    ]);\n\n    const tmp = [];\n    for (const subservice of service) {\n      for (const layer of subservice.Layer) {\n        let attributions = [];\n        if (layer.Attribution) {\n          attributions = [\n            `<a href=\"${layer.Attribution.OnlineResource}\">${layer.Attribution.Title}</a>`,\n          ];\n        }\n        const metadata =\n          this.hsWmsGetCapabilitiesService.getMetadataObjectWithUrls(layer);\n        const new_layer = new Tile({\n          properties: {\n            title: layer.Title.replace(/\\//g, '&#47;'),\n            abstract: layer.Abstract,\n            metadata,\n          },\n          source: new WMTS({\n            url: caps.Capability.Request.GetMap.DCPType[0].HTTP.Get\n              .OnlineResource,\n            attributions: attributions,\n            style:\n              layer.Style && layer.Style.length > 0\n                ? layer.Style[0].Name\n                : undefined,\n            crossOrigin: 'anonymous',\n          } as any),\n          useInterimTilesOnError: false,\n          extent: layer.BoundingBox,\n        });\n        tmp.push(new_layer);\n      }\n    }\n    return tmp;\n  }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable, WritableSignal, signal, inject} from '@angular/core';\n\nimport {CapabilitiesResponseWrapper} from 'hslayers-ng/types';\nimport {HsCapabilityCacheService} from './capability-cache.service';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsProxyService} from 'hslayers-ng/services/utils';\nimport {IGetCapabilities} from './get-capabilities.interface';\n\n@Injectable({providedIn: 'root'})\nexport class HsXyzGetCapabilitiesService implements IGetCapabilities {\n  private httpClient = inject(HttpClient);\n  private hsEventBusService = inject(HsEventBusService);\n  private hsCapabilityCacheService = inject(HsCapabilityCacheService);\n  private hsProxyService = inject(HsProxyService);\n\n  service_url: WritableSignal<string> = signal('');\n\n  /**\n   * Get XYZ service location without parameters from url string\n   */\n  getPathFromUrl(str: string): string {\n    if (str.indexOf('?') > -1) {\n      return str.substring(0, str.indexOf('?'));\n    }\n    return str;\n  }\n\n  /**\n   * Create XYZ parameter string from parameter object\n   */\n  params2String(obj): string {\n    return obj\n      ? Object.keys(obj)\n          .map((key) => {\n            const val = obj[key];\n            if (Array.isArray(val)) {\n              return val\n                .map((val2) => {\n                  return (\n                    encodeURIComponent(key) + '=' + encodeURIComponent(val2)\n                  );\n                })\n                .join('&');\n            }\n            return encodeURIComponent(key) + '=' + encodeURIComponent(val);\n          })\n          .join('&')\n      : '';\n  }\n\n  /**\n   * Validate XYZ URL template\n   */\n  private validateXyzUrl(url: string): boolean {\n    // Check if URL contains required XYZ template parameters\n    // Support both {y} and {-y} for TMS-style coordinates\n    return (\n      url.includes('{x}') &&\n      (url.includes('{y}') || url.includes('{-y}')) &&\n      url.includes('{z}') &&\n      (url.startsWith('http://') || url.startsWith('https://'))\n    );\n  }\n\n  /**\n   * Parse added service url and validate XYZ template\n   */\n  async request(\n    service_url: string,\n    owrCache?: boolean,\n  ): Promise<CapabilitiesResponseWrapper> {\n    service_url = service_url.replace(/&amp;/g, '&');\n    this.service_url.set(service_url);\n\n    // Validate XYZ URL template\n    if (!this.validateXyzUrl(service_url)) {\n      return {\n        error: true,\n        response: {\n          message: 'ERROR.invalidXyzUrl',\n        },\n      };\n    }\n\n    return this.hsCapabilityCacheService.getOrFetch(\n      service_url,\n      async () => {\n        try {\n          // Create a mock capabilities response\n          const mockCapabilities = {\n            Service: {\n              Title: 'XYZ Tile Service',\n              Abstract: 'XYZ Tile Service',\n            },\n            Capability: {\n              Layer: {\n                Title: 'XYZ Layer',\n                Name: 'xyz_layer',\n                Abstract: 'XYZ Tile Layer',\n                BoundingBox: [-180, -90, 180, 90],\n                Style: [\n                  {\n                    Name: 'default',\n                    Title: 'Default',\n                  },\n                ],\n              },\n            },\n          };\n\n          return {response: mockCapabilities};\n        } catch (e) {\n          return {response: e, error: true};\n        }\n      },\n      owrCache,\n    );\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["VectorSource"],"mappings":"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"}