{"version":3,"file":"hslayers-ng-services-utils.mjs","sources":["../../../projects/hslayers/services/utils/utils.ts","../../../projects/hslayers/services/utils/layer-utils.ts","../../../projects/hslayers/services/utils/layer-z-index.utils.ts","../../../projects/hslayers/services/utils/normalize-sld.ts","../../../projects/hslayers/services/utils/proxy.service.ts","../../../projects/hslayers/services/utils/extent-utils.ts","../../../projects/hslayers/services/utils/attribution-utils.ts","../../../projects/hslayers/services/utils/format-utils.ts","../../../projects/hslayers/services/utils/hslayers-ng-services-utils.ts"],"sourcesContent":["import {LineString, Polygon} from 'ol/geom';\nimport {ProjectionLike, get as getProjection, transform} from 'ol/proj';\nimport {getArea, getDistance} from 'ol/sphere';\n\nimport {Measurement} from 'hslayers-ng/types';\n\n/**\n * @param url - URL for which to determine port number\n * @returns Port number\n */\nexport function getPortFromUrl(url: string): string {\n  try {\n    const link = document.createElement('a');\n    link.setAttribute('href', url);\n    if (link.port == '') {\n      if (url.startsWith('https://')) {\n        return '443';\n      }\n      if (url.startsWith('http://')) {\n        return '80';\n      }\n    }\n    return link.port;\n  } catch (e) {\n    console.error('Invalid URL provided to getPortFromUrl:', url);\n    return '';\n  }\n}\n\n/**\n * Parse parameters and their values from URL string\n * @param str - URL to parse parameters from\n * @returns Object with parsed parameters as properties\n */\nexport function getParamsFromUrl(str: string): any {\n  if (typeof str !== 'string') {\n    return {};\n  }\n\n  if (str.includes('?')) {\n    str = str.substring(str.indexOf('?') + 1);\n  } else {\n    return {};\n  }\n\n  return str\n    .trim()\n    .split('&')\n    .reduce((ret, param) => {\n      if (!param) {\n        return ret;\n      }\n      const parts = param.replace(/\\+/g, ' ').split('=');\n      let key = parts[0];\n      let val = parts[1];\n      key = decodeURIComponent(key);\n      // missing `=` should be `null`:\n      // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n      val = val === undefined ? null : decodeURIComponent(val);\n\n      if (!ret.hasOwnProperty(key)) {\n        ret[key] = val;\n      } else if (Array.isArray(ret[key])) {\n        ret[key].push(val);\n      } else {\n        ret[key] = [ret[key], val];\n      }\n      return ret;\n    }, {});\n}\n\n/**\n * Create encoded URL string from object with parameters\n * @param params - Parameter object with parameter key-value pairs\n * @returns Joined encoded URL query string\n */\nexport function paramsToURL(params: any): string {\n  const pairs = [];\n  for (const key in params) {\n    if (params.hasOwnProperty(key) && params[key] !== undefined) {\n      pairs.push(\n        encodeURIComponent(key) + '=' + encodeURIComponent(params[key]),\n      );\n    }\n  }\n  return pairs.join('&');\n}\n\n/**\n * Insert every element in the set of matched elements after the target.\n * @param newNode - Element to insert\n * @param referenceNode - Element after which to insert\n */\nexport function insertAfter(newNode, referenceNode): void {\n  if (newNode.length !== undefined && newNode.length > 0) {\n    newNode = newNode[0];\n  }\n  referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n}\n\n/**\n * Create URL string from object with parameters without encoding\n * @param params - Parameter object with parameter key-value pairs\n * @returns Joined URL query string\n */\nexport function paramsToURLWoEncode(params): string {\n  const pairs = [];\n  for (const key in params) {\n    if (params.hasOwnProperty(key)) {\n      pairs.push(key + '=' + params[key]);\n    }\n  }\n  return pairs.join('&');\n}\n\n/**\n * Returns a function, that, as long as it continues to be\n * invoked, will not be triggered.\n * (https://davidwalsh.name/javascript-debounce-function)\n * @param func - Function to execute with throttling\n * @param wait - The function will be called after it stops\n * being called for N milliseconds.\n * @param immediate - If `immediate` is passed, trigger the\n * function on the leading edge, instead of the trailing.\n * @param context - Context element which stores the timeout handle\n * @returns Returns function which is debounced\n */\nexport function debounce(func, wait: number, immediate: boolean, context) {\n  // eslint-disable-next-line @typescript-eslint/no-this-alias\n  context ??= this;\n  return function (...args) {\n    const later = function () {\n      if (!immediate) {\n        func.apply(context, args);\n      }\n      context.timeout = null;\n    };\n    const callNow = immediate && !context.timeout;\n    clearTimeout(context.timeout);\n    context.timeout = setTimeout(later, wait);\n    if (callNow) {\n      func.apply(context, args);\n    }\n  };\n}\n\n/**\n * Creates a deep copy of the input object\n * @param from - object to deep copy\n * @param to - optional target for copy\n * @returns a deep copy of input object\n */\nexport function structuredClone(from, to?) {\n  if (from === null || typeof from !== 'object') {\n    return from;\n  }\n  if (from.constructor != Object && from.constructor != Array) {\n    return from;\n  }\n  if (\n    from.constructor == Date ||\n    from.constructor == RegExp ||\n    from.constructor == Function ||\n    from.constructor == String ||\n    from.constructor == Number ||\n    from.constructor == Boolean\n  ) {\n    return new from.constructor(from);\n  }\n  to = to || new from.constructor();\n  for (const key in from) {\n    to[key] =\n      typeof to[key] == 'undefined' ? structuredClone(from[key]) : to[key];\n  }\n  return to;\n}\n\n/**\n * Check if object is a function\n * @param functionToCheck - object to check, presumably a function\n * @returns true when input is a function, false otherwise\n */\nexport function isFunction(functionToCheck: any): boolean {\n  return (\n    functionToCheck && {}.toString.call(functionToCheck) === '[object Function]'\n  );\n}\n\n/**\n * Check if object is plain object (not function, not array, not class)\n \n * @returns true when input is plain old JavaScript object, false otherwise\n */\nexport function isPOJO(objectToCheck: any): boolean {\n  return objectToCheck && {}.toString.call(objectToCheck) === '[object Object]';\n}\n\n/**\n * Check if object is an instance of a specific class\n * @param obj - any object to check\n * @param type - class type itself\n * @returns true when obj is an instance of the provided type, false otherwise\n */\nexport function instOf(obj: any, type: any): boolean {\n  return _instanceOf(obj, type);\n}\n\nfunction _instanceOf(obj: any, klass: any): boolean {\n  if (obj === undefined || obj === null) {\n    return false;\n  }\n  if (klass.default) {\n    klass = klass.default;\n  }\n  if (isFunction(klass)) {\n    return obj instanceof klass;\n  }\n  obj = Object.getPrototypeOf(obj);\n  while (obj !== null) {\n    if (obj.constructor.name === klass) {\n      return true;\n    }\n    obj = Object.getPrototypeOf(obj);\n  }\n  return false;\n}\n\n/**\n * Compute and format polygon area with correct units (m2/km2)\n * @returns area of polygon with used units\n */\nexport function formatArea(\n  polygon: Polygon,\n  sourceProj: ProjectionLike,\n): Measurement {\n  const area = Math.abs(getArea(polygon));\n  const output = {\n    size: area,\n    type: 'Area',\n    unit: 'm',\n  };\n  if (area > 10000) {\n    output.size = Math.round((area / 1000000) * 100) / 100;\n    output.unit = 'km';\n  } else {\n    output.size = Math.round(area * 100) / 100;\n    output.unit = 'm';\n  }\n  return output;\n}\n\n/**\n * Compute and format line length with correct units (m/km)\n \n * @returns numeric length of line with used units\n */\nexport function formatLength(\n  line: LineString,\n  sourceProj: ProjectionLike,\n): Measurement {\n  let length = 0;\n  const coordinates = line.getCoordinates();\n  const sourceProjRegistered = getProjection(sourceProj);\n\n  for (let i = 0; i < coordinates.length - 1; ++i) {\n    const c1 = sourceProjRegistered\n      ? transform(coordinates[i], sourceProj, 'EPSG:4326')\n      : coordinates[i];\n    const c2 = sourceProjRegistered\n      ? transform(coordinates[i + 1], sourceProj, 'EPSG:4326')\n      : coordinates[i + 1];\n    length += getDistance(c1, c2);\n  }\n\n  const output = {\n    size: length,\n    type: 'Length',\n    unit: 'm',\n  };\n\n  if (length > 100) {\n    output.size = Math.round((length / 1000) * 100) / 100;\n    output.unit = 'km';\n  } else {\n    output.size = Math.round(length * 100) / 100;\n    output.unit = 'm';\n  }\n  return output;\n}\n\n/**\n * Check if element is overflown\n * @param element - Element to check\n * @returns true if element is overflown, false otherwise\n */\nexport function isOverflown(element: Element): boolean {\n  return (\n    element.scrollHeight > element.clientHeight ||\n    element.scrollWidth > element.clientWidth\n  );\n}\n\n/**\n * Replaces first string letter to UpperCase\n * @param target - Target string\n * @returns modified string\n */\nexport function capitalizeFirstLetter(target: string): string {\n  return target.charAt(0).toUpperCase() + target.slice(1);\n}\n\n/**\n * Transforms string from camelCase to kebab-case\n */\nexport function camelToKebab(str: string): string {\n  return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\n/**\n * Returns undefined if string is undefined or empty\n */\nexport function undefineEmptyString(str: string): any {\n  if (str === undefined) {\n    return undefined;\n  }\n  return str.trim() != '' ? str : undefined;\n}\n","import BaseLayer from 'ol/layer/Base';\nimport IDW from 'ol-ext/source/IDW';\nimport {Big} from 'big.js';\nimport {\n  Cluster,\n  ImageWMS,\n  Source,\n  TileArcGISRest,\n  TileWMS,\n  Vector as VectorSource,\n  WMTS,\n  XYZ,\n} from 'ol/source';\nimport {Extent, isEmpty} from 'ol/extent';\nimport {Feature, View} from 'ol';\nimport {default as FeatureFormat} from 'ol/format/Feature';\nimport {Geometry} from 'ol/geom';\nimport {HsLayerDescriptor, HsWmsLayer} from 'hslayers-ng/types';\nimport {\n  Image as ImageLayer,\n  Layer,\n  Vector as VectorLayer,\n  Tile as TileLayer,\n  VectorImage,\n} from 'ol/layer';\nimport {METERS_PER_UNIT, Projection, transformExtent} from 'ol/proj';\nimport {\n  getCluster,\n  getEditor,\n  getName,\n  getShowInLayerManager,\n  getTitle,\n} from 'hslayers-ng/common/extensions';\nimport {instOf, isFunction} from './utils';\n\n/**\n * Determines if layer has properties needed for 'Zoom to layer' function.\n * @param layer - Selected layer\n * @returns True for layer with BoundingBox property, for\n * WMS layer or for layer, which has source with extent\n */\nexport function layerIsZoomable(layer: Layer<Source>): boolean {\n  if (typeof layer == 'undefined') {\n    return false;\n  }\n  if (layer.getExtent()) {\n    return true;\n  }\n  if (isLayerWMS(layer)) {\n    return true;\n  }\n  const src: any = layer.getSource();\n  if (src.getExtent && src.getExtent() && !isEmpty(src.getExtent())) {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Determines if layer has underlying layers.\n * @param layer - Selected layer\n * @returns True for layer with sub layers, for layer type\n * WMS layer\n */\nexport function hasNestedLayers(layer: HsWmsLayer): boolean {\n  if (layer === undefined) {\n    return false;\n  }\n  return layer.Layer !== undefined;\n}\n\n/**\n * Determines if layer is a Vector layer and therefore stylable\n * @param layer - Selected layer\n * @returns True for ol.layer.Vector\n */\nexport function layerIsStyleable(layer: Layer<Source>): boolean {\n  if (typeof layer == 'undefined') {\n    return false;\n  }\n  return isLayerVectorLayer(layer, false);\n}\n\n/**\n * Test if layer is queryable (WMS layer with Info format)\n * @param layer - Selected layer\n * @returns True for ol.layer.Tile and ol.layer.Image with\n * INFO_FORMAT in params\n */\nexport function isLayerQueryable(layer: Layer<Source>): boolean {\n  return isLayerWMS(layer) && !!getLayerParams(layer).INFO_FORMAT;\n}\n\n/**\n * Get title of selected layer\n * @param layer - to get layer title\n * @returns Layer title or \"Void\"\n */\nexport function getLayerTitle(layer: Layer<Source>): string {\n  if (getTitle(layer) !== undefined && getTitle(layer) != '') {\n    return getTitle(layer).replace(/&#47;/g, '/');\n  }\n  return 'Void';\n}\n\nexport function getURL(layer: Layer<Source>): string {\n  const src = layer.getSource();\n  if (instOf(src, ImageWMS)) {\n    return (src as ImageWMS).getUrl();\n  }\n  if (instOf(src, TileArcGISRest)) {\n    return (src as TileArcGISRest).getUrls()[0];\n  }\n  if (instOf(src, TileWMS)) {\n    return (src as TileWMS).getUrls()[0];\n  }\n  if (instOf(src, WMTS)) {\n    return (src as WMTS).getUrls()[0];\n  }\n  if (instOf(src, XYZ)) {\n    const urls = (src as XYZ).getUrls();\n    return urls ? urls[0] : '';\n  }\n  if ((src as any).getUrl) {\n    const tmpUrl = (src as any).getUrl();\n    if (typeof tmpUrl == 'string') {\n      return tmpUrl;\n    }\n    if (isFunction(tmpUrl)) {\n      return tmpUrl();\n    }\n  }\n  if ((src as any).getUrls) {\n    return (src as any).getUrls()[0];\n  }\n}\n\n/**\n * Test if layer is WMS layer\n * @param layer - Selected layer\n * @returns True for ol.layer.Tile and ol.layer.Image\n */\nexport function isLayerWMS(layer: Layer<Source>): boolean {\n  const isTileLayer = instOf(layer, TileLayer);\n  const src = layer.getSource();\n  const isTileWMSSource = instOf(src, TileWMS);\n  if (isTileLayer && isTileWMSSource) {\n    return true;\n  }\n  const src2 = layer.getSource();\n  const isImageLayer = instOf(layer, ImageLayer);\n  const isImageWMSSource = instOf(src2, ImageWMS);\n  if (isImageLayer && isImageWMSSource) {\n    return true;\n  }\n  return false;\n}\n\nexport function isLayerWMTS(layer: Layer<Source>): boolean {\n  const isTileLayer = instOf(layer, TileLayer);\n  const src = layer.getSource();\n  const isWMTSSource = instOf(src, WMTS);\n  if (isTileLayer && isWMTSSource) {\n    return true;\n  }\n  return false;\n}\n\nexport function isLayerXYZ(layer: Layer<Source>): boolean {\n  const isTileLayer = instOf(layer, TileLayer);\n  const src = layer.getSource();\n  const isXYZSource = instOf(src, XYZ);\n  if (isTileLayer && isXYZSource) {\n    return true;\n  }\n  return false;\n}\n\nexport function isLayerArcgis(layer: Layer<Source>): boolean {\n  const isTileLayer = instOf(layer, TileLayer);\n  const src = layer.getSource();\n  const isArcgisSource = instOf(src, TileArcGISRest);\n  if (isTileLayer && isArcgisSource) {\n    return true;\n  }\n  return false;\n}\n\nexport function isLayerIDW(layer: Layer<Source>): boolean {\n  const isImageLayer = instOf(layer, ImageLayer);\n  const src = layer.getSource();\n  const isIDWSource = instOf(src, IDW);\n  if (isImageLayer && isIDWSource) {\n    return true;\n  }\n  return false;\n}\n\nexport function getLayerSourceFormat(layer: Layer<Source>): FeatureFormat {\n  if (!isLayerVectorLayer(layer)) {\n    return;\n  }\n  return (layer as VectorLayer<VectorSource<Feature>>).getSource()?.getFormat();\n}\n\n/**\n * Test if layer is Vector layer\n * @param layer - Selected layer\n * @param includingClusters - Whether to treat clusters as Vectors or not, Defaults to true\n * @returns True for Vector layer\n */\nexport function isLayerVectorLayer(\n  layer: BaseLayer,\n  includingClusters = true,\n): boolean {\n  if (\n    (instOf(layer, VectorLayer) || instOf(layer, VectorImage)) &&\n    /**\n     * This part is not entirely correct as we cast both VectorLayer and VectorImage\n     * as VectorLayer but the differences are not relevant for the sake of the check\n     */\n    includingClusters\n      ? instOf(\n          (layer as VectorLayer<VectorSource<Feature>>).getSource(),\n          Cluster,\n        ) ||\n        instOf(\n          (layer as VectorLayer<VectorSource<Feature>>).getSource(),\n          VectorSource,\n        )\n      : instOf(\n          (layer as VectorLayer<VectorSource<Feature>>).getSource(),\n          VectorSource,\n        )\n  ) {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Test if the features in the vector layer come from a GeoJSON source\n * @param layer - an OL vector layer\n * @returns true only if the GeoJSON format is explicitly specified in the source. False otherwise.\n */\nexport async function isLayerGeoJSONSource(\n  layer: Layer<Source>,\n): Promise<boolean> {\n  const GeoJSON = (await import('ol/format/GeoJSON')).default;\n  if (instOf(getLayerSourceFormat(layer), GeoJSON)) {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Test if the features in the vector layer come from a TopoJSON source\n * @param layer - an OL vector layer\n * @returns true only if the TopoJSON format is explicitly specified in the source. False otherwise.\n */\nexport async function isLayerTopoJSONSource(\n  layer: Layer<Source>,\n): Promise<boolean> {\n  const TopoJSON = (await import('ol/format/TopoJSON')).default;\n  if (instOf(getLayerSourceFormat(layer), TopoJSON)) {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Test if the features in the vector layer come from a KML source\n * @param layer - an OL vector layer\n * @returns true only if the KML format is explicitly specified in the source. False otherwise.\n */\nexport async function isLayerKMLSource(layer: Layer<Source>): Promise<boolean> {\n  const KML = (await import('ol/format/KML')).default;\n  if (instOf(getLayerSourceFormat(layer), KML)) {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Test if the features in the vector layer come from a GPX source\n * @param layer - an OL vector layer\n * @returns true only if the GPX format is explicitly specified in the source. False otherwise.\n */\nexport async function isLayerGPXSource(layer: Layer<Source>): Promise<boolean> {\n  const GPX = (await import('ol/format/GPX')).default;\n  if (instOf(getLayerSourceFormat(layer), GPX)) {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Test if layer is shown in layer switcher\n * (if not some internal hslayers layer like selected feature layer)\n * @param layer - Layer to check\n * @returns True if showInLayerManager attribute is set to true\n */\nexport function isLayerInManager(layer: Layer<Source>): boolean {\n  return (\n    getShowInLayerManager(layer) === undefined ||\n    getShowInLayerManager(layer) == true\n  );\n}\n\nexport function getSourceParams(\n  source: ImageWMS | TileWMS | TileArcGISRest,\n): Record<string, any> {\n  return source.getParams();\n}\n\nexport function getLayerParams(layer: Layer<Source>): Record<string, any> {\n  const src = layer.getSource();\n  if (instOf(src, ImageWMS)) {\n    return getSourceParams(src as ImageWMS);\n  }\n  if (instOf(src, TileWMS)) {\n    return getSourceParams(src as TileWMS);\n  }\n  if (instOf(src, TileArcGISRest)) {\n    return getSourceParams(src as TileArcGISRest);\n  }\n}\n\nexport function updateLayerParams(layer: Layer<Source>, params: any): void {\n  const src = layer.getSource();\n  if (instOf(src, ImageWMS)) {\n    (src as ImageWMS).updateParams(params);\n  }\n  if (instOf(src, TileWMS)) {\n    (src as TileWMS).updateParams(params);\n  }\n  if (instOf(src, TileArcGISRest)) {\n    (src as TileArcGISRest).updateParams(params);\n  }\n}\n\n/**\n * Test if layer is has a title\n * @param layer - Layer to check\n * @returns True if layer is has a title\n */\nexport function hasLayerTitle(layer: Layer<Source>): boolean {\n  return getTitle(layer) !== undefined && getTitle(layer) !== '';\n}\n\n/**\n * Test if layers features are editable\n * @param layer - Layer to check\n * @returns True if layer has attribute 'editor' and in it\n * 'editable' property is set to true or missing\n */\nexport function isLayerEditable(layer: Layer<Source>): boolean {\n  if (getEditor(layer) === undefined) {\n    return true;\n  }\n  const editorConfig = getEditor(layer);\n  if (editorConfig.editable === undefined) {\n    return true;\n  }\n  return editorConfig.editable;\n}\n\n/**\n * Get user friendly name of layer based primary on title\n * and secondary on name attributes.\n * Is used in query service and hover popup.\n * @param layer - Layer to get the name for\n */\nexport function getLayerName(layer: Layer<Source>): string {\n  if (\n    layer === undefined ||\n    (getShowInLayerManager(layer) !== undefined &&\n      getShowInLayerManager(layer) === false)\n  ) {\n    return '';\n  }\n  const layerName = getTitle(layer) || getName(layer);\n  return layerName;\n}\n\n/**\n * Highlight feature corresponding records inside a list\n * @param featuresUnder - Features under the cursor\n * @param layer - Layer to get features from\n */\nexport function highlightFeatures(\n  featuresUnder: Feature<Geometry>[],\n  list: {featureId?: string; highlighted?: boolean}[],\n): void {\n  const featuresUnderIds = new Set(\n    featuresUnder.map((feature) => feature?.getId()).filter(Boolean),\n  );\n\n  const recordsToUpdate: {record: any; highlight: boolean}[] = [];\n  for (const record of list) {\n    if (!record.featureId) {\n      continue;\n    }\n\n    const shouldBeHighlighted = featuresUnderIds.has(record.featureId);\n\n    // Only update if the highlight state is changing\n    if (record.highlighted !== shouldBeHighlighted) {\n      recordsToUpdate.push({record, highlight: shouldBeHighlighted});\n    }\n  }\n\n  if (recordsToUpdate.length > 0) {\n    // Apply all updates in a batch\n    for (const {record, highlight} of recordsToUpdate) {\n      record.highlighted = highlight;\n    }\n  }\n}\n\n/**\n * Checks if layer has a VectorSource object, if layer is\n * not internal for hslayers, if it has title and is shown in layer\n * switcher\n * @param layer - Layer to check\n * @returns True if layer is drawable vector layer\n */\nexport function isLayerDrawable(\n  layer: Layer<Source>,\n  options: {checkVisible?: boolean} = {},\n): boolean {\n  const checkVisible = options.checkVisible ?? true;\n  return (\n    isLayerVectorLayer(layer, false) &&\n    (checkVisible ? layer.getVisible() : true) &&\n    isLayerInManager(layer) &&\n    hasLayerTitle(layer) &&\n    isLayerEditable(layer)\n  );\n}\n\n/**\n * Checks if layer's source has its own source\n * @param layer - Layer to check\n * @returns True if layer is clustered, false otherwise\n */\nexport function isLayerClustered(layer: Layer<Source>): boolean {\n  return isLayerVectorLayer(layer) &&\n    getCluster(layer) &&\n    instOf(layer.getSource(), Cluster)\n    ? true\n    : false;\n}\n\n/**\n * Test if layers source is loaded\n * @param layer - Selected layer descriptor\n * @returns True loaded / False not (fully) loaded\n */\nexport function layerLoaded(layer: HsLayerDescriptor): boolean {\n  return layer.loadProgress?.loaded;\n}\n\n/**\n * Test if layers source is validly loaded (!true for invalid)\n * @param layer - Selected layer descriptor\n * @returns True invalid, false valid source\n */\nexport function layerInvalid(layer: HsLayerDescriptor): boolean {\n  if (!layer.layer?.getSource()) {\n    return true;\n  }\n  return layer.loadProgress?.error;\n}\n\nexport function calculateResolutionFromScale(denominator: number, view: View) {\n  if (!denominator) {\n    return denominator;\n  }\n  const units = view.getProjection().getUnits();\n  const dpi = 25.4 / 0.28;\n  const mpu = METERS_PER_UNIT[units];\n  return denominator / (mpu * 39.37 * dpi);\n}\n\n/**\n * List numeric attributes of the feature\n */\nexport function listNumericAttributes(features: Feature[]) {\n  return listAttributes(features, true);\n}\n\nexport const ATTRIBUTES_EXCLUDED_FROM_LIST = [\n  'geometry',\n  'hs_normalized_IDW_value',\n];\n\n/**\n * List all attributes of the features apart from the geometry\n * Samples up to 33% of features with a hard limit of 400 features\n * to build a comprehensive attribute list\n */\nexport function listAttributes(\n  features: Feature[],\n  numericOnly = false,\n  customExcludedAttributes?: string[],\n): string[] {\n  if (features.length === 0) {\n    return [];\n  }\n\n  const excludedAttributes =\n    customExcludedAttributes || ATTRIBUTES_EXCLUDED_FROM_LIST;\n\n  // Calculate sample size (33% with max 400)\n  const sampleSize = Math.min(\n    Math.ceil(features.length * 0.33),\n    400,\n    features.length,\n  );\n\n  const attributeSet = new Set<string>();\n  const step = Math.max(1, Math.floor(features.length / sampleSize));\n\n  // Collect attributes using reservoir sampling\n  for (let i = 0; i < features.length; i += step) {\n    const feature = features[i];\n    Object.keys(feature.getProperties()).reduce((set, attr) => {\n      if (\n        !excludedAttributes.includes(attr) &&\n        (!numericOnly || !isNaN(Number(feature.get(attr))))\n      ) {\n        set.add(attr);\n      }\n      return set;\n    }, attributeSet);\n\n    if (attributeSet.size >= sampleSize) {\n      break;\n    }\n  }\n\n  return Array.from(attributeSet);\n}\n\n// Coefficients of the polynomial (in reverse order for easy use in the loop)\nexport const COEFFICIENTS: Big[] = [\n  new Big('-1.31228099e-15'),\n  new Big('1.49629747e-11'),\n  new Big('-4.93320288e-08'),\n  new Big('1.22907821e-05'),\n  new Big('1.19666463e-01'),\n];\n\n/**\n * Calculates a buffer factor based on polynomial evaluation using Horner's method.\n *\n * This function evaluates a 4th-degree polynomial with pre-calculated coefficients\n * to determine a buffer factor. The function is designed to return a value close to 0.12\n * for smaller distances (approximately 0-300 kilometers) and gradually decrease to 0 as the\n * distance approaches 4000 kilometers.\n *\n * Note: This function is intended for use with input values up to 4000 meters.\n * Using values greater than 4000 kilometers may produce unexpected results\n */\nexport function getPolynomialBufferFactor(x: number): number {\n  // Convert x to a Big object\n  const xBig = new Big(x);\n  // Calculate polynomial value using Horner's method with a for...of loop\n  let result = new Big(0);\n  for (const coefficient of COEFFICIENTS) {\n    result = result.times(xBig).plus(coefficient);\n  }\n\n  // Return the result as a regular, positive JavaScript number\n  return Math.abs(result.toNumber());\n}\n\n/**\n * Buffer extent by `BUFFER_FACTOR`\n * NOTE: Not using OL because we want to extend width and height independently\n */\nexport function bufferExtent(extent: Extent, currentMapProj: Projection) {\n  if (!extent) {\n    return undefined;\n  }\n  //EPSG:4087 world bounds\n  const [pMinX, pMinY, pMaxX, pMaxY] = [\n    -20037508.342789, -10018754.171394, 20037508.342789, 10018754.171394,\n  ];\n  //Transform into projection suitable for area manipulation\n  const transformed = transformExtent(extent, currentMapProj, 'EPSG:4087');\n\n  //Calculate buffer values\n  const extentWidth = Math.abs(transformed[2] - transformed[0]);\n  const extentHeight = Math.abs(transformed[3] - transformed[1]);\n\n  // Calculate diagonal length\n  const diagonalLength = Math.sqrt(extentWidth ** 2 + extentHeight ** 2);\n\n  const BUFFER_FACTOR =\n    diagonalLength < 4000000\n      ? getPolynomialBufferFactor(diagonalLength / 1000) //convert to kilometers\n      : 0.0001; //\n\n  const bufferWidth = extentWidth * BUFFER_FACTOR;\n  const bufferHeight = extentHeight * BUFFER_FACTOR;\n\n  //Buffer extent and transform back to currentMapProj\n  const extended = [\n    Math.max(pMinX, transformed[0] - bufferWidth),\n    Math.max(pMinY, transformed[1] - bufferHeight),\n    Math.min(pMaxX, transformed[2] + bufferWidth),\n    Math.min(pMaxY, transformed[3] + bufferHeight),\n  ];\n\n  const [extMinX, extMinY, extMaxX, extMaxY] = extended;\n  // If the extent is geometrically invalid, use the projection bounds\n  if (extMaxX <= extMinX || extMaxY <= extMinY) {\n    console.warn(\n      'Invalid extent geometry detected, using projection bounds:',\n      extended,\n    );\n    return [pMinX, pMinY, pMaxX, pMaxY];\n  }\n\n  return transformExtent(extended, 'EPSG:4087', currentMapProj);\n}\n","import {Layer} from 'ol/layer';\nimport {Source} from 'ol/source';\n\n/**\n * Shared z-index helpers for layer ordering.\n */\n\nexport function getLayerZIndex(layer: Layer<Source>): number {\n  return layer.getZIndex() ?? 0;\n}\n\nexport function getMaxLayerZIndex(\n  layers: Layer<Source>[],\n  fallback = -1,\n): number {\n  if (layers.length === 0) {\n    return fallback;\n  }\n  return Math.max(...layers.map(getLayerZIndex));\n}\n\nexport function getMinLayerZIndex(layers: Layer<Source>[]): number | undefined {\n  if (layers.length === 0) {\n    return undefined;\n  }\n  return Math.min(...layers.map(getLayerZIndex));\n}\n\n/**\n * Add delta to z-index of each layer (e.g. to make room for a new layer below).\n */\nexport function shiftLayersZIndex(\n  layers: Layer<Source>[],\n  delta: number,\n): void {\n  if (delta === 0) {\n    return;\n  }\n  for (const layer of layers) {\n    layer.setZIndex(getLayerZIndex(layer) + delta);\n  }\n}\n","/**\n * Mappings from Function name attribute to corresponding PropertyIs element name\n * This maps SLD function operators to their equivalent PropertyIs element names\n */\nconst FUNCTION_TO_PROPERTY_MAP: Record<string, string> = {\n  'equalTo': 'PropertyIsEqualTo',\n  'notEqualTo': 'PropertyIsNotEqualTo',\n  'like': 'PropertyIsLike',\n  'lessThan': 'PropertyIsLessThan',\n  'lessThanOrEqualTo': 'PropertyIsLessThanOrEqualTo',\n  'greaterThan': 'PropertyIsGreaterThan',\n  'greaterThanOrEqualTo': 'PropertyIsGreaterThanOrEqualTo',\n  'isNull': 'PropertyIsNull',\n  'between': 'PropertyIsBetween',\n};\n\n/**\n * Converts SLD Function elements to equivalent PropertyIs elements\n * For example: <Function name=\"lessThan\"> becomes <PropertyIsLessThan>\n *\n * This transformation is necessary for compatibility between different SLD implementations\n * such as those used by QGIS, GeoServer, and other OGC-compliant systems.\n *\n * @param sld - The SLD XML string to process\n * @returns The SLD string with Function elements converted to PropertyIs elements\n */\nexport const normalizeSldComparisonOperators = (sld: string): string => {\n  if (!sld) {\n    return sld;\n  }\n\n  // Early exit if no Function elements are present\n  if (!sld.includes('<Function name=') && !sld.includes(':Function name=')) {\n    return sld;\n  }\n\n  // Use a tag stack to track opening tags for proper nesting and matching\n  const tagStack: Array<{\n    tag: string;\n    namespace: string;\n    operator?: string;\n  }> = [];\n\n  // Accumulate the result in parts for efficient string building\n  const parts: string[] = [];\n  let lastIndex = 0;\n\n  // Regex matches both opening and closing Function tags with optional namespaces\n  // Captures the namespace prefix (group 1) and operator name (group 2, for opening tags only)\n  const tagRegex =\n    /<\\/?([a-zA-Z][a-zA-Z0-9]*:)?Function(?:\\s+name=\"([^\"]+)\")?>/g;\n\n  let match;\n  while ((match = tagRegex.exec(sld)) !== null) {\n    const fullMatch = match[0];\n    const namespaceWithColon = match[1] || '';\n    const isClosingTag = fullMatch.charAt(1) === '/';\n    const operator = match[2]; // Undefined for closing tags\n\n    // Preserve content between tags or part of SLD preceding the first Function tag\n    parts.push(sld.substring(lastIndex, match.index));\n    lastIndex = match.index + fullMatch.length;\n\n    if (isClosingTag) {\n      // Process closing tag by finding its matching opening tag from the stack\n      const openingTag = tagStack.pop();\n      if (openingTag && openingTag.operator) {\n        const propertyElement = FUNCTION_TO_PROPERTY_MAP[openingTag.operator];\n        if (propertyElement) {\n          // Create the corresponding PropertyIs closing tag\n          parts.push(`</${namespaceWithColon}${propertyElement}>`);\n        } else {\n          // Keep original if no mapping exists\n          parts.push(fullMatch);\n        }\n      } else {\n        // Keep original if no matching opening tag (malformed XML)\n        parts.push(fullMatch);\n      }\n    } else {\n      // Process opening tag\n      if (operator && FUNCTION_TO_PROPERTY_MAP[operator]) {\n        // Push tag info to stack for later matching with closing tag\n        tagStack.push({\n          tag: 'Function',\n          namespace: namespaceWithColon,\n          operator: operator,\n        });\n\n        // Create the corresponding PropertyIs opening tag\n        parts.push(\n          `<${namespaceWithColon}${FUNCTION_TO_PROPERTY_MAP[operator]}>`,\n        );\n      } else {\n        // Keep original if not a supported operator\n        parts.push(fullMatch);\n      }\n    }\n  }\n  // Add any remaining content after the last match\n  if (lastIndex < sld.length) {\n    parts.push(sld.substring(lastIndex));\n  }\n\n  // Join all parts to form the intermediate result\n  let result = parts.join('');\n\n  // Add ElseFilter to the last rule if it doesn't have a filter\n  const ruleRegex = /<se:Rule[^>]*>([\\s\\S]*?)<\\/se:Rule>/g;\n  const rules = result.match(ruleRegex);\n\n  if (rules && rules.length > 0) {\n    const lastRule = rules[rules.length - 1];\n    if (!lastRule.includes('<se:Filter') && !lastRule.includes('<Filter')) {\n      // Find the position of the last rule's closing tag\n      const lastRuleEndIndex = result.lastIndexOf('</se:Rule>');\n      if (lastRuleEndIndex !== -1) {\n        // Insert ElseFilter specifically before the last rule's closing tag\n        result =\n          result.slice(0, lastRuleEndIndex) +\n          '<se:ElseFilter xmlns:se=\"http://www.opengis.net/se\"/>' +\n          result.slice(lastRuleEndIndex);\n      }\n    }\n  }\n\n  return result;\n};\n","import {inject, Injectable} from '@angular/core';\nimport {HsConfig} from 'hslayers-ng/config';\nimport {getPortFromUrl} from './utils';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsProxyService {\n  hsConfig = inject(HsConfig);\n\n  private laymanUrl: string;\n\n  /**\n   * Register Layman endpoints to avoid proxifying them\n   * @param endpoints - Layman endpoints to register\n   */\n  registerLaymanEndpoints(url: string): void {\n    this.laymanUrl = url;\n  }\n\n  /**\n   * Proxify URL if enabled.\n   * @param url - URL to proxify\n   * @returns Encoded URL with path to hslayers-server proxy or original URL if proxification not needed\n   */\n  proxify(url: string): string {\n    // Early returns for URLs that should never be proxified\n    if (this.shouldSkipProxification(url)) {\n      return url;\n    }\n\n    // Apply proxy if enabled\n    if (\n      this.hsConfig.useProxy === undefined ||\n      this.hsConfig.useProxy === true\n    ) {\n      const proxyPrefix = this.hsConfig.proxyPrefix || '/proxy/';\n      return `${proxyPrefix}${url}`;\n    }\n\n    return url;\n  }\n\n  /**\n   * Checks if URL should skip proxification based on predefined rules\n   * @param url - URL to check\n   * @returns boolean indicating if proxification should be skipped\n   */\n  private shouldSkipProxification(url: string): boolean {\n    // Don't proxify if it's already proxified\n    if (\n      this.hsConfig.proxyPrefix &&\n      url.startsWith(this.hsConfig.proxyPrefix)\n    ) {\n      return true;\n    }\n    // Don't proxify Layman endpoints\n    if (this.laymanUrl && url.startsWith(this.laymanUrl)) {\n      return true;\n    }\n    // Don't proxify data URLs\n    if (url.startsWith('data:application')) {\n      return true;\n    }\n    // Don't proxify if URL is from the same origin\n    if (this.isFromSameOrigin(url)) {\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Checks if URL is from the same origin as the application\n   * @param url - URL to check\n   * @returns boolean indicating if URL is from the same origin\n   */\n  private isFromSameOrigin(url: string): boolean {\n    const windowUrlPosition = url.indexOf(window.location.origin);\n    // Check if URL is not from the same origin (matching original logic)\n    if (\n      windowUrlPosition === -1 ||\n      windowUrlPosition > 7 ||\n      getPortFromUrl(url) !== getPortFromUrl(window.location.origin)\n    ) {\n      return false;\n    }\n    return true;\n  }\n}\n","import Feature from 'ol/Feature';\nimport {Geometry} from 'ol/geom';\nimport {get as getProjection, transform} from 'ol/proj';\nimport {fromExtent as polygonFromExtent} from 'ol/geom/Polygon';\n\nimport {Stroke, Style, Fill} from 'ol/style';\nimport VectorSource from 'ol/source/Vector';\nimport VectorLayer from 'ol/layer/Vector';\n\nimport {getHighlighted} from 'hslayers-ng/common/extensions';\nimport {BoundingBoxObject} from 'hslayers-ng/types';\n\n/**\n * @param record - Record of one dataset from Get Records response\n * Create extent features for displaying extent of loaded dataset records in map\n */\nexport function addExtentFeature(\n  record,\n  mapProjection,\n): Feature<Geometry> | undefined {\n  const attributes = {\n    hs_notqueryable: true,\n    highlighted: false,\n    title: record.title || record.name,\n    geometry: null,\n    id: crypto.randomUUID(),\n  };\n  let mapExtent = mapProjection.getExtent();\n  if (mapExtent === null) {\n    console.warn(\n      'Map projection extent not found - fallback value used. To prevent unexpected results of app functionalities define it by yourself. Eg. mapExtent.setExtent([extent])',\n    );\n    mapProjection.setExtent(\n      transformExtentValue(\n        parseExtent([-180, -90, 180, 90]),\n        mapProjection,\n        true,\n      ),\n    );\n    mapExtent = mapProjection.getExtent();\n  }\n  const recordBBox = record.bbox || record.bounding_box;\n  const b = parseExtent(recordBBox || ['180', '180', '180', '180']);\n  //Check if height or Width covers the whole screen\n  const extent = record.bounding_box //if from layman\n    ? transformExtentValue(b, mapProjection, true)\n    : transformExtentValue(b, mapProjection);\n  if (\n    b &&\n    ((extent[0] < mapExtent[0] && extent[2] > mapExtent[2]) ||\n      (extent[1] < mapExtent[1] && extent[3] > mapExtent[3]))\n  ) {\n    return;\n  }\n  attributes.geometry = polygonFromExtent(extent);\n  const extentFeature = new Feature(attributes);\n  extentFeature.setId(extentFeature.get('id'));\n  return extentFeature;\n}\n\nexport function transformExtentValue(\n  pairs: number[][],\n  mapProjection,\n  disableTransform?: boolean,\n): number[] {\n  if (!pairs) {\n    return;\n  }\n  let first_pair;\n  let second_pair;\n  if (disableTransform || !getProjection(mapProjection)) {\n    first_pair = pairs[0];\n    second_pair = pairs[1];\n  } else {\n    first_pair = transform(pairs[0], 'EPSG:4326', mapProjection);\n    second_pair = transform(pairs[1], 'EPSG:4326', mapProjection);\n  }\n\n  const mapProjectionExtent = mapProjection.getExtent();\n  if (!isFinite(first_pair[0])) {\n    first_pair[0] = mapProjectionExtent[0];\n  }\n  if (!isFinite(first_pair[1])) {\n    first_pair[1] = mapProjectionExtent[1];\n  }\n  if (!isFinite(second_pair[0])) {\n    second_pair[0] = mapProjectionExtent[2];\n  }\n  if (!isFinite(second_pair[1])) {\n    second_pair[1] = mapProjectionExtent[3];\n  }\n\n  if (\n    isNaN(first_pair[0]) ||\n    isNaN(first_pair[1]) ||\n    isNaN(second_pair[0]) ||\n    isNaN(second_pair[1])\n  ) {\n    return;\n  }\n  return [first_pair[0], first_pair[1], second_pair[0], second_pair[1]];\n}\nexport function parseExtent(bbox: string | Array<number>): number[][] {\n  if (!bbox) {\n    return;\n  }\n  let b;\n  const pairs = [];\n  if (typeof bbox === 'string') {\n    b = bbox.split(' ');\n  } else if (Array.isArray(bbox)) {\n    b = bbox;\n  }\n  pairs.push([parseFloat(b[0]), parseFloat(b[1])]);\n  pairs.push([parseFloat(b[2]), parseFloat(b[3])]);\n  return pairs;\n}\n\n/**\n * Create new extent layer\n */\nexport function createNewExtentLayer(\n  title: string,\n): VectorLayer<VectorSource<Feature>> {\n  const fill = new Fill({\n    color: 'rgba(0, 0, 255, 0.01)',\n  });\n  // Pre-create styles for highlighted and normal states to avoid recreating them on every render\n  const normalStyle = new Style({\n    stroke: new Stroke({\n      color: '#005CB6',\n      width: 1,\n    }),\n    fill,\n  });\n\n  const highlightedStyle = new Style({\n    stroke: new Stroke({\n      color: '#005CB6',\n      width: 4,\n    }),\n    fill,\n  });\n\n  return new VectorLayer({\n    properties: {\n      title,\n      showInLayerManager: false,\n      removable: false,\n    },\n    source: new VectorSource(),\n    style: function (feature, resolution) {\n      return getHighlighted(feature as Feature<Geometry>)\n        ? highlightedStyle\n        : normalStyle;\n    },\n  });\n}\n\n/**\n * Get bounding box from object \\{east: value, south: value, west: value, north: value\\}\n * @param bbox - Bounding box\n * @returns Returns bounding box as number array\n */\nexport function getBboxFromObject(\n  bbox: number[] | BoundingBoxObject,\n): number[] {\n  if (bbox && !Array.isArray(bbox)) {\n    return [\n      parseFloat(bbox.east),\n      parseFloat(bbox.south),\n      parseFloat(bbox.west),\n      parseFloat(bbox.north),\n    ];\n  }\n  return bbox as number[];\n}\n","/**\n * Replace Urls in text by anchor html tag with url, useful for attribution to be clickable\n *\n * @param url - String to look for Urls\n * @returns Text with added anchors\n */\nexport function addAnchors(url: string): string {\n  if (!url) {\n    return null;\n  }\n  const exp =\n    /(\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])/gi;\n  return url.replace(exp, \"<a href='$1'>$1</a>\");\n}\n","/**\n * Loop through list of formats returned by GetCapabilities and select first available from the list of available formats\n *\n * @param formats - List of formats available for service\n * @param preferredFormats - List of preferred formats for output\n * @returns Either one of preferred formats or first available format\n */\nexport function getPreferredFormat(\n  formats: string[],\n  preferredFormats: string[],\n): string {\n  for (let i = 0; i < preferredFormats.length; i++) {\n    if (formats.indexOf(preferredFormats[i]) > -1) {\n      return preferredFormats[i];\n    }\n  }\n  return formats[0];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getProjection","TileLayer","ImageLayer","VectorLayer","VectorSource","polygonFromExtent"],"mappings":"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"}