{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../../src/ol/extent.js","webpack:///../../src/ol/events.js","webpack:///../../../src/ol/geom/GeometryType.js","webpack:///../../src/ol/TileState.js","webpack:///../../../src/ol/events/EventType.js","webpack:///../../../src/ol/render/canvas.js","webpack:///../../src/ol/util.js","webpack:///../../src/ol/math.js","webpack:///../../src/ol/transform.js","webpack:///../../src/ol/functions.js","webpack:///../../src/ol/obj.js","webpack:///../../src/ol/asserts.js","webpack:///../../src/ol/array.js","webpack:///../../../src/ol/proj/epsg3857.js","webpack:///../../../src/ol/proj/epsg4326.js","webpack:///../../../src/ol/proj/projections.js","webpack:///../../../src/ol/proj/transforms.js","webpack:///../../src/ol/proj.js","webpack:///../../src/ol/ViewHint.js","webpack:///../../src/ol/dom.js","webpack:///../../../src/ol/geom/GeometryLayout.js","webpack:///../../src/ol/ImageState.js","webpack:///../../src/ol/Object.js","webpack:///../../src/ol/has.js","webpack:///../../../src/ol/layer/Property.js","webpack:///../../../src/ol/proj/Units.js","webpack:///../../src/ol/Collection.js","webpack:///../../../src/ol/events/Event.js","webpack:///../../src/ol/easing.js","webpack:///../../../src/ol/extent/Relationship.js","webpack:///../../src/ol/css.js","webpack:///../../../src/ol/geom/SimpleGeometry.js","webpack:///../../src/ol/CollectionEventType.js","webpack:///../../../../src/ol/geom/flat/transform.js","webpack:///../../src/ol/LayerType.js","webpack:///../../../src/ol/source/State.js","webpack:///../../../../src/ol/geom/flat/inflate.js","webpack:///../../src/ol/size.js","webpack:///../../../../src/ol/geom/flat/closest.js","webpack:///../../../src/ol/events/Target.js","webpack:///../../../../src/ol/geom/flat/deflate.js","webpack:///../../src/ol/colorlike.js","webpack:///../../../src/ol/reproj/common.js","webpack:///../../../src/ol/render/EventType.js","webpack:///../../../src/ol/geom/LinearRing.js","webpack:///../../../src/ol/geom/Polygon.js","webpack:///../../../src/ol/style/Style.js","webpack:///../../../../src/ol/geom/flat/simplify.js","webpack:///../../src/ol/tilecoord.js","webpack:///../../../src/ol/tilegrid/TileGrid.js","webpack:///../../src/ol/tilegrid.js","webpack:///../../../src/ol/render/Feature.js","webpack:///../../../src/ol/format/MVT.js","webpack:///../../../src/ol/layer/TileProperty.js","webpack:///../../../src/ol/layer/Tile.js","webpack:///../../../src/ol/layer/VectorTile.js","webpack:///../../src/ol/tileurlfunction.js","webpack:///../../src/ol/Tile.js","webpack:///../../src/ol/ImageTile.js","webpack:///../../src/ol/TileCache.js","webpack:///../../src/ol/reproj.js","webpack:///../../../src/ol/reproj/Triangulation.js","webpack:///../../../src/ol/reproj/Tile.js","webpack:///../../../src/ol/source/Tile.js","webpack:///../../../src/ol/source/TileEventType.js","webpack:///../../../src/ol/source/UrlTile.js","webpack:///../../../src/ol/source/TileImage.js","webpack:///../../../src/ol/source/TileJSON.js","webpack:///../../src/ol/net.js","webpack:///../../src/ol/VectorImageTile.js","webpack:///../../src/ol/VectorTile.js","webpack:///../../../src/ol/source/VectorTile.js","webpack:///../../../src/ol/source/XYZ.js","webpack:///./index.js","webpack:///../../src/ol/color.js","webpack:///../../../../src/ol/geom/flat/contains.js","webpack:///../../src/ol/coordinate.js","webpack:///../../../src/ol/layer/VectorTileRenderType.js","webpack:///../../../src/ol/geom/Point.js","webpack:///../../../src/ol/layer/Layer.js","webpack:///../../../src/ol/style/Fill.js","webpack:///../../src/ol/ObjectEventType.js","webpack:///../../../src/ol/format/FormatType.js","webpack:///../../src/ol/rotationconstraint.js","webpack:///../../../../src/ol/geom/flat/reverse.js","webpack:///../../../../src/ol/geom/flat/orient.js","webpack:///../../../src/ol/style/Stroke.js","webpack:///../../../src/ol/proj/Projection.js","webpack:///../../../../src/ol/geom/flat/interpolate.js","webpack:///../../../node_modules/json-stringify-pretty-compact/index.js","webpack:///../format.js","webpack:///../../../node_modules/url/node_modules/punycode/punycode.js","webpack:///../../../node_modules/url/util.js","webpack:///../../../node_modules/querystring/decode.js","webpack:///../../../node_modules/querystring/encode.js","webpack:///../../../node_modules/querystring/index.js","webpack:///../../../node_modules/url/url.js","webpack:///../visit.js","webpack:///../migrate/v8.js","webpack:///../util/extend.js","webpack:///../expression/parsing_error.js","webpack:///../expression/scope.js","webpack:///../expression/types.js","webpack:///../../../node_modules/csscolorparser/csscolorparser.js","webpack:///../util/color.js","webpack:///../expression/types/collator.js","webpack:///../expression/types/formatted.js","webpack:///../expression/values.js","webpack:///../expression/definitions/literal.js","webpack:///../expression/runtime_error.js","webpack:///../expression/definitions/assertion.js","webpack:///../expression/definitions/format.js","webpack:///../expression/definitions/coercion.js","webpack:///../expression/evaluation_context.js","webpack:///../expression/compound_expression.js","webpack:///../expression/definitions/collator.js","webpack:///../expression/is_constant.js","webpack:///../expression/definitions/var.js","webpack:///../expression/parsing_context.js","webpack:///../expression/stops.js","webpack:///../expression/definitions/step.js","webpack:///../../../node_modules/@mapbox/unitbezier/index.js","webpack:///../util/interpolate.js","webpack:///../util/color_spaces.js","webpack:///../expression/definitions/interpolate.js","webpack:///../expression/definitions/coalesce.js","webpack:///../expression/definitions/let.js","webpack:///../expression/definitions/at.js","webpack:///../expression/definitions/match.js","webpack:///../expression/definitions/case.js","webpack:///../expression/definitions/comparison.js","webpack:///../expression/definitions/length.js","webpack:///../expression/definitions/index.js","webpack:///../util/result.js","webpack:///../util/properties.js","webpack:///../util/get_type.js","webpack:///../function/index.js","webpack:///../expression/index.js","webpack:///../function/convert.js","webpack:///../feature_filter/index.js","webpack:///../feature_filter/convert.js","webpack:///../util/deep_equal.js","webpack:///../diff.js","webpack:///../error/validation_error.js","webpack:///../error/parsing_error.js","webpack:///../validate/validate_constants.js","webpack:///../util/unbundle_jsonlint.js","webpack:///../validate/validate_object.js","webpack:///../validate/validate_array.js","webpack:///../validate/validate_number.js","webpack:///../validate/validate_function.js","webpack:///../validate/validate_expression.js","webpack:///../validate/validate_enum.js","webpack:///../validate/validate_filter.js","webpack:///../validate/validate_property.js","webpack:///../validate/validate_paint_property.js","webpack:///../validate/validate_layout_property.js","webpack:///../validate/validate_layer.js","webpack:///../validate/validate_source.js","webpack:///../validate/validate_light.js","webpack:///../validate/validate_string.js","webpack:///../validate/validate.js","webpack:///../validate/validate_boolean.js","webpack:///../validate/validate_color.js","webpack:///../validate/validate_formatted.js","webpack:///../validate/validate_glyphs_url.js","webpack:///../validate_style.min.js","webpack:///../../../node_modules/@mapbox/jsonlint-lines-primitives/lib/jsonlint.js","webpack:///../validate_style.js","webpack:///../style-spec.js","webpack:///../migrate/expressions.js","webpack:///../composite.js","webpack:///../../../src/ol/geom/Geometry.js","webpack:///../../../../src/ol/geom/flat/intersectsextent.js","webpack:///../../src/ol/Observable.js","webpack:///../../../src/ol/format/Feature.js","webpack:///../../../src/ol/layer/Vector.js","webpack:///../../../src/ol/tilegrid/common.js","webpack:///../../../../src/ol/geom/flat/interiorpoint.js","webpack:///../../../src/ol/geom/LineString.js","webpack:///../../../src/ol/extent/Corner.js","webpack:///../../src/ol/TileRange.js","webpack:///../../src/ol/MapEvent.js","webpack:///../../src/ol/MapBrowserEvent.js","webpack:///../../src/ol/MapBrowserEventType.js","webpack:///../../src/ol/MapBrowserPointerEvent.js","webpack:///../../../src/ol/pointer/EventType.js","webpack:///../../../src/ol/pointer/EventSource.js","webpack:///../../../src/ol/pointer/MouseSource.js","webpack:///../../../src/ol/pointer/MsSource.js","webpack:///../../../src/ol/pointer/NativeSource.js","webpack:///../../../src/ol/pointer/PointerEvent.js","webpack:///../../../src/ol/pointer/TouchSource.js","webpack:///../../../src/ol/pointer/PointerEventHandler.js","webpack:///../../src/ol/MapBrowserEventHandler.js","webpack:///../../src/ol/MapEventType.js","webpack:///../../src/ol/MapProperty.js","webpack:///../../../src/ol/structs/PriorityQueue.js","webpack:///../../src/ol/TileQueue.js","webpack:///../../../src/ol/layer/Group.js","webpack:///../../src/ol/PluggableMap.js","webpack:///../../../src/ol/control/Control.js","webpack:///../../../src/ol/control/Attribution.js","webpack:///../../../src/ol/control/Rotate.js","webpack:///../../../src/ol/control/Zoom.js","webpack:///../../src/ol/Kinetic.js","webpack:///../../../src/ol/interaction/Property.js","webpack:///../../../src/ol/interaction/Interaction.js","webpack:///../../../src/ol/interaction/DoubleClickZoom.js","webpack:///../../../src/ol/events/condition.js","webpack:///../../../src/ol/interaction/Pointer.js","webpack:///../../../src/ol/interaction/DragPan.js","webpack:///../../../src/ol/interaction/DragRotate.js","webpack:///../../../src/ol/render/Box.js","webpack:///../../../src/ol/interaction/DragBox.js","webpack:///../../../src/ol/interaction/DragZoom.js","webpack:///../../../src/ol/events/KeyCode.js","webpack:///../../../src/ol/interaction/KeyboardPan.js","webpack:///../../../src/ol/interaction/KeyboardZoom.js","webpack:///../../../src/ol/interaction/MouseWheelZoom.js","webpack:///../../../src/ol/interaction/PinchRotate.js","webpack:///../../../src/ol/interaction/PinchZoom.js","webpack:///../../src/ol/ImageBase.js","webpack:///../../src/ol/ImageCanvas.js","webpack:///../../../src/ol/render/Event.js","webpack:///../../../src/ol/render/VectorContext.js","webpack:///../../../../src/ol/render/canvas/Immediate.js","webpack:///../../../src/ol/renderer/Map.js","webpack:///../../../../src/ol/renderer/canvas/Map.js","webpack:///../../../src/ol/renderer/Layer.js","webpack:///../../../../src/ol/renderer/canvas/Layer.js","webpack:///../../../../src/ol/renderer/canvas/IntermediateCanvas.js","webpack:///../../../../src/ol/renderer/canvas/ImageLayer.js","webpack:///../../../../src/ol/renderer/canvas/TileLayer.js","webpack:///../../../src/ol/render/ReplayGroup.js","webpack:///../../../src/ol/render/ReplayType.js","webpack:///../../../../src/ol/geom/flat/textpath.js","webpack:///../../../../src/ol/render/canvas/Instruction.js","webpack:///../../../src/ol/render/replay.js","webpack:///../../../../src/ol/render/canvas/Replay.js","webpack:///../../../../src/ol/render/canvas/ImageReplay.js","webpack:///../../../../src/ol/render/canvas/LineStringReplay.js","webpack:///../../../../src/ol/render/canvas/PolygonReplay.js","webpack:///../../../../src/ol/geom/flat/straightchunk.js","webpack:///../../../../src/ol/render/canvas/TextReplay.js","webpack:///../../../../src/ol/render/canvas/ReplayGroup.js","webpack:///../../../src/ol/renderer/vector.js","webpack:///../../../../src/ol/renderer/canvas/VectorLayer.js","webpack:///../../../../src/ol/renderer/canvas/VectorTileLayer.js","webpack:///../../src/ol/Map.js","webpack:///../../../src/ol/control/util.js","webpack:///../../src/ol/interaction.js","webpack:///../../src/ol/Disposable.js","webpack:///../../../../src/ol/geom/flat/area.js","webpack:///../../../src/ol/geom/MultiPoint.js","webpack:///./node_modules/rbush/index.js","webpack:///../../../src/ol/style/IconAnchorUnits.js","webpack:///../../../src/ol/style/IconImage.js","webpack:///../../../src/ol/style/IconOrigin.js","webpack:///../../../src/ol/style/Icon.js","webpack:///../../../src/ol/style/Text.js","webpack:///./node_modules/@mapbox/mapbox-gl-style-spec/util/ref_properties.js","webpack:///./node_modules/@mapbox/mapbox-gl-style-spec/deref.js","webpack:///./node_modules/@mapbox/mapbox-gl-style-spec/reference/latest.js","webpack:///./util.js","webpack:///./stylefunction.js","webpack:///../../src/ol/sphere.js","webpack:///../../../src/ol/style/IconImageCache.js","webpack:///../../src/ol/loadingstrategy.js","webpack:///../../../src/ol/source/VectorEventType.js","webpack:///../../../src/ol/structs/RBush.js","webpack:///../../../src/ol/source/Vector.js","webpack:///../../../src/ol/style/Circle.js","webpack:///../../../src/ol/style/RegularShape.js","webpack:///./node_modules/mapbox-to-css-font/index.js","webpack:///../../src/ol/AssertionError.js","webpack:///../../../src/ol/structs/LRUCache.js","webpack:///../../../src/ol/style/Image.js","webpack:///../../../src/ol/style/TextPlacement.js","webpack:///../../../src/ol/layer/VectorRenderType.js","webpack:///../../../src/ol/layer/Base.js","webpack:///../../src/ol/featureloader.js","webpack:///../../../src/ol/source/Source.js","webpack:///../../../../src/ol/geom/flat/center.js","webpack:///../../../src/ol/geom/MultiPolygon.js","webpack:///../../../../src/ol/geom/flat/segments.js","webpack:///../../../../src/ol/geom/flat/length.js","webpack:///../../../src/ol/geom/MultiLineString.js","webpack:///../../src/ol/Feature.js","webpack:///../../../src/ol/format/JSONFeature.js","webpack:///../../../src/ol/geom/GeometryCollection.js","webpack:///../../../src/ol/format/GeoJSON.js","webpack:///../../src/ol/centerconstraint.js","webpack:///../../src/ol/ViewProperty.js","webpack:///../../src/ol/View.js","webpack:///../../src/ol/resolutionconstraint.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/webfont-matcher/lib/fonts/google.js","webpack:///./node_modules/pbf/index.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/quickselect/quickselect.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","__webpack_exports__","boundingExtent","buffer","clone","closestSquaredDistanceXY","containsCoordinate","containsExtent","containsXY","coordinateRelationship","createEmpty","createOrUpdate","createOrUpdateEmpty","createOrUpdateFromCoordinate","createOrUpdateFromCoordinates","createOrUpdateFromFlatCoordinates","equals","extend","extendCoordinate","extendFlatCoordinates","forEachCorner","getArea","getBottomLeft","getBottomRight","getCenter","getCorner","getForViewAndSize","getHeight","getIntersection","getTopLeft","getTopRight","getWidth","intersects","isEmpty","returnOrUpdate","scaleFromCenter","intersectsSegment","applyTransform","_asserts_js__WEBPACK_IMPORTED_MODULE_0__","_extent_Corner_js__WEBPACK_IMPORTED_MODULE_1__","_extent_Relationship_js__WEBPACK_IMPORTED_MODULE_2__","coordinates","const","extent","ii","opt_extent","x","y","let","dx","dy","coordinate","extent1","extent2","minX","minY","maxX","maxY","relationship","UNKNOWN","LEFT","RIGHT","BELOW","ABOVE","INTERSECTING","Infinity","extendCoordinates","flatCoordinates","offset","end","stride","extendXY","Math","min","max","callback","opt_this","val","area","corner","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","center","resolution","rotation","size","cosRotation","cos","sinRotation","sin","xCos","xSin","yCos","ySin","x0","x1","x2","x3","y0","y1","y2","y3","intersection","deltaX","deltaY","start","startRel","endRel","startX","startY","endX","endY","slope","transformFn","xs","ys","_boundingExtentXYs","listen","listenOnce","unlisten","unlistenByKey","unlistenAll","_obj_js__WEBPACK_IMPORTED_MODULE_0__","findListener","listeners","listener","opt_setDeleteIndex","listenerObj","bindTo","deleteIndex","getListeners","target","type","listenerMap","ol_lm","undefined","getListenerMap","removeListeners","removeEventListener","boundListener","keys","opt_once","callOnce","addEventListener","evt","bindListener","indexOf","POINT","LINE_STRING","LINEAR_RING","POLYGON","MULTI_POINT","MULTI_LINE_STRING","MULTI_POLYGON","GEOMETRY_COLLECTION","CIRCLE","IDLE","LOADING","LOADED","ERROR","EMPTY","ABORT","CHANGE","CLEAR","CONTEXTMENU","CLICK","DBLCLICK","DRAGENTER","DRAGOVER","DROP","KEYDOWN","KEYPRESS","LOAD","MOUSEDOWN","MOUSEMOVE","MOUSEOUT","MOUSEUP","MOUSEWHEEL","MSPOINTERDOWN","RESIZE","TOUCHSTART","TOUCHMOVE","TOUCHEND","WHEEL","defaultFont","defaultFillStyle","defaultLineCap","defaultLineDash","defaultLineDashOffset","defaultLineJoin","defaultMiterLimit","defaultStrokeStyle","defaultTextAlign","defaultTextBaseline","defaultPadding","defaultLineWidth","labelCache","checkFont","measureTextHeight","measureTextWidth","rotateAtOffset","resetTransform","drawImage","_css_js__WEBPACK_IMPORTED_MODULE_0__","_dom_js__WEBPACK_IMPORTED_MODULE_1__","_obj_js__WEBPACK_IMPORTED_MODULE_2__","_structs_LRUCache_js__WEBPACK_IMPORTED_MODULE_3__","_transform_js__WEBPACK_IMPORTED_MODULE_4__","checkedFonts","measureContext","textHeights","interval","referenceWidth","retries","checked","referenceFonts","len","text","isAvailable","font","context","getMeasureContext","weight","fontWeight","available","referenceFont","measureText","width","check","done","clear","clearInterval","fontSpec","fontFamilies","fontFamily","setInterval","span","heights","height","document","createElement","textContent","style","margin","padding","position","left","body","appendChild","offsetHeight","removeChild","offsetX","offsetY","translate","rotate","transform","opacity","image","originX","originY","w","h","scale","alpha","globalAlpha","setTransform","getUid","VERSION","uidCounter_","obj","ol_uid","clamp","cosh","squaredSegmentDistance","squaredDistance","solveLinearSystem","toDegrees","toRadians","modulo","lerp","exp","mat","maxRow","maxEl","abs","absValue","tmp","coef","k","Array","angleInRadians","PI","angleInDegrees","a","b","reset","setFromArray","compose","invert","tmp_","set","multiply","transform1","transform2","a1","b1","c1","d1","e1","f1","a2","b2","c2","d2","e2","f2","e","f","dx1","dy1","sx","sy","angle","dx2","dy2","det","determinant","TRUE","FALSE","VOID","assign","getValues","var_sources","TypeError","output","arguments","source","values","assert","_AssertionError_js__WEBPACK_IMPORTED_MODULE_0__","assertion","errorCode","binarySearch","haystack","needle","opt_comparator","mid","cmp","comparator","numberSafeCompareFunction","low","high","found","includes","arr","linearFindNearest","direction","reverseSubArray","begin","extension","isArray","remove","arr1","arr2","len1","stableSort","compareFnc","index","sort","isSorted","opt_func","opt_strict","compare","every","currentVal","res","RADIUS","HALF_SIZE","EXTENT","WORLD_EXTENT","epsg3857_EPSG3857Projection","Projection","EPSG3857Projection","code","super","this","units","Units","METERS","global","worldExtent","getPointResolution","point","math","constructor","proj_Projection","PROJECTIONS","fromEPSG4326","input","opt_output","opt_dimension","dimension","halfSize","log","tan","epsg3857_toEPSG4326","atan","epsg4326_EXTENT","METERS_PER_UNIT","epsg4326_EPSG4326Projection","EPSG4326Projection","opt_axisOrientation","DEGREES","axisOrientation","metersPerUnit","epsg4326_PROJECTIONS","cache","transforms","transforms_add","destination","sourceCode","getCode","destinationCode","cloneTransform","identityTransform","addProjection","projection","add","proj_get","projectionLike","proj_getPointResolution","opt_units","pointResolution","getPointResolutionFunc","getUnits","toEPSG4326","getTransformFromProjections","vertices","sphere","getMetersPerUnit","addEquivalentProjections","projections","forEach","addProjections","createProjection","defaultCode","fromLonLat","opt_projection","proj_transform","equivalent","projection1","projection2","equalUnits","sourceProjection","destinationProjection","transformFunc","transforms_get","getTransform","transformExtent","ol_extent","projections1","projections2","forwardTransform","inverseTransform","addEquivalentTransforms","ANIMATING","INTERACTING","createCanvasContext2D","opt_width","opt_height","canvas","getContext","replaceNode","newNode","oldNode","parent","parentNode","replaceChild","removeNode","node","removeChildren","lastChild","XY","XYZ","XYM","XYZM","getChangeEventType","_util_js__WEBPACK_IMPORTED_MODULE_0__","_ObjectEventType_js__WEBPACK_IMPORTED_MODULE_1__","_Observable_js__WEBPACK_IMPORTED_MODULE_2__","_events_Event_js__WEBPACK_IMPORTED_MODULE_3__","_obj_js__WEBPACK_IMPORTED_MODULE_4__","ObjectEvent","Event","oldValue","BaseObject","Observable","opt_values","values_","setProperties","getKeys","getProperties","notify","eventType","dispatchEvent","PROPERTYCHANGE","opt_silent","unset","changeEventTypeCache","FIREFOX","SAFARI","WEBKIT","MAC","DEVICE_PIXEL_RATIO","CANVAS_LINE_DASH","TOUCH","POINTER","MSPOINTER","ua","navigator","userAgent","toLowerCase","devicePixelRatio","has","setLineDash","msPointerEnabled","OPACITY","VISIBLE","Z_INDEX","MAX_RESOLUTION","MIN_RESOLUTION","SOURCE","FEET","PIXELS","TILE_PIXELS","USFEET","_CollectionEventType_js__WEBPACK_IMPORTED_MODULE_1__","_Object_js__WEBPACK_IMPORTED_MODULE_2__","Property","CollectionEvent","opt_element","element","Collection","opt_array","opt_options","options","unique_","unique","array_","assertUnique_","updateLength_","getLength","pop","array","getArray","item","insertAt","elem","ADD","removeAt","prev","REMOVE","setAt","opt_except","stopPropagation","propagationStopped","preventDefault","easeIn","pow","easeOut","inAndOut","linear","CLASS_HIDDEN","CLASS_UNSELECTABLE","CLASS_CONTROL","CLASS_COLLAPSED","getFontFamilies","family","split","transformGeom2D","_functions_js__WEBPACK_IMPORTED_MODULE_0__","_extent_js__WEBPACK_IMPORTED_MODULE_1__","_geom_Geometry_js__WEBPACK_IMPORTED_MODULE_2__","_geom_GeometryLayout_js__WEBPACK_IMPORTED_MODULE_3__","_geom_flat_transform_js__WEBPACK_IMPORTED_MODULE_4__","_obj_js__WEBPACK_IMPORTED_MODULE_5__","SimpleGeometry","Geometry","layout","computeExtent","getCoordinates","getFirstCoordinate","getFlatCoordinates","getLastCoordinate","getLayout","getSimplifiedGeometry","squaredTolerance","simplifiedGeometryRevision","getRevision","simplifiedGeometryCache","simplifiedGeometryMaxMinSquaredTolerance","toString","simplifiedGeometry","getSimplifiedGeometryInternal","getStride","setFlatCoordinates","getStrideForLayout","setCoordinates","opt_layout","setLayout","nesting","getLayoutForStride","changed","anchor","opt_sy","opt_anchor","getExtent","simpleGeometry","opt_dest","transform2D","dest","anchorX","anchorY","IMAGE","TILE","VECTOR_TILE","VECTOR","UNDEFINED","READY","inflateCoordinates","opt_coordinates","inflateCoordinatesArray","ends","opt_coordinatess","coordinatess","jj","inflateMultiCoordinatesArray","endss","opt_coordinatesss","coordinatesss","hasArea","ratio","opt_size","toSize","maxSquaredDelta","arrayMaxSquaredDelta","multiArrayMaxSquaredDelta","assignClosestPoint","assignClosestArrayPoint","assignClosestMultiArrayPoint","_math_js__WEBPACK_IMPORTED_MODULE_0__","assignClosest","offset1","offset2","closestPoint","squaredDelta","maxDelta","isRing","minSquaredDistance","opt_tmpPoint","tmpPoint","NaN","sqrt","_Disposable_js__WEBPACK_IMPORTED_MODULE_0__","_events_js__WEBPACK_IMPORTED_MODULE_1__","_functions_js__WEBPACK_IMPORTED_MODULE_2__","Target","Disposable","pendingRemovals_","dispatching_","listeners_","event","propagate","pendingRemovals","disposeInternal","hasListener","opt_type","deflateCoordinate","deflateCoordinates","deflateCoordinatesArray","opt_ends","deflateMultiCoordinatesArray","opt_endss","asColorLike","_color_js__WEBPACK_IMPORTED_MODULE_0__","color","CanvasPattern","CanvasGradient","isColorLike","ERROR_THRESHOLD","ENABLE_RASTER_REPROJECTION","POSTCOMPOSE","PRECOMPOSE","RENDER","RENDERCOMPLETE","geom_LinearRing","LinearRing","maxDelta_","maxDeltaRevision_","closestPointXY","closest","flat_area","inflate","simplifiedFlatCoordinates","simplify","GeometryLayout","getType","GeometryType","intersectsExtent","deflate","geom_SimpleGeometry","fromExtent","Polygon_Polygon","Polygon","ends_","flatInteriorPointRevision_","flatInteriorPoint_","orientedRevision_","orientedFlatCoordinates_","appendLinearRing","linearRing","contains","getOrientedFlatCoordinates","opt_right","orient","getEnds","getFlatInteriorPoint","flatCenter","interiorpoint","getInteriorPoint","Point","getLinearRingCount","getLinearRing","getLinearRings","linearRings","simplifiedEnds","intersectsextent","toFunction","createDefaultStyle","_style_Circle_js__WEBPACK_IMPORTED_MODULE_2__","_style_Fill_js__WEBPACK_IMPORTED_MODULE_3__","_style_Stroke_js__WEBPACK_IMPORTED_MODULE_4__","Style","geometry_","geometryFunction_","defaultGeometryFunction","geometry","setGeometry","fill_","fill","image_","renderer_","renderer","stroke_","stroke","text_","zIndex_","zIndex","styleFunction","styles","getGeometry","getFill","getImage","getStroke","getText","getZIndex","getRenderer","setRenderer","getGeometryFunction","setFill","setImage","setStroke","setText","feature","setZIndex","defaultStyles","radius","douglasPeucker","douglasPeuckerArray","snap","quantizeArray","quantizeMultiArray","simplifiedOffset","markers","stack","last","first","maxSquaredDistance","tolerance","round","quantize","simplifiedEndss","z","opt_tileCoord","getKeyZXY","getKey","tileCoord","tmpTileCoord","TileGrid_TileGrid","zoomFactor","minZoom","resolutions_","resolutions","asserts","origins","zoomFactor_","maxZoom","origin_","origin","origins_","tileSizes_","tileSizes","tileSize_","tileSize","common","extent_","fullTileRanges_","tmpSize_","sizes","map","TileRange","calculateTileRanges_","forEachTileCoord","zoom","tileRange","getTileRangeForExtentAndZ","forEachTileCoordParentTileRange","opt_tileRange","tileCoordExtent","getTileCoordExtent","floor","getMaxZoom","getMinZoom","getOrigin","getResolution","getResolutions","getTileCoordChildTileRange","getTileRangeExtent","ol_size","getTileSize","getTileCoordForXYAndZ_","getTileCoordCenter","getTileCoordForCoordAndResolution","getTileCoordForXYAndResolution_","reverseIntersectionPolicy","getZForResolution","adjustX","adjustY","xFromOrigin","yFromOrigin","tileCoordX","tileCoordY","ceil","getTileCoordForCoordAndZ","getTileCoordResolution","getFullTileRange","opt_direction","fullTileRanges","tilegrid_TileGrid","getForProjection","tileGrid","getDefaultTileGrid","createForProjection","setDefaultTileGrid","createXYZ","ol_proj","resolutionsFromExtent","opt_maxZoom","opt_tileSize","maxResolution","opt_corner","Corner","createForExtent","extentFromProjection","half","tmpTransform","ol_transform","RenderFeature","properties","id","id_","type_","flatCoordinates_","flatInteriorPoints_","flatMidpoints_","properties_","getFlatInteriorPoints","flatCenters","flat_center","getFlatMidpoint","interpolate","getFlatMidpoints","midpoint","getId","pixelExtent","projectedExtent","getWorldExtent","flat_transform","getEndss","getStyleFunction","functions","render_Feature","layersPBFReader","tag","layers","pbf","layer","features","readVarint","pos","readFields","layerPBFReader","version","readString","readFloat","readDouble","readVarint64","readSVarint","readBoolean","featurePBFReader","readRawFeature","format_MVT","FeatureFormat","MVT","dataProjection","featureClass_","featureClass","geometryName_","geometryName","layerName_","layerName","layers_","readRawGeometry_","cmd","coordsLen","currentEnd","cmdLen","createFeature_","rawFeature","geometryType","numEnds","getGeometryType","geom","prevEndIndex","MultiPolygon","LineString","MultiPoint","MultiLineString","setGeometryName","Feature","adaptOptions","setId","getLastExtent","FormatType","ARRAY_BUFFER","readFeatures","pbf_default","pbfLayers","pbfLayer","readProjection","setLayers","TileProperty","Tile_TileLayer","Layer","TileLayer","baseOptions","preload","useInterimTilesOnError","setPreload","setUseInterimTilesOnError","LayerType","getPreload","getUseInterimTilesOnError","getSource","layer_Tile","VectorTile_VectorTileLayer","VectorLayer","VectorTileLayer","renderMode","VectorTileRenderType","HYBRID","declutter","Vector","layer_VectorTile","createFromTemplate","template","zRegEx","xRegEx","yRegEx","dashYRegEx","pixelRatio","replace","range","createFromTemplates","templates","tileUrlFunctions","hash","createFromTileUrlFunctions","nullTileUrlFunction","ol_Tile","EventTarget","Tile","state","interimTile","transition_","transition","transitionStarts_","EventType","getInterimTile","tile","getState","TileState","refreshInterimChain","getTileCoord","setState","load","getAlpha","time","delta","easing","inTransition","endTransition","getBlankImage","ctx","dom","fillStyle","fillRect","ol_ImageTile","ImageTile","src","crossOrigin","tileLoadFunction","crossOrigin_","src_","Image","imageListenerKeys_","tileLoadFunction_","unlistenImage_","dispose","handleImageError_","handleImageLoad_","naturalWidth","naturalHeight","events","ol_TileCache","LRUCache","TileCache","opt_highWaterMark","expireCache","usedTiles","canExpireCache","peekLast","zKey","pruneExceptNewestZ","getCount","Number","fromKey","peekFirstKey","enlargeClipPoint","centroidX","centroidY","dX","dY","distance","Triangulation_Triangulation","sourceProj","targetProj","targetExtent","maxSourceExtent","errorThreshold","sourceProj_","targetProj_","transformInvCache","transformInv","transformInv_","maxSourceExtent_","errorThresholdSquared_","triangles_","wrapsXInSource_","canWrapXInSource_","canWrapX","sourceWorldWidth_","targetWorldWidth_","destinationTopLeft","destinationTopRight","destinationBottomRight","destinationBottomLeft","sourceTopLeft","sourceTopRight","sourceBottomRight","sourceBottomLeft","addQuad_","leftBound","triangle","newTriangle","addTriangle_","aSrc","bSrc","cSrc","dSrc","maxSubdivision","sourceQuadExtent","sourceCoverageX","sourceWorldWidth","wrapsX","needsSubdivision","isGlobal","targetQuadExtent","isFinite","centerSrc","bc","bcSrc","da","daSrc","ab","abSrc","cd","cdSrc","calculateSourceExtent","getTriangles","reproj_Triangulation","reproj_Tile","ReprojTile","sourceTileGrid","targetTileGrid","wrappedTileCoord","gutter","getTileFunction","opt_errorThreshold","opt_renderEdges","renderEdges_","pixelRatio_","gutter_","canvas_","sourceTileGrid_","targetTileGrid_","wrappedTileCoord_","sourceTiles_","sourcesListenerKeys_","sourceZ_","maxTargetExtent","limitedTargetExtent","sourceProjExtent","targetResolution","sourceResolution","targetCenter","sourceCenter","targetMetersPerUnit","sourceMetersPerUnit","sourceExtent","compensationFactor","calculateSourceResolution","errorThresholdInPixels","reproj_common","triangulation_","sourceRange","srcX","srcY","unlistenSources_","reproject_","sources","triangulation","sourceDataExtent","canvasWidthInUnits","canvasHeightInUnits","stitchContext","stitchScale","xPos","yPos","srcWidth","srcHeight","targetTopLeft","u0","v0","u1","v1","u2","v2","sourceNumericalShiftX","sourceNumericalShiftY","augmentedMatrix","affineCoefs","save","beginPath","p0","p1","p2","moveTo","lineTo","clip","restore","strokeStyle","lineWidth","closePath","reproj_render","leftToLoad","sourceListenKey","setTimeout","Tile_TileSource","Source","TileSource","attributions","wrapX","opaque_","opaque","tilePixelRatio_","tilePixelRatio","tileCache","cacheSize","tmpSize","key_","tileOptions","getTileCacheForProjection","forEachLoadedTile","tileCoordKey","loaded","covered","containsKey","getGutterForProjection","setKey","getOpaque","getTile","getTileGrid","getTileGridForProjection","thisProj","getProjection","getTilePixelRatio","getTilePixelSize","getTileCoordForTileUrlFunction","getWrapX","projectionExtent","worldWidth","worldsAway","withinExtentAndZ","refresh","useTile","TileSourceEvent","TileEventType","UrlTile_UrlTile","UrlTile","tileUrlFunction","fixedTileUrlFunction","urls","setUrls","url","setUrl","setTileUrlFunction","tileLoadingKeys_","getTileLoadFunction","getTileUrlFunction","getUrls","handleTileChange","uid","util","tileState","setTileLoadFunction","opt_key","match","exec","charCode","startCharCode","charCodeAt","stopCharCode","String","fromCharCode","stop","parseInt","expandUrl","join","source_UrlTile","defaultTileLoadFunction","imageTile","source_TileImage","TileImage","tileClass","tileCacheForProjection","tileGridForProjection","reprojectionErrorThreshold_","reprojectionErrorThreshold","renderReprojectionEdges_","usedTileCache","getGutter","projKey","highWaterMark","createTile_","urlTileCoord","tileUrl","newTile","getTileInternal","setRenderReprojectionEdges","render","setTileGridForProjection","tilegrid","proj","source_TileJSON","TileJSON","State","tileJSON_","jsonp","opt_errback","opt_callbackParam","script","cleanup","async","timer","clearTimeout","getElementsByTagName","handleTileJSONResponse","handleTileJSONError","client","XMLHttpRequest","onXHRLoad_","onXHRError_","open","send","tileJSON","status","response","JSON","parse","responseText","err","getTileJSON","epsg4326Projection","bounds","minzoom","maxzoom","tiles","attribution","getAttributions","attributionExtent","setAttributions","frameState","ol_VectorImageTile","VectorImageTile","sourceRevision","format","sourceTiles","context_","loader_","replayState_","tileKeys","sourceRevision_","loadListenerKeys_","sourceTileListenerKeys_","sourceZ","useLoadedOnly","loadCount","sourceTileCoord","sharedExtent","sourceTileKey","sourceTile","consumers","finishLoading_","getReplayState","renderedTileRevision","dirty","renderedRenderOrder","renderedRevision","tileKey","errorSourceTiles","setLoader","empty","defaultLoadFunction","loader","featureloader","getFormat","onLoad","onError","DEFAULT_EXTENT","ol_VectorTile","VectorTile","format_","features_","projection_","replayGroups_","url_","getFeatures","getReplayGroup","setProjection","setFeatures","setExtent","setReplayGroup","replayGroup","source_VectorTile","overlaps_","overlaps","tileGrids_","getOverlaps","source_XYZ","loadedFontFamilies","fontFamilyRegEx","stripQuotesRegEx","googleFamilies","googleFonts","getNames","getFonts","fonts","mb2css","styleSheets","styleSheet","cssRules","rules","cssRule","cssText","hasFontFamily","fontUrl","querySelector","markup","href","rel","spriteRegEx","withPath","path","toSpriteUrl","parts","emptyObj","setBackground","background","updateStyle","getTargetElement","paint","getView","getZoom","bg","getValue","backgroundColor","Color","backgroundOpacity","visibility","on","getSourceIdByRef","ref","sourceId","some","setupVectorLayer","glSource","accessToken","mapid","host","VectorTileSource","visible","tilejson","tileJSONDoc","setSource","setMaxResolution","unByKey","setupRasterLayer","bbox","geoJsonFormat","GeoJSON","setupGeoJSONLayer","geoJsonUrl","featureProjection","VectorSource","processStyle","glStyle","baseUrl","promises","view","setCenter","setZoom","fit","nearest","getSize","sprite","glLayer","glSourceId","glLayers","layerIds","finalizeLayer","setVisible","Promise","all","olms","promise","Map","resolve","reject","fetch","credentials","then","json","pathname","substr","catch","Error","concat","message","setStyle","_typeof","spriteData","spriteImageUrl","onChange","applyStyleFunction","getStyle","sizeFactor","spriteUrl","ok","statusText","spritesJson","applyStyle","getLayers","addLayer","once","asString","asArray","_math_js__WEBPACK_IMPORTED_MODULE_1__","HEX_COLOR_RE_","NAMED_COLOR_RE_","fromString","g","el","rgb","getComputedStyle","fromNamed","hasAlpha","normalize","fromStringInternal_","linearRingContainsExtent","linearRingContainsXY","linearRingsContainsXY","linearRingssContainsXY","_extent_js__WEBPACK_IMPORTED_MODULE_0__","wn","coordinate1","coordinate2","cosAngle","sinAngle","_geom_GeometryType_js__WEBPACK_IMPORTED_MODULE_1__","_geom_SimpleGeometry_js__WEBPACK_IMPORTED_MODULE_2__","_geom_flat_deflate_js__WEBPACK_IMPORTED_MODULE_3__","_math_js__WEBPACK_IMPORTED_MODULE_4__","visibleAtResolution","_events_js__WEBPACK_IMPORTED_MODULE_0__","_events_EventType_js__WEBPACK_IMPORTED_MODULE_1__","_util_js__WEBPACK_IMPORTED_MODULE_2__","_Object_js__WEBPACK_IMPORTED_MODULE_3__","_layer_Base_js__WEBPACK_IMPORTED_MODULE_4__","_layer_Property_js__WEBPACK_IMPORTED_MODULE_5__","_obj_js__WEBPACK_IMPORTED_MODULE_6__","_render_EventType_js__WEBPACK_IMPORTED_MODULE_7__","_source_State_js__WEBPACK_IMPORTED_MODULE_8__","BaseLayer","mapPrecomposeKey_","mapRenderKey_","sourceChangeKey_","setMap","handleSourcePropertyChange_","getLayersArray","getLayerStatesArray","opt_states","states","getLayerState","getSourceState","handleSourceChange_","layerState","managed","layerStatesArray","layerStates","minResolution","_color_js__WEBPACK_IMPORTED_MODULE_1__","Fill","color_","checksum_","getColor","setColor","getChecksum","TEXT","XML","disable","none","createSnapToN","createSnapToZero","theta","opt_tolerance","linearRingIsClockwise","edge","linearRingIsOriented","right","isClockwise","linearRingsAreOriented","orientLinearRings","orientLinearRingsArray","Stroke","lineCap_","lineCap","lineDash_","lineDash","lineDashOffset_","lineDashOffset","lineJoin_","lineJoin","miterLimit_","miterLimit","width_","getLineCap","getLineDash","getLineDashOffset","getLineJoin","getMiterLimit","setLineCap","setLineDashOffset","setLineJoin","setMiterLimit","setWidth","_proj_Units_js__WEBPACK_IMPORTED_MODULE_0__","code_","units_","worldExtent_","axisOrientation_","global_","canWrapX_","getPointResolutionFunc_","defaultTileGrid_","metersPerUnit_","getAxisOrientation","setGlobal","setWorldExtent","setGetPointResolution","func","interpolatePoint","lineStringCoordinateAtM","lineStringsCoordinateAtM","_array_js__WEBPACK_IMPORTED_MODULE_0__","fraction","pointX","pointY","cumulativeLengths","extrapolate","lo","hi","m0","stringOrChar","defaultValue","jsonStringifyPrettyCompact","indent","stringify","addMargin","maxLength","_stringify","currentIndent","reserved","toJSON","string","prettified","tokens","{","[","}","]",",",":","prettify","delimiters","nextIndent","items","comma","keyPart","sortKeysBy","reference","key$1","root","freeExports","nodeType","freeModule","freeGlobal","self","punycode","maxInt","base","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","errors","overflow","not-basic","invalid-input","baseMinusTMin","stringFromCharCode","error","RangeError","fn","mapDomain","ucs2decode","extra","counter","ucs2encode","basicToDigit","codePoint","digitToBasic","digit","flag","adapt","numPoints","firstTime","decode","out","basic","oldi","baseMinusT","inputLength","bias","lastIndexOf","encode","handledCPCount","basicLength","q","currentValue","handledCPCountPlusOne","qMinusT","ucs2","toASCII","test","toUnicode","isString","arg","isObject","isNull","isNullOrUndefined","prop","qs","sep","eq","regexp","maxKeys","kstr","vstr","v","idx","decodeURIComponent","stringifyPrimitive","ks","encodeURIComponent","require$$0","require$$1","urlParse","relative","resolveObject","format$1","Url","Url_1","protocol","slashes","auth","port","hostname","search","query","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","parseQueryString","slashesDenoteHost","u","queryIndex","splitter","uSplit","rest","trim","simplePath","querystring","proto","lowerProto","atSign","hostEnd","hec","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","unshift","ae","esc","escape","qm","charAt","tkeys","tk","tkey","rkeys","rk","rkey","relPath","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash","up","isAbsolute","eachSource","eachLayer","eachProperty","inner","layer$$1","propertyType","propertyName","Reference","i$1","getPropertyReference","eachLayout","eachPaint","resolveConstant","renameProperty","from","to","migrateToV8","coord","reverse","stops","isFunction","constants","glyphs","inputParsed","inputPathnameParts","migrateFontstackURL","splitAndTrim","migrateFontStack","firstSymbolLayer","symbolLayers","inputs","list","ParsingError","Scope","bindings","expression","NullType","kind","NumberType","StringType","BooleanType","ColorType","ObjectType","ValueType","CollatorType","FormattedType","itemType","N","valueMemberTypes","checkSubtype","expected","memberType","kCSSColorTable","transparent","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","clamp_css_byte","clamp_css_float","parse_css_int","str","parseFloat","parse_css_float","css_hue_to_rgb","m1","m2","parseCSSColor","css_str","iv","op","ep","fname","params","rgba","toArray","Collator","caseSensitive","diacriticSensitive","locale","sensitivity","collator","Intl","usage","lhs","rhs","resolvedOptions","FormattedSection","fontStack","Formatted","sections","validateRGBA","typeOf","toString$1","unformatted","section","serialized","Literal","args","isValue","mixed","expectedType","serialize","RuntimeError","types","number","boolean","Assertion","type$1","parsed","possibleOutputs","FormatExpression","to-boolean","to-color","to-number","to-string","Coercion","Boolean","evaluate","num","isNaN","valueToString","eachChild","child","geometryTypes","EvaluationContext","globals","featureState","_parseColorCache","cached","CompoundExpression","_evaluate","definition","availableOverloads","overloads","filter","signature","signatureContext","i$3","ParsingContext","registry","scope","parsedArgs","argParseFailed","signatures","stringifySignature","actualTypes","parsed$1","definitions","CollatorExpression","isFeatureConstant","isStateConstant","isGlobalPropertyConstant","Var","boundExpression","findStopLessThanOrEqualTo","upperValue","lowerIndex","upperIndex","currentIndex","expr","_parse","annotate","typeAnnotation","Expr","actual","isConstant","isTypeAnnotation","childrenConstant","ec","error$1","Step","labels","outputs","label","this$1","outputType","labelKey","valueKey","stopCount","unitbezier","UnitBezier","p1x","p1y","p2x","p2y","cx","bx","ax","cy","by","ay","sampleCurveX","sampleCurveY","sampleCurveDerivativeX","solveCurveX","epsilon","t0","t1","t2","solve","Xn","Yn","Zn","t3","deg2rad","rad2deg","xyz2lab","lab2xyz","xyz2rgb","rgb2xyz","rgbToLab","rgbColor","labToRgb","labColor","lab","forward","interpolateNumber","hcl","hclColor","interpolateHue","Interpolate","operator","interpolation","exponentialInterpolation","lowerValue","difference","progress","lower","upper","controlPoints","ub","outputLower","outputUpper","Coalesce","needsAnnotation","Let","binding","At","Match","inputType","cases","otherwise","labelContext","MAX_SAFE_INTEGER","groupedByOutput","outputLookup","outputIndex","coerceLabel","Case","branches","isComparableType","eqCollate","makeComparison","compareBasic","compareWithCollator","isOrderComparison","Comparison","hasUntypedArgument","lt","rt","_","Equals","NotEquals","LessThan","GreaterThan","LessThanOrEqual","GreaterThanOrEqual","Length","expressions","==","!=",">","<",">=","<=","at","case","coalesce","interpolate-hcl","interpolate-lab","literal","step","var","get$1","varargs","success","supportsPropertyExpression","spec","supportsZoomExpression","supportsInterpolation","interpolated","isFunction$1","identityFunction","createFunction","parameters","propertySpec","innerFun","hashedStops","categoricalKeyType","isColor","zoomAndFeatureDependent","featureDependent","zoomDependent","default","colorSpaces","colorSpace","evaluateExponentialFunction","evaluateIntervalFunction","evaluateCategoricalFunction","evaluateIdentityFunction","featureFunctions","zoomStops","featureFunctionStops","interpolationFactor","keyType","interp","colorspace","evaluatedLower","evaluatedUpper","findStopLessThanOrEqualTo$1","typeof","typeToString","to-rgba","feature-state","geometry-type","heatmap-density","line-progress","+","*","-","/","%","ln2","LN2","pi","E","^","log10","LN10","ln","log2","asin","acos","filter-==","filter-id-==","filter-type-==","filter-<","filter-id-<","filter->","filter-id->","filter-<=","filter-id-<=","filter->=","filter-id->=","filter-has","filter-has-id","filter-type-in","filter-id-in","filter-in-small","filter-in-large","any","!","is-supported-script","isSupportedScript","upcase","toUpperCase","downcase","resolved-locale","resolvedLocale","StyleExpression","_warningHistory","_evaluator","_defaultValue","getDefaultValue","_enumValues","isExpression","createExpression","parser","enum","formatted","getExpectedType","console","ZoomConstantExpression","_styleExpression","isStateDependent","evaluateWithoutErrorHandling","ZoomDependentExpression","zoomCurve","_interpolationType","createPropertyExpression","isFeatureConstant$$1","isZoomConstant","findZoomCurve","childResult","StylePropertyFunction","specification","_parameters","_specification","convertLiteral","convertFunction","convertIdentityFunction","convertTokenString","featureFunctionParameters","getFunctionType","getInterpolateOperator","convertPropertyFunction","appendStopPair","z$1","fixupDegenerateStepCurve","expression$1","convertZoomAndPropertyFunction","isStep","convertZoomFunction","coalesce$1","i$2","expression$2","expression$3","curve","re","lastIndex","isExpressionFilter","filterSpec","property-type","convertFilter","convertComparisonOp","convertNegation","filters","convertDisjunctionOp","convertInOp","convertHasOp","convertFilter$1","_convertFilter","expectedTypes","converted","children","typechecks","conditions","runtimeTypeChecks","children$1","convertInOp$1","negate","uniformTypes","convertHasOp$1","deepEqual","operations","removeLayer","setPaintProperty","setLayoutProperty","setFilter","addSource","removeSource","setGeoJSONSourceData","setLayerZoomRange","setLayerProperty","setBearing","setPitch","setSprite","setGlyphs","setTransition","setLight","after","commands","command","sourcesRemoved","updateSource","canUpdateGeoJSON","before","isEqual","diffLayerPropertyChanges","layerId","klass","pluckId","indexById","group","ValidationError","identifier","__line__","line","ParsingError$1","validateConstants","unbundle","valueOf","deepUnbundle","validateObject","elementSpecs","elementValidators","styleSpec","objectKey","elementSpecKey","elementSpec","validateElement","validate","valueSpec","elementSpecKey$1","validateArray","arraySpec","validateArrayElement","arrayElementSpec","function","arrayIndex","validateNumber","minimum","maximum","validateFunction","stopKeyType","previousStopDomainValue","previousStopDomainZoom","functionValueSpec","functionType","stopDomainValues","isZoomFunction","isPropertyFunction","isZoomAndPropertyFunction","objectElementValidators","arrayElementValidator","validateFunctionStop","validateStopDomainValue","reportValue","validateExpression","expressionContext","propertyKey","validateEnum","validateFilter","validateNonExpressionFilter","filter_operator","geometry_type","validateProperty","layerSpec","layerType","transitionMatch","tokenMatch","validatePaintProperty","validateLayoutProperty","validateLayer","otherLayer","sourceType","lineMetrics","validateSource","source_geojson","source_video","source_image","validateLight","light","lightSpec","rootType","validateString","VALIDATORS","validateStyleMin","latestStyleSpec","$root","validateGlyphsURL","sortErrors","wrapCleanErrors","_o","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","trace","yy","symbols_","JSONString","STRING","JSONNumber","NUMBER","JSONNullLiteral","NULL","JSONBooleanLiteral","JSONText","JSONValue","EOF","JSONObject","JSONArray","JSONMemberList","JSONMember","JSONElementList","$accept","$end","terminals_","2","4","6","8","10","11","14","17","18","21","22","23","24","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","first_line","table","3","5","7","9","12","13","15","16","1","19","20","25","defaultActions","parseError","recoverable","vstack","lstack","lexer","sharedState","setInput","yylloc","yyloc","ranges","lex","token","getPrototypeOf","symbol","preErrorSymbol","action","newState","yyval","errStr","showPosition","loc","last_line","first_column","last_column","_input","_more","_backtrack","matched","conditionStack","ch","unput","lines","oldLines","more","backtrack_lexer","less","pastInput","past","upcomingInput","next","pre","test_match","indexed_rule","backup","matches","tempMatch","_currentRules","flex","condition","popState","topState","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","INITIAL","inclusive","Parser","validateStyle$$1","Buffer","jsonlint","normalizePropertyExpression","constant","visit","space","stringifyPretty","migrated","migrateToExpressions","styleIDs","sourceIDs","compositedSourceLayers","compositeID","bearing","pitch","removeOrAddSourceCommands","diffSources","beforeLayers","beforeOrder","afterOrder","beforeIndex","afterIndex","tracker","clean","insertBeforeLayerId","beforeLayer","afterLayer","diffLayers","compiled","globalProperties","_Object_js__WEBPACK_IMPORTED_MODULE_0__","_geom_flat_transform_js__WEBPACK_IMPORTED_MODULE_3__","_proj_js__WEBPACK_IMPORTED_MODULE_4__","_proj_Units_js__WEBPACK_IMPORTED_MODULE_5__","_transform_js__WEBPACK_IMPORTED_MODULE_6__","extentRevision_","getClosestPoint","opt_closestPoint","intersectsCoordinate","inCoordinates","outCoordinates","intersectsLineString","intersectsLineStringArray","intersectsLinearRingArray","intersectsLinearRingMultiArray","_flat_contains_js__WEBPACK_IMPORTED_MODULE_1__","_flat_segments_js__WEBPACK_IMPORTED_MODULE_2__","coordinatesExtent","point1","point2","intersectsLinearRing","_events_Target_js__WEBPACK_IMPORTED_MODULE_1__","_events_EventType_js__WEBPACK_IMPORTED_MODULE_2__","revision_","un","transformWithOptions","_geom_Geometry_js__WEBPACK_IMPORTED_MODULE_0__","_obj_js__WEBPACK_IMPORTED_MODULE_1__","_proj_js__WEBPACK_IMPORTED_MODULE_2__","defaultFeatureProjection","write","transformed","decimals","power","getReadOptions","readFeature","readGeometry","writeFeature","writeFeatures","writeGeometry","_LayerType_js__WEBPACK_IMPORTED_MODULE_0__","_layer_Layer_js__WEBPACK_IMPORTED_MODULE_1__","_layer_VectorRenderType_js__WEBPACK_IMPORTED_MODULE_2__","_obj_js__WEBPACK_IMPORTED_MODULE_3__","_style_Style_js__WEBPACK_IMPORTED_MODULE_4__","renderBuffer","updateWhileAnimating","updateWhileInteracting","declutter_","renderBuffer_","style_","styleFunction_","updateWhileAnimating_","updateWhileInteracting_","renderMode_","getDeclutter","setDeclutter","getRenderBuffer","getRenderOrder","getUpdateWhileAnimating","getUpdateWhileInteracting","setRenderOrder","renderOrder","getRenderMode","DEFAULT_MAX_ZOOM","DEFAULT_TILE_SIZE","getInteriorPointOfArray","getInteriorPointsOfMultiArray","flatCentersOffset","intersections","rr","maxSegmentLength","segmentLength","interiorPoints","_geom_GeometryLayout_js__WEBPACK_IMPORTED_MODULE_2__","_geom_GeometryType_js__WEBPACK_IMPORTED_MODULE_3__","_geom_SimpleGeometry_js__WEBPACK_IMPORTED_MODULE_4__","_geom_flat_closest_js__WEBPACK_IMPORTED_MODULE_5__","_geom_flat_deflate_js__WEBPACK_IMPORTED_MODULE_6__","_geom_flat_inflate_js__WEBPACK_IMPORTED_MODULE_7__","_geom_flat_interpolate_js__WEBPACK_IMPORTED_MODULE_8__","_geom_flat_intersectsextent_js__WEBPACK_IMPORTED_MODULE_9__","_geom_flat_length_js__WEBPACK_IMPORTED_MODULE_10__","_geom_flat_segments_js__WEBPACK_IMPORTED_MODULE_11__","_geom_flat_simplify_js__WEBPACK_IMPORTED_MODULE_12__","flatMidpoint_","flatMidpointRevision_","appendCoordinate","forEachSegment","getCoordinateAtM","opt_extrapolate","getCoordinateAt","containsTileRange","ol_MapEvent","MapEvent","opt_frameState","ol_MapBrowserEvent","MapBrowserEvent","browserEvent","opt_dragging","originalEvent","pixel","getEventPixel","getCoordinateFromPixel","dragging","MapBrowserEventType","SINGLECLICK","POINTERDRAG","POINTERMOVE","POINTERDOWN","POINTERUP","POINTEROVER","POINTEROUT","POINTERENTER","POINTERLEAVE","POINTERCANCEL","ol_MapBrowserPointerEvent","MapBrowserPointerEvent","pointerEvent","pointer_EventType","EventSource_EventSource","dispatcher","mapping","mapping_","getEvents","getHandlerForEvent","pointer_EventSource","POINTER_ID","POINTER_TYPE","mousedown","inEvent","isEventSimulatedFromTouch_","pointerMap","cancel","prepareEvent","down","mousemove","move","mouseup","button","cleanupMouse","mouseover","enterOver","mouseout","leaveOut","cloneEvent","pd","pointerId","isPrimary","pointerType","pointer_MouseSource","EventSource","MouseSource","lastTouches","lts","clientX","clientY","POINTER_TYPES","msPointerDown","prepareEvent_","msPointerMove","msPointerUp","msPointerOut","msPointerOver","msPointerCancel","msLostPointerCapture","makeEvent","msGotPointerCapture","pointer_MsSource","MsSource","MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture","pointerDown","fireNativeEvent","pointerMove","pointerUp","pointerOut","pointerOver","pointerCancel","lostPointerCapture","gotPointerCapture","pointer_NativeSource","NativeSource","pointerdown","pointermove","pointerup","pointerout","pointerover","pointercancel","gotpointercapture","lostpointercapture","HAS_BUTTONS","PointerEvent","opt_eventDict","eventDict","buttons","getButtons_","pressure","getPressure_","bubbles","cancelable","detail","screenX","screenY","ctrlKey","altKey","shiftKey","metaKey","relatedTarget","tiltX","tiltY","hwTimestamp","which","ev","MouseEvent","pointer_PointerEvent","touchstart","vacuumTouches_","setPrimaryTouch_","changedTouches","dedupSynthMouse_","clickCount_","processTouches_","overDown_","touchmove","moveOverOut_","touchend","upOut_","touchcancel","cancelOut_","pointer_TouchSource","TouchSource","mouseSource","firstTouchId_","resetId_","dedupTimeout_","isPrimaryTouch_","inTouch","count","cancelResetClickCount_","removePrimaryPointer_","inPointer","resetClickCount_","resetClickCountHandler_","touchToPointer_","webkitRadiusX","radiusX","webkitRadiusY","radiusY","webkitForce","force","inFunction","touches","pointer","findTouch_","touchList","searchId","outTarget","over","enter","outEvent","leave","cleanUpPointer_","CLONE_PROPS","pointer_PointerEventHandler","PointerEventHandler","element_","eventMap_","eventSourceList_","registerSources","registerSource","register_","newEvents","handler","eventSource","addEvents_","unregister_","removeEvents_","eventHandler_","eventName","ol_events","eventCopy","fireEvent","contains_","container","contained","inType","wrapMouseEvent","ol_MapBrowserEventHandler","MapBrowserEventHandler","moveTolerance","map_","clickTimeoutId_","dragging_","dragListenerKeys_","moveTolerance_","down_","getViewport","activePointers_","trackedTouches_","pointerEventHandler_","documentPointerEventHandler_","pointerdownListenerKey_","handlePointerDown_","relayedListenerKey_","relayEvent_","emulateClick_","newEvent","updateActivePointers_","handlePointerUp_","isMouseActionButton_","handlePointerMove_","isMoving_","MapEventType","POSTRENDER","MOVESTART","MOVEEND","MapProperty","LAYERGROUP","SIZE","TARGET","VIEW","PriorityQueue_PriorityQueue","priorityFunction","keyFunction","priorityFunction_","keyFunction_","elements_","priorities_","queuedElements_","dequeue","elements","priorities","siftUp_","elementKey","enqueue","priority","siftDown_","getLeftChildIndex_","getRightChildIndex_","getParentIndex_","heapify_","isKeyQueued","isQueued","startIndex","lIndex","rIndex","smallerChildIndex","parentIndex","reprioritize","ol_TileQueue","PriorityQueue","TileQueue","tilePriorityFunction","tileChangeCallback","tileChangeCallback_","tilesLoading_","tilesLoadingKeys_","added","getTilesLoading","loadMoreTiles","maxTotalLoading","maxNewLoads","newLoads","abortedTiles","LAYERS","Group","LayerGroup","layersListenerKeys_","listenerKeys_","ol_Object","handleLayersChanged_","handleLayerChange_","CollectionEventType","handleLayersAdd_","handleLayersRemove_","layersArray","ObjectEventType","collectionEvent","ownLayerState","Base","ol_PluggableMap","PluggableMap","optionsInternal","keyboardEventTarget","getElementById","controls","interactions","overlays","layerGroup","View","createOptionsInternal","maxTilesLoading_","maxTilesLoading","loadTilesWhileAnimating_","loadTilesWhileAnimating","loadTilesWhileInteracting_","loadTilesWhileInteracting","animationDelayKey_","animationDelay_","renderFrame_","Date","now","coordinateToPixelTransform_","pixelToCoordinateTransform_","frameIndex_","frameState_","previousExtent_","viewPropertyListenerKey_","viewChangeListenerKey_","layerGroupPropertyListenerKeys_","viewport_","className","msTouchAction","touchAction","overlayContainer_","overlayContainerStopEvent_","overlayEvents","mapBrowserEventHandler_","handleMapBrowserEvent","keyboardEventTarget_","keyHandlerKeys_","handleBrowserEvent","overlays_","overlayIdIndex_","createRenderer","handleResize_","focus_","postRenderFunctions_","tileQueue_","getTilePriority","handleTileChange_","skippedFeatureUids_","handleLayerGroupChanged_","handleViewChanged_","handleSizeChanged_","handleTargetChanged_","control","interaction","addOverlayInternal_","addControl","getControls","addInteraction","getInteractions","getLayerGroup","addOverlay","overlay","getOverlays","cancelAnimationFrame","setTarget","forEachFeatureAtPixel","hitTolerance","layerFilter","forEachFeatureAtCoordinate","getFeaturesAtPixel","forEachLayerAtPixel","hasFeatureAtPixel","hasFeatureAtCoordinate","getEventCoordinate","viewportPosition","getBoundingClientRect","eventPosition","top","getTarget","pixelToCoordinateTransform","getOverlayById","getPixelFromCoordinate","coordinateToPixelTransform","getOverlayContainer","getOverlayContainerStopEvent","tileSourceKey","tileCenter","tileResolution","wantedTiles","focus","mapBrowserEvent","interactionsArray","getActive","handleEvent","handlePostRender","tileQueue","hints","viewHints","ViewHint","animate","getLoading","loading","dispatchRenderEvent","render_EventType","postRenderFunctions","targetElement","updateSize","removeLayerRenderers","handleViewPropertyChanged_","setAttribute","isRendered","renderSync","requestAnimationFrame","removeControl","removeInteraction","removeOverlay","viewState","previousFrameState","isDef","getHints","skippedFeatureUids","renderFrame","setLayerGroup","setSize","setView","skipFeature","featureUid","computedStyle","offsetWidth","unskipFeature","control_Control","Control","target_","listenerKeys","getMap","Attribution_render","mapEvent","updateElement_","control_Attribution","Attribution","ulElement_","collapsed_","collapsed","collapsible_","collapsible","tipLabel","collapseLabel","collapseLabel_","label_","activeLabel","title","handleClick_","cssClasses","css","renderedAttributions_","renderedVisible_","getSourceAttributions_","lookup","visibleAttributions","attributionGetter","display","innerHTML","handleToggle_","classList","toggle","getCollapsible","setCollapsible","setCollapsed","getCollapsed","Rotate_render","rotation_","autoHide_","msTransform","webkitTransform","control_Rotate","Rotate","callResetNorth_","resetNorth","duration_","duration","autoHide","resetNorth_","getRotation","setRotation","control_Zoom","Zoom","zoomInLabel","zoomOutLabel","zoomInTipLabel","zoomOutTipLabel","inElement","createTextNode","outElement","zoomByDelta_","currentResolution","newResolution","constrainResolution","getAnimating","cancelAnimations","setResolution","Kinetic","decay","minVelocity","delay","decay_","minVelocity_","delay_","points_","angle_","initialVelocity_","update","firstIndex","atan2","getDistance","getAngle","ol_Kinetic","interaction_Property","opt_duration","rotateWithoutConstraints","constrainRotation","currentRotation","currentCenter","zoomByDelta","getMinResolution","getMaxResolution","calculateCenterZoom","constrainCenter","zoomWithoutConstraints","interaction_Interaction","Interaction","setActive","active","stopEvent","delta_","interaction_DoubleClickZoom","DoubleClickZoom","altShiftKeysOnly","condition_focus","activeElement","always","condition_mouseActionButton","noModifierKeys","shiftKeyOnly","targetNotEditable","tagName","condition_mouseOnly","handleDragEvent","handleUpEvent","handleDownEvent","handleMoveEvent","Pointer_centroid","pointerEvents","Pointer_handleEvent","updateTrackedPointers_","handlingDownUpSequence","handleDragEvent_","handledUp","handleUpEvent_","targetPointers","handled","handleDownEvent_","stopDown","handleMoveEvent_","Pointer","PointerInteraction","trackedPointers_","isPointerDraggingEvent","DragPan_handleDragEvent","panning_","setHint","centroid","lastPointersCount_","kinetic_","lastCentroid","ol_coordinate","DragPan_handleUpEvent","noKinetic_","centerpx","DragPan_handleDownEvent","condition_","interaction_DragPan","DragPan","kinetic","DragRotate_handleDragEvent","getConstraints","rotationconstraint","lastAngle_","DragRotate_handleUpEvent","DragRotate_handleDownEvent","interaction_DragRotate","DragRotate","Box","RenderBox","startPixel_","endPixel_","render_","startPixel","endPixel","setPixels","createOrUpdateGeometry","ol_Disposable","DragBoxEventType","BOXSTART","BOXDRAG","BOXEND","DragBoxEvent","defaultBoxEndCondition","minArea_","DragBox_handleDragEvent","box_","DragBox_handleUpEvent","boxEndCondition_","onBoxEnd_","DragBox_handleDownEvent","onBoxEnd","out_","mapExtent","calculateExtent","boxPixelExtent","factor","getResolutionForExtent","interaction_DragZoom","DragBox","DragZoom","minArea","boxEndCondition","KeyCode","UP","DOWN","KeyboardPan_handleEvent","keyCode","mapUnitsDelta","pixelDelta_","pan","interaction_KeyboardPan","KeyboardPan","defaultCondition_","pixelDelta","KeyboardZoom_handleEvent","interaction_KeyboardZoom","KeyboardZoom","Mode","TRACKPAD","MouseWheelZoom_handleEvent","wheelEvent","useAnchor_","lastAnchor_","deltaMode","WheelEvent","DOM_DELTA_PIXEL","DOM_DELTA_LINE","wheelDeltaY","startTime_","mode_","trackpadEventGap_","trackpadTimeoutId_","decrementInteractingHint_","trackpadDeltaPerZoom_","rebound","trackpadZoomBuffer_","constrainResolution_","timeLeft","timeout_","timeoutId_","handleWheelZoom_","interaction_MouseWheelZoom","MouseWheelZoom","timeout","useAnchor","setMouseAnchor","PinchRotate_handleDragEvent","rotationDelta","touch0","touch1","rotationDelta_","rotating_","threshold_","anchor_","PinchRotate_handleUpEvent","PinchRotate_handleDownEvent","interaction_PinchRotate","PinchRotate","threshold","PinchZoom_handleDragEvent","scaleDelta","lastDistance_","lastScaleDelta_","PinchZoom_handleUpEvent","PinchZoom_handleDownEvent","interaction_PinchZoom","PinchZoom","ol_ImageBase","ImageBase","getPixelRatio","ol_ImageCanvas","ImageCanvas","opt_loader","ImageState","error_","getError","handleLoad_","render_Event","RenderEvent","opt_vectorContext","opt_context","opt_glContext","vectorContext","glContext","VectorContext_VectorContext","drawCustom","drawGeometry","drawCircle","circleGeometry","drawFeature","drawGeometryCollection","geometryCollectionGeometry","drawLineString","lineStringGeometry","drawMultiLineString","multiLineStringGeometry","drawMultiPoint","multiPointGeometry","drawMultiPolygon","multiPolygonGeometry","drawPoint","pointGeometry","drawPolygon","polygonGeometry","drawText","setFillStrokeStyle","setImageStyle","imageStyle","opt_declutterGroup","setTextStyle","textStyle","render_VectorContext","Immediate","VectorContext","CanvasImmediateRenderer","viewRotation","transform_","viewRotation_","contextFillState_","contextStrokeState_","contextTextState_","fillState_","strokeState_","imageAnchorX_","imageAnchorY_","imageHeight_","imageOpacity_","imageOriginX_","imageOriginY_","imageRotateWithView_","imageRotation_","imageScale_","imageWidth_","textOffsetX_","textOffsetY_","textRotateWithView_","textRotation_","textScale_","textFillState_","textStrokeState_","textState_","pixelCoordinates_","tmpLocalTransform_","drawImages_","pixelCoordinates","localTransform","centerX","centerY","drawText_","setContextFillState_","setContextStrokeState_","setContextTextState_","strokeText","fillText","moveToLineTo_","close","drawRings_","arc","geometries","getGeometriesArray","flatMidpoint","geometryExtent","flatMidpoints","flatInteriorPoint","flatInteriorPoints","fillState","contextFillState","strokeState","contextStrokeState","textState","contextTextState","textAlign","render_canvas","textBaseline","fillStyleColor","colorlike","strokeStyleColor","strokeStyleLineCap","strokeStyleLineDash","strokeStyleLineDashOffset","strokeStyleLineJoin","strokeStyleWidth","strokeStyleMiterLimit","imageAnchor","getAnchor","imageImage","imageOrigin","imageSize","getOpacity","getRotateWithView","getScale","textFillStyle","textFillStyleColor","textStrokeStyle","textStrokeStyleColor","textStrokeStyleLineCap","textStrokeStyleLineDash","textStrokeStyleLineDashOffset","textStrokeStyleLineJoin","textStrokeStyleWidth","textStrokeStyleMiterLimit","textFont","getFont","textOffsetX","getOffsetX","textOffsetY","getOffsetY","textRotateWithView","textRotation","textScale","textText","textTextAlign","getTextAlign","textTextBaseline","getTextBaseline","Map_MapRenderer","MapRenderer","layerRenderers_","layerRendererListeners_","layerRendererConstructors_","registerLayerRenderers","constructors","getLayerRendererConstructors","calculateMatrices2D","removeLayerRendererByKey_","thisArg","thisArg2","viewResolution","translatedCoordinate","layerRenderer","getLayerRenderer","layerKey","candidate","handleLayerRendererChange_","getLayerRendererByKey","getLayerRenderers","removeUnusedLayerRenderers_","scheduleExpireIconCache","expireIconCache","scheduleRemoveUnusedLayerRenderers","IconImageCache","expire","sortByZIndex","state1","state2","layerRendererConstructors","canvas_Map","CanvasMapRenderer","insertBefore","childNodes","composeEvent","clearRect","sourceState","prepareFrame","composeFrame","numLayers","forEachLayerAtCoordinate","ctor","Layer_LayerRenderer","LayerRenderer","layer_","createLoadedTileFinder","getLayer","handleImageChange_","renderIfReadyAndVisible","loadImage","imageState","getVisible","scheduleExpireCache","tileSource","postRenderFunction","updateUsedTiles","manageTilePyramid","currentZ","opt_tileCallback","canvas_Layer","CanvasLayerRenderer","renderedResolution","topLeft","topRight","bottomRight","bottomLeft","dispatchComposeEvent_","opt_transform","postCompose","preCompose","IntermediateCanvas","IntermediateCanvasRenderer","coordinateToCanvasPixelTransform","hitCanvasContext_","clipped","imageTransform","getImageTransform","dw","dh","imageData","getImageData","ImageLayer_CanvasImageLayerRenderer","CanvasImageLayerRenderer","imageLayer","imageTransform_","skippedFeatures_","vectorRenderer_","viewCenter","imageSource","vectorRenderer","renderedExtent","skippedFeatures","imageFrameState","newSkippedFeatures","replayGroupChanged","imageExtent","imageResolution","imagePixelRatio","VectorRenderType","mapRenderer","ImageLayer","TileLayer_CanvasTileLayerRenderer","CanvasTileLayerRenderer","tileLayer","opt_noContext","oversampling_","renderedExtent_","renderedTiles","newTiles_","tmpExtent","tmpTileRange_","zDirection","isDrawableTile_","oversampling","tilesToDrawByZ","findLoadedTiles","animatingOrInteracting","tmpTileRange","childTileRange","tilePixelSize","currentScale","currentTilePixelSize","tileExtent","tileGutter","tilesToDraw","zs","drawTileImage","alphaChanged","ReplayGroup_ReplayGroup","getReplay","replayType","render_ReplayGroup","ReplayType","DEFAULT","drawTextOnPath","measure","startM","maxAngle","previousAngle","numChars","segmentM","chunk","chunkLength","char","charLength","charM","segmentPos","Instruction","BEGIN_GEOMETRY","BEGIN_PATH","CLOSE_PATH","CUSTOM","DRAW_CHARS","DRAW_IMAGE","END_GEOMETRY","FILL","MOVE_TO_LINE_TO","SET_FILL_STYLE","SET_STROKE_STYLE","STROKE","Instruction_fillInstruction","Instruction_strokeInstruction","beginPathInstruction","closePathInstruction","canvas_Instruction","ORDER","TEXT_ALIGN","middle","hanging","alphabetic","ideographic","bottom","Replay_tmpExtent","Replay_CanvasReplay","CanvasReplay","maxExtent","declutterTree","maxLineWidth","alignFill_","beginGeometryInstruction1_","beginGeometryInstruction2_","bufferedMaxExtent_","instructions","coordinateCache_","renderedTransform_","hitDetectionInstructions","replayTextBackground_","p3","p4","fillInstruction","strokeInstruction","setStrokeStyle_","replayImage_","declutterGroup","snapToPixel","fillStroke","boxW","boxH","boxX","boxY","strokePadding","declutterArgs","applyPixelRatio","dashArray","dash","appendFlatCoordinates","closed","skipFirst","myEnd","getBufferedMaxExtent","lastRel","nextRel","lastCoord","nextCoord","skipped","Relationship","drawCustomCoordinates_","replayEnds","replayEnd","beginGeometry","replayEndss","replayBegin","myEnds","endGeometry","repeatSize","instruction","renderDeclutter_","groupCount","box","collides","insert","declutterData","replay_","skippedFeaturesHash","featureCallback","opt_hitExtent","dd","prevX","prevY","roundX","roundY","skipFeatures","pendingFill","pendingStroke","lastFillInstruction","lastStrokeInstruction","coordinateCache","batchSize","coords","rotateWithView","backgroundFill","backgroundStroke","baseline","fillKey","strokeKey","strokeWidth","textKey","pathLength","flat_length","textLength","textStates","cc","chars","replay","replayHitDetection","opt_featureCallback","reverseHitDetectionInstructions","createFill","applyStroke","createStroke","updateFillStyle","currentFillStyle","updateStrokeStyle","currentStrokeStyle","currentLineCap","currentLineDash","currentLineDashOffset","currentLineJoin","currentLineWidth","currentMiterLimit","endGeometryInstruction","finish","Replay","ImageReplay","CanvasImageReplay","declutterGroup_","hitDetectionImage_","anchorX_","anchorY_","height_","opacity_","originX_","originY_","rotateWithView_","scale_","drawCoordinates_","myBegin","hitDetectionImage","getHitDetectionImage","LineStringReplay","CanvasLineStringReplay","drawFlatCoordinates_","moveToLineToInstruction","lastStroke","PolygonReplay","CanvasPolygonReplay","drawFlatCoordinatess_","setFillStrokeStyles_","circleInstruction","matchingChunk","m12","m23","x12","y12","x23","y23","chunkStart","chunkEnd","chunkM","BATCH_CONSTRUCTORS","Circle","Default","Text","CanvasTextReplay","labels_","fillStates","strokeStates","textKey_","fillKey_","strokeKey_","widths_","prune","placement","TextPlacement","LINE","flatEnd","flatOffset","oo","drawChars_","drawTextImage_","align","numLines","widths","currentWidth","measureTextWidths","lineHeight","renderWidth","leftRight","getOverflow","getMaxAngle","getPlacement","getBackgroundFill","getBackgroundStroke","getPadding","ReplayGroup_CanvasReplayGroup","ReplayGroup","CanvasReplayGroup","opt_renderBuffer","declutterTree_","tolerance_","maxExtent_","resolution_","replaysByZIndex_","hitDetectionContext_","hitDetectionTransform_","addDeclutter","flatClipCoords","getClipCoords","hasReplays","replays","candidates","replayKey","declutterReplays","hitExtent","contextSize","declutteredFeatures","mask","circleArrayCache","arraySize","fillCircleArrayRowToMiddle","getCircleArray","entry","zIndexKey","Constructor","getReplays","opt_replayTypes","opt_declutterReplays","replayTypes","canvas_ReplayGroup","SIMPLIFY_TOLERANCE","GEOMETRY_RENDERERS","getImageState","imageReplay","textReplay","lineStringReplay","polygonReplay","GeometryCollection","geometryRenderer","circleReplay","defaultOrder","feature1","feature2","getSquaredTolerance","getTolerance","renderFeature","unlistenImageChange","listenImageChange","renderGeometry","getGeometries","renderFeatureInternal","VectorLayer_CanvasVectorLayerRenderer","CanvasVectorLayerRenderer","vectorLayer","rbush_default","dirty_","renderedRevision_","renderedResolution_","renderedRenderOrder_","replayGroup_","handleFontsChanged_","vectorSource","clipExtent","replayContext","drawOffsetX","drawOffsetY","transparentLayer","hasRenderListeners","drawWidth","drawHeight","drawSize","world","mainContextAlpha","handleStyleImageChange_","animating","interacting","frameStateExtent","vectorLayerRevision","vectorLayerRenderBuffer","vectorLayerRenderOrder","loadFeatures","forEachFeatureInExtent","IMAGE_REPLAYS","hybrid","VECTOR_REPLAYS","vector","VectorTileLayer_CanvasVectorTileLayerRenderer","CanvasVectorTileLayerRenderer","renderedLayerRevision_","tmpTransform_","createReplayGroup_","renderTileImage_","layerRevision","revision","replayState","zIndexKeys","sourceTileExtent","bufferedExtent","tileProjection","reproject","tt","loop","getReplayTransform_","renderResolution","clips","worldOffset","currentClip","zz","replayData","replayDeclutter","pixelScale","Map_Map","zoomOptions","rotateOptions","attributionOptions","defaults","altShiftDragRotate","doubleClickZoom","zoomDelta","zoomDuration","dragPan","onFocusOnly","pinchRotate","pinchZoom","keyboard","mouseWheelZoom","shiftDragZoom","interaction_defaults","disposed_","twiceArea","linearRingss","_geom_GeometryType_js__WEBPACK_IMPORTED_MODULE_2__","_geom_Point_js__WEBPACK_IMPORTED_MODULE_3__","_geom_flat_deflate_js__WEBPACK_IMPORTED_MODULE_5__","_geom_flat_inflate_js__WEBPACK_IMPORTED_MODULE_6__","_math_js__WEBPACK_IMPORTED_MODULE_7__","appendPoint","getPoint","getPoints","points","rbush","quickselect","require","maxEntries","_maxEntries","_minEntries","_initFormat","findItem","equalsFn","calcBBox","toBBox","distBBox","destNode","createNode","leaf","compareNodeMinX","compareNodeMinY","bboxArea","bboxMargin","enlargedArea","intersectionArea","multiSelect","_all","childBBox","nodesToSearch","_build","_splitRoot","tmpNode","_insert","goingUp","indexes","_condense","compareMinX","compareMinY","fromJSON","M","right2","right3","N2","N1","_chooseSubtree","level","targetNode","enlargement","minEnlargement","isNode","insertPath","_split","_adjustParentBBoxes","_chooseSplitAxis","splitIndex","_chooseSplitIndex","bbox1","bbox2","overlap","minOverlap","_allDistMargin","leftBBox","rightBBox","siblings","compareArr","Function","IconAnchorUnits","FRACTION","IconImage_IconImage","IconImage","imageState_","size_","tainting_","determineTainting_","dispatchChangeEvent_","replaceColor_","getSrc","imgData","putImageData","IconOrigin","style_Icon","ImageStyle","Icon","normalizedAnchor_","anchorOrigin_","anchorOrigin","anchorXUnits_","anchorXUnits","anchorYUnits_","anchorYUnits","img","imgSize","ol_color","iconImage_","iconImage","offset_","offsetOrigin_","offsetOrigin","setAnchor","getImageSize","getHitDetectionImageSize","iconImageSize","Text_Text","font_","textAlign_","textBaseline_","maxAngle_","placement_","overflow_","offsetX_","offsetY_","backgroundFill_","backgroundStroke_","padding_","setOverflow","setFont","setMaxAngle","setOffsetX","setOffsetY","setPlacement","setScale","setTextAlign","setTextBaseline","setBackgroundFill","setBackgroundStroke","setPadding","style_Text","ref_properties","deref","refProperties","derefLayers","degrees","expressionData","rawExpression","compiledExpression","zoomObj","functionCache","layoutOrPaint","isExpr","filterCache","evaluateFilter","createFilter","colorCache","colorWithOpacity","colorData","templateRegEx","fromTemplate","olLayer","spriteImage","spriteImgSize","onload","measureCache","wrapText","em","wrappedText","words","word","mapboxSource","allLayers","layersBySourceLayer","mapboxLayers","sourceLayer","textHalo","textColor","iconImageCache","patternCache","getZoomForResolution","stylesLength","layerData","strokeColor","fillIcon","icon","icon_cache_key","pattern","spriteImageData","createPattern","hasImage","placementAngle","iconImg","skipLabel","styleGeom","iconSize","iconColor","setOpacity","circleRadius","circleStrokeColor","circleColor","circleOpacity","circleStrokeOpacity","circleStrokeWidth","textSize","fontArray","textTransform","wrappedLabel","textAnchor","textOffset","haloColor","DEFAULT_RADIUS","opt_radius","lat1","lat2","deltaLatBy2","deltaLonBy2","lon1","dByR","lat","lon","shared","cache_","cacheSize_","maxCacheSize_","maxCacheSize","loadingstrategy_all","VectorEventType","RBush_RBush","opt_maxEntries","rbush_","items_","extents","getAll","getInExtent","forEach_","forEachInExtent","ol_obj","structs_RBush","VectorSourceEvent","opt_feature","Vector_VectorSource","strategy_","strategy","collection","useSpatialIndex","featuresRtree_","loadedExtentsRtree_","nullGeometryFeatures_","idIndex_","undefIdIndex_","featureChangeKeys_","featuresCollection_","addFeaturesInternal","bindFeaturesCollection_","addFeature","addFeatureInternal","featureKey","addToIndex_","setupChangeEvents_","handleFeatureChange_","valid","addFeatures","newFeatures","geometryFeatures","modifyingCollection","removeFeature","opt_fast","featureId","removeFeatureInternal","clearEvent","forEachFeature","forEachFeatureAtCoordinateDirect","forEachFeatureIntersectingExtent","getFeaturesCollection","getFeaturesAtCoordinate","getFeaturesInExtent","getClosestFeatureToCoordinate","opt_filter","closestFeature","previousMinSquaredDistance","minDistance","getFeatureById","getUrl","sid","removeFromIdIndex_","hasFeature","loadedExtentsRtree","extentsToLoad","extentToLoad","removeLoadedExtent","removed","source_Source","CircleStyle","RegularShape","atlasManager","getRadius","atlasManager_","setRadius","radius_","checksums_","hitDetectionCanvas_","radius1","radius2_","radius2","imageSize_","hitDetectionImageSize_","getRadius2","renderOptions","draw_","createHitDetectionCanvas_","renderHitDetectionCallback","hasCustomHitDetectionImage","drawHitDetectionCanvas_","info","hitImage","angle0","radiusC","strokeChecksum","fillChecksum","checksum","fontWeights","thin","hairline","ultra-light","extra-light","book","regular","normal","plain","roman","standard","medium","semi-bold","demi-bold","bold","heavy","extra-bold","ultra-black","extra-black","ultra-bold","heavy-black","fat","poster","italicRE","fontCache","cssData","maybeWeight","AssertionError","count_","entries_","oldest_","newest_","value_","newer","older","peekLastKey","getSnapToPixel","setRotateWithView","setSnapToPixel","_layer_Property_js__WEBPACK_IMPORTED_MODULE_1__","_math_js__WEBPACK_IMPORTED_MODULE_2__","state_","setMinResolution","zindex","loadFeaturesXhr","xhr","_format_FormatType_js__WEBPACK_IMPORTED_MODULE_1__","failure","responseType","responseXML","DOMParser","parseFromString","onerror","_Object_js__WEBPACK_IMPORTED_MODULE_1__","_source_State_js__WEBPACK_IMPORTED_MODULE_3__","attributions_","adaptAttributions_","wrapX_","attributionLike","_geom_MultiPoint_js__WEBPACK_IMPORTED_MODULE_4__","_geom_Polygon_js__WEBPACK_IMPORTED_MODULE_5__","_geom_SimpleGeometry_js__WEBPACK_IMPORTED_MODULE_6__","_geom_flat_area_js__WEBPACK_IMPORTED_MODULE_7__","_geom_flat_center_js__WEBPACK_IMPORTED_MODULE_8__","_geom_flat_closest_js__WEBPACK_IMPORTED_MODULE_9__","_geom_flat_contains_js__WEBPACK_IMPORTED_MODULE_10__","_geom_flat_deflate_js__WEBPACK_IMPORTED_MODULE_11__","_geom_flat_inflate_js__WEBPACK_IMPORTED_MODULE_12__","_geom_flat_interiorpoint_js__WEBPACK_IMPORTED_MODULE_13__","_geom_flat_intersectsextent_js__WEBPACK_IMPORTED_MODULE_14__","_geom_flat_orient_js__WEBPACK_IMPORTED_MODULE_15__","_geom_flat_simplify_js__WEBPACK_IMPORTED_MODULE_16__","endss_","flatInteriorPointsRevision_","polygon","appendPolygon","newEndss","getInteriorPoints","getPolygon","prevEnds","getPolygons","polygons","lastEnds","ret","lineStringLength","_geom_LineString_js__WEBPACK_IMPORTED_MODULE_4__","_geom_SimpleGeometry_js__WEBPACK_IMPORTED_MODULE_5__","_geom_flat_closest_js__WEBPACK_IMPORTED_MODULE_6__","_geom_flat_deflate_js__WEBPACK_IMPORTED_MODULE_7__","_geom_flat_inflate_js__WEBPACK_IMPORTED_MODULE_8__","_geom_flat_interpolate_js__WEBPACK_IMPORTED_MODULE_9__","_geom_flat_intersectsextent_js__WEBPACK_IMPORTED_MODULE_10__","_geom_flat_simplify_js__WEBPACK_IMPORTED_MODULE_11__","lineString","appendLineString","opt_interpolate","getLineString","getLineStrings","lineStrings","midpoints","ol_Feature","opt_geometryOrProperties","geometryChangeKey_","handleGeometryChanged_","geom_Geometry","getGeometryName","handleGeometryChange_","createStyleFunction","getObject","format_JSONFeature","JSONFeature","readFeatureFromObject","readFeaturesFromObject","readGeometryFromObject","readProjectionFromObject","writeFeatureObject","writeFeaturesObject","writeGeometryObject","format_Feature","cloneGeometries","clonedGeometries","geom_GeometryCollection","opt_geometries","geometries_","listenGeometriesChange_","unlistenGeometriesChange_","geometryCollection","setGeometries","simplifiedGeometries","simplified","simplifiedGeometryCollection","setGeometriesArray","GeoJSON_GeoJSON","extractGeometryName_","extractGeometryName","geoJSONFeature","geometry_name","geoJSONFeatures","crs","objects","GEOMETRY_READERS","GEOMETRY_WRITERS","rightHanded","geometryReader","geometryWriter","ViewProperty","DEFAULT_MIN_ZOOM","View_View","hints_","animations_","updateAnimationKey_","updateAnimations_","applyOptions_","resolutionConstraintInfo","resolutionConstraint","createSnapToResolutions","defaultMaxResolution","defaultMinResolution","opt_maxLevel","oldLevel","newLevel","createSnapToPower","constraint","createResolutionConstraint","maxResolution_","minResolution_","minZoom_","centerConstraint","createExtent","createCenterConstraint","rotationConstraint","enableRotation","createRotationConstraint","constraints_","options_","getUpdatedOptions_","newOptions","var_args","animationCount","animationCallback","series","animation","complete","sourceRotation","targetRotation","isNoopAnimation","getInteracting","seriesComplete","elapsed","calculateCenterRotate","getSizeFromViewport_","selector","metrics","opt_delta","opt_hints","setMaxZoom","setMinZoom","xResolution","yResolution","getResolutionForValueFunction","opt_power","getValueForResolutionFunction","pixelResolution","getResolutionForZoom","geometryOrExtent","minRotX","minRotY","maxRotX","maxRotY","rotX","rotY","constrainedResolution","centerRotX","centerRotY","centerOn","hint","returnValue","eval","read","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","families","link","getLink","normalizeName","Pbf","ieee754","buf","ArrayBuffer","isView","Uint8Array","Varint","Fixed64","Bytes","Fixed32","readPackedEnd","toNum","isSigned","makeRoomForExtraLength","startPos","extraLen","realloc","writePackedVarint","writeVarint","writePackedSVarint","writeSVarint","writePackedFloat","writeFloat","writePackedDouble","writeDouble","writePackedBoolean","writeBoolean","writePackedFixed32","writeFixed32","writePackedSFixed32","writeSFixed32","writePackedFixed64","writeFixed64","writePackedSFixed64","writeSFixed64","readUInt32","writeInt32","readInt32","destroy","readField","skip","readMessage","readFixed32","readSFixed32","readFixed64","readSFixed64","readVarintRemainder","b3","b0","bytesPerSequence","readUtf8","readBytes","subarray","readPackedVarint","readPackedSVarint","readPackedBoolean","readPackedFloat","readPackedDouble","readPackedFixed32","readPackedSFixed32","readPackedFixed64","readPackedSFixed64","writeTag","writeBigVarintLow","lsb","writeBigVarintHigh","writeBigVarint","writeString","lead","writeUtf8","writeBytes","writeRawMessage","writeMessage","writeBytesField","writeFixed32Field","writeSFixed32Field","writeFixed64Field","writeSFixed64Field","writeVarintField","writeSVarintField","writeStringField","writeFloatField","writeDoubleField","writeBooleanField","base64","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","that","__proto__","encodingOrOffset","allocUnsafe","byteOffset","byteLength","fromArrayLike","fromArrayBuffer","encoding","isEncoding","isBuffer","copy","isnan","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","swap","bidirectionalIndexOf","dir","arrayIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","hexWrite","remaining","strLen","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","base64Slice","fromByteArray","utf8Slice","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","typedArraySupport","poolSize","_augment","species","configurable","allocUnsafeSlow","_isBuffer","swap16","swap32","swap64","hexSlice","asciiSlice","latin1Slice","utf16leSlice","inspect","thisStart","thisEnd","thisCopy","targetCopy","_arr","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","noAssert","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","toByteArray","stringtrim","base64clean","dst","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","len2","encodeChunk","tripletToBase64","factory","__WEBPACK_AMD_DEFINE_RESULT__","define","__WEBPACK_AMD_DEFINE_FACTORY__","defaultCompare","quickselectStep","sd","newLeft","newRight"],"mappings":"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","file":"common.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n","/**\n * @module ol/extent\n */\nimport {assert} from './asserts.js';\nimport Corner from './extent/Corner.js';\nimport Relationship from './extent/Relationship.js';\n\n\n/**\n * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.\n * @typedef {Array} Extent\n * @api\n */\n\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array} coordinates Coordinates.\n * @return {module:ol/extent~Extent} Bounding extent.\n * @api\n */\nexport function boundingExtent(coordinates) {\n const extent = createEmpty();\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n\n/**\n * @param {Array} xs Xs.\n * @param {Array} ys Ys.\n * @param {module:ol/extent~Extent=} opt_extent Destination extent.\n * @private\n * @return {module:ol/extent~Extent} Extent.\n */\nfunction _boundingExtentXYs(xs, ys, opt_extent) {\n const minX = Math.min.apply(null, xs);\n const minY = Math.min.apply(null, ys);\n const maxX = Math.max.apply(null, xs);\n const maxY = Math.max.apply(null, ys);\n return createOrUpdate(minX, minY, maxX, maxY, opt_extent);\n}\n\n\n/**\n * Return extent increased by the provided value.\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {module:ol/extent~Extent=} opt_extent Extent.\n * @return {module:ol/extent~Extent} Extent.\n * @api\n */\nexport function buffer(extent, value, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = extent[0] - value;\n opt_extent[1] = extent[1] - value;\n opt_extent[2] = extent[2] + value;\n opt_extent[3] = extent[3] + value;\n return opt_extent;\n } else {\n return [\n extent[0] - value,\n extent[1] - value,\n extent[2] + value,\n extent[3] + value\n ];\n }\n}\n\n\n/**\n * Creates a clone of an extent.\n *\n * @param {module:ol/extent~Extent} extent Extent to clone.\n * @param {module:ol/extent~Extent=} opt_extent Extent.\n * @return {module:ol/extent~Extent} The clone.\n */\nexport function clone(extent, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = extent[0];\n opt_extent[1] = extent[1];\n opt_extent[2] = extent[2];\n opt_extent[3] = extent[3];\n return opt_extent;\n } else {\n return extent.slice();\n }\n}\n\n\n/**\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nexport function closestSquaredDistanceXY(extent, x, y) {\n let dx, dy;\n if (x < extent[0]) {\n dx = extent[0] - x;\n } else if (extent[2] < x) {\n dx = x - extent[2];\n } else {\n dx = 0;\n }\n if (y < extent[1]) {\n dy = extent[1] - y;\n } else if (extent[3] < y) {\n dy = y - extent[3];\n } else {\n dy = 0;\n }\n return dx * dx + dy * dy;\n}\n\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nexport function containsCoordinate(extent, coordinate) {\n return containsXY(extent, coordinate[0], coordinate[1]);\n}\n\n\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {module:ol/extent~Extent} extent1 Extent 1.\n * @param {module:ol/extent~Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n * first.\n * @api\n */\nexport function containsExtent(extent1, extent2) {\n return extent1[0] <= extent2[0] && extent2[2] <= extent1[2] &&\n extent1[1] <= extent2[1] && extent2[3] <= extent1[3];\n}\n\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nexport function containsXY(extent, x, y) {\n return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n}\n\n\n/**\n * Get the relationship between a coordinate and extent.\n * @param {module:ol/extent~Extent} extent The extent.\n * @param {module:ol/coordinate~Coordinate} coordinate The coordinate.\n * @return {module:ol/extent/Relationship} The relationship (bitwise compare with\n * module:ol/extent/Relationship~Relationship).\n */\nexport function coordinateRelationship(extent, coordinate) {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const x = coordinate[0];\n const y = coordinate[1];\n let relationship = Relationship.UNKNOWN;\n if (x < minX) {\n relationship = relationship | Relationship.LEFT;\n } else if (x > maxX) {\n relationship = relationship | Relationship.RIGHT;\n }\n if (y < minY) {\n relationship = relationship | Relationship.BELOW;\n } else if (y > maxY) {\n relationship = relationship | Relationship.ABOVE;\n }\n if (relationship === Relationship.UNKNOWN) {\n relationship = Relationship.INTERSECTING;\n }\n return relationship;\n}\n\n\n/**\n * Create an empty extent.\n * @return {module:ol/extent~Extent} Empty extent.\n * @api\n */\nexport function createEmpty() {\n return [Infinity, Infinity, -Infinity, -Infinity];\n}\n\n\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {module:ol/extent~Extent=} opt_extent Destination extent.\n * @return {module:ol/extent~Extent} Extent.\n */\nexport function createOrUpdate(minX, minY, maxX, maxY, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = minX;\n opt_extent[1] = minY;\n opt_extent[2] = maxX;\n opt_extent[3] = maxY;\n return opt_extent;\n } else {\n return [minX, minY, maxX, maxY];\n }\n}\n\n\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {module:ol/extent~Extent=} opt_extent Extent.\n * @return {module:ol/extent~Extent} Extent.\n */\nexport function createOrUpdateEmpty(opt_extent) {\n return createOrUpdate(\n Infinity, Infinity, -Infinity, -Infinity, opt_extent);\n}\n\n\n/**\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n * @param {module:ol/extent~Extent=} opt_extent Extent.\n * @return {module:ol/extent~Extent} Extent.\n */\nexport function createOrUpdateFromCoordinate(coordinate, opt_extent) {\n const x = coordinate[0];\n const y = coordinate[1];\n return createOrUpdate(x, y, x, y, opt_extent);\n}\n\n\n/**\n * @param {Array} coordinates Coordinates.\n * @param {module:ol/extent~Extent=} opt_extent Extent.\n * @return {module:ol/extent~Extent} Extent.\n */\nexport function createOrUpdateFromCoordinates(coordinates, opt_extent) {\n const extent = createOrUpdateEmpty(opt_extent);\n return extendCoordinates(extent, coordinates);\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {module:ol/extent~Extent=} opt_extent Extent.\n * @return {module:ol/extent~Extent} Extent.\n */\nexport function createOrUpdateFromFlatCoordinates(flatCoordinates, offset, end, stride, opt_extent) {\n const extent = createOrUpdateEmpty(opt_extent);\n return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);\n}\n\n/**\n * @param {Array>} rings Rings.\n * @param {module:ol/extent~Extent=} opt_extent Extent.\n * @return {module:ol/extent~Extent} Extent.\n */\nexport function createOrUpdateFromRings(rings, opt_extent) {\n const extent = createOrUpdateEmpty(opt_extent);\n return extendRings(extent, rings);\n}\n\n\n/**\n * Determine if two extents are equivalent.\n * @param {module:ol/extent~Extent} extent1 Extent 1.\n * @param {module:ol/extent~Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nexport function equals(extent1, extent2) {\n return extent1[0] == extent2[0] && extent1[2] == extent2[2] &&\n extent1[1] == extent2[1] && extent1[3] == extent2[3];\n}\n\n\n/**\n * Modify an extent to include another extent.\n * @param {module:ol/extent~Extent} extent1 The extent to be modified.\n * @param {module:ol/extent~Extent} extent2 The extent that will be included in the first.\n * @return {module:ol/extent~Extent} A reference to the first (extended) extent.\n * @api\n */\nexport function extend(extent1, extent2) {\n if (extent2[0] < extent1[0]) {\n extent1[0] = extent2[0];\n }\n if (extent2[2] > extent1[2]) {\n extent1[2] = extent2[2];\n }\n if (extent2[1] < extent1[1]) {\n extent1[1] = extent2[1];\n }\n if (extent2[3] > extent1[3]) {\n extent1[3] = extent2[3];\n }\n return extent1;\n}\n\n\n/**\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n */\nexport function extendCoordinate(extent, coordinate) {\n if (coordinate[0] < extent[0]) {\n extent[0] = coordinate[0];\n }\n if (coordinate[0] > extent[2]) {\n extent[2] = coordinate[0];\n }\n if (coordinate[1] < extent[1]) {\n extent[1] = coordinate[1];\n }\n if (coordinate[1] > extent[3]) {\n extent[3] = coordinate[1];\n }\n}\n\n\n/**\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {Array} coordinates Coordinates.\n * @return {module:ol/extent~Extent} Extent.\n */\nexport function extendCoordinates(extent, coordinates) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n\n/**\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {module:ol/extent~Extent} Extent.\n */\nexport function extendFlatCoordinates(extent, flatCoordinates, offset, end, stride) {\n for (; offset < end; offset += stride) {\n extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n }\n return extent;\n}\n\n\n/**\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {Array>} rings Rings.\n * @return {module:ol/extent~Extent} Extent.\n */\nexport function extendRings(extent, rings) {\n for (let i = 0, ii = rings.length; i < ii; ++i) {\n extendCoordinates(extent, rings[i]);\n }\n return extent;\n}\n\n\n/**\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nexport function extendXY(extent, x, y) {\n extent[0] = Math.min(extent[0], x);\n extent[1] = Math.min(extent[1], y);\n extent[2] = Math.max(extent[2], x);\n extent[3] = Math.max(extent[3], y);\n}\n\n\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {function(this:T, module:ol/coordinate~Coordinate): S} callback Callback.\n * @param {T=} opt_this Value to use as `this` when executing `callback`.\n * @return {S|boolean} Value.\n * @template S, T\n */\nexport function forEachCorner(extent, callback, opt_this) {\n let val;\n val = callback.call(opt_this, getBottomLeft(extent));\n if (val) {\n return val;\n }\n val = callback.call(opt_this, getBottomRight(extent));\n if (val) {\n return val;\n }\n val = callback.call(opt_this, getTopRight(extent));\n if (val) {\n return val;\n }\n val = callback.call(opt_this, getTopLeft(extent));\n if (val) {\n return val;\n }\n return false;\n}\n\n\n/**\n * Get the size of an extent.\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nexport function getArea(extent) {\n let area = 0;\n if (!isEmpty(extent)) {\n area = getWidth(extent) * getHeight(extent);\n }\n return area;\n}\n\n\n/**\n * Get the bottom left coordinate of an extent.\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {module:ol/coordinate~Coordinate} Bottom left coordinate.\n * @api\n */\nexport function getBottomLeft(extent) {\n return [extent[0], extent[1]];\n}\n\n\n/**\n * Get the bottom right coordinate of an extent.\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {module:ol/coordinate~Coordinate} Bottom right coordinate.\n * @api\n */\nexport function getBottomRight(extent) {\n return [extent[2], extent[1]];\n}\n\n\n/**\n * Get the center coordinate of an extent.\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {module:ol/coordinate~Coordinate} Center.\n * @api\n */\nexport function getCenter(extent) {\n return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n}\n\n\n/**\n * Get a corner coordinate of an extent.\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {module:ol/extent/Corner} corner Corner.\n * @return {module:ol/coordinate~Coordinate} Corner coordinate.\n */\nexport function getCorner(extent, corner) {\n let coordinate;\n if (corner === Corner.BOTTOM_LEFT) {\n coordinate = getBottomLeft(extent);\n } else if (corner === Corner.BOTTOM_RIGHT) {\n coordinate = getBottomRight(extent);\n } else if (corner === Corner.TOP_LEFT) {\n coordinate = getTopLeft(extent);\n } else if (corner === Corner.TOP_RIGHT) {\n coordinate = getTopRight(extent);\n } else {\n assert(false, 13); // Invalid corner\n }\n return (\n /** @type {!module:ol/coordinate~Coordinate} */ (coordinate)\n );\n}\n\n\n/**\n * @param {module:ol/extent~Extent} extent1 Extent 1.\n * @param {module:ol/extent~Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nexport function getEnlargedArea(extent1, extent2) {\n const minX = Math.min(extent1[0], extent2[0]);\n const minY = Math.min(extent1[1], extent2[1]);\n const maxX = Math.max(extent1[2], extent2[2]);\n const maxY = Math.max(extent1[3], extent2[3]);\n return (maxX - minX) * (maxY - minY);\n}\n\n\n/**\n * @param {module:ol/coordinate~Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {module:ol/size~Size} size Size.\n * @param {module:ol/extent~Extent=} opt_extent Destination extent.\n * @return {module:ol/extent~Extent} Extent.\n */\nexport function getForViewAndSize(center, resolution, rotation, size, opt_extent) {\n const dx = resolution * size[0] / 2;\n const dy = resolution * size[1] / 2;\n const cosRotation = Math.cos(rotation);\n const sinRotation = Math.sin(rotation);\n const xCos = dx * cosRotation;\n const xSin = dx * sinRotation;\n const yCos = dy * cosRotation;\n const ySin = dy * sinRotation;\n const x = center[0];\n const y = center[1];\n const x0 = x - xCos + ySin;\n const x1 = x - xCos - ySin;\n const x2 = x + xCos - ySin;\n const x3 = x + xCos + ySin;\n const y0 = y - xSin - yCos;\n const y1 = y - xSin + yCos;\n const y2 = y + xSin + yCos;\n const y3 = y + xSin - yCos;\n return createOrUpdate(\n Math.min(x0, x1, x2, x3), Math.min(y0, y1, y2, y3),\n Math.max(x0, x1, x2, x3), Math.max(y0, y1, y2, y3),\n opt_extent);\n}\n\n\n/**\n * Get the height of an extent.\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nexport function getHeight(extent) {\n return extent[3] - extent[1];\n}\n\n\n/**\n * @param {module:ol/extent~Extent} extent1 Extent 1.\n * @param {module:ol/extent~Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nexport function getIntersectionArea(extent1, extent2) {\n const intersection = getIntersection(extent1, extent2);\n return getArea(intersection);\n}\n\n\n/**\n * Get the intersection of two extents.\n * @param {module:ol/extent~Extent} extent1 Extent 1.\n * @param {module:ol/extent~Extent} extent2 Extent 2.\n * @param {module:ol/extent~Extent=} opt_extent Optional extent to populate with intersection.\n * @return {module:ol/extent~Extent} Intersecting extent.\n * @api\n */\nexport function getIntersection(extent1, extent2, opt_extent) {\n const intersection = opt_extent ? opt_extent : createEmpty();\n if (intersects(extent1, extent2)) {\n if (extent1[0] > extent2[0]) {\n intersection[0] = extent1[0];\n } else {\n intersection[0] = extent2[0];\n }\n if (extent1[1] > extent2[1]) {\n intersection[1] = extent1[1];\n } else {\n intersection[1] = extent2[1];\n }\n if (extent1[2] < extent2[2]) {\n intersection[2] = extent1[2];\n } else {\n intersection[2] = extent2[2];\n }\n if (extent1[3] < extent2[3]) {\n intersection[3] = extent1[3];\n } else {\n intersection[3] = extent2[3];\n }\n } else {\n createOrUpdateEmpty(intersection);\n }\n return intersection;\n}\n\n\n/**\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {number} Margin.\n */\nexport function getMargin(extent) {\n return getWidth(extent) + getHeight(extent);\n}\n\n\n/**\n * Get the size (width, height) of an extent.\n * @param {module:ol/extent~Extent} extent The extent.\n * @return {module:ol/size~Size} The extent size.\n * @api\n */\nexport function getSize(extent) {\n return [extent[2] - extent[0], extent[3] - extent[1]];\n}\n\n\n/**\n * Get the top left coordinate of an extent.\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {module:ol/coordinate~Coordinate} Top left coordinate.\n * @api\n */\nexport function getTopLeft(extent) {\n return [extent[0], extent[3]];\n}\n\n\n/**\n * Get the top right coordinate of an extent.\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {module:ol/coordinate~Coordinate} Top right coordinate.\n * @api\n */\nexport function getTopRight(extent) {\n return [extent[2], extent[3]];\n}\n\n\n/**\n * Get the width of an extent.\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nexport function getWidth(extent) {\n return extent[2] - extent[0];\n}\n\n\n/**\n * Determine if one extent intersects another.\n * @param {module:ol/extent~Extent} extent1 Extent 1.\n * @param {module:ol/extent~Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nexport function intersects(extent1, extent2) {\n return extent1[0] <= extent2[2] &&\n extent1[2] >= extent2[0] &&\n extent1[1] <= extent2[3] &&\n extent1[3] >= extent2[1];\n}\n\n\n/**\n * Determine if an extent is empty.\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nexport function isEmpty(extent) {\n return extent[2] < extent[0] || extent[3] < extent[1];\n}\n\n\n/**\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {module:ol/extent~Extent=} opt_extent Extent.\n * @return {module:ol/extent~Extent} Extent.\n */\nexport function returnOrUpdate(extent, opt_extent) {\n if (opt_extent) {\n opt_extent[0] = extent[0];\n opt_extent[1] = extent[1];\n opt_extent[2] = extent[2];\n opt_extent[3] = extent[3];\n return opt_extent;\n } else {\n return extent;\n }\n}\n\n\n/**\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {number} value Value.\n */\nexport function scaleFromCenter(extent, value) {\n const deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);\n const deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);\n extent[0] -= deltaX;\n extent[2] += deltaX;\n extent[1] -= deltaY;\n extent[3] += deltaY;\n}\n\n\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {module:ol/extent~Extent} extent The extent.\n * @param {module:ol/coordinate~Coordinate} start Segment start coordinate.\n * @param {module:ol/coordinate~Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nexport function intersectsSegment(extent, start, end) {\n let intersects = false;\n const startRel = coordinateRelationship(extent, start);\n const endRel = coordinateRelationship(extent, end);\n if (startRel === Relationship.INTERSECTING ||\n endRel === Relationship.INTERSECTING) {\n intersects = true;\n } else {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const startX = start[0];\n const startY = start[1];\n const endX = end[0];\n const endY = end[1];\n const slope = (endY - startY) / (endX - startX);\n let x, y;\n if (!!(endRel & Relationship.ABOVE) &&\n !(startRel & Relationship.ABOVE)) {\n // potentially intersects top\n x = endX - ((endY - maxY) / slope);\n intersects = x >= minX && x <= maxX;\n }\n if (!intersects && !!(endRel & Relationship.RIGHT) &&\n !(startRel & Relationship.RIGHT)) {\n // potentially intersects right\n y = endY - ((endX - maxX) * slope);\n intersects = y >= minY && y <= maxY;\n }\n if (!intersects && !!(endRel & Relationship.BELOW) &&\n !(startRel & Relationship.BELOW)) {\n // potentially intersects bottom\n x = endX - ((endY - minY) / slope);\n intersects = x >= minX && x <= maxX;\n }\n if (!intersects && !!(endRel & Relationship.LEFT) &&\n !(startRel & Relationship.LEFT)) {\n // potentially intersects left\n y = endY - ((endX - minX) * slope);\n intersects = y >= minY && y <= maxY;\n }\n\n }\n return intersects;\n}\n\n\n/**\n * Apply a transform function to the extent.\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {module:ol/proj~TransformFunction} transformFn Transform function.\n * Called with `[minX, minY, maxX, maxY]` extent coordinates.\n * @param {module:ol/extent~Extent=} opt_extent Destination extent.\n * @return {module:ol/extent~Extent} Extent.\n * @api\n */\nexport function applyTransform(extent, transformFn, opt_extent) {\n const coordinates = [\n extent[0], extent[1],\n extent[0], extent[3],\n extent[2], extent[1],\n extent[2], extent[3]\n ];\n transformFn(coordinates, coordinates, 2);\n const xs = [coordinates[0], coordinates[2], coordinates[4], coordinates[6]];\n const ys = [coordinates[1], coordinates[3], coordinates[5], coordinates[7]];\n return _boundingExtentXYs(xs, ys, opt_extent);\n}\n","/**\n * @module ol/events\n */\nimport {clear} from './obj.js';\n\n\n/**\n * Key to use with {@link module:ol/Observable~Observable#unByKey}.\n * @typedef {Object} EventsKey\n * @property {Object} [bindTo]\n * @property {module:ol/events~ListenerFunction} [boundListener]\n * @property {boolean} callOnce\n * @property {number} [deleteIndex]\n * @property {module:ol/events~ListenerFunction} listener\n * @property {module:ol/events/Target~EventTargetLike} target\n * @property {string} type\n * @api\n */\n\n\n/**\n * Listener function. This function is called with an event object as argument.\n * When the function returns `false`, event propagation will stop.\n *\n * @typedef {function(module:ol/events/Event)|function(module:ol/events/Event): boolean} ListenerFunction\n * @api\n */\n\n\n/**\n * @param {module:ol/events~EventsKey} listenerObj Listener object.\n * @return {module:ol/events~ListenerFunction} Bound listener.\n */\nexport function bindListener(listenerObj) {\n const boundListener = function(evt) {\n const listener = listenerObj.listener;\n const bindTo = listenerObj.bindTo || listenerObj.target;\n if (listenerObj.callOnce) {\n unlistenByKey(listenerObj);\n }\n return listener.call(bindTo, evt);\n };\n listenerObj.boundListener = boundListener;\n return boundListener;\n}\n\n\n/**\n * Finds the matching {@link module:ol/events~EventsKey} in the given listener\n * array.\n *\n * @param {!Array} listeners Array of listeners.\n * @param {!Function} listener The listener function.\n * @param {Object=} opt_this The `this` value inside the listener.\n * @param {boolean=} opt_setDeleteIndex Set the deleteIndex on the matching\n * listener, for {@link module:ol/events~unlistenByKey}.\n * @return {module:ol/events~EventsKey|undefined} The matching listener object.\n */\nexport function findListener(listeners, listener, opt_this, opt_setDeleteIndex) {\n let listenerObj;\n for (let i = 0, ii = listeners.length; i < ii; ++i) {\n listenerObj = listeners[i];\n if (listenerObj.listener === listener &&\n listenerObj.bindTo === opt_this) {\n if (opt_setDeleteIndex) {\n listenerObj.deleteIndex = i;\n }\n return listenerObj;\n }\n }\n return undefined;\n}\n\n\n/**\n * @param {module:ol/events/Target~EventTargetLike} target Target.\n * @param {string} type Type.\n * @return {Array|undefined} Listeners.\n */\nexport function getListeners(target, type) {\n const listenerMap = target.ol_lm;\n return listenerMap ? listenerMap[type] : undefined;\n}\n\n\n/**\n * Get the lookup of listeners. If one does not exist on the target, it is\n * created.\n * @param {module:ol/events/Target~EventTargetLike} target Target.\n * @return {!Object>} Map of\n * listeners by event type.\n */\nfunction getListenerMap(target) {\n let listenerMap = target.ol_lm;\n if (!listenerMap) {\n listenerMap = target.ol_lm = {};\n }\n return listenerMap;\n}\n\n\n/**\n * Clean up all listener objects of the given type. All properties on the\n * listener objects will be removed, and if no listeners remain in the listener\n * map, it will be removed from the target.\n * @param {module:ol/events/Target~EventTargetLike} target Target.\n * @param {string} type Type.\n */\nfunction removeListeners(target, type) {\n const listeners = getListeners(target, type);\n if (listeners) {\n for (let i = 0, ii = listeners.length; i < ii; ++i) {\n target.removeEventListener(type, listeners[i].boundListener);\n clear(listeners[i]);\n }\n listeners.length = 0;\n const listenerMap = target.ol_lm;\n if (listenerMap) {\n delete listenerMap[type];\n if (Object.keys(listenerMap).length === 0) {\n delete target.ol_lm;\n }\n }\n }\n}\n\n\n/**\n * Registers an event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` to a `this` object, and returns\n * a key for use with {@link module:ol/events~unlistenByKey}.\n *\n * @param {module:ol/events/Target~EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {module:ol/events~ListenerFunction} listener Listener.\n * @param {Object=} opt_this Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @param {boolean=} opt_once If true, add the listener as one-off listener.\n * @return {module:ol/events~EventsKey} Unique key for the listener.\n */\nexport function listen(target, type, listener, opt_this, opt_once) {\n const listenerMap = getListenerMap(target);\n let listeners = listenerMap[type];\n if (!listeners) {\n listeners = listenerMap[type] = [];\n }\n let listenerObj = findListener(listeners, listener, opt_this, false);\n if (listenerObj) {\n if (!opt_once) {\n // Turn one-off listener into a permanent one.\n listenerObj.callOnce = false;\n }\n } else {\n listenerObj = /** @type {module:ol/events~EventsKey} */ ({\n bindTo: opt_this,\n callOnce: !!opt_once,\n listener: listener,\n target: target,\n type: type\n });\n target.addEventListener(type, bindListener(listenerObj));\n listeners.push(listenerObj);\n }\n\n return listenerObj;\n}\n\n\n/**\n * Registers a one-off event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` as self-unregistering listener\n * to a `this` object, and returns a key for use with\n * {@link module:ol/events~unlistenByKey} in case the listener needs to be\n * unregistered before it is called.\n *\n * When {@link module:ol/events~listen} is called with the same arguments after this\n * function, the self-unregistering listener will be turned into a permanent\n * listener.\n *\n * @param {module:ol/events/Target~EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {module:ol/events~ListenerFunction} listener Listener.\n * @param {Object=} opt_this Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @return {module:ol/events~EventsKey} Key for unlistenByKey.\n */\nexport function listenOnce(target, type, listener, opt_this) {\n return listen(target, type, listener, opt_this, true);\n}\n\n\n/**\n * Unregisters an event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * To return a listener, this function needs to be called with the exact same\n * arguments that were used for a previous {@link module:ol/events~listen} call.\n *\n * @param {module:ol/events/Target~EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {module:ol/events~ListenerFunction} listener Listener.\n * @param {Object=} opt_this Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n */\nexport function unlisten(target, type, listener, opt_this) {\n const listeners = getListeners(target, type);\n if (listeners) {\n const listenerObj = findListener(listeners, listener, opt_this, true);\n if (listenerObj) {\n unlistenByKey(listenerObj);\n }\n }\n}\n\n\n/**\n * Unregisters event listeners on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * The argument passed to this function is the key returned from\n * {@link module:ol/events~listen} or {@link module:ol/events~listenOnce}.\n *\n * @param {module:ol/events~EventsKey} key The key.\n */\nexport function unlistenByKey(key) {\n if (key && key.target) {\n key.target.removeEventListener(key.type, key.boundListener);\n const listeners = getListeners(key.target, key.type);\n if (listeners) {\n const i = 'deleteIndex' in key ? key.deleteIndex : listeners.indexOf(key);\n if (i !== -1) {\n listeners.splice(i, 1);\n }\n if (listeners.length === 0) {\n removeListeners(key.target, key.type);\n }\n }\n clear(key);\n }\n}\n\n\n/**\n * Unregisters all event listeners on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * @param {module:ol/events/Target~EventTargetLike} target Target.\n */\nexport function unlistenAll(target) {\n const listenerMap = getListenerMap(target);\n for (const type in listenerMap) {\n removeListeners(target, type);\n }\n}\n","/**\n * @module ol/geom/GeometryType\n */\n\n/**\n * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'`, `'MultiLineString'`, `'MultiPolygon'`,\n * `'GeometryCollection'`, `'Circle'`.\n * @enum {string}\n */\nexport default {\n POINT: 'Point',\n LINE_STRING: 'LineString',\n LINEAR_RING: 'LinearRing',\n POLYGON: 'Polygon',\n MULTI_POINT: 'MultiPoint',\n MULTI_LINE_STRING: 'MultiLineString',\n MULTI_POLYGON: 'MultiPolygon',\n GEOMETRY_COLLECTION: 'GeometryCollection',\n CIRCLE: 'Circle'\n};\n","/**\n * @module ol/TileState\n */\n\n/**\n * @enum {number}\n */\nexport default {\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n /**\n * Indicates that tile loading failed\n * @type {number}\n * @api\n */\n ERROR: 3,\n EMPTY: 4,\n ABORT: 5\n};\n","/**\n * @module ol/events/EventType\n */\n\n/**\n * @enum {string}\n * @const\n */\nexport default {\n /**\n * Generic change event. Triggered when the revision counter is increased.\n * @event module:ol/events/Event~Event#change\n * @api\n */\n CHANGE: 'change',\n\n CLEAR: 'clear',\n CONTEXTMENU: 'contextmenu',\n CLICK: 'click',\n DBLCLICK: 'dblclick',\n DRAGENTER: 'dragenter',\n DRAGOVER: 'dragover',\n DROP: 'drop',\n ERROR: 'error',\n KEYDOWN: 'keydown',\n KEYPRESS: 'keypress',\n LOAD: 'load',\n MOUSEDOWN: 'mousedown',\n MOUSEMOVE: 'mousemove',\n MOUSEOUT: 'mouseout',\n MOUSEUP: 'mouseup',\n MOUSEWHEEL: 'mousewheel',\n MSPOINTERDOWN: 'MSPointerDown',\n RESIZE: 'resize',\n TOUCHSTART: 'touchstart',\n TOUCHMOVE: 'touchmove',\n TOUCHEND: 'touchend',\n WHEEL: 'wheel'\n};\n","/**\n * @module ol/render/canvas\n */\nimport {getFontFamilies} from '../css.js';\nimport {createCanvasContext2D} from '../dom.js';\nimport {clear} from '../obj.js';\nimport LRUCache from '../structs/LRUCache.js';\nimport {create as createTransform} from '../transform.js';\n\n\n/**\n * @typedef {Object} FillState\n * @property {module:ol/colorlike~ColorLike} fillStyle\n */\n\n\n/**\n * @typedef {Object} FillStrokeState\n * @property {module:ol/colorlike~ColorLike} [currentFillStyle]\n * @property {module:ol/colorlike~ColorLike} [currentStrokeStyle]\n * @property {string} [currentLineCap]\n * @property {Array} currentLineDash\n * @property {number} [currentLineDashOffset]\n * @property {string} [currentLineJoin]\n * @property {number} [currentLineWidth]\n * @property {number} [currentMiterLimit]\n * @property {number} [lastStroke]\n * @property {module:ol/colorlike~ColorLike} [fillStyle]\n * @property {module:ol/colorlike~ColorLike} [strokeStyle]\n * @property {string} [lineCap]\n * @property {Array} lineDash\n * @property {number} [lineDashOffset]\n * @property {string} [lineJoin]\n * @property {number} [lineWidth]\n * @property {number} [miterLimit]\n */\n\n\n/**\n * @typedef {Object} StrokeState\n * @property {string} lineCap\n * @property {Array} lineDash\n * @property {number} lineDashOffset\n * @property {string} lineJoin\n * @property {number} lineWidth\n * @property {number} miterLimit\n * @property {module:ol/colorlike~ColorLike} strokeStyle\n */\n\n\n/**\n * @typedef {Object} TextState\n * @property {string} font\n * @property {string} [textAlign]\n * @property {string} textBaseline\n */\n\n\n/**\n * Container for decluttered replay instructions that need to be rendered or\n * omitted together, i.e. when styles render both an image and text, or for the\n * characters that form text along lines. The basic elements of this array are\n * `[minX, minY, maxX, maxY, count]`, where the first four entries are the\n * rendered extent of the group in pixel space. `count` is the number of styles\n * in the group, i.e. 2 when an image and a text are grouped, or 1 otherwise.\n * In addition to these four elements, declutter instruction arrays (i.e. the\n * arguments to {@link module:ol/render/canvas~drawImage} are appended to the array.\n * @typedef {Array<*>} DeclutterGroup\n */\n\n\n/**\n * @const\n * @type {string}\n */\nexport const defaultFont = '10px sans-serif';\n\n\n/**\n * @const\n * @type {module:ol/color~Color}\n */\nexport const defaultFillStyle = [0, 0, 0, 1];\n\n\n/**\n * @const\n * @type {string}\n */\nexport const defaultLineCap = 'round';\n\n\n/**\n * @const\n * @type {Array}\n */\nexport const defaultLineDash = [];\n\n\n/**\n * @const\n * @type {number}\n */\nexport const defaultLineDashOffset = 0;\n\n\n/**\n * @const\n * @type {string}\n */\nexport const defaultLineJoin = 'round';\n\n\n/**\n * @const\n * @type {number}\n */\nexport const defaultMiterLimit = 10;\n\n\n/**\n * @const\n * @type {module:ol/color~Color}\n */\nexport const defaultStrokeStyle = [0, 0, 0, 1];\n\n\n/**\n * @const\n * @type {string}\n */\nexport const defaultTextAlign = 'center';\n\n\n/**\n * @const\n * @type {string}\n */\nexport const defaultTextBaseline = 'middle';\n\n\n/**\n * @const\n * @type {Array}\n */\nexport const defaultPadding = [0, 0, 0, 0];\n\n\n/**\n * @const\n * @type {number}\n */\nexport const defaultLineWidth = 1;\n\n\n/**\n * The label cache for text rendering. To change the default cache size of 2048\n * entries, use {@link module:ol/structs/LRUCache#setSize}.\n * @type {module:ol/structs/LRUCache}\n * @api\n */\nexport const labelCache = new LRUCache();\n\n\n/**\n * @type {!Object}\n */\nexport const checkedFonts = {};\n\n\n/**\n * @type {CanvasRenderingContext2D}\n */\nlet measureContext = null;\n\n\n/**\n * @type {!Object}\n */\nexport const textHeights = {};\n\n\n/**\n * Clears the label cache when a font becomes available.\n * @param {string} fontSpec CSS font spec.\n */\nexport const checkFont = (function() {\n const retries = 60;\n const checked = checkedFonts;\n const size = '32px ';\n const referenceFonts = ['monospace', 'serif'];\n const len = referenceFonts.length;\n const text = 'wmytzilWMYTZIL@#/&?$%10\\uF013';\n let interval, referenceWidth;\n\n function isAvailable(font) {\n const context = getMeasureContext();\n // Check weight ranges according to\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight#Fallback_weights\n for (let weight = 100; weight <= 700; weight += 300) {\n const fontWeight = weight + ' ';\n let available = true;\n for (let i = 0; i < len; ++i) {\n const referenceFont = referenceFonts[i];\n context.font = fontWeight + size + referenceFont;\n referenceWidth = context.measureText(text).width;\n if (font != referenceFont) {\n context.font = fontWeight + size + font + ',' + referenceFont;\n const width = context.measureText(text).width;\n // If width and referenceWidth are the same, then the fallback was used\n // instead of the font we wanted, so the font is not available.\n available = available && width != referenceWidth;\n }\n }\n if (available) {\n // Consider font available when it is available in one weight range.\n //FIXME With this we miss rare corner cases, so we should consider\n //FIXME checking availability for each requested weight range.\n return true;\n }\n }\n return false;\n }\n\n function check() {\n let done = true;\n for (const font in checked) {\n if (checked[font] < retries) {\n if (isAvailable(font)) {\n checked[font] = retries;\n clear(textHeights);\n // Make sure that loaded fonts are picked up by Safari\n measureContext = null;\n labelCache.clear();\n } else {\n ++checked[font];\n done = false;\n }\n }\n }\n if (done) {\n clearInterval(interval);\n interval = undefined;\n }\n }\n\n return function(fontSpec) {\n const fontFamilies = getFontFamilies(fontSpec);\n if (!fontFamilies) {\n return;\n }\n for (let i = 0, ii = fontFamilies.length; i < ii; ++i) {\n const fontFamily = fontFamilies[i];\n if (!(fontFamily in checked)) {\n checked[fontFamily] = retries;\n if (!isAvailable(fontFamily)) {\n checked[fontFamily] = 0;\n if (interval === undefined) {\n interval = setInterval(check, 32);\n }\n }\n }\n }\n };\n})();\n\n\n/**\n * @return {CanvasRenderingContext2D} Measure context.\n */\nfunction getMeasureContext() {\n if (!measureContext) {\n measureContext = createCanvasContext2D(1, 1);\n }\n return measureContext;\n}\n\n\n/**\n * @param {string} font Font to use for measuring.\n * @return {module:ol/size~Size} Measurement.\n */\nexport const measureTextHeight = (function() {\n let span;\n const heights = textHeights;\n return function(font) {\n let height = heights[font];\n if (height == undefined) {\n if (!span) {\n span = document.createElement('span');\n span.textContent = 'M';\n span.style.margin = span.style.padding = '0 !important';\n span.style.position = 'absolute !important';\n span.style.left = '-99999px !important';\n }\n span.style.font = font;\n document.body.appendChild(span);\n height = heights[font] = span.offsetHeight;\n document.body.removeChild(span);\n }\n return height;\n };\n})();\n\n\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {number} Width.\n */\nexport function measureTextWidth(font, text) {\n const measureContext = getMeasureContext();\n if (font != measureContext.font) {\n measureContext.font = font;\n }\n return measureContext.measureText(text).width;\n}\n\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} rotation Rotation.\n * @param {number} offsetX X offset.\n * @param {number} offsetY Y offset.\n */\nexport function rotateAtOffset(context, rotation, offsetX, offsetY) {\n if (rotation !== 0) {\n context.translate(offsetX, offsetY);\n context.rotate(rotation);\n context.translate(-offsetX, -offsetY);\n }\n}\n\n\nexport const resetTransform = createTransform();\n\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {module:ol/transform~Transform|null} transform Transform.\n * @param {number} opacity Opacity.\n * @param {HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} image Image.\n * @param {number} originX Origin X.\n * @param {number} originY Origin Y.\n * @param {number} w Width.\n * @param {number} h Height.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} scale Scale.\n */\nexport function drawImage(context,\n transform, opacity, image, originX, originY, w, h, x, y, scale) {\n let alpha;\n if (opacity != 1) {\n alpha = context.globalAlpha;\n context.globalAlpha = alpha * opacity;\n }\n if (transform) {\n context.setTransform.apply(context, transform);\n }\n\n context.drawImage(image, originX, originY, w, h, x, y, w * scale, h * scale);\n\n if (alpha) {\n context.globalAlpha = alpha;\n }\n if (transform) {\n context.setTransform.apply(context, resetTransform);\n }\n}\n","/**\n * @module ol/util\n */\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * Usage:\n *\n * function ParentClass(a, b) { }\n * ParentClass.prototype.foo = function(a) { }\n *\n * function ChildClass(a, b, c) {\n * // Call parent constructor\n * ParentClass.call(this, a, b);\n * }\n * inherits(ChildClass, ParentClass);\n *\n * var child = new ChildClass('a', 'b', 'see');\n * child.foo(); // This works.\n *\n * @param {!Function} childCtor Child constructor.\n * @param {!Function} parentCtor Parent constructor.\n * @function module:ol.inherits\n * @deprecated\n * @api\n */\nexport function inherits(childCtor, parentCtor) {\n childCtor.prototype = Object.create(parentCtor.prototype);\n childCtor.prototype.constructor = childCtor;\n}\n\n/**\n * Counter for getUid.\n * @type {number}\n * @private\n */\nlet uidCounter_ = 0;\n\n/**\n * Gets a unique ID for an object. This mutates the object so that further calls\n * with the same object as a parameter returns the same value. Unique IDs are generated\n * as a strictly increasing sequence. Adapted from goog.getUid.\n *\n * @param {Object} obj The object to get the unique ID for.\n * @return {number} The unique ID for the object.\n * @api\n */\nexport function getUid(obj) {\n return obj.ol_uid || (obj.ol_uid = ++uidCounter_);\n}\n\n/**\n * OpenLayers version.\n * @type {string}\n */\nexport const VERSION = 'latest';\n","/**\n * @module ol/math\n */\nimport {assert} from './asserts.js';\n\n/**\n * Takes a number and clamps it to within the provided bounds.\n * @param {number} value The input number.\n * @param {number} min The minimum value to return.\n * @param {number} max The maximum value to return.\n * @return {number} The input number if it is within bounds, or the nearest\n * number within the bounds.\n */\nexport function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n\n\n/**\n * Return the hyperbolic cosine of a given number. The method will use the\n * native `Math.cosh` function if it is available, otherwise the hyperbolic\n * cosine will be calculated via the reference implementation of the Mozilla\n * developer network.\n *\n * @param {number} x X.\n * @return {number} Hyperbolic cosine of x.\n */\nexport const cosh = (function() {\n // Wrapped in a iife, to save the overhead of checking for the native\n // implementation on every invocation.\n let cosh;\n if ('cosh' in Math) {\n // The environment supports the native Math.cosh function, use it…\n cosh = Math.cosh;\n } else {\n // … else, use the reference implementation of MDN:\n cosh = function(x) {\n const y = Math.exp(x);\n return (y + 1 / y) / 2;\n };\n }\n return cosh;\n}());\n\n\n/**\n * @param {number} x X.\n * @return {number} The smallest power of two greater than or equal to x.\n */\nexport function roundUpToPowerOfTwo(x) {\n assert(0 < x, 29); // `x` must be greater than `0`\n return Math.pow(2, Math.ceil(Math.log(x) / Math.LN2));\n}\n\n\n/**\n * Returns the square of the closest distance between the point (x, y) and the\n * line segment (x1, y1) to (x2, y2).\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredSegmentDistance(x, y, x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n if (dx !== 0 || dy !== 0) {\n const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n x1 = x2;\n y1 = y2;\n } else if (t > 0) {\n x1 += dx * t;\n y1 += dy * t;\n }\n }\n return squaredDistance(x, y, x1, y1);\n}\n\n\n/**\n * Returns the square of the distance between the points (x1, y1) and (x2, y2).\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredDistance(x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n return dx * dx + dy * dy;\n}\n\n\n/**\n * Solves system of linear equations using Gaussian elimination method.\n *\n * @param {Array>} mat Augmented matrix (n x n + 1 column)\n * in row-major order.\n * @return {Array} The resulting vector.\n */\nexport function solveLinearSystem(mat) {\n const n = mat.length;\n\n for (let i = 0; i < n; i++) {\n // Find max in the i-th column (ignoring i - 1 first rows)\n let maxRow = i;\n let maxEl = Math.abs(mat[i][i]);\n for (let r = i + 1; r < n; r++) {\n const absValue = Math.abs(mat[r][i]);\n if (absValue > maxEl) {\n maxEl = absValue;\n maxRow = r;\n }\n }\n\n if (maxEl === 0) {\n return null; // matrix is singular\n }\n\n // Swap max row with i-th (current) row\n const tmp = mat[maxRow];\n mat[maxRow] = mat[i];\n mat[i] = tmp;\n\n // Subtract the i-th row to make all the remaining rows 0 in the i-th column\n for (let j = i + 1; j < n; j++) {\n const coef = -mat[j][i] / mat[i][i];\n for (let k = i; k < n + 1; k++) {\n if (i == k) {\n mat[j][k] = 0;\n } else {\n mat[j][k] += coef * mat[i][k];\n }\n }\n }\n }\n\n // Solve Ax=b for upper triangular matrix A (mat)\n const x = new Array(n);\n for (let l = n - 1; l >= 0; l--) {\n x[l] = mat[l][n] / mat[l][l];\n for (let m = l - 1; m >= 0; m--) {\n mat[m][n] -= mat[m][l] * x[l];\n }\n }\n return x;\n}\n\n\n/**\n * Converts radians to to degrees.\n *\n * @param {number} angleInRadians Angle in radians.\n * @return {number} Angle in degrees.\n */\nexport function toDegrees(angleInRadians) {\n return angleInRadians * 180 / Math.PI;\n}\n\n\n/**\n * Converts degrees to radians.\n *\n * @param {number} angleInDegrees Angle in degrees.\n * @return {number} Angle in radians.\n */\nexport function toRadians(angleInDegrees) {\n return angleInDegrees * Math.PI / 180;\n}\n\n/**\n * Returns the modulo of a / b, depending on the sign of b.\n *\n * @param {number} a Dividend.\n * @param {number} b Divisor.\n * @return {number} Modulo.\n */\nexport function modulo(a, b) {\n const r = a % b;\n return r * b < 0 ? r + b : r;\n}\n\n/**\n * Calculates the linearly interpolated value of x between a and b.\n *\n * @param {number} a Number\n * @param {number} b Number\n * @param {number} x Value to be interpolated.\n * @return {number} Interpolated value.\n */\nexport function lerp(a, b, x) {\n return a + x * (b - a);\n}\n","/**\n * @module ol/transform\n */\nimport {assert} from './asserts.js';\n\n\n/**\n * An array representing an affine 2d transformation for use with\n * {@link module:ol/transform} functions. The array has 6 elements.\n * @typedef {!Array} Transform\n */\n\n\n/**\n * Collection of affine 2d transformation functions. The functions work on an\n * array of 6 elements. The element order is compatible with the [SVGMatrix\n * interface](https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix) and is\n * a subset (elements a to f) of a 3×3 matrix:\n * ```\n * [ a c e ]\n * [ b d f ]\n * [ 0 0 1 ]\n * ```\n */\n\n\n/**\n * @private\n * @type {module:ol/transform~Transform}\n */\nconst tmp_ = new Array(6);\n\n\n/**\n * Create an identity transform.\n * @return {!module:ol/transform~Transform} Identity transform.\n */\nexport function create() {\n return [1, 0, 0, 1, 0, 0];\n}\n\n\n/**\n * Resets the given transform to an identity transform.\n * @param {!module:ol/transform~Transform} transform Transform.\n * @return {!module:ol/transform~Transform} Transform.\n */\nexport function reset(transform) {\n return set(transform, 1, 0, 0, 1, 0, 0);\n}\n\n\n/**\n * Multiply the underlying matrices of two transforms and return the result in\n * the first transform.\n * @param {!module:ol/transform~Transform} transform1 Transform parameters of matrix 1.\n * @param {!module:ol/transform~Transform} transform2 Transform parameters of matrix 2.\n * @return {!module:ol/transform~Transform} transform1 multiplied with transform2.\n */\nexport function multiply(transform1, transform2) {\n const a1 = transform1[0];\n const b1 = transform1[1];\n const c1 = transform1[2];\n const d1 = transform1[3];\n const e1 = transform1[4];\n const f1 = transform1[5];\n const a2 = transform2[0];\n const b2 = transform2[1];\n const c2 = transform2[2];\n const d2 = transform2[3];\n const e2 = transform2[4];\n const f2 = transform2[5];\n\n transform1[0] = a1 * a2 + c1 * b2;\n transform1[1] = b1 * a2 + d1 * b2;\n transform1[2] = a1 * c2 + c1 * d2;\n transform1[3] = b1 * c2 + d1 * d2;\n transform1[4] = a1 * e2 + c1 * f2 + e1;\n transform1[5] = b1 * e2 + d1 * f2 + f1;\n\n return transform1;\n}\n\n/**\n * Set the transform components a-f on a given transform.\n * @param {!module:ol/transform~Transform} transform Transform.\n * @param {number} a The a component of the transform.\n * @param {number} b The b component of the transform.\n * @param {number} c The c component of the transform.\n * @param {number} d The d component of the transform.\n * @param {number} e The e component of the transform.\n * @param {number} f The f component of the transform.\n * @return {!module:ol/transform~Transform} Matrix with transform applied.\n */\nexport function set(transform, a, b, c, d, e, f) {\n transform[0] = a;\n transform[1] = b;\n transform[2] = c;\n transform[3] = d;\n transform[4] = e;\n transform[5] = f;\n return transform;\n}\n\n\n/**\n * Set transform on one matrix from another matrix.\n * @param {!module:ol/transform~Transform} transform1 Matrix to set transform to.\n * @param {!module:ol/transform~Transform} transform2 Matrix to set transform from.\n * @return {!module:ol/transform~Transform} transform1 with transform from transform2 applied.\n */\nexport function setFromArray(transform1, transform2) {\n transform1[0] = transform2[0];\n transform1[1] = transform2[1];\n transform1[2] = transform2[2];\n transform1[3] = transform2[3];\n transform1[4] = transform2[4];\n transform1[5] = transform2[5];\n return transform1;\n}\n\n\n/**\n * Transforms the given coordinate with the given transform returning the\n * resulting, transformed coordinate. The coordinate will be modified in-place.\n *\n * @param {module:ol/transform~Transform} transform The transformation.\n * @param {module:ol/coordinate~Coordinate|module:ol/pixel~Pixel} coordinate The coordinate to transform.\n * @return {module:ol/coordinate~Coordinate|module:ol/pixel~Pixel} return coordinate so that operations can be\n * chained together.\n */\nexport function apply(transform, coordinate) {\n const x = coordinate[0];\n const y = coordinate[1];\n coordinate[0] = transform[0] * x + transform[2] * y + transform[4];\n coordinate[1] = transform[1] * x + transform[3] * y + transform[5];\n return coordinate;\n}\n\n\n/**\n * Applies rotation to the given transform.\n * @param {!module:ol/transform~Transform} transform Transform.\n * @param {number} angle Angle in radians.\n * @return {!module:ol/transform~Transform} The rotated transform.\n */\nexport function rotate(transform, angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n return multiply(transform, set(tmp_, cos, sin, -sin, cos, 0, 0));\n}\n\n\n/**\n * Applies scale to a given transform.\n * @param {!module:ol/transform~Transform} transform Transform.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!module:ol/transform~Transform} The scaled transform.\n */\nexport function scale(transform, x, y) {\n return multiply(transform, set(tmp_, x, 0, 0, y, 0, 0));\n}\n\n\n/**\n * Applies translation to the given transform.\n * @param {!module:ol/transform~Transform} transform Transform.\n * @param {number} dx Translation x.\n * @param {number} dy Translation y.\n * @return {!module:ol/transform~Transform} The translated transform.\n */\nexport function translate(transform, dx, dy) {\n return multiply(transform, set(tmp_, 1, 0, 0, 1, dx, dy));\n}\n\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative).\n * @param {!module:ol/transform~Transform} transform The transform (will be modified in place).\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {!module:ol/transform~Transform} The composite transform.\n */\nexport function compose(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {\n const sin = Math.sin(angle);\n const cos = Math.cos(angle);\n transform[0] = sx * cos;\n transform[1] = sy * sin;\n transform[2] = -sx * sin;\n transform[3] = sy * cos;\n transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;\n transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;\n return transform;\n}\n\n\n/**\n * Invert the given transform.\n * @param {!module:ol/transform~Transform} transform Transform.\n * @return {!module:ol/transform~Transform} Inverse of the transform.\n */\nexport function invert(transform) {\n const det = determinant(transform);\n assert(det !== 0, 32); // Transformation matrix cannot be inverted\n\n const a = transform[0];\n const b = transform[1];\n const c = transform[2];\n const d = transform[3];\n const e = transform[4];\n const f = transform[5];\n\n transform[0] = d / det;\n transform[1] = -b / det;\n transform[2] = -c / det;\n transform[3] = a / det;\n transform[4] = (c * f - d * e) / det;\n transform[5] = -(a * f - b * e) / det;\n\n return transform;\n}\n\n\n/**\n * Returns the determinant of the given matrix.\n * @param {!module:ol/transform~Transform} mat Matrix.\n * @return {number} Determinant.\n */\nexport function determinant(mat) {\n return mat[0] * mat[3] - mat[1] * mat[2];\n}\n","/**\n * @module ol/functions\n */\n\n/**\n * Always returns true.\n * @returns {boolean} true.\n */\nexport function TRUE() {\n return true;\n}\n\n/**\n * Always returns false.\n * @returns {boolean} false.\n */\nexport function FALSE() {\n return false;\n}\n\n/**\n * A reusable function, used e.g. as a default for callbacks.\n *\n * @return {void} Nothing.\n */\nexport function VOID() {}\n","/**\n * @module ol/obj\n */\n\n\n/**\n * Polyfill for Object.assign(). Assigns enumerable and own properties from\n * one or more source objects to a target object.\n * See https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign.\n *\n * @param {!Object} target The target object.\n * @param {...Object} var_sources The source object(s).\n * @return {!Object} The modified target object.\n */\nexport const assign = (typeof Object.assign === 'function') ? Object.assign : function(target, var_sources) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n const output = Object(target);\n for (let i = 1, ii = arguments.length; i < ii; ++i) {\n const source = arguments[i];\n if (source !== undefined && source !== null) {\n for (const key in source) {\n if (source.hasOwnProperty(key)) {\n output[key] = source[key];\n }\n }\n }\n }\n return output;\n};\n\n\n/**\n * Removes all properties from an object.\n * @param {Object} object The object to clear.\n */\nexport function clear(object) {\n for (const property in object) {\n delete object[property];\n }\n}\n\n\n/**\n * Get an array of property values from an object.\n * @param {Object} object The object from which to get the values.\n * @return {!Array} The property values.\n * @template K,V\n */\nexport function getValues(object) {\n const values = [];\n for (const property in object) {\n values.push(object[property]);\n }\n return values;\n}\n\n\n/**\n * Determine if an object has any properties.\n * @param {Object} object The object to check.\n * @return {boolean} The object is empty.\n */\nexport function isEmpty(object) {\n let property;\n for (property in object) {\n return false;\n }\n return !property;\n}\n","/**\n * @module ol/asserts\n */\nimport AssertionError from './AssertionError.js';\n\n/**\n * @param {*} assertion Assertion we expected to be truthy.\n * @param {number} errorCode Error code.\n */\nexport function assert(assertion, errorCode) {\n if (!assertion) {\n throw new AssertionError(errorCode);\n }\n}\n","/**\n * @module ol/array\n */\n\n\n/**\n * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.\n * https://github.com/darkskyapp/binary-search\n *\n * @param {Array<*>} haystack Items to search through.\n * @param {*} needle The item to look for.\n * @param {Function=} opt_comparator Comparator function.\n * @return {number} The index of the item if found, -1 if not.\n */\nexport function binarySearch(haystack, needle, opt_comparator) {\n let mid, cmp;\n const comparator = opt_comparator || numberSafeCompareFunction;\n let low = 0;\n let high = haystack.length;\n let found = false;\n\n while (low < high) {\n /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n * to double (which gives the wrong results). */\n mid = low + (high - low >> 1);\n cmp = +comparator(haystack[mid], needle);\n\n if (cmp < 0.0) { /* Too low. */\n low = mid + 1;\n\n } else { /* Key found or too high */\n high = mid;\n found = !cmp;\n }\n }\n\n /* Key not found. */\n return found ? low : ~low;\n}\n\n\n/**\n * Compare function for array sort that is safe for numbers.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is less than, equal to, or greater than the second.\n */\nexport function numberSafeCompareFunction(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n}\n\n\n/**\n * Whether the array contains the given object.\n * @param {Array<*>} arr The array to test for the presence of the element.\n * @param {*} obj The object for which to test.\n * @return {boolean} The object is in the array.\n */\nexport function includes(arr, obj) {\n return arr.indexOf(obj) >= 0;\n}\n\n\n/**\n * @param {Array} arr Array.\n * @param {number} target Target.\n * @param {number} direction 0 means return the nearest, > 0\n * means return the largest nearest, < 0 means return the\n * smallest nearest.\n * @return {number} Index.\n */\nexport function linearFindNearest(arr, target, direction) {\n const n = arr.length;\n if (arr[0] <= target) {\n return 0;\n } else if (target <= arr[n - 1]) {\n return n - 1;\n } else {\n let i;\n if (direction > 0) {\n for (i = 1; i < n; ++i) {\n if (arr[i] < target) {\n return i - 1;\n }\n }\n } else if (direction < 0) {\n for (i = 1; i < n; ++i) {\n if (arr[i] <= target) {\n return i;\n }\n }\n } else {\n for (i = 1; i < n; ++i) {\n if (arr[i] == target) {\n return i;\n } else if (arr[i] < target) {\n if (arr[i - 1] - target < target - arr[i]) {\n return i - 1;\n } else {\n return i;\n }\n }\n }\n }\n return n - 1;\n }\n}\n\n\n/**\n * @param {Array<*>} arr Array.\n * @param {number} begin Begin index.\n * @param {number} end End index.\n */\nexport function reverseSubArray(arr, begin, end) {\n while (begin < end) {\n const tmp = arr[begin];\n arr[begin] = arr[end];\n arr[end] = tmp;\n ++begin;\n --end;\n }\n}\n\n\n/**\n * @param {Array} arr The array to modify.\n * @param {!Array|VALUE} data The elements or arrays of elements to add to arr.\n * @template VALUE\n */\nexport function extend(arr, data) {\n const extension = Array.isArray(data) ? data : [data];\n const length = extension.length;\n for (let i = 0; i < length; i++) {\n arr[arr.length] = extension[i];\n }\n}\n\n\n/**\n * @param {Array} arr The array to modify.\n * @param {VALUE} obj The element to remove.\n * @template VALUE\n * @return {boolean} If the element was removed.\n */\nexport function remove(arr, obj) {\n const i = arr.indexOf(obj);\n const found = i > -1;\n if (found) {\n arr.splice(i, 1);\n }\n return found;\n}\n\n\n/**\n * @param {Array} arr The array to search in.\n * @param {function(VALUE, number, ?) : boolean} func The function to compare.\n * @template VALUE\n * @return {VALUE|null} The element found or null.\n */\nexport function find(arr, func) {\n const length = arr.length >>> 0;\n let value;\n\n for (let i = 0; i < length; i++) {\n value = arr[i];\n if (func(value, i, arr)) {\n return value;\n }\n }\n return null;\n}\n\n\n/**\n * @param {Array|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nexport function equals(arr1, arr2) {\n const len1 = arr1.length;\n if (len1 !== arr2.length) {\n return false;\n }\n for (let i = 0; i < len1; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\n\n/**\n * Sort the passed array such that the relative order of equal elements is preverved.\n * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details.\n * @param {Array<*>} arr The array to sort (modifies original).\n * @param {!function(*, *): number} compareFnc Comparison function.\n * @api\n */\nexport function stableSort(arr, compareFnc) {\n const length = arr.length;\n const tmp = Array(arr.length);\n let i;\n for (i = 0; i < length; i++) {\n tmp[i] = {index: i, value: arr[i]};\n }\n tmp.sort(function(a, b) {\n return compareFnc(a.value, b.value) || a.index - b.index;\n });\n for (i = 0; i < arr.length; i++) {\n arr[i] = tmp[i].value;\n }\n}\n\n\n/**\n * @param {Array<*>} arr The array to search in.\n * @param {Function} func Comparison function.\n * @return {number} Return index.\n */\nexport function findIndex(arr, func) {\n let index;\n const found = !arr.every(function(el, idx) {\n index = idx;\n return !func(el, idx, arr);\n });\n return found ? index : -1;\n}\n\n\n/**\n * @param {Array<*>} arr The array to test.\n * @param {Function=} opt_func Comparison function.\n * @param {boolean=} opt_strict Strictly sorted (default false).\n * @return {boolean} Return index.\n */\nexport function isSorted(arr, opt_func, opt_strict) {\n const compare = opt_func || numberSafeCompareFunction;\n return arr.every(function(currentVal, index) {\n if (index === 0) {\n return true;\n }\n const res = compare(arr[index - 1], currentVal);\n return !(res > 0 || opt_strict && res === 0);\n });\n}\n","/**\n * @module ol/proj/epsg3857\n */\nimport {cosh} from '../math.js';\nimport Projection from '../proj/Projection.js';\nimport Units from '../proj/Units.js';\n\n\n/**\n * Radius of WGS84 sphere\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n\n/**\n * @const\n * @type {number}\n */\nexport const HALF_SIZE = Math.PI * RADIUS;\n\n\n/**\n * @const\n * @type {module:ol/extent~Extent}\n */\nexport const EXTENT = [\n -HALF_SIZE, -HALF_SIZE,\n HALF_SIZE, HALF_SIZE\n];\n\n\n/**\n * @const\n * @type {module:ol/extent~Extent}\n */\nexport const WORLD_EXTENT = [-180, -85, 180, 85];\n\n\n/**\n * @classdesc\n * Projection object for web/spherical Mercator (EPSG:3857).\n */\nclass EPSG3857Projection extends Projection {\n\n /**\n * @param {string} code Code.\n */\n constructor(code) {\n super({\n code: code,\n units: Units.METERS,\n extent: EXTENT,\n global: true,\n worldExtent: WORLD_EXTENT,\n getPointResolution: function(resolution, point) {\n return resolution / cosh(point[1] / RADIUS);\n }\n });\n\n }\n\n}\n\n\n/**\n * Projections equal to EPSG:3857.\n *\n * @const\n * @type {Array}\n */\nexport const PROJECTIONS = [\n new EPSG3857Projection('EPSG:3857'),\n new EPSG3857Projection('EPSG:102100'),\n new EPSG3857Projection('EPSG:102113'),\n new EPSG3857Projection('EPSG:900913'),\n new EPSG3857Projection('urn:ogc:def:crs:EPSG:6.18:3:3857'),\n new EPSG3857Projection('urn:ogc:def:crs:EPSG::3857'),\n new EPSG3857Projection('http://www.opengis.net/gml/srs/epsg.xml#3857')\n];\n\n\n/**\n * Transformation from EPSG:4326 to EPSG:3857.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array=} opt_output Output array of coordinate values.\n * @param {number=} opt_dimension Dimension (default is `2`).\n * @return {Array} Output array of coordinate values.\n */\nexport function fromEPSG4326(input, opt_output, opt_dimension) {\n const length = input.length;\n const dimension = opt_dimension > 1 ? opt_dimension : 2;\n let output = opt_output;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n const halfSize = HALF_SIZE;\n for (let i = 0; i < length; i += dimension) {\n output[i] = halfSize * input[i] / 180;\n let y = RADIUS *\n Math.log(Math.tan(Math.PI * (input[i + 1] + 90) / 360));\n if (y > halfSize) {\n y = halfSize;\n } else if (y < -halfSize) {\n y = -halfSize;\n }\n output[i + 1] = y;\n }\n return output;\n}\n\n\n/**\n * Transformation from EPSG:3857 to EPSG:4326.\n *\n * @param {Array} input Input array of coordinate values.\n * @param {Array=} opt_output Output array of coordinate values.\n * @param {number=} opt_dimension Dimension (default is `2`).\n * @return {Array} Output array of coordinate values.\n */\nexport function toEPSG4326(input, opt_output, opt_dimension) {\n const length = input.length;\n const dimension = opt_dimension > 1 ? opt_dimension : 2;\n let output = opt_output;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += dimension) {\n output[i] = 180 * input[i] / HALF_SIZE;\n output[i + 1] = 360 * Math.atan(\n Math.exp(input[i + 1] / RADIUS)) / Math.PI - 90;\n }\n return output;\n}\n","/**\n * @module ol/proj/epsg4326\n */\nimport Projection from '../proj/Projection.js';\nimport Units from '../proj/Units.js';\n\n\n/**\n * Semi-major radius of the WGS84 ellipsoid.\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n\n/**\n * Extent of the EPSG:4326 projection which is the whole world.\n *\n * @const\n * @type {module:ol/extent~Extent}\n */\nexport const EXTENT = [-180, -90, 180, 90];\n\n\n/**\n * @const\n * @type {number}\n */\nexport const METERS_PER_UNIT = Math.PI * RADIUS / 180;\n\n\n/**\n * @classdesc\n * Projection object for WGS84 geographic coordinates (EPSG:4326).\n *\n * Note that OpenLayers does not strictly comply with the EPSG definition.\n * The EPSG registry defines 4326 as a CRS for Latitude,Longitude (y,x).\n * OpenLayers treats EPSG:4326 as a pseudo-projection, with x,y coordinates.\n */\nclass EPSG4326Projection extends Projection {\n\n /**\n * @param {string} code Code.\n * @param {string=} opt_axisOrientation Axis orientation.\n */\n constructor(code, opt_axisOrientation) {\n super({\n code: code,\n units: Units.DEGREES,\n extent: EXTENT,\n axisOrientation: opt_axisOrientation,\n global: true,\n metersPerUnit: METERS_PER_UNIT,\n worldExtent: EXTENT\n });\n\n }\n\n}\n\n\n/**\n * Projections equal to EPSG:4326.\n *\n * @const\n * @type {Array}\n */\nexport const PROJECTIONS = [\n new EPSG4326Projection('CRS:84'),\n new EPSG4326Projection('EPSG:4326', 'neu'),\n new EPSG4326Projection('urn:ogc:def:crs:EPSG::4326', 'neu'),\n new EPSG4326Projection('urn:ogc:def:crs:EPSG:6.6:4326', 'neu'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:1.3:CRS84'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:2:84'),\n new EPSG4326Projection('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'),\n new EPSG4326Projection('urn:x-ogc:def:crs:EPSG:4326', 'neu')\n];\n","/**\n * @module ol/proj/projections\n */\n\n\n/**\n * @type {Object}\n */\nlet cache = {};\n\n\n/**\n * Clear the projections cache.\n */\nexport function clear() {\n cache = {};\n}\n\n\n/**\n * Get a cached projection by code.\n * @param {string} code The code for the projection.\n * @return {module:ol/proj/Projection} The projection (if cached).\n */\nexport function get(code) {\n return cache[code] || null;\n}\n\n\n/**\n * Add a projection to the cache.\n * @param {string} code The projection code.\n * @param {module:ol/proj/Projection} projection The projection to cache.\n */\nexport function add(code, projection) {\n cache[code] = projection;\n}\n","/**\n * @module ol/proj/transforms\n */\nimport {isEmpty} from '../obj.js';\n\n\n/**\n * @private\n * @type {!Object>}\n */\nlet transforms = {};\n\n\n/**\n * Clear the transform cache.\n */\nexport function clear() {\n transforms = {};\n}\n\n\n/**\n * Registers a conversion function to convert coordinates from the source\n * projection to the destination projection.\n *\n * @param {module:ol/proj/Projection} source Source.\n * @param {module:ol/proj/Projection} destination Destination.\n * @param {module:ol/proj~TransformFunction} transformFn Transform.\n */\nexport function add(source, destination, transformFn) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n if (!(sourceCode in transforms)) {\n transforms[sourceCode] = {};\n }\n transforms[sourceCode][destinationCode] = transformFn;\n}\n\n\n/**\n * Unregisters the conversion function to convert coordinates from the source\n * projection to the destination projection. This method is used to clean up\n * cached transforms during testing.\n *\n * @param {module:ol/proj/Projection} source Source projection.\n * @param {module:ol/proj/Projection} destination Destination projection.\n * @return {module:ol/proj~TransformFunction} transformFn The unregistered transform.\n */\nexport function remove(source, destination) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n const transform = transforms[sourceCode][destinationCode];\n delete transforms[sourceCode][destinationCode];\n if (isEmpty(transforms[sourceCode])) {\n delete transforms[sourceCode];\n }\n return transform;\n}\n\n\n/**\n * Get a transform given a source code and a destination code.\n * @param {string} sourceCode The code for the source projection.\n * @param {string} destinationCode The code for the destination projection.\n * @return {module:ol/proj~TransformFunction|undefined} The transform function (if found).\n */\nexport function get(sourceCode, destinationCode) {\n let transform;\n if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {\n transform = transforms[sourceCode][destinationCode];\n }\n return transform;\n}\n","/**\n * @module ol/proj\n */\n\n/**\n * The ol/proj module stores:\n * * a list of {@link module:ol/proj/Projection}\n * objects, one for each projection supported by the application\n * * a list of transform functions needed to convert coordinates in one projection\n * into another.\n *\n * The static functions are the methods used to maintain these.\n * Each transform function can handle not only simple coordinate pairs, but also\n * large arrays of coordinates such as vector geometries.\n *\n * When loaded, the library adds projection objects for EPSG:4326 (WGS84\n * geographic coordinates) and EPSG:3857 (Web or Spherical Mercator, as used\n * for example by Bing Maps or OpenStreetMap), together with the relevant\n * transform functions.\n *\n * Additional transforms may be added by using the http://proj4js.org/\n * library (version 2.2 or later). You can use the full build supplied by\n * Proj4js, or create a custom build to support those projections you need; see\n * the Proj4js website for how to do this. You also need the Proj4js definitions\n * for the required projections. These definitions can be obtained from\n * https://epsg.io/, and are a JS function, so can be loaded in a script\n * tag (as in the examples) or pasted into your application.\n *\n * After all required projection definitions are added to proj4's registry (by\n * using `proj4.defs()`), simply call `register(proj4)` from the `ol/proj/proj4`\n * package. Existing transforms are not changed by this function. See\n * examples/wms-image-custom-proj for an example of this.\n *\n * Additional projection definitions can be registered with `proj4.defs()` any\n * time. Just make sure to call `register(proj4)` again; for example, with user-supplied data where you don't\n * know in advance what projections are needed, you can initially load minimal\n * support and then load whichever are requested.\n *\n * Note that Proj4js does not support projection extents. If you want to add\n * one for creating default tile grids, you can add it after the Projection\n * object has been created with `setExtent`, for example,\n * `get('EPSG:1234').setExtent(extent)`.\n *\n * In addition to Proj4js support, any transform functions can be added with\n * {@link module:ol/proj~addCoordinateTransforms}. To use this, you must first create\n * a {@link module:ol/proj/Projection} object for the new projection and add it with\n * {@link module:ol/proj~addProjection}. You can then add the forward and inverse\n * functions with {@link module:ol/proj~addCoordinateTransforms}. See\n * examples/wms-custom-proj for an example of this.\n *\n * Note that if no transforms are needed and you only need to define the\n * projection, just add a {@link module:ol/proj/Projection} with\n * {@link module:ol/proj~addProjection}. See examples/wms-no-proj for an example of\n * this.\n */\nimport {getDistance} from './sphere.js';\nimport {applyTransform} from './extent.js';\nimport {modulo} from './math.js';\nimport {toEPSG4326, fromEPSG4326, PROJECTIONS as EPSG3857_PROJECTIONS} from './proj/epsg3857.js';\nimport {PROJECTIONS as EPSG4326_PROJECTIONS} from './proj/epsg4326.js';\nimport Projection from './proj/Projection.js';\nimport Units, {METERS_PER_UNIT} from './proj/Units.js';\nimport * as projections from './proj/projections.js';\nimport {add as addTransformFunc, clear as clearTransformFuncs, get as getTransformFunc} from './proj/transforms.js';\n\n\n/**\n * A projection as {@link module:ol/proj/Projection}, SRS identifier\n * string or undefined.\n * @typedef {module:ol/proj/Projection|string|undefined} ProjectionLike\n * @api\n */\n\n\n/**\n * A transform function accepts an array of input coordinate values, an optional\n * output array, and an optional dimension (default should be 2). The function\n * transforms the input coordinate values, populates the output array, and\n * returns the output array.\n *\n * @typedef {function(Array, Array=, number=): Array} TransformFunction\n * @api\n */\n\n\nexport {METERS_PER_UNIT};\n\nexport {Projection};\n\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array=} opt_output Output array of coordinate values.\n * @param {number=} opt_dimension Dimension.\n * @return {Array} Output coordinate array (new array, same coordinate\n * values).\n */\nexport function cloneTransform(input, opt_output, opt_dimension) {\n let output;\n if (opt_output !== undefined) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n opt_output[i] = input[i];\n }\n output = opt_output;\n } else {\n output = input.slice();\n }\n return output;\n}\n\n\n/**\n * @param {Array} input Input coordinate array.\n * @param {Array=} opt_output Output array of coordinate values.\n * @param {number=} opt_dimension Dimension.\n * @return {Array} Input coordinate array (same array as input).\n */\nexport function identityTransform(input, opt_output, opt_dimension) {\n if (opt_output !== undefined && input !== opt_output) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n opt_output[i] = input[i];\n }\n input = opt_output;\n }\n return input;\n}\n\n\n/**\n * Add a Projection object to the list of supported projections that can be\n * looked up by their code.\n *\n * @param {module:ol/proj/Projection} projection Projection instance.\n * @api\n */\nexport function addProjection(projection) {\n projections.add(projection.getCode(), projection);\n addTransformFunc(projection, projection, cloneTransform);\n}\n\n\n/**\n * @param {Array} projections Projections.\n */\nexport function addProjections(projections) {\n projections.forEach(addProjection);\n}\n\n\n/**\n * Fetches a Projection object for the code specified.\n *\n * @param {module:ol/proj~ProjectionLike} projectionLike Either a code string which is\n * a combination of authority and identifier such as \"EPSG:4326\", or an\n * existing projection object, or undefined.\n * @return {module:ol/proj/Projection} Projection object, or null if not in list.\n * @api\n */\nexport function get(projectionLike) {\n let projection = null;\n if (projectionLike instanceof Projection) {\n projection = projectionLike;\n } else if (typeof projectionLike === 'string') {\n const code = projectionLike;\n projection = projections.get(code);\n }\n return projection;\n}\n\n\n/**\n * Get the resolution of the point in degrees or distance units.\n * For projections with degrees as the unit this will simply return the\n * provided resolution. For other projections the point resolution is\n * by default estimated by transforming the 'point' pixel to EPSG:4326,\n * measuring its width and height on the normal sphere,\n * and taking the average of the width and height.\n * A custom function can be provided for a specific projection, either\n * by setting the `getPointResolution` option in the\n * {@link module:ol/proj/Projection~Projection} constructor or by using\n * {@link module:ol/proj/Projection~Projection#setGetPointResolution} to change an existing\n * projection object.\n * @param {module:ol/proj~ProjectionLike} projection The projection.\n * @param {number} resolution Nominal resolution in projection units.\n * @param {module:ol/coordinate~Coordinate} point Point to find adjusted resolution at.\n * @param {module:ol/proj/Units=} opt_units Units to get the point resolution in.\n * Default is the projection's units.\n * @return {number} Point resolution.\n * @api\n */\nexport function getPointResolution(projection, resolution, point, opt_units) {\n projection = get(projection);\n let pointResolution;\n const getter = projection.getPointResolutionFunc();\n if (getter) {\n pointResolution = getter(resolution, point);\n } else {\n const units = projection.getUnits();\n if (units == Units.DEGREES && !opt_units || opt_units == Units.DEGREES) {\n pointResolution = resolution;\n } else {\n // Estimate point resolution by transforming the center pixel to EPSG:4326,\n // measuring its width and height on the normal sphere, and taking the\n // average of the width and height.\n const toEPSG4326 = getTransformFromProjections(projection, get('EPSG:4326'));\n let vertices = [\n point[0] - resolution / 2, point[1],\n point[0] + resolution / 2, point[1],\n point[0], point[1] - resolution / 2,\n point[0], point[1] + resolution / 2\n ];\n vertices = toEPSG4326(vertices, vertices, 2);\n const width = getDistance(vertices.slice(0, 2), vertices.slice(2, 4));\n const height = getDistance(vertices.slice(4, 6), vertices.slice(6, 8));\n pointResolution = (width + height) / 2;\n const metersPerUnit = opt_units ?\n METERS_PER_UNIT[opt_units] :\n projection.getMetersPerUnit();\n if (metersPerUnit !== undefined) {\n pointResolution /= metersPerUnit;\n }\n }\n }\n return pointResolution;\n}\n\n\n/**\n * Registers transformation functions that don't alter coordinates. Those allow\n * to transform between projections with equal meaning.\n *\n * @param {Array} projections Projections.\n * @api\n */\nexport function addEquivalentProjections(projections) {\n addProjections(projections);\n projections.forEach(function(source) {\n projections.forEach(function(destination) {\n if (source !== destination) {\n addTransformFunc(source, destination, cloneTransform);\n }\n });\n });\n}\n\n\n/**\n * Registers transformation functions to convert coordinates in any projection\n * in projection1 to any projection in projection2.\n *\n * @param {Array} projections1 Projections with equal\n * meaning.\n * @param {Array} projections2 Projections with equal\n * meaning.\n * @param {module:ol/proj~TransformFunction} forwardTransform Transformation from any\n * projection in projection1 to any projection in projection2.\n * @param {module:ol/proj~TransformFunction} inverseTransform Transform from any projection\n * in projection2 to any projection in projection1..\n */\nexport function addEquivalentTransforms(projections1, projections2, forwardTransform, inverseTransform) {\n projections1.forEach(function(projection1) {\n projections2.forEach(function(projection2) {\n addTransformFunc(projection1, projection2, forwardTransform);\n addTransformFunc(projection2, projection1, inverseTransform);\n });\n });\n}\n\n\n/**\n * Clear all cached projections and transforms.\n */\nexport function clearAllProjections() {\n projections.clear();\n clearTransformFuncs();\n}\n\n\n/**\n * @param {module:ol/proj/Projection|string|undefined} projection Projection.\n * @param {string} defaultCode Default code.\n * @return {module:ol/proj/Projection} Projection.\n */\nexport function createProjection(projection, defaultCode) {\n if (!projection) {\n return get(defaultCode);\n } else if (typeof projection === 'string') {\n return get(projection);\n } else {\n return (\n /** @type {module:ol/proj/Projection} */ (projection)\n );\n }\n}\n\n\n/**\n * Creates a {@link module:ol/proj~TransformFunction} from a simple 2D coordinate transform\n * function.\n * @param {function(module:ol/coordinate~Coordinate): module:ol/coordinate~Coordinate} coordTransform Coordinate\n * transform.\n * @return {module:ol/proj~TransformFunction} Transform function.\n */\nexport function createTransformFromCoordinateTransform(coordTransform) {\n return (\n /**\n * @param {Array} input Input.\n * @param {Array=} opt_output Output.\n * @param {number=} opt_dimension Dimension.\n * @return {Array} Output.\n */\n function(input, opt_output, opt_dimension) {\n const length = input.length;\n const dimension = opt_dimension !== undefined ? opt_dimension : 2;\n const output = opt_output !== undefined ? opt_output : new Array(length);\n for (let i = 0; i < length; i += dimension) {\n const point = coordTransform([input[i], input[i + 1]]);\n output[i] = point[0];\n output[i + 1] = point[1];\n for (let j = dimension - 1; j >= 2; --j) {\n output[i + j] = input[i + j];\n }\n }\n return output;\n });\n}\n\n\n/**\n * Registers coordinate transform functions to convert coordinates between the\n * source projection and the destination projection.\n * The forward and inverse functions convert coordinate pairs; this function\n * converts these into the functions used internally which also handle\n * extents and coordinate arrays.\n *\n * @param {module:ol/proj~ProjectionLike} source Source projection.\n * @param {module:ol/proj~ProjectionLike} destination Destination projection.\n * @param {function(module:ol/coordinate~Coordinate): module:ol/coordinate~Coordinate} forward The forward transform\n * function (that is, from the source projection to the destination\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}.\n * @param {function(module:ol/coordinate~Coordinate): module:ol/coordinate~Coordinate} inverse The inverse transform\n * function (that is, from the destination projection to the source\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}.\n * @api\n */\nexport function addCoordinateTransforms(source, destination, forward, inverse) {\n const sourceProj = get(source);\n const destProj = get(destination);\n addTransformFunc(sourceProj, destProj, createTransformFromCoordinateTransform(forward));\n addTransformFunc(destProj, sourceProj, createTransformFromCoordinateTransform(inverse));\n}\n\n\n/**\n * Transforms a coordinate from longitude/latitude to a different projection.\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate as longitude and latitude, i.e.\n * an array with longitude as 1st and latitude as 2nd element.\n * @param {module:ol/proj~ProjectionLike=} opt_projection Target projection. The\n * default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {module:ol/coordinate~Coordinate} Coordinate projected to the target projection.\n * @api\n */\nexport function fromLonLat(coordinate, opt_projection) {\n return transform(coordinate, 'EPSG:4326',\n opt_projection !== undefined ? opt_projection : 'EPSG:3857');\n}\n\n\n/**\n * Transforms a coordinate to longitude/latitude.\n * @param {module:ol/coordinate~Coordinate} coordinate Projected coordinate.\n * @param {module:ol/proj~ProjectionLike=} opt_projection Projection of the coordinate.\n * The default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {module:ol/coordinate~Coordinate} Coordinate as longitude and latitude, i.e. an array\n * with longitude as 1st and latitude as 2nd element.\n * @api\n */\nexport function toLonLat(coordinate, opt_projection) {\n const lonLat = transform(coordinate,\n opt_projection !== undefined ? opt_projection : 'EPSG:3857', 'EPSG:4326');\n const lon = lonLat[0];\n if (lon < -180 || lon > 180) {\n lonLat[0] = modulo(lon + 180, 360) - 180;\n }\n return lonLat;\n}\n\n\n/**\n * Checks if two projections are the same, that is every coordinate in one\n * projection does represent the same geographic point as the same coordinate in\n * the other projection.\n *\n * @param {module:ol/proj/Projection} projection1 Projection 1.\n * @param {module:ol/proj/Projection} projection2 Projection 2.\n * @return {boolean} Equivalent.\n * @api\n */\nexport function equivalent(projection1, projection2) {\n if (projection1 === projection2) {\n return true;\n }\n const equalUnits = projection1.getUnits() === projection2.getUnits();\n if (projection1.getCode() === projection2.getCode()) {\n return equalUnits;\n } else {\n const transformFunc = getTransformFromProjections(projection1, projection2);\n return transformFunc === cloneTransform && equalUnits;\n }\n}\n\n\n/**\n * Searches in the list of transform functions for the function for converting\n * coordinates from the source projection to the destination projection.\n *\n * @param {module:ol/proj/Projection} sourceProjection Source Projection object.\n * @param {module:ol/proj/Projection} destinationProjection Destination Projection\n * object.\n * @return {module:ol/proj~TransformFunction} Transform function.\n */\nexport function getTransformFromProjections(sourceProjection, destinationProjection) {\n const sourceCode = sourceProjection.getCode();\n const destinationCode = destinationProjection.getCode();\n let transformFunc = getTransformFunc(sourceCode, destinationCode);\n if (!transformFunc) {\n transformFunc = identityTransform;\n }\n return transformFunc;\n}\n\n\n/**\n * Given the projection-like objects, searches for a transformation\n * function to convert a coordinates array from the source projection to the\n * destination projection.\n *\n * @param {module:ol/proj~ProjectionLike} source Source.\n * @param {module:ol/proj~ProjectionLike} destination Destination.\n * @return {module:ol/proj~TransformFunction} Transform function.\n * @api\n */\nexport function getTransform(source, destination) {\n const sourceProjection = get(source);\n const destinationProjection = get(destination);\n return getTransformFromProjections(sourceProjection, destinationProjection);\n}\n\n\n/**\n * Transforms a coordinate from source projection to destination projection.\n * This returns a new coordinate (and does not modify the original).\n *\n * See {@link module:ol/proj~transformExtent} for extent transformation.\n * See the transform method of {@link module:ol/geom/Geometry~Geometry} and its\n * subclasses for geometry transforms.\n *\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n * @param {module:ol/proj~ProjectionLike} source Source projection-like.\n * @param {module:ol/proj~ProjectionLike} destination Destination projection-like.\n * @return {module:ol/coordinate~Coordinate} Coordinate.\n * @api\n */\nexport function transform(coordinate, source, destination) {\n const transformFunc = getTransform(source, destination);\n return transformFunc(coordinate, undefined, coordinate.length);\n}\n\n\n/**\n * Transforms an extent from source projection to destination projection. This\n * returns a new extent (and does not modify the original).\n *\n * @param {module:ol/extent~Extent} extent The extent to transform.\n * @param {module:ol/proj~ProjectionLike} source Source projection-like.\n * @param {module:ol/proj~ProjectionLike} destination Destination projection-like.\n * @return {module:ol/extent~Extent} The transformed extent.\n * @api\n */\nexport function transformExtent(extent, source, destination) {\n const transformFunc = getTransform(source, destination);\n return applyTransform(extent, transformFunc);\n}\n\n\n/**\n * Transforms the given point to the destination projection.\n *\n * @param {module:ol/coordinate~Coordinate} point Point.\n * @param {module:ol/proj/Projection} sourceProjection Source projection.\n * @param {module:ol/proj/Projection} destinationProjection Destination projection.\n * @return {module:ol/coordinate~Coordinate} Point.\n */\nexport function transformWithProjections(point, sourceProjection, destinationProjection) {\n const transformFunc = getTransformFromProjections(sourceProjection, destinationProjection);\n return transformFunc(point);\n}\n\n/**\n * Add transforms to and from EPSG:4326 and EPSG:3857. This function is called\n * by when this module is executed and should only need to be called again after\n * `clearAllProjections()` is called (e.g. in tests).\n */\nexport function addCommon() {\n // Add transformations that don't alter coordinates to convert within set of\n // projections with equal meaning.\n addEquivalentProjections(EPSG3857_PROJECTIONS);\n addEquivalentProjections(EPSG4326_PROJECTIONS);\n // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like\n // coordinates and back.\n addEquivalentTransforms(EPSG4326_PROJECTIONS, EPSG3857_PROJECTIONS, fromEPSG4326, toEPSG4326);\n}\n\naddCommon();\n","/**\n * @module ol/ViewHint\n */\n\n/**\n * @enum {number}\n */\nexport default {\n ANIMATING: 0,\n INTERACTING: 1\n};\n","/**\n * @module ol/dom\n */\n\n\n/**\n * Create an html canvas element and returns its 2d context.\n * @param {number=} opt_width Canvas width.\n * @param {number=} opt_height Canvas height.\n * @return {CanvasRenderingContext2D} The context.\n */\nexport function createCanvasContext2D(opt_width, opt_height) {\n const canvas = /** @type {HTMLCanvasElement} */ (document.createElement('canvas'));\n if (opt_width) {\n canvas.width = opt_width;\n }\n if (opt_height) {\n canvas.height = opt_height;\n }\n return /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d'));\n}\n\n\n/**\n * Get the current computed width for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerWidth(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The width.\n */\nexport function outerWidth(element) {\n let width = element.offsetWidth;\n const style = getComputedStyle(element);\n width += parseInt(style.marginLeft, 10) + parseInt(style.marginRight, 10);\n\n return width;\n}\n\n\n/**\n * Get the current computed height for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerHeight(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The height.\n */\nexport function outerHeight(element) {\n let height = element.offsetHeight;\n const style = getComputedStyle(element);\n height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);\n\n return height;\n}\n\n/**\n * @param {Node} newNode Node to replace old node\n * @param {Node} oldNode The node to be replaced\n */\nexport function replaceNode(newNode, oldNode) {\n const parent = oldNode.parentNode;\n if (parent) {\n parent.replaceChild(newNode, oldNode);\n }\n}\n\n/**\n * @param {Node} node The node to remove.\n * @returns {Node} The node that was removed or null.\n */\nexport function removeNode(node) {\n return node && node.parentNode ? node.parentNode.removeChild(node) : null;\n}\n\n/**\n * @param {Node} node The node to remove the children from.\n */\nexport function removeChildren(node) {\n while (node.lastChild) {\n node.removeChild(node.lastChild);\n }\n}\n","/**\n * @module ol/geom/GeometryLayout\n */\n\n/**\n * The coordinate layout for geometries, indicating whether a 3rd or 4th z ('Z')\n * or measure ('M') coordinate is available. Supported values are `'XY'`,\n * `'XYZ'`, `'XYM'`, `'XYZM'`.\n * @enum {string}\n */\nexport default {\n XY: 'XY',\n XYZ: 'XYZ',\n XYM: 'XYM',\n XYZM: 'XYZM'\n};\n","/**\n * @module ol/ImageState\n */\n\n/**\n * @enum {number}\n */\nexport default {\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n ERROR: 3\n};\n","/**\n * @module ol/Object\n */\nimport {getUid} from './util.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport Observable from './Observable.js';\nimport Event from './events/Event.js';\nimport {assign} from './obj.js';\n\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Object~BaseObject} instances are instances of this type.\n */\nclass ObjectEvent extends Event {\n\n /**\n * @param {string} type The event type.\n * @param {string} key The property name.\n * @param {*} oldValue The old value for `key`.\n */\n constructor(type, key, oldValue) {\n super(type);\n\n /**\n * The name of the property whose value is changing.\n * @type {string}\n * @api\n */\n this.key = key;\n\n /**\n * The old value. To get the new value use `e.target.get(e.key)` where\n * `e` is the event object.\n * @type {*}\n * @api\n */\n this.oldValue = oldValue;\n\n }\n\n}\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Most non-trivial classes inherit from this.\n *\n * This extends {@link module:ol/Observable} with observable\n * properties, where each property is observable as well as the object as a\n * whole.\n *\n * Classes that inherit from this have pre-defined properties, to which you can\n * add your owns. The pre-defined properties are listed in this documentation as\n * 'Observable Properties', and have their own accessors; for example,\n * {@link module:ol/Map~Map} has a `target` property, accessed with\n * `getTarget()` and changed with `setTarget()`. Not all properties are however\n * settable. There are also general-purpose accessors `get()` and `set()`. For\n * example, `get('target')` is equivalent to `getTarget()`.\n *\n * The `set` accessors trigger a change event, and you can monitor this by\n * registering a listener. For example, {@link module:ol/View~View} has a\n * `center` property, so `view.on('change:center', function(evt) {...});` would\n * call the function whenever the value of the center property changes. Within\n * the function, `evt.target` would be the view, so `evt.target.getCenter()`\n * would return the new center.\n *\n * You can add your own observable properties with\n * `object.set('prop', 'value')`, and retrieve that with `object.get('prop')`.\n * You can listen for changes on that property value with\n * `object.on('change:prop', listener)`. You can get a list of all\n * properties with {@link module:ol/Object~BaseObject#getProperties}.\n *\n * Note that the observable properties are separate from standard JS properties.\n * You can, for example, give your map object a title with\n * `map.title='New title'` and with `map.set('title', 'Another title')`. The\n * first will be a `hasOwnProperty`; the second will appear in\n * `getProperties()`. Only the second is observable.\n *\n * Properties can be deleted by using the unset method. E.g.\n * object.unset('foo').\n *\n * @fires module:ol/Object~ObjectEvent\n * @api\n */\nclass BaseObject extends Observable {\n\n /**\n * @param {Object=} opt_values An object with key-value pairs.\n */\n constructor(opt_values) {\n super();\n\n // Call {@link module:ol/util~getUid} to ensure that the order of objects' ids is\n // the same as the order in which they were created. This also helps to\n // ensure that object properties are always added in the same order, which\n // helps many JavaScript engines generate faster code.\n getUid(this);\n\n /**\n * @private\n * @type {!Object}\n */\n this.values_ = {};\n\n if (opt_values !== undefined) {\n this.setProperties(opt_values);\n }\n }\n\n /**\n * Gets a value.\n * @param {string} key Key name.\n * @return {*} Value.\n * @api\n */\n get(key) {\n let value;\n if (this.values_.hasOwnProperty(key)) {\n value = this.values_[key];\n }\n return value;\n }\n\n /**\n * Get a list of object property names.\n * @return {Array} List of property names.\n * @api\n */\n getKeys() {\n return Object.keys(this.values_);\n }\n\n /**\n * Get an object of all property names and values.\n * @return {Object} Object.\n * @api\n */\n getProperties() {\n return assign({}, this.values_);\n }\n\n /**\n * @param {string} key Key name.\n * @param {*} oldValue Old value.\n */\n notify(key, oldValue) {\n let eventType;\n eventType = getChangeEventType(key);\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n eventType = ObjectEventType.PROPERTYCHANGE;\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n }\n\n /**\n * Sets a value.\n * @param {string} key Key name.\n * @param {*} value Value.\n * @param {boolean=} opt_silent Update without triggering an event.\n * @api\n */\n set(key, value, opt_silent) {\n if (opt_silent) {\n this.values_[key] = value;\n } else {\n const oldValue = this.values_[key];\n this.values_[key] = value;\n if (oldValue !== value) {\n this.notify(key, oldValue);\n }\n }\n }\n\n /**\n * Sets a collection of key-value pairs. Note that this changes any existing\n * properties and adds new ones (it does not remove any existing properties).\n * @param {Object} values Values.\n * @param {boolean=} opt_silent Update without triggering an event.\n * @api\n */\n setProperties(values, opt_silent) {\n for (const key in values) {\n this.set(key, values[key], opt_silent);\n }\n }\n\n /**\n * Unsets a property.\n * @param {string} key Key name.\n * @param {boolean=} opt_silent Unset without triggering an event.\n * @api\n */\n unset(key, opt_silent) {\n if (key in this.values_) {\n const oldValue = this.values_[key];\n delete this.values_[key];\n if (!opt_silent) {\n this.notify(key, oldValue);\n }\n }\n }\n}\n\n\n/**\n * @type {Object}\n */\nconst changeEventTypeCache = {};\n\n\n/**\n * @param {string} key Key name.\n * @return {string} Change name.\n */\nexport function getChangeEventType(key) {\n return changeEventTypeCache.hasOwnProperty(key) ?\n changeEventTypeCache[key] :\n (changeEventTypeCache[key] = 'change:' + key);\n}\n\n\nexport default BaseObject;\n","/**\n * @module ol/has\n */\n\nconst ua = typeof navigator !== 'undefined' ?\n navigator.userAgent.toLowerCase() : '';\n\n/**\n * User agent string says we are dealing with Firefox as browser.\n * @type {boolean}\n */\nexport const FIREFOX = ua.indexOf('firefox') !== -1;\n\n/**\n * User agent string says we are dealing with Safari as browser.\n * @type {boolean}\n */\nexport const SAFARI = ua.indexOf('safari') !== -1 && ua.indexOf('chrom') == -1;\n\n/**\n * User agent string says we are dealing with a WebKit engine.\n * @type {boolean}\n */\nexport const WEBKIT = ua.indexOf('webkit') !== -1 && ua.indexOf('edge') == -1;\n\n/**\n * User agent string says we are dealing with a Mac as platform.\n * @type {boolean}\n */\nexport const MAC = ua.indexOf('macintosh') !== -1;\n\n\n/**\n * The ratio between physical pixels and device-independent pixels\n * (dips) on the device (`window.devicePixelRatio`).\n * @const\n * @type {number}\n * @api\n */\nexport const DEVICE_PIXEL_RATIO = window.devicePixelRatio || 1;\n\n\n/**\n * True if the browser's Canvas implementation implements {get,set}LineDash.\n * @type {boolean}\n */\nexport const CANVAS_LINE_DASH = function() {\n let has = false;\n try {\n has = !!document.createElement('canvas').getContext('2d').setLineDash;\n } catch (e) {\n // pass\n }\n return has;\n}();\n\n\n/**\n * Is HTML5 geolocation supported in the current browser?\n * @const\n * @type {boolean}\n * @api\n */\nexport const GEOLOCATION = 'geolocation' in navigator;\n\n\n/**\n * True if browser supports touch events.\n * @const\n * @type {boolean}\n * @api\n */\nexport const TOUCH = 'ontouchstart' in window;\n\n\n/**\n * True if browser supports pointer events.\n * @const\n * @type {boolean}\n */\nexport const POINTER = 'PointerEvent' in window;\n\n\n/**\n * True if browser supports ms pointer events (IE 10).\n * @const\n * @type {boolean}\n */\nexport const MSPOINTER = !!(navigator.msPointerEnabled);\n\n\nexport {HAS as WEBGL} from './webgl.js';\n","/**\n * @module ol/layer/Property\n */\n\n/**\n * @enum {string}\n */\nexport default {\n OPACITY: 'opacity',\n VISIBLE: 'visible',\n EXTENT: 'extent',\n Z_INDEX: 'zIndex',\n MAX_RESOLUTION: 'maxResolution',\n MIN_RESOLUTION: 'minResolution',\n SOURCE: 'source'\n};\n","/**\n * @module ol/proj/Units\n */\n\n/**\n * Projection units: `'degrees'`, `'ft'`, `'m'`, `'pixels'`, `'tile-pixels'` or\n * `'us-ft'`.\n * @enum {string}\n */\nconst Units = {\n DEGREES: 'degrees',\n FEET: 'ft',\n METERS: 'm',\n PIXELS: 'pixels',\n TILE_PIXELS: 'tile-pixels',\n USFEET: 'us-ft'\n};\n\n\n/**\n * Meters per unit lookup table.\n * @const\n * @type {Object}\n * @api\n */\nexport const METERS_PER_UNIT = {};\n// use the radius of the Normal sphere\nMETERS_PER_UNIT[Units.DEGREES] = 2 * Math.PI * 6370997 / 360;\nMETERS_PER_UNIT[Units.FEET] = 0.3048;\nMETERS_PER_UNIT[Units.METERS] = 1;\nMETERS_PER_UNIT[Units.USFEET] = 1200 / 3937;\n\nexport default Units;\n","/**\n * @module ol/Collection\n */\nimport AssertionError from './AssertionError.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport BaseObject from './Object.js';\nimport Event from './events/Event.js';\n\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n LENGTH: 'length'\n};\n\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Collection~Collection} instances are instances of this\n * type.\n */\nexport class CollectionEvent extends Event {\n\n /**\n * @param {module:ol/CollectionEventType} type Type.\n * @param {*=} opt_element Element.\n */\n constructor(type, opt_element) {\n super(type);\n\n /**\n * The element that is added to or removed from the collection.\n * @type {*}\n * @api\n */\n this.element = opt_element;\n\n }\n\n}\n\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [unique=false] Disallow the same item from being added to\n * the collection twice.\n */\n\n/**\n * @classdesc\n * An expanded version of standard JS Array, adding convenience methods for\n * manipulation. Add and remove changes to the Collection trigger a Collection\n * event. Note that this does not cover changes to the objects _within_ the\n * Collection; they trigger events on the appropriate object, not on the\n * Collection as a whole.\n *\n * @template T\n * @api\n */\nclass Collection extends BaseObject {\n\n /**\n * @param {Array=} opt_array Array.\n * @param {module:ol/Collection~Options=} opt_options Collection options.\n */\n constructor(opt_array, opt_options) {\n\n super();\n\n const options = opt_options || {};\n\n /**\n * @private\n * @type {boolean}\n */\n this.unique_ = !!options.unique;\n\n /**\n * @private\n * @type {!Array}\n */\n this.array_ = opt_array ? opt_array : [];\n\n if (this.unique_) {\n for (let i = 0, ii = this.array_.length; i < ii; ++i) {\n this.assertUnique_(this.array_[i], i);\n }\n }\n\n this.updateLength_();\n\n }\n\n /**\n * Remove all elements from the collection.\n * @api\n */\n clear() {\n while (this.getLength() > 0) {\n this.pop();\n }\n }\n\n /**\n * Add elements to the collection. This pushes each item in the provided array\n * to the end of the collection.\n * @param {!Array} arr Array.\n * @return {module:ol/Collection} This collection.\n * @api\n */\n extend(arr) {\n for (let i = 0, ii = arr.length; i < ii; ++i) {\n this.push(arr[i]);\n }\n return this;\n }\n\n /**\n * Iterate over each element, calling the provided callback.\n * @param {function(T, number, Array): *} f The function to call\n * for every element. This function takes 3 arguments (the element, the\n * index and the array). The return value is ignored.\n * @api\n */\n forEach(f) {\n const array = this.array_;\n for (let i = 0, ii = array.length; i < ii; ++i) {\n f(array[i], i, array);\n }\n }\n\n /**\n * Get a reference to the underlying Array object. Warning: if the array\n * is mutated, no events will be dispatched by the collection, and the\n * collection's \"length\" property won't be in sync with the actual length\n * of the array.\n * @return {!Array} Array.\n * @api\n */\n getArray() {\n return this.array_;\n }\n\n /**\n * Get the element at the provided index.\n * @param {number} index Index.\n * @return {T} Element.\n * @api\n */\n item(index) {\n return this.array_[index];\n }\n\n /**\n * Get the length of this collection.\n * @return {number} The length of the array.\n * @observable\n * @api\n */\n getLength() {\n return /** @type {number} */ (this.get(Property.LENGTH));\n }\n\n /**\n * Insert an element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n insertAt(index, elem) {\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n this.array_.splice(index, 0, elem);\n this.updateLength_();\n this.dispatchEvent(\n new CollectionEvent(CollectionEventType.ADD, elem));\n }\n\n /**\n * Remove the last element of the collection and return it.\n * Return `undefined` if the collection is empty.\n * @return {T|undefined} Element.\n * @api\n */\n pop() {\n return this.removeAt(this.getLength() - 1);\n }\n\n /**\n * Insert the provided element at the end of the collection.\n * @param {T} elem Element.\n * @return {number} New length of the collection.\n * @api\n */\n push(elem) {\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n const n = this.getLength();\n this.insertAt(n, elem);\n return this.getLength();\n }\n\n /**\n * Remove the first occurrence of an element from the collection.\n * @param {T} elem Element.\n * @return {T|undefined} The removed element or undefined if none found.\n * @api\n */\n remove(elem) {\n const arr = this.array_;\n for (let i = 0, ii = arr.length; i < ii; ++i) {\n if (arr[i] === elem) {\n return this.removeAt(i);\n }\n }\n return undefined;\n }\n\n /**\n * Remove the element at the provided index and return it.\n * Return `undefined` if the collection does not contain this index.\n * @param {number} index Index.\n * @return {T|undefined} Value.\n * @api\n */\n removeAt(index) {\n const prev = this.array_[index];\n this.array_.splice(index, 1);\n this.updateLength_();\n this.dispatchEvent(new CollectionEvent(CollectionEventType.REMOVE, prev));\n return prev;\n }\n\n /**\n * Set the element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n setAt(index, elem) {\n const n = this.getLength();\n if (index < n) {\n if (this.unique_) {\n this.assertUnique_(elem, index);\n }\n const prev = this.array_[index];\n this.array_[index] = elem;\n this.dispatchEvent(\n new CollectionEvent(CollectionEventType.REMOVE, prev));\n this.dispatchEvent(\n new CollectionEvent(CollectionEventType.ADD, elem));\n } else {\n for (let j = n; j < index; ++j) {\n this.insertAt(j, undefined);\n }\n this.insertAt(index, elem);\n }\n }\n\n /**\n * @private\n */\n updateLength_() {\n this.set(Property.LENGTH, this.array_.length);\n }\n\n /**\n * @private\n * @param {T} elem Element.\n * @param {number=} opt_except Optional index to ignore.\n */\n assertUnique_(elem, opt_except) {\n for (let i = 0, ii = this.array_.length; i < ii; ++i) {\n if (this.array_[i] === elem && i !== opt_except) {\n throw new AssertionError(58);\n }\n }\n }\n}\n\n\nexport default Collection;\n","/**\n * @module ol/events/Event\n */\n\n/**\n * @classdesc\n * Stripped down implementation of the W3C DOM Level 2 Event interface.\n * See https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-interface.\n *\n * This implementation only provides `type` and `target` properties, and\n * `stopPropagation` and `preventDefault` methods. It is meant as base class\n * for higher level events defined in the library, and works with\n * {@link module:ol/events/Target~Target}.\n */\nclass Event {\n\n /**\n * @param {string} type Type.\n */\n constructor(type) {\n\n /**\n * @type {boolean}\n */\n this.propagationStopped;\n\n /**\n * The event type.\n * @type {string}\n * @api\n */\n this.type = type;\n\n /**\n * The event target.\n * @type {Object}\n * @api\n */\n this.target = null;\n }\n\n /**\n * Stop event propagation.\n * @function\n * @api\n */\n preventDefault() {\n this.propagationStopped = true;\n }\n\n /**\n * Stop event propagation.\n * @function\n * @api\n */\n stopPropagation() {\n this.propagationStopped = true;\n }\n\n}\n\n\n/**\n * @param {Event|module:ol/events/Event} evt Event\n */\nexport function stopPropagation(evt) {\n evt.stopPropagation();\n}\n\n\n/**\n * @param {Event|module:ol/events/Event} evt Event\n */\nexport function preventDefault(evt) {\n evt.preventDefault();\n}\n\nexport default Event;\n","/**\n * @module ol/easing\n */\n\n\n/**\n * Start slow and speed up.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeIn(t) {\n return Math.pow(t, 3);\n}\n\n\n/**\n * Start fast and slow down.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeOut(t) {\n return 1 - easeIn(1 - t);\n}\n\n\n/**\n * Start slow, speed up, and then slow down again.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function inAndOut(t) {\n return 3 * t * t - 2 * t * t * t;\n}\n\n\n/**\n * Maintain a constant speed over time.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function linear(t) {\n return t;\n}\n\n\n/**\n * Start slow, speed up, and at the very end slow down again. This has the\n * same general behavior as {@link module:ol/easing~inAndOut}, but the final\n * slowdown is delayed.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function upAndDown(t) {\n if (t < 0.5) {\n return inAndOut(2 * t);\n } else {\n return 1 - inAndOut(2 * (t - 0.5));\n }\n}\n","/**\n * @module ol/extent/Relationship\n */\n\n/**\n * Relationship to an extent.\n * @enum {number}\n */\nexport default {\n UNKNOWN: 0,\n INTERSECTING: 1,\n ABOVE: 2,\n RIGHT: 4,\n BELOW: 8,\n LEFT: 16\n};\n","/**\n * @module ol/css\n */\n\n\n/**\n * The CSS class for hidden feature.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_HIDDEN = 'ol-hidden';\n\n\n/**\n * The CSS class that we'll give the DOM elements to have them selectable.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_SELECTABLE = 'ol-selectable';\n\n\n/**\n * The CSS class that we'll give the DOM elements to have them unselectable.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_UNSELECTABLE = 'ol-unselectable';\n\n\n/**\n * The CSS class for unsupported feature.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_UNSUPPORTED = 'ol-unsupported';\n\n\n/**\n * The CSS class for controls.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_CONTROL = 'ol-control';\n\n\n/**\n * The CSS class that we'll give the DOM elements that are collapsed, i.e.\n * to those elements which usually can be expanded.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_COLLAPSED = 'ol-collapsed';\n\n\n/**\n * Get the list of font families from a font spec. Note that this doesn't work\n * for font families that have commas in them.\n * @param {string} The CSS font property.\n * @return {Object} The font families (or null if the input spec is invalid).\n */\nexport const getFontFamilies = (function() {\n let style;\n const cache = {};\n return function(font) {\n if (!style) {\n style = document.createElement('div').style;\n }\n if (!(font in cache)) {\n style.font = font;\n const family = style.fontFamily;\n style.font = '';\n if (!family) {\n return null;\n }\n cache[font] = family.split(/,\\s?/);\n }\n return cache[font];\n };\n})();\n","/**\n * @module ol/geom/SimpleGeometry\n */\nimport {FALSE} from '../functions.js';\nimport {createOrUpdateFromFlatCoordinates, getCenter} from '../extent.js';\nimport Geometry from '../geom/Geometry.js';\nimport GeometryLayout from '../geom/GeometryLayout.js';\nimport {rotate, scale, translate, transform2D} from '../geom/flat/transform.js';\nimport {clear} from '../obj.js';\n\n/**\n * @classdesc\n * Abstract base class; only used for creating subclasses; do not instantiate\n * in apps, as cannot be rendered.\n *\n * @abstract\n * @api\n */\nclass SimpleGeometry extends Geometry {\n constructor() {\n\n super();\n\n /**\n * @protected\n * @type {module:ol/geom/GeometryLayout}\n */\n this.layout = GeometryLayout.XY;\n\n /**\n * @protected\n * @type {number}\n */\n this.stride = 2;\n\n /**\n * @protected\n * @type {Array}\n */\n this.flatCoordinates = null;\n\n }\n\n /**\n * @inheritDoc\n */\n computeExtent(extent) {\n return createOrUpdateFromFlatCoordinates(this.flatCoordinates,\n 0, this.flatCoordinates.length, this.stride, extent);\n }\n\n /**\n * @abstract\n * @return {Array} Coordinates.\n */\n getCoordinates() {}\n\n /**\n * Return the first coordinate of the geometry.\n * @return {module:ol/coordinate~Coordinate} First coordinate.\n * @api\n */\n getFirstCoordinate() {\n return this.flatCoordinates.slice(0, this.stride);\n }\n\n /**\n * @return {Array} Flat coordinates.\n */\n getFlatCoordinates() {\n return this.flatCoordinates;\n }\n\n /**\n * Return the last coordinate of the geometry.\n * @return {module:ol/coordinate~Coordinate} Last point.\n * @api\n */\n getLastCoordinate() {\n return this.flatCoordinates.slice(this.flatCoordinates.length - this.stride);\n }\n\n /**\n * Return the {@link module:ol/geom/GeometryLayout~GeometryLayout layout} of the geometry.\n * @return {module:ol/geom/GeometryLayout} Layout.\n * @api\n */\n getLayout() {\n return this.layout;\n }\n\n /**\n * @inheritDoc\n */\n getSimplifiedGeometry(squaredTolerance) {\n if (this.simplifiedGeometryRevision != this.getRevision()) {\n clear(this.simplifiedGeometryCache);\n this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n this.simplifiedGeometryRevision = this.getRevision();\n }\n // If squaredTolerance is negative or if we know that simplification will not\n // have any effect then just return this.\n if (squaredTolerance < 0 ||\n (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 &&\n squaredTolerance <= this.simplifiedGeometryMaxMinSquaredTolerance)) {\n return this;\n }\n const key = squaredTolerance.toString();\n if (this.simplifiedGeometryCache.hasOwnProperty(key)) {\n return this.simplifiedGeometryCache[key];\n } else {\n const simplifiedGeometry =\n this.getSimplifiedGeometryInternal(squaredTolerance);\n const simplifiedFlatCoordinates = simplifiedGeometry.getFlatCoordinates();\n if (simplifiedFlatCoordinates.length < this.flatCoordinates.length) {\n this.simplifiedGeometryCache[key] = simplifiedGeometry;\n return simplifiedGeometry;\n } else {\n // Simplification did not actually remove any coordinates. We now know\n // that any calls to getSimplifiedGeometry with a squaredTolerance less\n // than or equal to the current squaredTolerance will also not have any\n // effect. This allows us to short circuit simplification (saving CPU\n // cycles) and prevents the cache of simplified geometries from filling\n // up with useless identical copies of this geometry (saving memory).\n this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;\n return this;\n }\n }\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {module:ol/geom/SimpleGeometry} Simplified geometry.\n * @protected\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n return this;\n }\n\n /**\n * @return {number} Stride.\n */\n getStride() {\n return this.stride;\n }\n\n /**\n * @param {module:ol/geom/GeometryLayout} layout Layout.\n * @param {Array} flatCoordinates Flat coordinates.\n */\n setFlatCoordinates(layout, flatCoordinates) {\n this.stride = getStrideForLayout(layout);\n this.layout = layout;\n this.flatCoordinates = flatCoordinates;\n }\n\n /**\n * @abstract\n * @param {!Array} coordinates Coordinates.\n * @param {module:ol/geom/GeometryLayout=} opt_layout Layout.\n */\n setCoordinates(coordinates, opt_layout) {}\n\n /**\n * @param {module:ol/geom/GeometryLayout|undefined} layout Layout.\n * @param {Array} coordinates Coordinates.\n * @param {number} nesting Nesting.\n * @protected\n */\n setLayout(layout, coordinates, nesting) {\n /** @type {number} */\n let stride;\n if (layout) {\n stride = getStrideForLayout(layout);\n } else {\n for (let i = 0; i < nesting; ++i) {\n if (coordinates.length === 0) {\n this.layout = GeometryLayout.XY;\n this.stride = 2;\n return;\n } else {\n coordinates = /** @type {Array} */ (coordinates[0]);\n }\n }\n stride = coordinates.length;\n layout = getLayoutForStride(stride);\n }\n this.layout = layout;\n this.stride = stride;\n }\n\n /**\n * @inheritDoc\n * @api\n */\n applyTransform(transformFn) {\n if (this.flatCoordinates) {\n transformFn(this.flatCoordinates, this.flatCoordinates, this.stride);\n this.changed();\n }\n }\n\n /**\n * @inheritDoc\n * @api\n */\n rotate(angle, anchor) {\n const flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n const stride = this.getStride();\n rotate(\n flatCoordinates, 0, flatCoordinates.length,\n stride, angle, anchor, flatCoordinates);\n this.changed();\n }\n }\n\n /**\n * @inheritDoc\n * @api\n */\n scale(sx, opt_sy, opt_anchor) {\n let sy = opt_sy;\n if (sy === undefined) {\n sy = sx;\n }\n let anchor = opt_anchor;\n if (!anchor) {\n anchor = getCenter(this.getExtent());\n }\n const flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n const stride = this.getStride();\n scale(\n flatCoordinates, 0, flatCoordinates.length,\n stride, sx, sy, anchor, flatCoordinates);\n this.changed();\n }\n }\n\n /**\n * @inheritDoc\n * @api\n */\n translate(deltaX, deltaY) {\n const flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n const stride = this.getStride();\n translate(\n flatCoordinates, 0, flatCoordinates.length, stride,\n deltaX, deltaY, flatCoordinates);\n this.changed();\n }\n }\n}\n\n\n/**\n * @param {number} stride Stride.\n * @return {module:ol/geom/GeometryLayout} layout Layout.\n */\nfunction getLayoutForStride(stride) {\n let layout;\n if (stride == 2) {\n layout = GeometryLayout.XY;\n } else if (stride == 3) {\n layout = GeometryLayout.XYZ;\n } else if (stride == 4) {\n layout = GeometryLayout.XYZM;\n }\n return (\n /** @type {module:ol/geom/GeometryLayout} */ (layout)\n );\n}\n\n\n/**\n * @param {module:ol/geom/GeometryLayout} layout Layout.\n * @return {number} Stride.\n */\nexport function getStrideForLayout(layout) {\n let stride;\n if (layout == GeometryLayout.XY) {\n stride = 2;\n } else if (layout == GeometryLayout.XYZ || layout == GeometryLayout.XYM) {\n stride = 3;\n } else if (layout == GeometryLayout.XYZM) {\n stride = 4;\n }\n return /** @type {number} */ (stride);\n}\n\n\n/**\n * @inheritDoc\n */\nSimpleGeometry.prototype.containsXY = FALSE;\n\n\n/**\n * @param {module:ol/geom/SimpleGeometry} simpleGeometry Simple geometry.\n * @param {module:ol/transform~Transform} transform Transform.\n * @param {Array=} opt_dest Destination.\n * @return {Array} Transformed flat coordinates.\n */\nexport function transformGeom2D(simpleGeometry, transform, opt_dest) {\n const flatCoordinates = simpleGeometry.getFlatCoordinates();\n if (!flatCoordinates) {\n return null;\n } else {\n const stride = simpleGeometry.getStride();\n return transform2D(\n flatCoordinates, 0, flatCoordinates.length, stride,\n transform, opt_dest);\n }\n}\n\nexport default SimpleGeometry;\n","/**\n * @module ol/CollectionEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when an item is added to the collection.\n * @event module:ol/Collection~CollectionEvent#add\n * @api\n */\n ADD: 'add',\n /**\n * Triggered when an item is removed from the collection.\n * @event module:ol/Collection~CollectionEvent#remove\n * @api\n */\n REMOVE: 'remove'\n};\n","/**\n * @module ol/geom/flat/transform\n */\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {module:ol/transform~Transform} transform Transform.\n * @param {Array=} opt_dest Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function transform2D(flatCoordinates, offset, end, stride, transform, opt_dest) {\n const dest = opt_dest ? opt_dest : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const x = flatCoordinates[j];\n const y = flatCoordinates[j + 1];\n dest[i++] = transform[0] * x + transform[2] * y + transform[4];\n dest[i++] = transform[1] * x + transform[3] * y + transform[5];\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} angle Angle.\n * @param {Array} anchor Rotation anchor point.\n * @param {Array=} opt_dest Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function rotate(flatCoordinates, offset, end, stride, angle, anchor, opt_dest) {\n const dest = opt_dest ? opt_dest : [];\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + deltaX * cos - deltaY * sin;\n dest[i++] = anchorY + deltaX * sin + deltaY * cos;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n\n/**\n * Scale the coordinates.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} sx Scale factor in the x-direction.\n * @param {number} sy Scale factor in the y-direction.\n * @param {Array} anchor Scale anchor point.\n * @param {Array=} opt_dest Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function scale(flatCoordinates, offset, end, stride, sx, sy, anchor, opt_dest) {\n const dest = opt_dest ? opt_dest : [];\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + sx * deltaX;\n dest[i++] = anchorY + sy * deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @param {Array=} opt_dest Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function translate(flatCoordinates, offset, end, stride, deltaX, deltaY, opt_dest) {\n const dest = opt_dest ? opt_dest : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n dest[i++] = flatCoordinates[j] + deltaX;\n dest[i++] = flatCoordinates[j + 1] + deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (opt_dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n","/**\n * @module ol/LayerType\n */\n\n/**\n * A layer type used when creating layer renderers.\n * @enum {string}\n */\nexport default {\n IMAGE: 'IMAGE',\n TILE: 'TILE',\n VECTOR_TILE: 'VECTOR_TILE',\n VECTOR: 'VECTOR'\n};\n","/**\n * @module ol/source/State\n */\n\n/**\n * State of the source, one of 'undefined', 'loading', 'ready' or 'error'.\n * @enum {string}\n */\nexport default {\n UNDEFINED: 'undefined',\n LOADING: 'loading',\n READY: 'ready',\n ERROR: 'error'\n};\n","/**\n * @module ol/geom/flat/inflate\n */\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Array=} opt_coordinates Coordinates.\n * @return {Array} Coordinates.\n */\nexport function inflateCoordinates(flatCoordinates, offset, end, stride, opt_coordinates) {\n const coordinates = opt_coordinates !== undefined ? opt_coordinates : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n coordinates[i++] = flatCoordinates.slice(j, j + stride);\n }\n coordinates.length = i;\n return coordinates;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Array>=} opt_coordinatess Coordinatess.\n * @return {Array>} Coordinatess.\n */\nexport function inflateCoordinatesArray(flatCoordinates, offset, ends, stride, opt_coordinatess) {\n const coordinatess = opt_coordinatess !== undefined ? opt_coordinatess : [];\n let i = 0;\n for (let j = 0, jj = ends.length; j < jj; ++j) {\n const end = ends[j];\n coordinatess[i++] = inflateCoordinates(\n flatCoordinates, offset, end, stride, coordinatess[i]);\n offset = end;\n }\n coordinatess.length = i;\n return coordinatess;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array>>=} opt_coordinatesss\n * Coordinatesss.\n * @return {Array>>} Coordinatesss.\n */\nexport function inflateMultiCoordinatesArray(flatCoordinates, offset, endss, stride, opt_coordinatesss) {\n const coordinatesss = opt_coordinatesss !== undefined ? opt_coordinatesss : [];\n let i = 0;\n for (let j = 0, jj = endss.length; j < jj; ++j) {\n const ends = endss[j];\n coordinatesss[i++] = inflateCoordinatesArray(\n flatCoordinates, offset, ends, stride, coordinatesss[i]);\n offset = ends[ends.length - 1];\n }\n coordinatesss.length = i;\n return coordinatesss;\n}\n","/**\n * @module ol/size\n */\n\n\n/**\n * An array of numbers representing a size: `[width, height]`.\n * @typedef {Array} Size\n * @api\n */\n\n\n/**\n * Returns a buffered size.\n * @param {module:ol/size~Size} size Size.\n * @param {number} num The amount by which to buffer.\n * @param {module:ol/size~Size=} opt_size Optional reusable size array.\n * @return {module:ol/size~Size} The buffered size.\n */\nexport function buffer(size, num, opt_size) {\n if (opt_size === undefined) {\n opt_size = [0, 0];\n }\n opt_size[0] = size[0] + 2 * num;\n opt_size[1] = size[1] + 2 * num;\n return opt_size;\n}\n\n\n/**\n * Determines if a size has a positive area.\n * @param {module:ol/size~Size} size The size to test.\n * @return {boolean} The size has a positive area.\n */\nexport function hasArea(size) {\n return size[0] > 0 && size[1] > 0;\n}\n\n\n/**\n * Returns a size scaled by a ratio. The result will be an array of integers.\n * @param {module:ol/size~Size} size Size.\n * @param {number} ratio Ratio.\n * @param {module:ol/size~Size=} opt_size Optional reusable size array.\n * @return {module:ol/size~Size} The scaled size.\n */\nexport function scale(size, ratio, opt_size) {\n if (opt_size === undefined) {\n opt_size = [0, 0];\n }\n opt_size[0] = (size[0] * ratio + 0.5) | 0;\n opt_size[1] = (size[1] * ratio + 0.5) | 0;\n return opt_size;\n}\n\n\n/**\n * Returns an `module:ol/size~Size` array for the passed in number (meaning: square) or\n * `module:ol/size~Size` array.\n * (meaning: non-square),\n * @param {number|module:ol/size~Size} size Width and height.\n * @param {module:ol/size~Size=} opt_size Optional reusable size array.\n * @return {module:ol/size~Size} Size.\n * @api\n */\nexport function toSize(size, opt_size) {\n if (Array.isArray(size)) {\n return size;\n } else {\n if (opt_size === undefined) {\n opt_size = [size, size];\n } else {\n opt_size[0] = opt_size[1] = /** @type {number} */ (size);\n }\n return opt_size;\n }\n}\n","/**\n * @module ol/geom/flat/closest\n */\nimport {lerp, squaredDistance as squaredDx} from '../../math.js';\n\n\n/**\n * Returns the point on the 2D line segment flatCoordinates[offset1] to\n * flatCoordinates[offset2] that is closest to the point (x, y). Extra\n * dimensions are linearly interpolated.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset1 Offset 1.\n * @param {number} offset2 Offset 2.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n */\nfunction assignClosest(flatCoordinates, offset1, offset2, stride, x, y, closestPoint) {\n const x1 = flatCoordinates[offset1];\n const y1 = flatCoordinates[offset1 + 1];\n const dx = flatCoordinates[offset2] - x1;\n const dy = flatCoordinates[offset2 + 1] - y1;\n let offset;\n if (dx === 0 && dy === 0) {\n offset = offset1;\n } else {\n const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n offset = offset2;\n } else if (t > 0) {\n for (let i = 0; i < stride; ++i) {\n closestPoint[i] = lerp(flatCoordinates[offset1 + i],\n flatCoordinates[offset2 + i], t);\n }\n closestPoint.length = stride;\n return;\n } else {\n offset = offset1;\n }\n }\n for (let i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[offset + i];\n }\n closestPoint.length = stride;\n}\n\n\n/**\n * Return the squared of the largest distance between any pair of consecutive\n * coordinates.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function maxSquaredDelta(flatCoordinates, offset, end, stride, max) {\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n for (offset += stride; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n const squaredDelta = squaredDx(x1, y1, x2, y2);\n if (squaredDelta > max) {\n max = squaredDelta;\n }\n x1 = x2;\n y1 = y2;\n }\n return max;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function arrayMaxSquaredDelta(flatCoordinates, offset, ends, stride, max) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n max = maxSquaredDelta(\n flatCoordinates, offset, end, stride, max);\n offset = end;\n }\n return max;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function multiArrayMaxSquaredDelta(flatCoordinates, offset, endss, stride, max) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n max = arrayMaxSquaredDelta(\n flatCoordinates, offset, ends, stride, max);\n offset = ends[ends.length - 1];\n }\n return max;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array=} opt_tmpPoint Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestPoint(flatCoordinates, offset, end,\n stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance,\n opt_tmpPoint) {\n if (offset == end) {\n return minSquaredDistance;\n }\n let i, squaredDistance;\n if (maxDelta === 0) {\n // All points are identical, so just test the first point.\n squaredDistance = squaredDx(\n x, y, flatCoordinates[offset], flatCoordinates[offset + 1]);\n if (squaredDistance < minSquaredDistance) {\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[offset + i];\n }\n closestPoint.length = stride;\n return squaredDistance;\n } else {\n return minSquaredDistance;\n }\n }\n const tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n let index = offset + stride;\n while (index < end) {\n assignClosest(\n flatCoordinates, index - stride, index, stride, x, y, tmpPoint);\n squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n if (squaredDistance < minSquaredDistance) {\n minSquaredDistance = squaredDistance;\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = tmpPoint[i];\n }\n closestPoint.length = stride;\n index += stride;\n } else {\n // Skip ahead multiple points, because we know that all the skipped\n // points cannot be any closer than the closest point we have found so\n // far. We know this because we know how close the current point is, how\n // close the closest point we have found so far is, and the maximum\n // distance between consecutive points. For example, if we're currently\n // at distance 10, the best we've found so far is 3, and that the maximum\n // distance between consecutive points is 2, then we'll need to skip at\n // least (10 - 3) / 2 == 3 (rounded down) points to have any chance of\n // finding a closer point. We use Math.max(..., 1) to ensure that we\n // always advance at least one point, to avoid an infinite loop.\n index += stride * Math.max(\n ((Math.sqrt(squaredDistance) -\n Math.sqrt(minSquaredDistance)) / maxDelta) | 0, 1);\n }\n }\n if (isRing) {\n // Check the closing segment.\n assignClosest(\n flatCoordinates, end - stride, offset, stride, x, y, tmpPoint);\n squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n if (squaredDistance < minSquaredDistance) {\n minSquaredDistance = squaredDistance;\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = tmpPoint[i];\n }\n closestPoint.length = stride;\n }\n }\n return minSquaredDistance;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array=} opt_tmpPoint Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestArrayPoint(flatCoordinates, offset, ends,\n stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance,\n opt_tmpPoint) {\n const tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n minSquaredDistance = assignClosestPoint(\n flatCoordinates, offset, end, stride,\n maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint);\n offset = end;\n }\n return minSquaredDistance;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array=} opt_tmpPoint Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestMultiArrayPoint(flatCoordinates, offset,\n endss, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance,\n opt_tmpPoint) {\n const tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n minSquaredDistance = assignClosestArrayPoint(\n flatCoordinates, offset, ends, stride,\n maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint);\n offset = ends[ends.length - 1];\n }\n return minSquaredDistance;\n}\n","/**\n * @module ol/events/Target\n */\nimport Disposable from '../Disposable.js';\nimport {unlistenAll} from '../events.js';\nimport {VOID} from '../functions.js';\nimport Event from '../events/Event.js';\n\n\n/**\n * @typedef {EventTarget|module:ol/events/Target} EventTargetLike\n */\n\n\n/**\n * @classdesc\n * A simplified implementation of the W3C DOM Level 2 EventTarget interface.\n * See https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget.\n *\n * There are two important simplifications compared to the specification:\n *\n * 1. The handling of `useCapture` in `addEventListener` and\n * `removeEventListener`. There is no real capture model.\n * 2. The handling of `stopPropagation` and `preventDefault` on `dispatchEvent`.\n * There is no event target hierarchy. When a listener calls\n * `stopPropagation` or `preventDefault` on an event object, it means that no\n * more listeners after this one will be called. Same as when the listener\n * returns false.\n */\nclass Target extends Disposable {\n constructor() {\n\n super();\n\n /**\n * @private\n * @type {!Object}\n */\n this.pendingRemovals_ = {};\n\n /**\n * @private\n * @type {!Object}\n */\n this.dispatching_ = {};\n\n /**\n * @private\n * @type {!Object>}\n */\n this.listeners_ = {};\n\n }\n\n /**\n * @param {string} type Type.\n * @param {module:ol/events~ListenerFunction} listener Listener.\n */\n addEventListener(type, listener) {\n let listeners = this.listeners_[type];\n if (!listeners) {\n listeners = this.listeners_[type] = [];\n }\n if (listeners.indexOf(listener) === -1) {\n listeners.push(listener);\n }\n }\n\n /**\n * Dispatches an event and calls all listeners listening for events\n * of this type. The event parameter can either be a string or an\n * Object with a `type` property.\n *\n * @param {{type: string,\n * target: (module:ol/events/Target~EventTargetLike|undefined)}|\n * module:ol/events/Event|string} event Event object.\n * @return {boolean|undefined} `false` if anyone called preventDefault on the\n * event object or if any of the listeners returned false.\n * @function\n * @api\n */\n dispatchEvent(event) {\n const evt = typeof event === 'string' ? new Event(event) : event;\n const type = evt.type;\n evt.target = this;\n const listeners = this.listeners_[type];\n let propagate;\n if (listeners) {\n if (!(type in this.dispatching_)) {\n this.dispatching_[type] = 0;\n this.pendingRemovals_[type] = 0;\n }\n ++this.dispatching_[type];\n for (let i = 0, ii = listeners.length; i < ii; ++i) {\n if (listeners[i].call(this, evt) === false || evt.propagationStopped) {\n propagate = false;\n break;\n }\n }\n --this.dispatching_[type];\n if (this.dispatching_[type] === 0) {\n let pendingRemovals = this.pendingRemovals_[type];\n delete this.pendingRemovals_[type];\n while (pendingRemovals--) {\n this.removeEventListener(type, VOID);\n }\n delete this.dispatching_[type];\n }\n return propagate;\n }\n }\n\n /**\n * @inheritDoc\n */\n disposeInternal() {\n unlistenAll(this);\n }\n\n /**\n * Get the listeners for a specified event type. Listeners are returned in the\n * order that they will be called in.\n *\n * @param {string} type Type.\n * @return {Array} Listeners.\n */\n getListeners(type) {\n return this.listeners_[type];\n }\n\n /**\n * @param {string=} opt_type Type. If not provided,\n * `true` will be returned if this event target has any listeners.\n * @return {boolean} Has listeners.\n */\n hasListener(opt_type) {\n return opt_type ?\n opt_type in this.listeners_ :\n Object.keys(this.listeners_).length > 0;\n }\n\n /**\n * @param {string} type Type.\n * @param {module:ol/events~ListenerFunction} listener Listener.\n */\n removeEventListener(type, listener) {\n const listeners = this.listeners_[type];\n if (listeners) {\n const index = listeners.indexOf(listener);\n if (type in this.pendingRemovals_) {\n // make listener a no-op, and remove later in #dispatchEvent()\n listeners[index] = VOID;\n ++this.pendingRemovals_[type];\n } else {\n listeners.splice(index, 1);\n if (listeners.length === 0) {\n delete this.listeners_[type];\n }\n }\n }\n }\n}\n\n\nexport default Target;\n","/**\n * @module ol/geom/flat/deflate\n */\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinate(flatCoordinates, offset, coordinate, stride) {\n for (let i = 0, ii = coordinate.length; i < ii; ++i) {\n flatCoordinates[offset++] = coordinate[i];\n }\n return offset;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} coordinates Coordinates.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinates(flatCoordinates, offset, coordinates, stride) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n const coordinate = coordinates[i];\n for (let j = 0; j < stride; ++j) {\n flatCoordinates[offset++] = coordinate[j];\n }\n }\n return offset;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} coordinatess Coordinatess.\n * @param {number} stride Stride.\n * @param {Array=} opt_ends Ends.\n * @return {Array} Ends.\n */\nexport function deflateCoordinatesArray(flatCoordinates, offset, coordinatess, stride, opt_ends) {\n const ends = opt_ends ? opt_ends : [];\n let i = 0;\n for (let j = 0, jj = coordinatess.length; j < jj; ++j) {\n const end = deflateCoordinates(\n flatCoordinates, offset, coordinatess[j], stride);\n ends[i++] = end;\n offset = end;\n }\n ends.length = i;\n return ends;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>>} coordinatesss Coordinatesss.\n * @param {number} stride Stride.\n * @param {Array>=} opt_endss Endss.\n * @return {Array>} Endss.\n */\nexport function deflateMultiCoordinatesArray(flatCoordinates, offset, coordinatesss, stride, opt_endss) {\n const endss = opt_endss ? opt_endss : [];\n let i = 0;\n for (let j = 0, jj = coordinatesss.length; j < jj; ++j) {\n const ends = deflateCoordinatesArray(\n flatCoordinates, offset, coordinatesss[j], stride, endss[i]);\n endss[i++] = ends;\n offset = ends[ends.length - 1];\n }\n endss.length = i;\n return endss;\n}\n","/**\n * @module ol/colorlike\n */\nimport {toString} from './color.js';\n\n\n/**\n * A type accepted by CanvasRenderingContext2D.fillStyle\n * or CanvasRenderingContext2D.strokeStyle.\n * Represents a color, pattern, or gradient. The origin for patterns and\n * gradients as fill style is an increment of 512 css pixels from map coordinate\n * `[0, 0]`. For seamless repeat patterns, width and height of the pattern image\n * must be a factor of two (2, 4, 8, ..., 512).\n *\n * @typedef {string|CanvasPattern|CanvasGradient} ColorLike\n * @api\n */\n\n\n/**\n * @param {module:ol/color~Color|module:ol/colorlike~ColorLike} color Color.\n * @return {module:ol/colorlike~ColorLike} The color as an {@link ol/colorlike~ColorLike}.\n * @api\n */\nexport function asColorLike(color) {\n if (isColorLike(color)) {\n return /** @type {string|CanvasPattern|CanvasGradient} */ (color);\n } else {\n return toString(/** @type {module:ol/color~Color} */ (color));\n }\n}\n\n\n/**\n * @param {?} color The value that is potentially an {@link ol/colorlike~ColorLike}.\n * @return {boolean} The color is an {@link ol/colorlike~ColorLike}.\n */\nexport function isColorLike(color) {\n return (\n typeof color === 'string' ||\n color instanceof CanvasPattern ||\n color instanceof CanvasGradient\n );\n}\n","/**\n * Default maximum allowed threshold (in pixels) for reprojection\n * triangulation.\n * @type {number}\n */\nexport const ERROR_THRESHOLD = 0.5;\n\n/**\n * Enable automatic reprojection of raster sources. Default is `true`.\n * TODO: decide if we want to expose this as a build flag or remove it\n * @type {boolean}\n */\nexport const ENABLE_RASTER_REPROJECTION = true;\n","/**\n * @module ol/render/EventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * @event module:ol/render/Event~RenderEvent#postcompose\n * @api\n */\n POSTCOMPOSE: 'postcompose',\n /**\n * @event module:ol/render/Event~RenderEvent#precompose\n * @api\n */\n PRECOMPOSE: 'precompose',\n /**\n * @event module:ol/render/Event~RenderEvent#render\n * @api\n */\n RENDER: 'render',\n /**\n * Triggered when rendering is complete, i.e. all sources and tiles have\n * finished loading for the current viewport, and all tiles are faded in.\n * @event module:ol/render/Event~RenderEvent#rendercomplete\n * @api\n */\n RENDERCOMPLETE: 'rendercomplete'\n};\n","/**\n * @module ol/geom/LinearRing\n */\nimport {closestSquaredDistanceXY} from '../extent.js';\nimport GeometryLayout from '../geom/GeometryLayout.js';\nimport GeometryType from '../geom/GeometryType.js';\nimport SimpleGeometry from '../geom/SimpleGeometry.js';\nimport {linearRing as linearRingArea} from '../geom/flat/area.js';\nimport {assignClosestPoint, maxSquaredDelta} from '../geom/flat/closest.js';\nimport {deflateCoordinates} from '../geom/flat/deflate.js';\nimport {inflateCoordinates} from '../geom/flat/inflate.js';\nimport {douglasPeucker} from '../geom/flat/simplify.js';\n\n/**\n * @classdesc\n * Linear ring geometry. Only used as part of polygon; cannot be rendered\n * on its own.\n *\n * @api\n */\nclass LinearRing extends SimpleGeometry {\n\n /**\n * @param {Array|Array} coordinates Coordinates.\n * For internal use, flat coordinates in combination with `opt_layout` are also accepted.\n * @param {module:ol/geom/GeometryLayout=} opt_layout Layout.\n */\n constructor(coordinates, opt_layout) {\n\n super();\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDeltaRevision_ = -1;\n\n if (opt_layout !== undefined && !Array.isArray(coordinates[0])) {\n this.setFlatCoordinates(opt_layout, coordinates);\n } else {\n this.setCoordinates(coordinates, opt_layout);\n }\n\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!module:ol/geom/LinearRing} Clone.\n * @override\n * @api\n */\n clone() {\n return new LinearRing(this.flatCoordinates.slice(), this.layout);\n }\n\n /**\n * @inheritDoc\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n if (this.maxDeltaRevision_ != this.getRevision()) {\n this.maxDelta_ = Math.sqrt(maxSquaredDelta(\n this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0));\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestPoint(\n this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,\n this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);\n }\n\n /**\n * Return the area of the linear ring on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\n getArea() {\n return linearRingArea(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n }\n\n /**\n * Return the coordinates of the linear ring.\n * @return {Array} Coordinates.\n * @override\n * @api\n */\n getCoordinates() {\n return inflateCoordinates(\n this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n }\n\n /**\n * @inheritDoc\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n const simplifiedFlatCoordinates = [];\n simplifiedFlatCoordinates.length = douglasPeucker(\n this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,\n squaredTolerance, simplifiedFlatCoordinates, 0);\n return new LinearRing(simplifiedFlatCoordinates, GeometryLayout.XY);\n }\n\n /**\n * @inheritDoc\n * @api\n */\n getType() {\n return GeometryType.LINEAR_RING;\n }\n\n /**\n * @inheritDoc\n */\n intersectsExtent(extent) {}\n\n /**\n * Set the coordinates of the linear ring.\n * @param {!Array} coordinates Coordinates.\n * @param {module:ol/geom/GeometryLayout=} opt_layout Layout.\n * @override\n * @api\n */\n setCoordinates(coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 1);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinates(\n this.flatCoordinates, 0, coordinates, this.stride);\n this.changed();\n }\n}\n\n\nexport default LinearRing;\n","/**\n * @module ol/geom/Polygon\n */\nimport {extend} from '../array.js';\nimport {closestSquaredDistanceXY, getCenter} from '../extent.js';\nimport GeometryLayout from '../geom/GeometryLayout.js';\nimport GeometryType from '../geom/GeometryType.js';\nimport LinearRing from '../geom/LinearRing.js';\nimport Point from '../geom/Point.js';\nimport SimpleGeometry from '../geom/SimpleGeometry.js';\nimport {offset as sphereOffset} from '../sphere.js';\nimport {linearRings as linearRingsArea} from '../geom/flat/area.js';\nimport {assignClosestArrayPoint, arrayMaxSquaredDelta} from '../geom/flat/closest.js';\nimport {linearRingsContainsXY} from '../geom/flat/contains.js';\nimport {deflateCoordinatesArray} from '../geom/flat/deflate.js';\nimport {inflateCoordinatesArray} from '../geom/flat/inflate.js';\nimport {getInteriorPointOfArray} from '../geom/flat/interiorpoint.js';\nimport {intersectsLinearRingArray} from '../geom/flat/intersectsextent.js';\nimport {linearRingIsOriented, orientLinearRings} from '../geom/flat/orient.js';\nimport {quantizeArray} from '../geom/flat/simplify.js';\nimport {modulo} from '../math.js';\n\n/**\n * @classdesc\n * Polygon geometry.\n *\n * @api\n */\nclass Polygon extends SimpleGeometry {\n\n /**\n * @param {!Array>|!Array} coordinates\n * Array of linear rings that define the polygon. The first linear ring of the\n * array defines the outer-boundary or surface of the polygon. Each subsequent\n * linear ring defines a hole in the surface of the polygon. A linear ring is\n * an array of vertices' coordinates where the first coordinate and the last are\n * equivalent. (For internal use, flat coordinates in combination with\n * `opt_layout` and `opt_ends` are also accepted.)\n * @param {module:ol/geom/GeometryLayout=} opt_layout Layout.\n * @param {Array=} opt_ends Ends (for internal use with flat coordinates).\n */\n constructor(coordinates, opt_layout, opt_ends) {\n\n super();\n\n /**\n * @type {Array}\n * @private\n */\n this.ends_ = [];\n\n /**\n * @private\n * @type {number}\n */\n this.flatInteriorPointRevision_ = -1;\n\n /**\n * @private\n * @type {module:ol/coordinate~Coordinate}\n */\n this.flatInteriorPoint_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDeltaRevision_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.orientedRevision_ = -1;\n\n /**\n * @private\n * @type {Array}\n */\n this.orientedFlatCoordinates_ = null;\n\n if (opt_layout !== undefined && opt_ends) {\n this.setFlatCoordinates(opt_layout, coordinates);\n this.ends_ = opt_ends;\n } else {\n this.setCoordinates(coordinates, opt_layout);\n }\n\n }\n\n /**\n * Append the passed linear ring to this polygon.\n * @param {module:ol/geom/LinearRing} linearRing Linear ring.\n * @api\n */\n appendLinearRing(linearRing) {\n if (!this.flatCoordinates) {\n this.flatCoordinates = linearRing.getFlatCoordinates().slice();\n } else {\n extend(this.flatCoordinates, linearRing.getFlatCoordinates());\n }\n this.ends_.push(this.flatCoordinates.length);\n this.changed();\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!module:ol/geom/Polygon} Clone.\n * @override\n * @api\n */\n clone() {\n return new Polygon(this.flatCoordinates.slice(), this.layout, this.ends_.slice());\n }\n\n /**\n * @inheritDoc\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n if (this.maxDeltaRevision_ != this.getRevision()) {\n this.maxDelta_ = Math.sqrt(arrayMaxSquaredDelta(\n this.flatCoordinates, 0, this.ends_, this.stride, 0));\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestArrayPoint(\n this.flatCoordinates, 0, this.ends_, this.stride,\n this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);\n }\n\n /**\n * @inheritDoc\n */\n containsXY(x, y) {\n return linearRingsContainsXY(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, x, y);\n }\n\n /**\n * Return the area of the polygon on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\n getArea() {\n return linearRingsArea(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride);\n }\n\n /**\n * Get the coordinate array for this geometry. This array has the structure\n * of a GeoJSON coordinate array for polygons.\n *\n * @param {boolean=} opt_right Orient coordinates according to the right-hand\n * rule (counter-clockwise for exterior and clockwise for interior rings).\n * If `false`, coordinates will be oriented according to the left-hand rule\n * (clockwise for exterior and counter-clockwise for interior rings).\n * By default, coordinate orientation will depend on how the geometry was\n * constructed.\n * @return {Array>} Coordinates.\n * @override\n * @api\n */\n getCoordinates(opt_right) {\n let flatCoordinates;\n if (opt_right !== undefined) {\n flatCoordinates = this.getOrientedFlatCoordinates().slice();\n orientLinearRings(\n flatCoordinates, 0, this.ends_, this.stride, opt_right);\n } else {\n flatCoordinates = this.flatCoordinates;\n }\n\n return inflateCoordinatesArray(\n flatCoordinates, 0, this.ends_, this.stride);\n }\n\n /**\n * @return {Array} Ends.\n */\n getEnds() {\n return this.ends_;\n }\n\n /**\n * @return {Array} Interior point.\n */\n getFlatInteriorPoint() {\n if (this.flatInteriorPointRevision_ != this.getRevision()) {\n const flatCenter = getCenter(this.getExtent());\n this.flatInteriorPoint_ = getInteriorPointOfArray(\n this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride,\n flatCenter, 0);\n this.flatInteriorPointRevision_ = this.getRevision();\n }\n return this.flatInteriorPoint_;\n }\n\n /**\n * Return an interior point of the polygon.\n * @return {module:ol/geom/Point} Interior point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n * @api\n */\n getInteriorPoint() {\n return new Point(this.getFlatInteriorPoint(), GeometryLayout.XYM);\n }\n\n /**\n * Return the number of rings of the polygon, this includes the exterior\n * ring and any interior rings.\n *\n * @return {number} Number of rings.\n * @api\n */\n getLinearRingCount() {\n return this.ends_.length;\n }\n\n /**\n * Return the Nth linear ring of the polygon geometry. Return `null` if the\n * given index is out of range.\n * The exterior linear ring is available at index `0` and the interior rings\n * at index `1` and beyond.\n *\n * @param {number} index Index.\n * @return {module:ol/geom/LinearRing} Linear ring.\n * @api\n */\n getLinearRing(index) {\n if (index < 0 || this.ends_.length <= index) {\n return null;\n }\n return new LinearRing(this.flatCoordinates.slice(\n index === 0 ? 0 : this.ends_[index - 1], this.ends_[index]), this.layout);\n }\n\n /**\n * Return the linear rings of the polygon.\n * @return {Array} Linear rings.\n * @api\n */\n getLinearRings() {\n const layout = this.layout;\n const flatCoordinates = this.flatCoordinates;\n const ends = this.ends_;\n const linearRings = [];\n let offset = 0;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const linearRing = new LinearRing(flatCoordinates.slice(offset, end), layout);\n linearRings.push(linearRing);\n offset = end;\n }\n return linearRings;\n }\n\n /**\n * @return {Array} Oriented flat coordinates.\n */\n getOrientedFlatCoordinates() {\n if (this.orientedRevision_ != this.getRevision()) {\n const flatCoordinates = this.flatCoordinates;\n if (linearRingIsOriented(\n flatCoordinates, 0, this.ends_, this.stride)) {\n this.orientedFlatCoordinates_ = flatCoordinates;\n } else {\n this.orientedFlatCoordinates_ = flatCoordinates.slice();\n this.orientedFlatCoordinates_.length =\n orientLinearRings(\n this.orientedFlatCoordinates_, 0, this.ends_, this.stride);\n }\n this.orientedRevision_ = this.getRevision();\n }\n return this.orientedFlatCoordinates_;\n }\n\n /**\n * @inheritDoc\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n const simplifiedFlatCoordinates = [];\n const simplifiedEnds = [];\n simplifiedFlatCoordinates.length = quantizeArray(\n this.flatCoordinates, 0, this.ends_, this.stride,\n Math.sqrt(squaredTolerance),\n simplifiedFlatCoordinates, 0, simplifiedEnds);\n return new Polygon(simplifiedFlatCoordinates, GeometryLayout.XY, simplifiedEnds);\n }\n\n /**\n * @inheritDoc\n * @api\n */\n getType() {\n return GeometryType.POLYGON;\n }\n\n /**\n * @inheritDoc\n * @api\n */\n intersectsExtent(extent) {\n return intersectsLinearRingArray(\n this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, extent);\n }\n\n /**\n * Set the coordinates of the polygon.\n * @param {!Array>} coordinates Coordinates.\n * @param {module:ol/geom/GeometryLayout=} opt_layout Layout.\n * @override\n * @api\n */\n setCoordinates(coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 2);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n const ends = deflateCoordinatesArray(\n this.flatCoordinates, 0, coordinates, this.stride, this.ends_);\n this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];\n this.changed();\n }\n}\n\n\nexport default Polygon;\n\n\n/**\n * Create an approximation of a circle on the surface of a sphere.\n * @param {module:ol/coordinate~Coordinate} center Center (`[lon, lat]` in degrees).\n * @param {number} radius The great-circle distance from the center to\n * the polygon vertices.\n * @param {number=} opt_n Optional number of vertices for the resulting\n * polygon. Default is `32`.\n * @param {number=} opt_sphereRadius Optional radius for the sphere (defaults to\n * the Earth's mean radius using the WGS84 ellipsoid).\n * @return {module:ol/geom/Polygon} The \"circular\" polygon.\n * @api\n */\nexport function circular(center, radius, opt_n, opt_sphereRadius) {\n const n = opt_n ? opt_n : 32;\n /** @type {Array} */\n const flatCoordinates = [];\n for (let i = 0; i < n; ++i) {\n extend(flatCoordinates, sphereOffset(center, radius, 2 * Math.PI * i / n, opt_sphereRadius));\n }\n flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);\n return new Polygon(flatCoordinates, GeometryLayout.XY, [flatCoordinates.length]);\n}\n\n\n/**\n * Create a polygon from an extent. The layout used is `XY`.\n * @param {module:ol/extent~Extent} extent The extent.\n * @return {module:ol/geom/Polygon} The polygon.\n * @api\n */\nexport function fromExtent(extent) {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const flatCoordinates =\n [minX, minY, minX, maxY, maxX, maxY, maxX, minY, minX, minY];\n return new Polygon(flatCoordinates, GeometryLayout.XY, [flatCoordinates.length]);\n}\n\n\n/**\n * Create a regular polygon from a circle.\n * @param {module:ol/geom/Circle} circle Circle geometry.\n * @param {number=} opt_sides Number of sides of the polygon. Default is 32.\n * @param {number=} opt_angle Start angle for the first vertex of the polygon in\n * radians. Default is 0.\n * @return {module:ol/geom/Polygon} Polygon geometry.\n * @api\n */\nexport function fromCircle(circle, opt_sides, opt_angle) {\n const sides = opt_sides ? opt_sides : 32;\n const stride = circle.getStride();\n const layout = circle.getLayout();\n const center = circle.getCenter();\n const arrayLength = stride * (sides + 1);\n const flatCoordinates = new Array(arrayLength);\n for (let i = 0; i < arrayLength; i += stride) {\n flatCoordinates[i] = 0;\n flatCoordinates[i + 1] = 0;\n for (let j = 2; j < stride; j++) {\n flatCoordinates[i + j] = center[j];\n }\n }\n const ends = [flatCoordinates.length];\n const polygon = new Polygon(flatCoordinates, layout, ends);\n makeRegular(polygon, center, circle.getRadius(), opt_angle);\n return polygon;\n}\n\n\n/**\n * Modify the coordinates of a polygon to make it a regular polygon.\n * @param {module:ol/geom/Polygon} polygon Polygon geometry.\n * @param {module:ol/coordinate~Coordinate} center Center of the regular polygon.\n * @param {number} radius Radius of the regular polygon.\n * @param {number=} opt_angle Start angle for the first vertex of the polygon in\n * radians. Default is 0.\n */\nexport function makeRegular(polygon, center, radius, opt_angle) {\n const flatCoordinates = polygon.getFlatCoordinates();\n const stride = polygon.getStride();\n const sides = flatCoordinates.length / stride - 1;\n const startAngle = opt_angle ? opt_angle : 0;\n for (let i = 0; i <= sides; ++i) {\n const offset = i * stride;\n const angle = startAngle + (modulo(i, sides) * 2 * Math.PI / sides);\n flatCoordinates[offset] = center[0] + (radius * Math.cos(angle));\n flatCoordinates[offset + 1] = center[1] + (radius * Math.sin(angle));\n }\n polygon.changed();\n}\n","/**\n * @module ol/style/Style\n */\n\n/**\n * Feature styles.\n *\n * If no style is defined, the following default style is used:\n * ```js\n * import {Fill, Stroke, Circle, Style} from 'ol/style';\n *\n * var fill = new Fill({\n * color: 'rgba(255,255,255,0.4)'\n * });\n * var stroke = new Stroke({\n * color: '#3399CC',\n * width: 1.25\n * });\n * var styles = [\n * new Style({\n * image: new Circle({\n * fill: fill,\n * stroke: stroke,\n * radius: 5\n * }),\n * fill: fill,\n * stroke: stroke\n * })\n * ];\n * ```\n *\n * A separate editing style has the following defaults:\n * ```js\n * import {Fill, Stroke, Circle, Style} from 'ol/style';\n * import GeometryType from 'ol/geom/GeometryType';\n *\n * var white = [255, 255, 255, 1];\n * var blue = [0, 153, 255, 1];\n * var width = 3;\n * styles[GeometryType.POLYGON] = [\n * new Style({\n * fill: new Fill({\n * color: [255, 255, 255, 0.5]\n * })\n * })\n * ];\n * styles[GeometryType.MULTI_POLYGON] =\n * styles[GeometryType.POLYGON];\n * styles[GeometryType.LINE_STRING] = [\n * new Style({\n * stroke: new Stroke({\n * color: white,\n * width: width + 2\n * })\n * }),\n * new Style({\n * stroke: new Stroke({\n * color: blue,\n * width: width\n * })\n * })\n * ];\n * styles[GeometryType.MULTI_LINE_STRING] =\n * styles[GeometryType.LINE_STRING];\n * styles[GeometryType.POINT] = [\n * new Style({\n * image: new Circle({\n * radius: width * 2,\n * fill: new Fill({\n * color: blue\n * }),\n * stroke: new Stroke({\n * color: white,\n * width: width / 2\n * })\n * }),\n * zIndex: Infinity\n * })\n * ];\n * styles[GeometryType.MULTI_POINT] =\n * styles[GeometryType.POINT];\n * styles[GeometryType.GEOMETRY_COLLECTION] =\n * styles[GeometryType.POLYGON].concat(\n * styles[GeometryType.LINE_STRING],\n * styles[GeometryType.POINT]\n * );\n * ```\n */\nimport {assert} from '../asserts.js';\nimport GeometryType from '../geom/GeometryType.js';\nimport CircleStyle from '../style/Circle.js';\nimport Fill from '../style/Fill.js';\nimport Stroke from '../style/Stroke.js';\n\n\n/**\n * A function that takes an {@link module:ol/Feature} and a `{number}`\n * representing the view's resolution. The function should return a\n * {@link module:ol/style/Style} or an array of them. This way e.g. a\n * vector layer can be styled.\n *\n * @typedef {function((module:ol/Feature|module:ol/render/Feature), number):\n * (module:ol/style/Style|Array)} StyleFunction\n */\n\n\n/**\n * A function that takes an {@link module:ol/Feature} as argument and returns an\n * {@link module:ol/geom/Geometry} that will be rendered and styled for the feature.\n *\n * @typedef {function((module:ol/Feature|module:ol/render/Feature)):\n * (module:ol/geom/Geometry|module:ol/render/Feature|undefined)} GeometryFunction\n */\n\n\n/**\n * Custom renderer function. Takes two arguments:\n *\n * 1. The pixel coordinates of the geometry in GeoJSON notation.\n * 2. The {@link module:ol/render~State} of the layer renderer.\n *\n * @typedef {function((module:ol/coordinate~Coordinate|Array|Array>),module:ol/render~State)}\n * RenderFunction\n */\n\n\n/**\n * @typedef {Object} Options\n * @property {string|module:ol/geom/Geometry|module:ol/style/Style~GeometryFunction} [geometry] Feature property or geometry\n * or function returning a geometry to render for this style.\n * @property {module:ol/style/Fill} [fill] Fill style.\n * @property {module:ol/style/Image} [image] Image style.\n * @property {module:ol/style/Style~RenderFunction} [renderer] Custom renderer. When configured, `fill`, `stroke` and `image` will be\n * ignored, and the provided function will be called with each render frame for each geometry.\n * @property {module:ol/style/Stroke} [stroke] Stroke style.\n * @property {module:ol/style/Text} [text] Text style.\n * @property {number} [zIndex] Z index.\n */\n\n\n/**\n * @classdesc\n * Container for vector feature rendering styles. Any changes made to the style\n * or its children through `set*()` methods will not take effect until the\n * feature or layer that uses the style is re-rendered.\n * @api\n */\nclass Style {\n /**\n * @param {module:ol/style/Style~Options=} opt_options Style options.\n */\n constructor(opt_options) {\n\n const options = opt_options || {};\n\n /**\n * @private\n * @type {string|module:ol/geom/Geometry|module:ol/style/Style~GeometryFunction}\n */\n this.geometry_ = null;\n\n /**\n * @private\n * @type {!module:ol/style/Style~GeometryFunction}\n */\n this.geometryFunction_ = defaultGeometryFunction;\n\n if (options.geometry !== undefined) {\n this.setGeometry(options.geometry);\n }\n\n /**\n * @private\n * @type {module:ol/style/Fill}\n */\n this.fill_ = options.fill !== undefined ? options.fill : null;\n\n /**\n * @private\n * @type {module:ol/style/Image}\n */\n this.image_ = options.image !== undefined ? options.image : null;\n\n /**\n * @private\n * @type {module:ol/style/Style~RenderFunction|null}\n */\n this.renderer_ = options.renderer !== undefined ? options.renderer : null;\n\n /**\n * @private\n * @type {module:ol/style/Stroke}\n */\n this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n\n /**\n * @private\n * @type {module:ol/style/Text}\n */\n this.text_ = options.text !== undefined ? options.text : null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.zIndex_ = options.zIndex;\n\n }\n\n /**\n * Clones the style.\n * @return {module:ol/style/Style} The cloned style.\n * @api\n */\n clone() {\n let geometry = this.getGeometry();\n if (geometry && geometry.clone) {\n geometry = geometry.clone();\n }\n return new Style({\n geometry: geometry,\n fill: this.getFill() ? this.getFill().clone() : undefined,\n image: this.getImage() ? this.getImage().clone() : undefined,\n stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n text: this.getText() ? this.getText().clone() : undefined,\n zIndex: this.getZIndex()\n });\n }\n\n /**\n * Get the custom renderer function that was configured with\n * {@link #setRenderer} or the `renderer` constructor option.\n * @return {module:ol/style/Style~RenderFunction|null} Custom renderer function.\n * @api\n */\n getRenderer() {\n return this.renderer_;\n }\n\n /**\n * Sets a custom renderer function for this style. When set, `fill`, `stroke`\n * and `image` options of the style will be ignored.\n * @param {module:ol/style/Style~RenderFunction|null} renderer Custom renderer function.\n * @api\n */\n setRenderer(renderer) {\n this.renderer_ = renderer;\n }\n\n /**\n * Get the geometry to be rendered.\n * @return {string|module:ol/geom/Geometry|module:ol/style/Style~GeometryFunction}\n * Feature property or geometry or function that returns the geometry that will\n * be rendered with this style.\n * @api\n */\n getGeometry() {\n return this.geometry_;\n }\n\n /**\n * Get the function used to generate a geometry for rendering.\n * @return {!module:ol/style/Style~GeometryFunction} Function that is called with a feature\n * and returns the geometry to render instead of the feature's geometry.\n * @api\n */\n getGeometryFunction() {\n return this.geometryFunction_;\n }\n\n /**\n * Get the fill style.\n * @return {module:ol/style/Fill} Fill style.\n * @api\n */\n getFill() {\n return this.fill_;\n }\n\n /**\n * Set the fill style.\n * @param {module:ol/style/Fill} fill Fill style.\n * @api\n */\n setFill(fill) {\n this.fill_ = fill;\n }\n\n /**\n * Get the image style.\n * @return {module:ol/style/Image} Image style.\n * @api\n */\n getImage() {\n return this.image_;\n }\n\n /**\n * Set the image style.\n * @param {module:ol/style/Image} image Image style.\n * @api\n */\n setImage(image) {\n this.image_ = image;\n }\n\n /**\n * Get the stroke style.\n * @return {module:ol/style/Stroke} Stroke style.\n * @api\n */\n getStroke() {\n return this.stroke_;\n }\n\n /**\n * Set the stroke style.\n * @param {module:ol/style/Stroke} stroke Stroke style.\n * @api\n */\n setStroke(stroke) {\n this.stroke_ = stroke;\n }\n\n /**\n * Get the text style.\n * @return {module:ol/style/Text} Text style.\n * @api\n */\n getText() {\n return this.text_;\n }\n\n /**\n * Set the text style.\n * @param {module:ol/style/Text} text Text style.\n * @api\n */\n setText(text) {\n this.text_ = text;\n }\n\n /**\n * Get the z-index for the style.\n * @return {number|undefined} ZIndex.\n * @api\n */\n getZIndex() {\n return this.zIndex_;\n }\n\n /**\n * Set a geometry that is rendered instead of the feature's geometry.\n *\n * @param {string|module:ol/geom/Geometry|module:ol/style/Style~GeometryFunction} geometry\n * Feature property or geometry or function returning a geometry to render\n * for this style.\n * @api\n */\n setGeometry(geometry) {\n if (typeof geometry === 'function') {\n this.geometryFunction_ = geometry;\n } else if (typeof geometry === 'string') {\n this.geometryFunction_ = function(feature) {\n return (\n /** @type {module:ol/geom/Geometry} */ (feature.get(geometry))\n );\n };\n } else if (!geometry) {\n this.geometryFunction_ = defaultGeometryFunction;\n } else if (geometry !== undefined) {\n this.geometryFunction_ = function() {\n return (\n /** @type {module:ol/geom/Geometry} */ (geometry)\n );\n };\n }\n this.geometry_ = geometry;\n }\n\n /**\n * Set the z-index.\n *\n * @param {number|undefined} zIndex ZIndex.\n * @api\n */\n setZIndex(zIndex) {\n this.zIndex_ = zIndex;\n }\n}\n\n\n/**\n * Convert the provided object into a style function. Functions passed through\n * unchanged. Arrays of module:ol/style/Style or single style objects wrapped in a\n * new style function.\n * @param {module:ol/style/Style~StyleFunction|Array|module:ol/style/Style} obj\n * A style function, a single style, or an array of styles.\n * @return {module:ol/style/Style~StyleFunction} A style function.\n */\nexport function toFunction(obj) {\n let styleFunction;\n\n if (typeof obj === 'function') {\n styleFunction = obj;\n } else {\n /**\n * @type {Array}\n */\n let styles;\n if (Array.isArray(obj)) {\n styles = obj;\n } else {\n assert(obj instanceof Style,\n 41); // Expected an `module:ol/style/Style~Style` or an array of `module:ol/style/Style~Style`\n styles = [obj];\n }\n styleFunction = function() {\n return styles;\n };\n }\n return styleFunction;\n}\n\n\n/**\n * @type {Array}\n */\nlet defaultStyles = null;\n\n\n/**\n * @param {module:ol/Feature|module:ol/render/Feature} feature Feature.\n * @param {number} resolution Resolution.\n * @return {Array} Style.\n */\nexport function createDefaultStyle(feature, resolution) {\n // We don't use an immediately-invoked function\n // and a closure so we don't get an error at script evaluation time in\n // browsers that do not support Canvas. (module:ol/style/Circle~CircleStyle does\n // canvas.getContext('2d') at construction time, which will cause an.error\n // in such browsers.)\n if (!defaultStyles) {\n const fill = new Fill({\n color: 'rgba(255,255,255,0.4)'\n });\n const stroke = new Stroke({\n color: '#3399CC',\n width: 1.25\n });\n defaultStyles = [\n new Style({\n image: new CircleStyle({\n fill: fill,\n stroke: stroke,\n radius: 5\n }),\n fill: fill,\n stroke: stroke\n })\n ];\n }\n return defaultStyles;\n}\n\n\n/**\n * Default styles for editing features.\n * @return {Object>} Styles\n */\nexport function createEditingStyle() {\n /** @type {Object>} */\n const styles = {};\n const white = [255, 255, 255, 1];\n const blue = [0, 153, 255, 1];\n const width = 3;\n styles[GeometryType.POLYGON] = [\n new Style({\n fill: new Fill({\n color: [255, 255, 255, 0.5]\n })\n })\n ];\n styles[GeometryType.MULTI_POLYGON] =\n styles[GeometryType.POLYGON];\n\n styles[GeometryType.LINE_STRING] = [\n new Style({\n stroke: new Stroke({\n color: white,\n width: width + 2\n })\n }),\n new Style({\n stroke: new Stroke({\n color: blue,\n width: width\n })\n })\n ];\n styles[GeometryType.MULTI_LINE_STRING] =\n styles[GeometryType.LINE_STRING];\n\n styles[GeometryType.CIRCLE] =\n styles[GeometryType.POLYGON].concat(\n styles[GeometryType.LINE_STRING]\n );\n\n\n styles[GeometryType.POINT] = [\n new Style({\n image: new CircleStyle({\n radius: width * 2,\n fill: new Fill({\n color: blue\n }),\n stroke: new Stroke({\n color: white,\n width: width / 2\n })\n }),\n zIndex: Infinity\n })\n ];\n styles[GeometryType.MULTI_POINT] =\n styles[GeometryType.POINT];\n\n styles[GeometryType.GEOMETRY_COLLECTION] =\n styles[GeometryType.POLYGON].concat(\n styles[GeometryType.LINE_STRING],\n styles[GeometryType.POINT]\n );\n\n return styles;\n}\n\n\n/**\n * Function that is called with a feature and returns its default geometry.\n * @param {module:ol/Feature|module:ol/render/Feature} feature Feature to get the geometry for.\n * @return {module:ol/geom/Geometry|module:ol/render/Feature|undefined} Geometry to render.\n */\nfunction defaultGeometryFunction(feature) {\n return feature.getGeometry();\n}\n\nexport default Style;\n","/**\n * @module ol/geom/flat/simplify\n */\n// Based on simplify-js https://github.com/mourner/simplify-js\n// Copyright (c) 2012, Vladimir Agafonkin\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n\nimport {squaredSegmentDistance, squaredDistance} from '../../math.js';\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {boolean} highQuality Highest quality.\n * @param {Array=} opt_simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @return {Array} Simplified line string.\n */\nexport function simplifyLineString(flatCoordinates, offset, end,\n stride, squaredTolerance, highQuality, opt_simplifiedFlatCoordinates) {\n const simplifiedFlatCoordinates = opt_simplifiedFlatCoordinates !== undefined ?\n opt_simplifiedFlatCoordinates : [];\n if (!highQuality) {\n end = radialDistance(flatCoordinates, offset, end,\n stride, squaredTolerance,\n simplifiedFlatCoordinates, 0);\n flatCoordinates = simplifiedFlatCoordinates;\n offset = 0;\n stride = 2;\n }\n simplifiedFlatCoordinates.length = douglasPeucker(\n flatCoordinates, offset, end, stride, squaredTolerance,\n simplifiedFlatCoordinates, 0);\n return simplifiedFlatCoordinates;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function douglasPeucker(flatCoordinates, offset, end,\n stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {\n const n = (end - offset) / stride;\n if (n < 3) {\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n /** @type {Array} */\n const markers = new Array(n);\n markers[0] = 1;\n markers[n - 1] = 1;\n /** @type {Array} */\n const stack = [offset, end - stride];\n let index = 0;\n while (stack.length > 0) {\n const last = stack.pop();\n const first = stack.pop();\n let maxSquaredDistance = 0;\n const x1 = flatCoordinates[first];\n const y1 = flatCoordinates[first + 1];\n const x2 = flatCoordinates[last];\n const y2 = flatCoordinates[last + 1];\n for (let i = first + stride; i < last; i += stride) {\n const x = flatCoordinates[i];\n const y = flatCoordinates[i + 1];\n const squaredDistance = squaredSegmentDistance(\n x, y, x1, y1, x2, y2);\n if (squaredDistance > maxSquaredDistance) {\n index = i;\n maxSquaredDistance = squaredDistance;\n }\n }\n if (maxSquaredDistance > squaredTolerance) {\n markers[(index - offset) / stride] = 1;\n if (first + stride < index) {\n stack.push(first, index);\n }\n if (index + stride < last) {\n stack.push(index, last);\n }\n }\n }\n for (let i = 0; i < n; ++i) {\n if (markers[i]) {\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride + 1];\n }\n }\n return simplifiedOffset;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerArray(flatCoordinates, offset,\n ends, stride, squaredTolerance, simplifiedFlatCoordinates,\n simplifiedOffset, simplifiedEnds) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = douglasPeucker(\n flatCoordinates, offset, end, stride, squaredTolerance,\n simplifiedFlatCoordinates, simplifiedOffset);\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerMultiArray(\n flatCoordinates, offset, endss, stride, squaredTolerance,\n simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n const simplifiedEnds = [];\n simplifiedOffset = douglasPeuckerArray(\n flatCoordinates, offset, ends, stride, squaredTolerance,\n simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function radialDistance(flatCoordinates, offset, end,\n stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {\n if (end <= offset + stride) {\n // zero or one point, no simplification possible, so copy and return\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n // copy first point\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n let x2 = x1;\n let y2 = y1;\n for (offset += stride; offset < end; offset += stride) {\n x2 = flatCoordinates[offset];\n y2 = flatCoordinates[offset + 1];\n if (squaredDistance(x1, y1, x2, y2) > squaredTolerance) {\n // copy point at offset\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n }\n }\n if (x2 != x1 || y2 != y1) {\n // copy last point\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n }\n return simplifiedOffset;\n}\n\n\n/**\n * @param {number} value Value.\n * @param {number} tolerance Tolerance.\n * @return {number} Rounded value.\n */\nexport function snap(value, tolerance) {\n return tolerance * Math.round(value / tolerance);\n}\n\n\n/**\n * Simplifies a line string using an algorithm designed by Tim Schaub.\n * Coordinates are snapped to the nearest value in a virtual grid and\n * consecutive duplicate coordinates are discarded. This effectively preserves\n * topology as the simplification of any subsection of a line string is\n * independent of the rest of the line string. This means that, for examples,\n * the common edge between two polygons will be simplified to the same line\n * string independently in both polygons. This implementation uses a single\n * pass over the coordinates and eliminates intermediate collinear points.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function quantize(flatCoordinates, offset, end, stride,\n tolerance, simplifiedFlatCoordinates, simplifiedOffset) {\n // do nothing if the line is empty\n if (offset == end) {\n return simplifiedOffset;\n }\n // snap the first coordinate (P1)\n let x1 = snap(flatCoordinates[offset], tolerance);\n let y1 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // add the first coordinate to the output\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n // find the next coordinate that does not snap to the same value as the first\n // coordinate (P2)\n let x2, y2;\n do {\n x2 = snap(flatCoordinates[offset], tolerance);\n y2 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n if (offset == end) {\n // all coordinates snap to the same value, the line collapses to a point\n // push the last snapped value anyway to ensure that the output contains\n // at least two points\n // FIXME should we really return at least two points anyway?\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n }\n } while (x2 == x1 && y2 == y1);\n while (offset < end) {\n // snap the next coordinate (P3)\n const x3 = snap(flatCoordinates[offset], tolerance);\n const y3 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // skip P3 if it is equal to P2\n if (x3 == x2 && y3 == y2) {\n continue;\n }\n // calculate the delta between P1 and P2\n const dx1 = x2 - x1;\n const dy1 = y2 - y1;\n // calculate the delta between P3 and P1\n const dx2 = x3 - x1;\n const dy2 = y3 - y1;\n // if P1, P2, and P3 are colinear and P3 is further from P1 than P2 is from\n // P1 in the same direction then P2 is on the straight line between P1 and\n // P3\n if ((dx1 * dy2 == dy1 * dx2) &&\n ((dx1 < 0 && dx2 < dx1) || dx1 == dx2 || (dx1 > 0 && dx2 > dx1)) &&\n ((dy1 < 0 && dy2 < dy1) || dy1 == dy2 || (dy1 > 0 && dy2 > dy1))) {\n // discard P2 and set P2 = P3\n x2 = x3;\n y2 = y3;\n continue;\n }\n // either P1, P2, and P3 are not colinear, or they are colinear but P3 is\n // between P3 and P1 or on the opposite half of the line to P2. add P2,\n // and continue with P1 = P2 and P2 = P3\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n x2 = x3;\n y2 = y3;\n }\n // add the last point (P2)\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function quantizeArray(\n flatCoordinates, offset, ends, stride,\n tolerance,\n simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = quantize(\n flatCoordinates, offset, end, stride,\n tolerance,\n simplifiedFlatCoordinates, simplifiedOffset);\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function quantizeMultiArray(\n flatCoordinates, offset, endss, stride,\n tolerance,\n simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n const simplifiedEnds = [];\n simplifiedOffset = quantizeArray(\n flatCoordinates, offset, ends, stride,\n tolerance,\n simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n","/**\n * @module ol/tilecoord\n */\n\n\n/**\n * An array of three numbers representing the location of a tile in a tile\n * grid. The order is `z`, `x`, and `y`. `z` is the zoom level.\n * @typedef {Array} TileCoord\n * @api\n */\n\n\n/**\n * @param {number} z Z.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {module:ol/tilecoord~TileCoord=} opt_tileCoord Tile coordinate.\n * @return {module:ol/tilecoord~TileCoord} Tile coordinate.\n */\nexport function createOrUpdate(z, x, y, opt_tileCoord) {\n if (opt_tileCoord !== undefined) {\n opt_tileCoord[0] = z;\n opt_tileCoord[1] = x;\n opt_tileCoord[2] = y;\n return opt_tileCoord;\n } else {\n return [z, x, y];\n }\n}\n\n\n/**\n * @param {number} z Z.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {string} Key.\n */\nexport function getKeyZXY(z, x, y) {\n return z + '/' + x + '/' + y;\n}\n\n\n/**\n * Get the key for a tile coord.\n * @param {module:ol/tilecoord~TileCoord} tileCoord The tile coord.\n * @return {string} Key.\n */\nexport function getKey(tileCoord) {\n return getKeyZXY(tileCoord[0], tileCoord[1], tileCoord[2]);\n}\n\n\n/**\n * Get a tile coord given a key.\n * @param {string} key The tile coord key.\n * @return {module:ol/tilecoord~TileCoord} The tile coord.\n */\nexport function fromKey(key) {\n return key.split('/').map(Number);\n}\n\n\n/**\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile coord.\n * @return {number} Hash.\n */\nexport function hash(tileCoord) {\n return (tileCoord[1] << tileCoord[0]) + tileCoord[2];\n}\n\n\n/**\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile coord.\n * @return {string} Quad key.\n */\nexport function quadKey(tileCoord) {\n const z = tileCoord[0];\n const digits = new Array(z);\n let mask = 1 << (z - 1);\n let i, charCode;\n for (i = 0; i < z; ++i) {\n // 48 is charCode for 0 - '0'.charCodeAt(0)\n charCode = 48;\n if (tileCoord[1] & mask) {\n charCode += 1;\n }\n if (tileCoord[2] & mask) {\n charCode += 2;\n }\n digits[i] = String.fromCharCode(charCode);\n mask >>= 1;\n }\n return digits.join('');\n}\n\n\n/**\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile coordinate.\n * @param {!module:ol/tilegrid/TileGrid} tileGrid Tile grid.\n * @return {boolean} Tile coordinate is within extent and zoom level range.\n */\nexport function withinExtentAndZ(tileCoord, tileGrid) {\n const z = tileCoord[0];\n const x = tileCoord[1];\n const y = tileCoord[2];\n\n if (tileGrid.getMinZoom() > z || z > tileGrid.getMaxZoom()) {\n return false;\n }\n const extent = tileGrid.getExtent();\n let tileRange;\n if (!extent) {\n tileRange = tileGrid.getFullTileRange(z);\n } else {\n tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);\n }\n if (!tileRange) {\n return true;\n } else {\n return tileRange.containsXY(x, y);\n }\n}\n","/**\n * @module ol/tilegrid/TileGrid\n */\nimport {DEFAULT_TILE_SIZE} from './common.js';\nimport {assert} from '../asserts.js';\nimport TileRange, {createOrUpdate as createOrUpdateTileRange} from '../TileRange.js';\nimport {isSorted, linearFindNearest} from '../array.js';\nimport {createOrUpdate, getTopLeft} from '../extent.js';\nimport {clamp} from '../math.js';\nimport {toSize} from '../size.js';\nimport {createOrUpdate as createOrUpdateTileCoord} from '../tilecoord.js';\n\n\n/**\n * @private\n * @type {module:ol/tilecoord~TileCoord}\n */\nconst tmpTileCoord = [0, 0, 0];\n\n\n/**\n * @typedef {Object} Options\n * @property {module:ol/extent~Extent} [extent] Extent for the tile grid. No tiles outside this\n * extent will be requested by {@link module:ol/source/Tile} sources. When no `origin` or\n * `origins` are configured, the `origin` will be set to the top-left corner of the extent.\n * @property {number} [minZoom=0] Minimum zoom.\n * @property {module:ol/coordinate~Coordinate} [origin] The tile grid origin, i.e. where the `x`\n * and `y` axes meet (`[z, 0, 0]`). Tile coordinates increase left to right and upwards. If not\n * specified, `extent` or `origins` must be provided.\n * @property {Array} [origins] Tile grid origins, i.e. where\n * the `x` and `y` axes meet (`[z, 0, 0]`), for each zoom level. If given, the array length\n * should match the length of the `resolutions` array, i.e. each resolution can have a different\n * origin. Tile coordinates increase left to right and upwards. If not specified, `extent` or\n * `origin` must be provided.\n * @property {!Array} resolutions Resolutions. The array index of each resolution needs\n * to match the zoom level. This means that even if a `minZoom` is configured, the resolutions\n * array will have a length of `maxZoom + 1`.\n * @property {Array} [sizes] Sizes.\n * @property {number|module:ol/size~Size} [tileSize] Tile size.\n * Default is `[256, 256]`.\n * @property {Array} [tileSizes] Tile sizes. If given, the array length\n * should match the length of the `resolutions` array, i.e. each resolution can have a different\n * tile size.\n */\n\n\n/**\n * @classdesc\n * Base class for setting the grid pattern for sources accessing tiled-image\n * servers.\n * @api\n */\nclass TileGrid {\n /**\n * @param {module:ol/tilegrid/TileGrid~Options} options Tile grid options.\n */\n constructor(options) {\n\n /**\n * @protected\n * @type {number}\n */\n this.minZoom = options.minZoom !== undefined ? options.minZoom : 0;\n\n /**\n * @private\n * @type {!Array}\n */\n this.resolutions_ = options.resolutions;\n assert(isSorted(this.resolutions_, function(a, b) {\n return b - a;\n }, true), 17); // `resolutions` must be sorted in descending order\n\n\n // check if we've got a consistent zoom factor and origin\n let zoomFactor;\n if (!options.origins) {\n for (let i = 0, ii = this.resolutions_.length - 1; i < ii; ++i) {\n if (!zoomFactor) {\n zoomFactor = this.resolutions_[i] / this.resolutions_[i + 1];\n } else {\n if (this.resolutions_[i] / this.resolutions_[i + 1] !== zoomFactor) {\n zoomFactor = undefined;\n break;\n }\n }\n }\n }\n\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.zoomFactor_ = zoomFactor;\n\n\n /**\n * @protected\n * @type {number}\n */\n this.maxZoom = this.resolutions_.length - 1;\n\n /**\n * @private\n * @type {module:ol/coordinate~Coordinate}\n */\n this.origin_ = options.origin !== undefined ? options.origin : null;\n\n /**\n * @private\n * @type {Array}\n */\n this.origins_ = null;\n if (options.origins !== undefined) {\n this.origins_ = options.origins;\n assert(this.origins_.length == this.resolutions_.length,\n 20); // Number of `origins` and `resolutions` must be equal\n }\n\n const extent = options.extent;\n\n if (extent !== undefined &&\n !this.origin_ && !this.origins_) {\n this.origin_ = getTopLeft(extent);\n }\n\n assert(\n (!this.origin_ && this.origins_) || (this.origin_ && !this.origins_),\n 18); // Either `origin` or `origins` must be configured, never both\n\n /**\n * @private\n * @type {Array}\n */\n this.tileSizes_ = null;\n if (options.tileSizes !== undefined) {\n this.tileSizes_ = options.tileSizes;\n assert(this.tileSizes_.length == this.resolutions_.length,\n 19); // Number of `tileSizes` and `resolutions` must be equal\n }\n\n /**\n * @private\n * @type {number|module:ol/size~Size}\n */\n this.tileSize_ = options.tileSize !== undefined ?\n options.tileSize :\n !this.tileSizes_ ? DEFAULT_TILE_SIZE : null;\n assert(\n (!this.tileSize_ && this.tileSizes_) ||\n (this.tileSize_ && !this.tileSizes_),\n 22); // Either `tileSize` or `tileSizes` must be configured, never both\n\n /**\n * @private\n * @type {module:ol/extent~Extent}\n */\n this.extent_ = extent !== undefined ? extent : null;\n\n\n /**\n * @private\n * @type {Array}\n */\n this.fullTileRanges_ = null;\n\n /**\n * @private\n * @type {module:ol/size~Size}\n */\n this.tmpSize_ = [0, 0];\n\n if (options.sizes !== undefined) {\n this.fullTileRanges_ = options.sizes.map(function(size, z) {\n const tileRange = new TileRange(\n Math.min(0, size[0]), Math.max(size[0] - 1, -1),\n Math.min(0, size[1]), Math.max(size[1] - 1, -1));\n return tileRange;\n }, this);\n } else if (extent) {\n this.calculateTileRanges_(extent);\n }\n\n }\n\n /**\n * Call a function with each tile coordinate for a given extent and zoom level.\n *\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {number} zoom Integer zoom level.\n * @param {function(module:ol/tilecoord~TileCoord)} callback Function called with each tile coordinate.\n * @api\n */\n forEachTileCoord(extent, zoom, callback) {\n const tileRange = this.getTileRangeForExtentAndZ(extent, zoom);\n for (let i = tileRange.minX, ii = tileRange.maxX; i <= ii; ++i) {\n for (let j = tileRange.minY, jj = tileRange.maxY; j <= jj; ++j) {\n callback([zoom, i, j]);\n }\n }\n }\n\n /**\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile coordinate.\n * @param {function(this: T, number, module:ol/TileRange): boolean} callback Callback.\n * @param {T=} opt_this The object to use as `this` in `callback`.\n * @param {module:ol/TileRange=} opt_tileRange Temporary module:ol/TileRange object.\n * @param {module:ol/extent~Extent=} opt_extent Temporary module:ol/extent~Extent object.\n * @return {boolean} Callback succeeded.\n * @template T\n */\n forEachTileCoordParentTileRange(tileCoord, callback, opt_this, opt_tileRange, opt_extent) {\n let tileRange, x, y;\n let tileCoordExtent = null;\n let z = tileCoord[0] - 1;\n if (this.zoomFactor_ === 2) {\n x = tileCoord[1];\n y = tileCoord[2];\n } else {\n tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent);\n }\n while (z >= this.minZoom) {\n if (this.zoomFactor_ === 2) {\n x = Math.floor(x / 2);\n y = Math.floor(y / 2);\n tileRange = createOrUpdateTileRange(x, x, y, y, opt_tileRange);\n } else {\n tileRange = this.getTileRangeForExtentAndZ(tileCoordExtent, z, opt_tileRange);\n }\n if (callback.call(opt_this, z, tileRange)) {\n return true;\n }\n --z;\n }\n return false;\n }\n\n /**\n * Get the extent for this tile grid, if it was configured.\n * @return {module:ol/extent~Extent} Extent.\n */\n getExtent() {\n return this.extent_;\n }\n\n /**\n * Get the maximum zoom level for the grid.\n * @return {number} Max zoom.\n * @api\n */\n getMaxZoom() {\n return this.maxZoom;\n }\n\n /**\n * Get the minimum zoom level for the grid.\n * @return {number} Min zoom.\n * @api\n */\n getMinZoom() {\n return this.minZoom;\n }\n\n /**\n * Get the origin for the grid at the given zoom level.\n * @param {number} z Integer zoom level.\n * @return {module:ol/coordinate~Coordinate} Origin.\n * @api\n */\n getOrigin(z) {\n if (this.origin_) {\n return this.origin_;\n } else {\n return this.origins_[z];\n }\n }\n\n /**\n * Get the resolution for the given zoom level.\n * @param {number} z Integer zoom level.\n * @return {number} Resolution.\n * @api\n */\n getResolution(z) {\n return this.resolutions_[z];\n }\n\n /**\n * Get the list of resolutions for the tile grid.\n * @return {Array} Resolutions.\n * @api\n */\n getResolutions() {\n return this.resolutions_;\n }\n\n /**\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile coordinate.\n * @param {module:ol/TileRange=} opt_tileRange Temporary module:ol/TileRange object.\n * @param {module:ol/extent~Extent=} opt_extent Temporary module:ol/extent~Extent object.\n * @return {module:ol/TileRange} Tile range.\n */\n getTileCoordChildTileRange(tileCoord, opt_tileRange, opt_extent) {\n if (tileCoord[0] < this.maxZoom) {\n if (this.zoomFactor_ === 2) {\n const minX = tileCoord[1] * 2;\n const minY = tileCoord[2] * 2;\n return createOrUpdateTileRange(minX, minX + 1, minY, minY + 1, opt_tileRange);\n }\n const tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent);\n return this.getTileRangeForExtentAndZ(\n tileCoordExtent, tileCoord[0] + 1, opt_tileRange);\n }\n return null;\n }\n\n /**\n * Get the extent for a tile range.\n * @param {number} z Integer zoom level.\n * @param {module:ol/TileRange} tileRange Tile range.\n * @param {module:ol/extent~Extent=} opt_extent Temporary module:ol/extent~Extent object.\n * @return {module:ol/extent~Extent} Extent.\n */\n getTileRangeExtent(z, tileRange, opt_extent) {\n const origin = this.getOrigin(z);\n const resolution = this.getResolution(z);\n const tileSize = toSize(this.getTileSize(z), this.tmpSize_);\n const minX = origin[0] + tileRange.minX * tileSize[0] * resolution;\n const maxX = origin[0] + (tileRange.maxX + 1) * tileSize[0] * resolution;\n const minY = origin[1] + tileRange.minY * tileSize[1] * resolution;\n const maxY = origin[1] + (tileRange.maxY + 1) * tileSize[1] * resolution;\n return createOrUpdate(minX, minY, maxX, maxY, opt_extent);\n }\n\n /**\n * Get a tile range for the given extent and integer zoom level.\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {number} z Integer zoom level.\n * @param {module:ol/TileRange=} opt_tileRange Temporary tile range object.\n * @return {module:ol/TileRange} Tile range.\n */\n getTileRangeForExtentAndZ(extent, z, opt_tileRange) {\n const tileCoord = tmpTileCoord;\n this.getTileCoordForXYAndZ_(extent[0], extent[1], z, false, tileCoord);\n const minX = tileCoord[1];\n const minY = tileCoord[2];\n this.getTileCoordForXYAndZ_(extent[2], extent[3], z, true, tileCoord);\n return createOrUpdateTileRange(minX, tileCoord[1], minY, tileCoord[2], opt_tileRange);\n }\n\n /**\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile coordinate.\n * @return {module:ol/coordinate~Coordinate} Tile center.\n */\n getTileCoordCenter(tileCoord) {\n const origin = this.getOrigin(tileCoord[0]);\n const resolution = this.getResolution(tileCoord[0]);\n const tileSize = toSize(this.getTileSize(tileCoord[0]), this.tmpSize_);\n return [\n origin[0] + (tileCoord[1] + 0.5) * tileSize[0] * resolution,\n origin[1] + (tileCoord[2] + 0.5) * tileSize[1] * resolution\n ];\n }\n\n /**\n * Get the extent of a tile coordinate.\n *\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile coordinate.\n * @param {module:ol/extent~Extent=} opt_extent Temporary extent object.\n * @return {module:ol/extent~Extent} Extent.\n * @api\n */\n getTileCoordExtent(tileCoord, opt_extent) {\n const origin = this.getOrigin(tileCoord[0]);\n const resolution = this.getResolution(tileCoord[0]);\n const tileSize = toSize(this.getTileSize(tileCoord[0]), this.tmpSize_);\n const minX = origin[0] + tileCoord[1] * tileSize[0] * resolution;\n const minY = origin[1] + tileCoord[2] * tileSize[1] * resolution;\n const maxX = minX + tileSize[0] * resolution;\n const maxY = minY + tileSize[1] * resolution;\n return createOrUpdate(minX, minY, maxX, maxY, opt_extent);\n }\n\n /**\n * Get the tile coordinate for the given map coordinate and resolution. This\n * method considers that coordinates that intersect tile boundaries should be\n * assigned the higher tile coordinate.\n *\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n * @param {number} resolution Resolution.\n * @param {module:ol/tilecoord~TileCoord=} opt_tileCoord Destination module:ol/tilecoord~TileCoord object.\n * @return {module:ol/tilecoord~TileCoord} Tile coordinate.\n * @api\n */\n getTileCoordForCoordAndResolution(coordinate, resolution, opt_tileCoord) {\n return this.getTileCoordForXYAndResolution_(\n coordinate[0], coordinate[1], resolution, false, opt_tileCoord);\n }\n\n /**\n * Note that this method should not be called for resolutions that correspond\n * to an integer zoom level. Instead call the `getTileCoordForXYAndZ_` method.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} resolution Resolution (for a non-integer zoom level).\n * @param {boolean} reverseIntersectionPolicy Instead of letting edge\n * intersections go to the higher tile coordinate, let edge intersections\n * go to the lower tile coordinate.\n * @param {module:ol/tilecoord~TileCoord=} opt_tileCoord Temporary module:ol/tilecoord~TileCoord object.\n * @return {module:ol/tilecoord~TileCoord} Tile coordinate.\n * @private\n */\n getTileCoordForXYAndResolution_(x, y, resolution, reverseIntersectionPolicy, opt_tileCoord) {\n const z = this.getZForResolution(resolution);\n const scale = resolution / this.getResolution(z);\n const origin = this.getOrigin(z);\n const tileSize = toSize(this.getTileSize(z), this.tmpSize_);\n\n const adjustX = reverseIntersectionPolicy ? 0.5 : 0;\n const adjustY = reverseIntersectionPolicy ? 0 : 0.5;\n const xFromOrigin = Math.floor((x - origin[0]) / resolution + adjustX);\n const yFromOrigin = Math.floor((y - origin[1]) / resolution + adjustY);\n let tileCoordX = scale * xFromOrigin / tileSize[0];\n let tileCoordY = scale * yFromOrigin / tileSize[1];\n\n if (reverseIntersectionPolicy) {\n tileCoordX = Math.ceil(tileCoordX) - 1;\n tileCoordY = Math.ceil(tileCoordY) - 1;\n } else {\n tileCoordX = Math.floor(tileCoordX);\n tileCoordY = Math.floor(tileCoordY);\n }\n\n return createOrUpdateTileCoord(z, tileCoordX, tileCoordY, opt_tileCoord);\n }\n\n /**\n * Although there is repetition between this method and `getTileCoordForXYAndResolution_`,\n * they should have separate implementations. This method is for integer zoom\n * levels. The other method should only be called for resolutions corresponding\n * to non-integer zoom levels.\n * @param {number} x Map x coordinate.\n * @param {number} y Map y coordinate.\n * @param {number} z Integer zoom level.\n * @param {boolean} reverseIntersectionPolicy Instead of letting edge\n * intersections go to the higher tile coordinate, let edge intersections\n * go to the lower tile coordinate.\n * @param {module:ol/tilecoord~TileCoord=} opt_tileCoord Temporary module:ol/tilecoord~TileCoord object.\n * @return {module:ol/tilecoord~TileCoord} Tile coordinate.\n * @private\n */\n getTileCoordForXYAndZ_(x, y, z, reverseIntersectionPolicy, opt_tileCoord) {\n const origin = this.getOrigin(z);\n const resolution = this.getResolution(z);\n const tileSize = toSize(this.getTileSize(z), this.tmpSize_);\n\n const adjustX = reverseIntersectionPolicy ? 0.5 : 0;\n const adjustY = reverseIntersectionPolicy ? 0 : 0.5;\n const xFromOrigin = Math.floor((x - origin[0]) / resolution + adjustX);\n const yFromOrigin = Math.floor((y - origin[1]) / resolution + adjustY);\n let tileCoordX = xFromOrigin / tileSize[0];\n let tileCoordY = yFromOrigin / tileSize[1];\n\n if (reverseIntersectionPolicy) {\n tileCoordX = Math.ceil(tileCoordX) - 1;\n tileCoordY = Math.ceil(tileCoordY) - 1;\n } else {\n tileCoordX = Math.floor(tileCoordX);\n tileCoordY = Math.floor(tileCoordY);\n }\n\n return createOrUpdateTileCoord(z, tileCoordX, tileCoordY, opt_tileCoord);\n }\n\n /**\n * Get a tile coordinate given a map coordinate and zoom level.\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n * @param {number} z Zoom level.\n * @param {module:ol/tilecoord~TileCoord=} opt_tileCoord Destination module:ol/tilecoord~TileCoord object.\n * @return {module:ol/tilecoord~TileCoord} Tile coordinate.\n * @api\n */\n getTileCoordForCoordAndZ(coordinate, z, opt_tileCoord) {\n return this.getTileCoordForXYAndZ_(\n coordinate[0], coordinate[1], z, false, opt_tileCoord);\n }\n\n /**\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile coordinate.\n * @return {number} Tile resolution.\n */\n getTileCoordResolution(tileCoord) {\n return this.resolutions_[tileCoord[0]];\n }\n\n /**\n * Get the tile size for a zoom level. The type of the return value matches the\n * `tileSize` or `tileSizes` that the tile grid was configured with. To always\n * get an `module:ol/size~Size`, run the result through `module:ol/size~Size.toSize()`.\n * @param {number} z Z.\n * @return {number|module:ol/size~Size} Tile size.\n * @api\n */\n getTileSize(z) {\n if (this.tileSize_) {\n return this.tileSize_;\n } else {\n return this.tileSizes_[z];\n }\n }\n\n /**\n * @param {number} z Zoom level.\n * @return {module:ol/TileRange} Extent tile range for the specified zoom level.\n */\n getFullTileRange(z) {\n if (!this.fullTileRanges_) {\n return null;\n } else {\n return this.fullTileRanges_[z];\n }\n }\n\n /**\n * @param {number} resolution Resolution.\n * @param {number=} opt_direction If 0, the nearest resolution will be used.\n * If 1, the nearest lower resolution will be used. If -1, the nearest\n * higher resolution will be used. Default is 0.\n * @return {number} Z.\n * @api\n */\n getZForResolution(resolution, opt_direction) {\n const z = linearFindNearest(this.resolutions_, resolution, opt_direction || 0);\n return clamp(z, this.minZoom, this.maxZoom);\n }\n\n /**\n * @param {!module:ol/extent~Extent} extent Extent for this tile grid.\n * @private\n */\n calculateTileRanges_(extent) {\n const length = this.resolutions_.length;\n const fullTileRanges = new Array(length);\n for (let z = this.minZoom; z < length; ++z) {\n fullTileRanges[z] = this.getTileRangeForExtentAndZ(extent, z);\n }\n this.fullTileRanges_ = fullTileRanges;\n }\n}\n\n\nexport default TileGrid;\n","/**\n * @module ol/tilegrid\n */\nimport {DEFAULT_MAX_ZOOM, DEFAULT_TILE_SIZE} from './tilegrid/common.js';\nimport {toSize} from './size.js';\nimport {containsCoordinate, createOrUpdate, getCorner, getHeight, getWidth} from './extent.js';\nimport Corner from './extent/Corner.js';\nimport {assign} from './obj.js';\nimport {get as getProjection, METERS_PER_UNIT} from './proj.js';\nimport Units from './proj/Units.js';\nimport TileGrid from './tilegrid/TileGrid.js';\n\n\n/**\n * @param {module:ol/proj/Projection} projection Projection.\n * @return {!module:ol/tilegrid/TileGrid} Default tile grid for the\n * passed projection.\n */\nexport function getForProjection(projection) {\n let tileGrid = projection.getDefaultTileGrid();\n if (!tileGrid) {\n tileGrid = createForProjection(projection);\n projection.setDefaultTileGrid(tileGrid);\n }\n return tileGrid;\n}\n\n\n/**\n * @param {module:ol/tilegrid/TileGrid} tileGrid Tile grid.\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile coordinate.\n * @param {module:ol/proj/Projection} projection Projection.\n * @return {module:ol/tilecoord~TileCoord} Tile coordinate.\n */\nexport function wrapX(tileGrid, tileCoord, projection) {\n const z = tileCoord[0];\n const center = tileGrid.getTileCoordCenter(tileCoord);\n const projectionExtent = extentFromProjection(projection);\n if (!containsCoordinate(projectionExtent, center)) {\n const worldWidth = getWidth(projectionExtent);\n const worldsAway = Math.ceil((projectionExtent[0] - center[0]) / worldWidth);\n center[0] += worldWidth * worldsAway;\n return tileGrid.getTileCoordForCoordAndZ(center, z);\n } else {\n return tileCoord;\n }\n}\n\n\n/**\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {number=} opt_maxZoom Maximum zoom level (default is\n * DEFAULT_MAX_ZOOM).\n * @param {number|module:ol/size~Size=} opt_tileSize Tile size (default uses\n * DEFAULT_TILE_SIZE).\n * @param {module:ol/extent/Corner=} opt_corner Extent corner (default is `'top-left'`).\n * @return {!module:ol/tilegrid/TileGrid} TileGrid instance.\n */\nexport function createForExtent(extent, opt_maxZoom, opt_tileSize, opt_corner) {\n const corner = opt_corner !== undefined ? opt_corner : Corner.TOP_LEFT;\n\n const resolutions = resolutionsFromExtent(extent, opt_maxZoom, opt_tileSize);\n\n return new TileGrid({\n extent: extent,\n origin: getCorner(extent, corner),\n resolutions: resolutions,\n tileSize: opt_tileSize\n });\n}\n\n\n/**\n * @typedef {Object} XYZOptions\n * @property {module:ol/extent~Extent} [extent] Extent for the tile grid. The origin for an XYZ tile grid is the\n * top-left corner of the extent. The zero level of the grid is defined by the resolution at which one tile fits in the\n * provided extent. If not provided, the extent of the EPSG:3857 projection is used.\n * @property {number} [maxZoom] Maximum zoom. The default is `42`. This determines the number of levels\n * in the grid set. For example, a `maxZoom` of 21 means there are 22 levels in the grid set.\n * @property {number} [minZoom=0] Minimum zoom.\n * @property {number|module:ol/size~Size} [tileSize=[256, 256]] Tile size in pixels.\n */\n\n\n/**\n * Creates a tile grid with a standard XYZ tiling scheme.\n * @param {module:ol/tilegrid~XYZOptions=} opt_options Tile grid options.\n * @return {!module:ol/tilegrid/TileGrid} Tile grid instance.\n * @api\n */\nexport function createXYZ(opt_options) {\n const options = /** @type {module:ol/tilegrid/TileGrid~Options} */ ({});\n assign(options, opt_options !== undefined ?\n opt_options : /** @type {module:ol/tilegrid~XYZOptions} */ ({}));\n if (options.extent === undefined) {\n options.extent = getProjection('EPSG:3857').getExtent();\n }\n options.resolutions = resolutionsFromExtent(\n options.extent, options.maxZoom, options.tileSize);\n delete options.maxZoom;\n\n return new TileGrid(options);\n}\n\n\n/**\n * Create a resolutions array from an extent. A zoom factor of 2 is assumed.\n * @param {module:ol/extent~Extent} extent Extent.\n * @param {number=} opt_maxZoom Maximum zoom level (default is\n * DEFAULT_MAX_ZOOM).\n * @param {number|module:ol/size~Size=} opt_tileSize Tile size (default uses\n * DEFAULT_TILE_SIZE).\n * @return {!Array} Resolutions array.\n */\nfunction resolutionsFromExtent(extent, opt_maxZoom, opt_tileSize) {\n const maxZoom = opt_maxZoom !== undefined ?\n opt_maxZoom : DEFAULT_MAX_ZOOM;\n\n const height = getHeight(extent);\n const width = getWidth(extent);\n\n const tileSize = toSize(opt_tileSize !== undefined ?\n opt_tileSize : DEFAULT_TILE_SIZE);\n const maxResolution = Math.max(\n width / tileSize[0], height / tileSize[1]);\n\n const length = maxZoom + 1;\n const resolutions = new Array(length);\n for (let z = 0; z < length; ++z) {\n resolutions[z] = maxResolution / Math.pow(2, z);\n }\n return resolutions;\n}\n\n\n/**\n * @param {module:ol/proj~ProjectionLike} projection Projection.\n * @param {number=} opt_maxZoom Maximum zoom level (default is\n * DEFAULT_MAX_ZOOM).\n * @param {number|module:ol/size~Size=} opt_tileSize Tile size (default uses\n * DEFAULT_TILE_SIZE).\n * @param {module:ol/extent/Corner=} opt_corner Extent corner (default is `'top-left'`).\n * @return {!module:ol/tilegrid/TileGrid} TileGrid instance.\n */\nexport function createForProjection(projection, opt_maxZoom, opt_tileSize, opt_corner) {\n const extent = extentFromProjection(projection);\n return createForExtent(extent, opt_maxZoom, opt_tileSize, opt_corner);\n}\n\n\n/**\n * Generate a tile grid extent from a projection. If the projection has an\n * extent, it is used. If not, a global extent is assumed.\n * @param {module:ol/proj~ProjectionLike} projection Projection.\n * @return {module:ol/extent~Extent} Extent.\n */\nexport function extentFromProjection(projection) {\n projection = getProjection(projection);\n let extent = projection.getExtent();\n if (!extent) {\n const half = 180 * METERS_PER_UNIT[Units.DEGREES] / projection.getMetersPerUnit();\n extent = createOrUpdate(-half, -half, half, half);\n }\n return extent;\n}\n","/**\n * @module ol/render/Feature\n */\nimport {VOID} from '../functions.js';\nimport {extend} from '../array.js';\nimport {createOrUpdateFromCoordinate, createOrUpdateFromFlatCoordinates, getCenter, getHeight} from '../extent.js';\nimport GeometryType from '../geom/GeometryType.js';\nimport {linearRingss as linearRingssCenter} from '../geom/flat/center.js';\nimport {getInteriorPointOfArray, getInteriorPointsOfMultiArray} from '../geom/flat/interiorpoint.js';\nimport {interpolatePoint} from '../geom/flat/interpolate.js';\nimport {get as getProjection} from '../proj.js';\nimport {transform2D} from '../geom/flat/transform.js';\nimport {create as createTransform, compose as composeTransform} from '../transform.js';\n\n\n/**\n * @type {module:ol/transform~Transform}\n */\nconst tmpTransform = createTransform();\n\n\n/**\n * Lightweight, read-only, {@link module:ol/Feature~Feature} and {@link module:ol/geom/Geometry~Geometry} like\n * structure, optimized for vector tile rendering and styling. Geometry access\n * through the API is limited to getting the type and extent of the geometry.\n *\n * @param {module:ol/geom/GeometryType} type Geometry type.\n * @param {Array} flatCoordinates Flat coordinates. These always need\n * to be right-handed for polygons.\n * @param {Array|Array>} ends Ends or Endss.\n * @param {Object} properties Properties.\n * @param {number|string|undefined} id Feature id.\n */\nclass RenderFeature {\n constructor(type, flatCoordinates, ends, properties, id) {\n /**\n * @private\n * @type {module:ol/extent~Extent|undefined}\n */\n this.extent_;\n\n /**\n * @private\n * @type {number|string|undefined}\n */\n this.id_ = id;\n\n /**\n * @private\n * @type {module:ol/geom/GeometryType}\n */\n this.type_ = type;\n\n /**\n * @private\n * @type {Array}\n */\n this.flatCoordinates_ = flatCoordinates;\n\n /**\n * @private\n * @type {Array}\n */\n this.flatInteriorPoints_ = null;\n\n /**\n * @private\n * @type {Array}\n */\n this.flatMidpoints_ = null;\n\n /**\n * @private\n * @type {Array|Array>}\n */\n this.ends_ = ends;\n\n /**\n * @private\n * @type {Object}\n */\n this.properties_ = properties;\n\n }\n\n /**\n * Get a feature property by its key.\n * @param {string} key Key\n * @return {*} Value for the requested key.\n * @api\n */\n get(key) {\n return this.properties_[key];\n }\n\n /**\n * Get the extent of this feature's geometry.\n * @return {module:ol/extent~Extent} Extent.\n * @api\n */\n getExtent() {\n if (!this.extent_) {\n this.extent_ = this.type_ === GeometryType.POINT ?\n createOrUpdateFromCoordinate(this.flatCoordinates_) :\n createOrUpdateFromFlatCoordinates(\n this.flatCoordinates_, 0, this.flatCoordinates_.length, 2);\n\n }\n return this.extent_;\n }\n\n /**\n * @return {Array} Flat interior points.\n */\n getFlatInteriorPoint() {\n if (!this.flatInteriorPoints_) {\n const flatCenter = getCenter(this.getExtent());\n this.flatInteriorPoints_ = getInteriorPointOfArray(\n this.flatCoordinates_, 0, this.ends_, 2, flatCenter, 0);\n }\n return this.flatInteriorPoints_;\n }\n\n /**\n * @return {Array} Flat interior points.\n */\n getFlatInteriorPoints() {\n if (!this.flatInteriorPoints_) {\n const flatCenters = linearRingssCenter(\n this.flatCoordinates_, 0, this.ends_, 2);\n this.flatInteriorPoints_ = getInteriorPointsOfMultiArray(\n this.flatCoordinates_, 0, this.ends_, 2, flatCenters);\n }\n return this.flatInteriorPoints_;\n }\n\n /**\n * @return {Array} Flat midpoint.\n */\n getFlatMidpoint() {\n if (!this.flatMidpoints_) {\n this.flatMidpoints_ = interpolatePoint(\n this.flatCoordinates_, 0, this.flatCoordinates_.length, 2, 0.5);\n }\n return this.flatMidpoints_;\n }\n\n /**\n * @return {Array} Flat midpoints.\n */\n getFlatMidpoints() {\n if (!this.flatMidpoints_) {\n this.flatMidpoints_ = [];\n const flatCoordinates = this.flatCoordinates_;\n let offset = 0;\n const ends = this.ends_;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const midpoint = interpolatePoint(\n flatCoordinates, offset, end, 2, 0.5);\n extend(this.flatMidpoints_, midpoint);\n offset = end;\n }\n }\n return this.flatMidpoints_;\n }\n\n /**\n * Get the feature identifier. This is a stable identifier for the feature and\n * is set when reading data from a remote source.\n * @return {number|string|undefined} Id.\n * @api\n */\n getId() {\n return this.id_;\n }\n\n /**\n * @return {Array} Flat coordinates.\n */\n getOrientedFlatCoordinates() {\n return this.flatCoordinates_;\n }\n\n /**\n * For API compatibility with {@link module:ol/Feature~Feature}, this method is useful when\n * determining the geometry type in style function (see {@link #getType}).\n * @return {module:ol/render/Feature} Feature.\n * @api\n */\n getGeometry() {\n return this;\n }\n\n /**\n * Get the feature properties.\n * @return {Object} Feature properties.\n * @api\n */\n getProperties() {\n return this.properties_;\n }\n\n /**\n * @return {number} Stride.\n */\n getStride() {\n return 2;\n }\n\n /**\n * Get the type of this feature's geometry.\n * @return {module:ol/geom/GeometryType} Geometry type.\n * @api\n */\n getType() {\n return this.type_;\n }\n\n /**\n * Transform geometry coordinates from tile pixel space to projected.\n * The SRS of the source and destination are expected to be the same.\n *\n * @param {module:ol/proj~ProjectionLike} source The current projection\n * @param {module:ol/proj~ProjectionLike} destination The desired projection.\n */\n transform(source, destination) {\n source = getProjection(source);\n const pixelExtent = source.getExtent();\n const projectedExtent = source.getWorldExtent();\n const scale = getHeight(projectedExtent) / getHeight(pixelExtent);\n composeTransform(tmpTransform,\n projectedExtent[0], projectedExtent[3],\n scale, -scale, 0,\n 0, 0);\n transform2D(this.flatCoordinates_, 0, this.flatCoordinates_.length, 2,\n tmpTransform, this.flatCoordinates_);\n }\n}\n\n\n/**\n * @return {Array|Array>} Ends or endss.\n */\nRenderFeature.prototype.getEnds =\nRenderFeature.prototype.getEndss = function() {\n return this.ends_;\n};\n\n\n/**\n * @return {Array} Flat coordinates.\n */\nRenderFeature.prototype.getFlatCoordinates =\n RenderFeature.prototype.getOrientedFlatCoordinates;\n\n\n/**\n * Get the feature for working with its geometry.\n * @return {module:ol/render/Feature} Feature.\n */\nRenderFeature.prototype.getSimplifiedGeometry =\n RenderFeature.prototype.getGeometry;\n\n\n/**\n * @return {undefined}\n */\nRenderFeature.prototype.getStyleFunction = VOID;\n\n\nexport default RenderFeature;\n","/**\n * @module ol/format/MVT\n */\n//FIXME Implement projection handling\n\nimport {assert} from '../asserts.js';\nimport PBF from 'pbf';\nimport FeatureFormat, {transformWithOptions} from '../format/Feature.js';\nimport FormatType from '../format/FormatType.js';\nimport GeometryLayout from '../geom/GeometryLayout.js';\nimport GeometryType from '../geom/GeometryType.js';\nimport LineString from '../geom/LineString.js';\nimport MultiLineString from '../geom/MultiLineString.js';\nimport MultiPoint from '../geom/MultiPoint.js';\nimport MultiPolygon from '../geom/MultiPolygon.js';\nimport Point from '../geom/Point.js';\nimport Polygon from '../geom/Polygon.js';\nimport {linearRingIsClockwise} from '../geom/flat/orient.js';\nimport Projection from '../proj/Projection.js';\nimport Units from '../proj/Units.js';\nimport RenderFeature from '../render/Feature.js';\n\n\n/**\n * @typedef {Object} Options\n * @property {function((module:ol/geom/Geometry|Object)=)|function(module:ol/geom/GeometryType,Array,(Array|Array>),Object,number)} [featureClass]\n * Class for features returned by {@link module:ol/format/MVT#readFeatures}. Set to\n * {@link module:ol/Feature~Feature} to get full editing and geometry support at the cost of\n * decreased rendering performance. The default is {@link module:ol/render/Feature~RenderFeature},\n * which is optimized for rendering and hit detection.\n * @property {string} [geometryName='geometry'] Geometry name to use when creating\n * features.\n * @property {string} [layerName='layer'] Name of the feature attribute that\n * holds the layer name.\n * @property {Array} [layers] Layers to read features from. If not\n * provided, features will be read from all layers.\n */\n\n\n/**\n * @classdesc\n * Feature format for reading data in the Mapbox MVT format.\n *\n * @param {module:ol/format/MVT~Options=} opt_options Options.\n * @api\n */\nclass MVT extends FeatureFormat {\n\n /**\n * @param {module:ol/format/MVT~Options=} opt_options Options.\n */\n constructor(opt_options) {\n super();\n\n const options = opt_options ? opt_options : {};\n\n /**\n * @type {module:ol/proj/Projection}\n */\n this.dataProjection = new Projection({\n code: '',\n units: Units.TILE_PIXELS\n });\n\n /**\n * @private\n * @type {function((module:ol/geom/Geometry|Object)=)|\n * function(module:ol/geom/GeometryType,Array,\n * (Array|Array>),Object,number)}\n */\n this.featureClass_ = options.featureClass ?\n options.featureClass : RenderFeature;\n\n /**\n * @private\n * @type {string|undefined}\n */\n this.geometryName_ = options.geometryName;\n\n /**\n * @private\n * @type {string}\n */\n this.layerName_ = options.layerName ? options.layerName : 'layer';\n\n /**\n * @private\n * @type {Array}\n */\n this.layers_ = options.layers ? options.layers : null;\n\n /**\n * @private\n * @type {module:ol/extent~Extent}\n */\n this.extent_ = null;\n\n }\n\n /**\n * Read the raw geometry from the pbf offset stored in a raw feature's geometry\n * property.\n * @suppress {missingProperties}\n * @param {Object} pbf PBF.\n * @param {Object} feature Raw feature.\n * @param {Array} flatCoordinates Array to store flat coordinates in.\n * @param {Array} ends Array to store ends in.\n * @private\n */\n readRawGeometry_(pbf, feature, flatCoordinates, ends) {\n pbf.pos = feature.geometry;\n\n const end = pbf.readVarint() + pbf.pos;\n let cmd = 1;\n let length = 0;\n let x = 0;\n let y = 0;\n let coordsLen = 0;\n let currentEnd = 0;\n\n while (pbf.pos < end) {\n if (!length) {\n const cmdLen = pbf.readVarint();\n cmd = cmdLen & 0x7;\n length = cmdLen >> 3;\n }\n\n length--;\n\n if (cmd === 1 || cmd === 2) {\n x += pbf.readSVarint();\n y += pbf.readSVarint();\n\n if (cmd === 1) { // moveTo\n if (coordsLen > currentEnd) {\n ends.push(coordsLen);\n currentEnd = coordsLen;\n }\n }\n\n flatCoordinates.push(x, y);\n coordsLen += 2;\n\n } else if (cmd === 7) {\n\n if (coordsLen > currentEnd) {\n // close polygon\n flatCoordinates.push(\n flatCoordinates[currentEnd], flatCoordinates[currentEnd + 1]);\n coordsLen += 2;\n }\n\n } else {\n assert(false, 59); // Invalid command found in the PBF\n }\n }\n\n if (coordsLen > currentEnd) {\n ends.push(coordsLen);\n currentEnd = coordsLen;\n }\n\n }\n\n /**\n * @private\n * @param {Object} pbf PBF\n * @param {Object} rawFeature Raw Mapbox feature.\n * @param {module:ol/format/Feature~ReadOptions=} opt_options Read options.\n * @return {module:ol/Feature|module:ol/render/Feature} Feature.\n */\n createFeature_(pbf, rawFeature, opt_options) {\n const type = rawFeature.type;\n if (type === 0) {\n return null;\n }\n\n let feature;\n const id = rawFeature.id;\n const values = rawFeature.properties;\n values[this.layerName_] = rawFeature.layer.name;\n\n const flatCoordinates = [];\n const ends = [];\n this.readRawGeometry_(pbf, rawFeature, flatCoordinates, ends);\n\n const geometryType = getGeometryType(type, ends.length);\n\n if (this.featureClass_ === RenderFeature) {\n feature = new this.featureClass_(geometryType, flatCoordinates, ends, values, id);\n } else {\n let geom;\n if (geometryType == GeometryType.POLYGON) {\n const endss = [];\n let offset = 0;\n let prevEndIndex = 0;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n if (!linearRingIsClockwise(flatCoordinates, offset, end, 2)) {\n endss.push(ends.slice(prevEndIndex, i));\n prevEndIndex = i;\n }\n offset = end;\n }\n if (endss.length > 1) {\n geom = new MultiPolygon(flatCoordinates, GeometryLayout.XY, endss);\n } else {\n geom = new Polygon(flatCoordinates, GeometryLayout.XY, ends);\n }\n } else {\n geom = geometryType === GeometryType.POINT ? new Point(flatCoordinates, GeometryLayout.XY) :\n geometryType === GeometryType.LINE_STRING ? new LineString(flatCoordinates, GeometryLayout.XY) :\n geometryType === GeometryType.POLYGON ? new Polygon(flatCoordinates, GeometryLayout.XY, ends) :\n geometryType === GeometryType.MULTI_POINT ? new MultiPoint(flatCoordinates, GeometryLayout.XY) :\n geometryType === GeometryType.MULTI_LINE_STRING ? new MultiLineString(flatCoordinates, GeometryLayout.XY, ends) :\n null;\n }\n feature = new this.featureClass_();\n if (this.geometryName_) {\n feature.setGeometryName(this.geometryName_);\n }\n const geometry = transformWithOptions(geom, false, this.adaptOptions(opt_options));\n feature.setGeometry(geometry);\n feature.setId(id);\n feature.setProperties(values);\n }\n\n return feature;\n }\n\n /**\n * @inheritDoc\n * @api\n */\n getLastExtent() {\n return this.extent_;\n }\n\n /**\n * @inheritDoc\n */\n getType() {\n return FormatType.ARRAY_BUFFER;\n }\n\n /**\n * @inheritDoc\n * @api\n */\n readFeatures(source, opt_options) {\n const layers = this.layers_;\n\n const pbf = new PBF(/** @type {ArrayBuffer} */ (source));\n const pbfLayers = pbf.readFields(layersPBFReader, {});\n /** @type {Array} */\n const features = [];\n for (const name in pbfLayers) {\n if (layers && layers.indexOf(name) == -1) {\n continue;\n }\n const pbfLayer = pbfLayers[name];\n\n for (let i = 0, ii = pbfLayer.length; i < ii; ++i) {\n const rawFeature = readRawFeature(pbf, pbfLayer, i);\n features.push(this.createFeature_(pbf, rawFeature));\n }\n this.extent_ = pbfLayer ? [0, 0, pbfLayer.extent, pbfLayer.extent] : null;\n }\n\n return features;\n }\n\n /**\n * @inheritDoc\n * @api\n */\n readProjection(source) {\n return this.dataProjection;\n }\n\n /**\n * Sets the layers that features will be read from.\n * @param {Array} layers Layers.\n * @api\n */\n setLayers(layers) {\n this.layers_ = layers;\n }\n\n}\n\n\n/**\n * Reader callback for parsing layers.\n * @param {number} tag The tag.\n * @param {Object} layers The layers object.\n * @param {Object} pbf The PBF.\n */\nfunction layersPBFReader(tag, layers, pbf) {\n if (tag === 3) {\n const layer = {\n keys: [],\n values: [],\n features: []\n };\n const end = pbf.readVarint() + pbf.pos;\n pbf.readFields(layerPBFReader, layer, end);\n layer.length = layer.features.length;\n if (layer.length) {\n layers[layer.name] = layer;\n }\n }\n}\n\n/**\n * Reader callback for parsing layer.\n * @param {number} tag The tag.\n * @param {Object} layer The layer object.\n * @param {Object} pbf The PBF.\n */\nfunction layerPBFReader(tag, layer, pbf) {\n if (tag === 15) {\n layer.version = pbf.readVarint();\n } else if (tag === 1) {\n layer.name = pbf.readString();\n } else if (tag === 5) {\n layer.extent = pbf.readVarint();\n } else if (tag === 2) {\n layer.features.push(pbf.pos);\n } else if (tag === 3) {\n layer.keys.push(pbf.readString());\n } else if (tag === 4) {\n let value = null;\n const end = pbf.readVarint() + pbf.pos;\n while (pbf.pos < end) {\n tag = pbf.readVarint() >> 3;\n value = tag === 1 ? pbf.readString() :\n tag === 2 ? pbf.readFloat() :\n tag === 3 ? pbf.readDouble() :\n tag === 4 ? pbf.readVarint64() :\n tag === 5 ? pbf.readVarint() :\n tag === 6 ? pbf.readSVarint() :\n tag === 7 ? pbf.readBoolean() : null;\n }\n layer.values.push(value);\n }\n}\n\n/**\n * Reader callback for parsing feature.\n * @param {number} tag The tag.\n * @param {Object} feature The feature object.\n * @param {Object} pbf The PBF.\n */\nfunction featurePBFReader(tag, feature, pbf) {\n if (tag == 1) {\n feature.id = pbf.readVarint();\n } else if (tag == 2) {\n const end = pbf.readVarint() + pbf.pos;\n while (pbf.pos < end) {\n const key = feature.layer.keys[pbf.readVarint()];\n const value = feature.layer.values[pbf.readVarint()];\n feature.properties[key] = value;\n }\n } else if (tag == 3) {\n feature.type = pbf.readVarint();\n } else if (tag == 4) {\n feature.geometry = pbf.pos;\n }\n}\n\n\n/**\n * Read a raw feature from the pbf offset stored at index `i` in the raw layer.\n * @suppress {missingProperties}\n * @param {Object} pbf PBF.\n * @param {Object} layer Raw layer.\n * @param {number} i Index of the feature in the raw layer's `features` array.\n * @return {Object} Raw feature.\n */\nfunction readRawFeature(pbf, layer, i) {\n pbf.pos = layer.features[i];\n const end = pbf.readVarint() + pbf.pos;\n\n const feature = {\n layer: layer,\n type: 0,\n properties: {}\n };\n pbf.readFields(featurePBFReader, feature, end);\n return feature;\n}\n\n\n/**\n * @suppress {missingProperties}\n * @param {number} type The raw feature's geometry type\n * @param {number} numEnds Number of ends of the flat coordinates of the\n * geometry.\n * @return {module:ol/geom/GeometryType} The geometry type.\n */\nfunction getGeometryType(type, numEnds) {\n /** @type {module:ol/geom/GeometryType} */\n let geometryType;\n if (type === 1) {\n geometryType = numEnds === 1 ?\n GeometryType.POINT : GeometryType.MULTI_POINT;\n } else if (type === 2) {\n geometryType = numEnds === 1 ?\n GeometryType.LINE_STRING :\n GeometryType.MULTI_LINE_STRING;\n } else if (type === 3) {\n geometryType = GeometryType.POLYGON;\n // MultiPolygon not relevant for rendering - winding order determines\n // outer rings of polygons.\n }\n return geometryType;\n}\n\nexport default MVT;\n","/**\n * @module ol/layer/TileProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n PRELOAD: 'preload',\n USE_INTERIM_TILES_ON_ERROR: 'useInterimTilesOnError'\n};\n","/**\n * @module ol/layer/Tile\n */\nimport LayerType from '../LayerType.js';\nimport Layer from '../layer/Layer.js';\nimport TileProperty from '../layer/TileProperty.js';\nimport {assign} from '../obj.js';\n\n\n/**\n * @typedef {Object} Options\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {module:ol/extent~Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex=0] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [preload=0] Preload. Load low-resolution tiles up to `preload` levels. `0`\n * means no preloading.\n * @property {module:ol/source/Tile} [source] Source for this layer.\n * @property {module:ol/PluggableMap} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use {@link module:ol/Map#addLayer}.\n * @property {boolean} [useInterimTilesOnError=true] Use interim tiles on error.\n */\n\n/**\n * @classdesc\n * For layer sources that provide pre-rendered, tiled images in grids that are\n * organized by zoom levels for specific resolutions.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @api\n */\nclass TileLayer extends Layer {\n /**\n * @param {module:ol/layer/Tile~Options=} opt_options Tile layer options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n const baseOptions = assign({}, options);\n\n delete baseOptions.preload;\n delete baseOptions.useInterimTilesOnError;\n super(baseOptions);\n\n this.setPreload(options.preload !== undefined ? options.preload : 0);\n this.setUseInterimTilesOnError(options.useInterimTilesOnError !== undefined ?\n options.useInterimTilesOnError : true);\n\n /**\n * The layer type.\n * @protected\n * @type {module:ol/LayerType}\n */\n this.type = LayerType.TILE;\n\n }\n\n /**\n * Return the level as number to which we will preload tiles up to.\n * @return {number} The level to preload tiles up to.\n * @observable\n * @api\n */\n getPreload() {\n return /** @type {number} */ (this.get(TileProperty.PRELOAD));\n }\n\n /**\n * Set the level as number to which we will preload tiles up to.\n * @param {number} preload The level to preload tiles up to.\n * @observable\n * @api\n */\n setPreload(preload) {\n this.set(TileProperty.PRELOAD, preload);\n }\n\n /**\n * Whether we use interim tiles on error.\n * @return {boolean} Use interim tiles on error.\n * @observable\n * @api\n */\n getUseInterimTilesOnError() {\n return /** @type {boolean} */ (this.get(TileProperty.USE_INTERIM_TILES_ON_ERROR));\n }\n\n /**\n * Set whether we use interim tiles on error.\n * @param {boolean} useInterimTilesOnError Use interim tiles on error.\n * @observable\n * @api\n */\n setUseInterimTilesOnError(useInterimTilesOnError) {\n this.set(TileProperty.USE_INTERIM_TILES_ON_ERROR, useInterimTilesOnError);\n }\n}\n\n\n/**\n * Return the associated {@link module:ol/source/Tile tilesource} of the layer.\n * @function\n * @return {module:ol/source/Tile} Source.\n * @api\n */\nTileLayer.prototype.getSource;\n\n\nexport default TileLayer;\n","/**\n * @module ol/layer/VectorTile\n */\nimport LayerType from '../LayerType.js';\nimport {assert} from '../asserts.js';\nimport TileProperty from '../layer/TileProperty.js';\nimport VectorLayer from '../layer/Vector.js';\nimport VectorTileRenderType from '../layer/VectorTileRenderType.js';\nimport {assign} from '../obj.js';\n\n\n/**\n * @enum {string}\n * Render mode for vector tiles:\n * * `'image'`: Vector tiles are rendered as images. Great performance, but\n * point symbols and texts are always rotated with the view and pixels are\n * scaled during zoom animations.\n * * `'hybrid'`: Polygon and line elements are rendered as images, so pixels\n * are scaled during zoom animations. Point symbols and texts are accurately\n * rendered as vectors and can stay upright on rotated views.\n * * `'vector'`: Vector tiles are rendered as vectors. Most accurate rendering\n * even during animations, but slower performance than the other options.\n * @api\n */\nexport const RenderType = {\n IMAGE: 'image',\n HYBRID: 'hybrid',\n VECTOR: 'vector'\n};\n\n\n/**\n * @typedef {Object} Options\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {module:ol/extent~Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex=0] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {module:ol/render~OrderFunction} [renderOrder] Render order. Function to be used when sorting\n * features before rendering. By default features are drawn in the order that they are created. Use\n * `null` to avoid the sort, but get an undefined draw order.\n * @property {number} [renderBuffer=100] The buffer in pixels around the tile extent used by the\n * renderer when getting features from the vector tile for the rendering or hit-detection.\n * Recommended value: Vector tiles are usually generated with a buffer, so this value should match\n * the largest possible buffer of the used tiles. It should be at least the size of the largest\n * point symbol or line width.\n * @property {module:ol/layer/VectorTileRenderType|string} [renderMode='hybrid'] Render mode for vector tiles:\n * * `'image'`: Vector tiles are rendered as images. Great performance, but point symbols and texts\n * are always rotated with the view and pixels are scaled during zoom animations.\n * * `'hybrid'`: Polygon and line elements are rendered as images, so pixels are scaled during zoom\n * animations. Point symbols and texts are accurately rendered as vectors and can stay upright on\n * rotated views.\n * * `'vector'`: Vector tiles are rendered as vectors. Most accurate rendering even during\n * animations, but slower performance than the other options.\n *\n * When `declutter` is set to `true`, `'hybrid'` will be used instead of `'image'`.\n * @property {module:ol/source/VectorTile} [source] Source.\n * @property {module:ol/PluggableMap} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use {@link module:ol/Map#addLayer}.\n * @property {boolean} [declutter=false] Declutter images and text. Decluttering is applied to all\n * image and text styles, and the priority is defined by the z-index of the style. Lower z-index\n * means higher priority. When set to `true`, a `renderMode` of `'image'` will be overridden with\n * `'hybrid'`.\n * @property {module:ol/style/Style|Array|module:ol/style/Style~StyleFunction} [style] Layer style. See\n * {@link module:ol/style} for default style which will be used if this is not defined.\n * @property {boolean} [updateWhileAnimating=false] When set to `true`, feature batches will be\n * recreated during animations. This means that no vectors will be shown clipped, but the setting\n * will have a performance impact for large amounts of vector data. When set to `false`, batches\n * will be recreated when no animation is active.\n * @property {boolean} [updateWhileInteracting=false] When set to `true`, feature batches will be\n * recreated during interactions. See also `updateWhileAnimating`.\n * @property {number} [preload=0] Preload. Load low-resolution tiles up to `preload` levels. `0`\n * means no preloading.\n * @property {module:ol/render~OrderFunction} [renderOrder] Render order. Function to be used when sorting\n * features before rendering. By default features are drawn in the order that they are created.\n * @property {module:ol/style/Style|Array|module:ol/style/Style~StyleFunction} [style] Layer style. See\n * {@link module:ol/style} for default style which will be used if this is not defined.\n * @property {boolean} [useInterimTilesOnError=true] Use interim tiles on error.\n */\n\n\n/**\n * @classdesc\n * Layer for vector tile data that is rendered client-side.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @param {module:ol/layer/VectorTile~Options=} opt_options Options.\n * @api\n */\nclass VectorTileLayer extends VectorLayer {\n /**\n * @param {module:ol/layer/VectorTile~Options=} opt_options Options.\n */\n constructor(opt_options) {\n const options = opt_options ? opt_options : {};\n\n let renderMode = options.renderMode || VectorTileRenderType.HYBRID;\n assert(renderMode == undefined ||\n renderMode == VectorTileRenderType.IMAGE ||\n renderMode == VectorTileRenderType.HYBRID ||\n renderMode == VectorTileRenderType.VECTOR,\n 28); // `renderMode` must be `'image'`, `'hybrid'` or `'vector'`\n if (options.declutter && renderMode == VectorTileRenderType.IMAGE) {\n renderMode = VectorTileRenderType.HYBRID;\n }\n options.renderMode = renderMode;\n\n const baseOptions = assign({}, options);\n\n delete baseOptions.preload;\n delete baseOptions.useInterimTilesOnError;\n super(baseOptions);\n\n this.setPreload(options.preload ? options.preload : 0);\n this.setUseInterimTilesOnError(options.useInterimTilesOnError !== undefined ?\n options.useInterimTilesOnError : true);\n\n /**\n * The layer type.\n * @protected\n * @type {module:ol/LayerType}\n */\n this.type = LayerType.VECTOR_TILE;\n\n }\n\n /**\n * Return the level as number to which we will preload tiles up to.\n * @return {number} The level to preload tiles up to.\n * @observable\n * @api\n */\n getPreload() {\n return /** @type {number} */ (this.get(TileProperty.PRELOAD));\n }\n\n /**\n * Whether we use interim tiles on error.\n * @return {boolean} Use interim tiles on error.\n * @observable\n * @api\n */\n getUseInterimTilesOnError() {\n return /** @type {boolean} */ (this.get(TileProperty.USE_INTERIM_TILES_ON_ERROR));\n }\n\n /**\n * Set the level as number to which we will preload tiles up to.\n * @param {number} preload The level to preload tiles up to.\n * @observable\n * @api\n */\n setPreload(preload) {\n this.set(TileProperty.PRELOAD, preload);\n }\n\n /**\n * Set whether we use interim tiles on error.\n * @param {boolean} useInterimTilesOnError Use interim tiles on error.\n * @observable\n * @api\n */\n setUseInterimTilesOnError(useInterimTilesOnError) {\n this.set(TileProperty.USE_INTERIM_TILES_ON_ERROR, useInterimTilesOnError);\n }\n}\n\n\n/**\n * Return the associated {@link module:ol/source/VectorTile vectortilesource} of the layer.\n * @function\n * @return {module:ol/source/VectorTile} Source.\n * @api\n */\nVectorTileLayer.prototype.getSource;\nexport default VectorTileLayer;\n","/**\n * @module ol/tileurlfunction\n */\nimport {assert} from './asserts.js';\nimport {modulo} from './math.js';\nimport {hash as tileCoordHash} from './tilecoord.js';\n\n\n/**\n * @param {string} template Template.\n * @param {module:ol/tilegrid/TileGrid} tileGrid Tile grid.\n * @return {module:ol/Tile~UrlFunction} Tile URL function.\n */\nexport function createFromTemplate(template, tileGrid) {\n const zRegEx = /\\{z\\}/g;\n const xRegEx = /\\{x\\}/g;\n const yRegEx = /\\{y\\}/g;\n const dashYRegEx = /\\{-y\\}/g;\n return (\n /**\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile Coordinate.\n * @param {number} pixelRatio Pixel ratio.\n * @param {module:ol/proj/Projection} projection Projection.\n * @return {string|undefined} Tile URL.\n */\n function(tileCoord, pixelRatio, projection) {\n if (!tileCoord) {\n return undefined;\n } else {\n return template.replace(zRegEx, tileCoord[0].toString())\n .replace(xRegEx, tileCoord[1].toString())\n .replace(yRegEx, function() {\n const y = -tileCoord[2] - 1;\n return y.toString();\n })\n .replace(dashYRegEx, function() {\n const z = tileCoord[0];\n const range = tileGrid.getFullTileRange(z);\n assert(range, 55); // The {-y} placeholder requires a tile grid with extent\n const y = range.getHeight() + tileCoord[2];\n return y.toString();\n });\n }\n }\n );\n}\n\n\n/**\n * @param {Array} templates Templates.\n * @param {module:ol/tilegrid/TileGrid} tileGrid Tile grid.\n * @return {module:ol/Tile~UrlFunction} Tile URL function.\n */\nexport function createFromTemplates(templates, tileGrid) {\n const len = templates.length;\n const tileUrlFunctions = new Array(len);\n for (let i = 0; i < len; ++i) {\n tileUrlFunctions[i] = createFromTemplate(templates[i], tileGrid);\n }\n return createFromTileUrlFunctions(tileUrlFunctions);\n}\n\n\n/**\n * @param {Array} tileUrlFunctions Tile URL Functions.\n * @return {module:ol/Tile~UrlFunction} Tile URL function.\n */\nexport function createFromTileUrlFunctions(tileUrlFunctions) {\n if (tileUrlFunctions.length === 1) {\n return tileUrlFunctions[0];\n }\n return (\n /**\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile Coordinate.\n * @param {number} pixelRatio Pixel ratio.\n * @param {module:ol/proj/Projection} projection Projection.\n * @return {string|undefined} Tile URL.\n */\n function(tileCoord, pixelRatio, projection) {\n if (!tileCoord) {\n return undefined;\n } else {\n const h = tileCoordHash(tileCoord);\n const index = modulo(h, tileUrlFunctions.length);\n return tileUrlFunctions[index](tileCoord, pixelRatio, projection);\n }\n }\n );\n}\n\n\n/**\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile coordinate.\n * @param {number} pixelRatio Pixel ratio.\n * @param {module:ol/proj/Projection} projection Projection.\n * @return {string|undefined} Tile URL.\n */\nexport function nullTileUrlFunction(tileCoord, pixelRatio, projection) {\n return undefined;\n}\n\n\n/**\n * @param {string} url URL.\n * @return {Array} Array of urls.\n */\nexport function expandUrl(url) {\n const urls = [];\n let match = /\\{([a-z])-([a-z])\\}/.exec(url);\n if (match) {\n // char range\n const startCharCode = match[1].charCodeAt(0);\n const stopCharCode = match[2].charCodeAt(0);\n let charCode;\n for (charCode = startCharCode; charCode <= stopCharCode; ++charCode) {\n urls.push(url.replace(match[0], String.fromCharCode(charCode)));\n }\n return urls;\n }\n match = match = /\\{(\\d+)-(\\d+)\\}/.exec(url);\n if (match) {\n // number range\n const stop = parseInt(match[2], 10);\n for (let i = parseInt(match[1], 10); i <= stop; i++) {\n urls.push(url.replace(match[0], i.toString()));\n }\n return urls;\n }\n urls.push(url);\n return urls;\n}\n","/**\n * @module ol/Tile\n */\nimport TileState from './TileState.js';\nimport {easeIn} from './easing.js';\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\n\n\n/**\n * A function that takes an {@link module:ol/Tile} for the tile and a\n * `{string}` for the url as arguments. The default is\n * ```js\n * source.setTileLoadFunction(function(tile, src) {\n * tile.getImage().src = src;\n * });\n * ```\n * For more fine grained control, the load function can use fetch or XMLHttpRequest and involve\n * error handling:\n *\n * ```js\n * import TileState from 'ol/TileState';\n *\n * source.setTileLoadFunction(function(tile, src) {\n * var xhr = new XMLHttpRequest();\n * xhr.responseType = 'blob';\n * xhr.addEventListener('loadend', function (evt) {\n * var data = this.response;\n * if (data !== undefined) {\n * tile.getImage().src = URL.createObjectURL(data);\n * } else {\n * tile.setState(TileState.ERROR);\n * }\n * });\n * xhr.addEventListener('error', function () {\n * tile.setState(TileState.ERROR);\n * });\n * xhr.open('GET', src);\n * xhr.send();\n * });\n * ```\n *\n * @typedef {function(module:ol/Tile, string)} LoadFunction\n * @api\n */\n\n/**\n * {@link module:ol/source/Tile~Tile} sources use a function of this type to get\n * the url that provides a tile for a given tile coordinate.\n *\n * This function takes an {@link module:ol/tilecoord~TileCoord} for the tile\n * coordinate, a `{number}` representing the pixel ratio and a\n * {@link module:ol/proj/Projection} for the projection as arguments\n * and returns a `{string}` representing the tile URL, or undefined if no tile\n * should be requested for the passed tile coordinate.\n *\n * @typedef {function(module:ol/tilecoord~TileCoord, number,\n * module:ol/proj/Projection): (string|undefined)} UrlFunction\n * @api\n */\n\n\n/**\n * @typedef {Object} Options\n * @property {number} [transition=250] A duration for tile opacity\n * transitions in milliseconds. A duration of 0 disables the opacity transition.\n * @api\n */\n\n\n/**\n * @classdesc\n * Base class for tiles.\n *\n * @abstract\n */\nclass Tile extends EventTarget {\n\n /**\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile coordinate.\n * @param {module:ol/TileState} state State.\n * @param {module:ol/Tile~Options=} opt_options Tile options.\n */\n constructor(tileCoord, state, opt_options) {\n super();\n\n const options = opt_options ? opt_options : {};\n\n /**\n * @type {module:ol/tilecoord~TileCoord}\n */\n this.tileCoord = tileCoord;\n\n /**\n * @protected\n * @type {module:ol/TileState}\n */\n this.state = state;\n\n /**\n * An \"interim\" tile for this tile. The interim tile may be used while this\n * one is loading, for \"smooth\" transitions when changing params/dimensions\n * on the source.\n * @type {module:ol/Tile}\n */\n this.interimTile = null;\n\n /**\n * A key assigned to the tile. This is used by the tile source to determine\n * if this tile can effectively be used, or if a new tile should be created\n * and this one be used as an interim tile for this new tile.\n * @type {string}\n */\n this.key = '';\n\n /**\n * The duration for the opacity transition.\n * @type {number}\n */\n this.transition_ = options.transition === undefined ? 250 : options.transition;\n\n /**\n * Lookup of start times for rendering transitions. If the start time is\n * equal to -1, the transition is complete.\n * @type {Object}\n */\n this.transitionStarts_ = {};\n\n }\n\n /**\n * @protected\n */\n changed() {\n this.dispatchEvent(EventType.CHANGE);\n }\n\n /**\n * @return {string} Key.\n */\n getKey() {\n return this.key + '/' + this.tileCoord;\n }\n\n /**\n * Get the interim tile most suitable for rendering using the chain of interim\n * tiles. This corresponds to the most recent tile that has been loaded, if no\n * such tile exists, the original tile is returned.\n * @return {!module:ol/Tile} Best tile for rendering.\n */\n getInterimTile() {\n if (!this.interimTile) {\n //empty chain\n return this;\n }\n let tile = this.interimTile;\n\n // find the first loaded tile and return it. Since the chain is sorted in\n // decreasing order of creation time, there is no need to search the remainder\n // of the list (all those tiles correspond to older requests and will be\n // cleaned up by refreshInterimChain)\n do {\n if (tile.getState() == TileState.LOADED) {\n return tile;\n }\n tile = tile.interimTile;\n } while (tile);\n\n // we can not find a better tile\n return this;\n }\n\n /**\n * Goes through the chain of interim tiles and discards sections of the chain\n * that are no longer relevant.\n */\n refreshInterimChain() {\n if (!this.interimTile) {\n return;\n }\n\n let tile = this.interimTile;\n let prev = this;\n\n do {\n if (tile.getState() == TileState.LOADED) {\n //we have a loaded tile, we can discard the rest of the list\n //we would could abort any LOADING tile request\n //older than this tile (i.e. any LOADING tile following this entry in the chain)\n tile.interimTile = null;\n break;\n } else if (tile.getState() == TileState.LOADING) {\n //keep this LOADING tile any loaded tiles later in the chain are\n //older than this tile, so we're still interested in the request\n prev = tile;\n } else if (tile.getState() == TileState.IDLE) {\n //the head of the list is the most current tile, we don't need\n //to start any other requests for this chain\n prev.interimTile = tile.interimTile;\n } else {\n prev = tile;\n }\n tile = prev.interimTile;\n } while (tile);\n }\n\n /**\n * Get the tile coordinate for this tile.\n * @return {module:ol/tilecoord~TileCoord} The tile coordinate.\n * @api\n */\n getTileCoord() {\n return this.tileCoord;\n }\n\n /**\n * @return {module:ol/TileState} State.\n */\n getState() {\n return this.state;\n }\n\n /**\n * Sets the state of this tile. If you write your own {@link module:ol/Tile~LoadFunction tileLoadFunction} ,\n * it is important to set the state correctly to {@link module:ol/TileState~ERROR}\n * when the tile cannot be loaded. Otherwise the tile cannot be removed from\n * the tile queue and will block other requests.\n * @param {module:ol/TileState} state State.\n * @api\n */\n setState(state) {\n this.state = state;\n this.changed();\n }\n\n /**\n * Load the image or retry if loading previously failed.\n * Loading is taken care of by the tile queue, and calling this method is\n * only needed for preloading or for reloading in case of an error.\n * @abstract\n * @api\n */\n load() {}\n\n /**\n * Get the alpha value for rendering.\n * @param {number} id An id for the renderer.\n * @param {number} time The render frame time.\n * @return {number} A number between 0 and 1.\n */\n getAlpha(id, time) {\n if (!this.transition_) {\n return 1;\n }\n\n let start = this.transitionStarts_[id];\n if (!start) {\n start = time;\n this.transitionStarts_[id] = start;\n } else if (start === -1) {\n return 1;\n }\n\n const delta = time - start + (1000 / 60); // avoid rendering at 0\n if (delta >= this.transition_) {\n return 1;\n }\n return easeIn(delta / this.transition_);\n }\n\n /**\n * Determine if a tile is in an alpha transition. A tile is considered in\n * transition if tile.getAlpha() has not yet been called or has been called\n * and returned 1.\n * @param {number} id An id for the renderer.\n * @return {boolean} The tile is in transition.\n */\n inTransition(id) {\n if (!this.transition_) {\n return false;\n }\n return this.transitionStarts_[id] !== -1;\n }\n\n /**\n * Mark a transition as complete.\n * @param {number} id An id for the renderer.\n */\n endTransition(id) {\n if (this.transition_) {\n this.transitionStarts_[id] = -1;\n }\n }\n}\n\n\nexport default Tile;\n","/**\n * @module ol/ImageTile\n */\nimport Tile from './Tile.js';\nimport TileState from './TileState.js';\nimport {createCanvasContext2D} from './dom.js';\nimport {listenOnce, unlistenByKey} from './events.js';\nimport EventType from './events/EventType.js';\n\n/**\n * @typedef {function(new: module:ol/ImageTile, module:ol/tilecoord~TileCoord,\n * module:ol/TileState, string, ?string, module:ol/Tile~LoadFunction)} TileClass\n * @api\n */\n\nclass ImageTile extends Tile {\n\n /**\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile coordinate.\n * @param {module:ol/TileState} state State.\n * @param {string} src Image source URI.\n * @param {?string} crossOrigin Cross origin.\n * @param {module:ol/Tile~LoadFunction} tileLoadFunction Tile load function.\n * @param {module:ol/Tile~Options=} opt_options Tile options.\n */\n constructor(tileCoord, state, src, crossOrigin, tileLoadFunction, opt_options) {\n\n super(tileCoord, state, opt_options);\n\n /**\n * @private\n * @type {?string}\n */\n this.crossOrigin_ = crossOrigin;\n\n /**\n * Image URI\n *\n * @private\n * @type {string}\n */\n this.src_ = src;\n\n /**\n * @private\n * @type {HTMLImageElement|HTMLCanvasElement}\n */\n this.image_ = new Image();\n if (crossOrigin !== null) {\n this.image_.crossOrigin = crossOrigin;\n }\n\n /**\n * @private\n * @type {Array}\n */\n this.imageListenerKeys_ = null;\n\n /**\n * @private\n * @type {module:ol/Tile~LoadFunction}\n */\n this.tileLoadFunction_ = tileLoadFunction;\n\n }\n\n /**\n * @inheritDoc\n */\n disposeInternal() {\n if (this.state == TileState.LOADING) {\n this.unlistenImage_();\n this.image_ = getBlankImage();\n }\n if (this.interimTile) {\n this.interimTile.dispose();\n }\n this.state = TileState.ABORT;\n this.changed();\n super.disposeInternal();\n }\n\n /**\n * Get the HTML image element for this tile (may be a Canvas, Image, or Video).\n * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n * @api\n */\n getImage() {\n return this.image_;\n }\n\n /**\n * @inheritDoc\n */\n getKey() {\n return this.src_;\n }\n\n /**\n * Tracks loading or read errors.\n *\n * @private\n */\n handleImageError_() {\n this.state = TileState.ERROR;\n this.unlistenImage_();\n this.image_ = getBlankImage();\n this.changed();\n }\n\n /**\n * Tracks successful image load.\n *\n * @private\n */\n handleImageLoad_() {\n if (this.image_.naturalWidth && this.image_.naturalHeight) {\n this.state = TileState.LOADED;\n } else {\n this.state = TileState.EMPTY;\n }\n this.unlistenImage_();\n this.changed();\n }\n\n /**\n * @inheritDoc\n * @api\n */\n load() {\n if (this.state == TileState.ERROR) {\n this.state = TileState.IDLE;\n this.image_ = new Image();\n if (this.crossOrigin_ !== null) {\n this.image_.crossOrigin = this.crossOrigin_;\n }\n }\n if (this.state == TileState.IDLE) {\n this.state = TileState.LOADING;\n this.changed();\n this.imageListenerKeys_ = [\n listenOnce(this.image_, EventType.ERROR,\n this.handleImageError_, this),\n listenOnce(this.image_, EventType.LOAD,\n this.handleImageLoad_, this)\n ];\n this.tileLoadFunction_(this, this.src_);\n }\n }\n\n /**\n * Discards event handlers which listen for load completion or errors.\n *\n * @private\n */\n unlistenImage_() {\n this.imageListenerKeys_.forEach(unlistenByKey);\n this.imageListenerKeys_ = null;\n }\n}\n\n\n/**\n * Get a 1-pixel blank image.\n * @return {HTMLCanvasElement} Blank image.\n */\nfunction getBlankImage() {\n const ctx = createCanvasContext2D(1, 1);\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.fillRect(0, 0, 1, 1);\n return ctx.canvas;\n}\n\nexport default ImageTile;\n","/**\n * @module ol/TileCache\n */\nimport LRUCache from './structs/LRUCache.js';\nimport {fromKey, getKey} from './tilecoord.js';\n\nclass TileCache extends LRUCache {\n\n /**\n * @param {number=} opt_highWaterMark High water mark.\n */\n constructor(opt_highWaterMark) {\n\n super(opt_highWaterMark);\n\n }\n\n /**\n * @param {!Object} usedTiles Used tiles.\n */\n expireCache(usedTiles) {\n while (this.canExpireCache()) {\n const tile = this.peekLast();\n const zKey = tile.tileCoord[0].toString();\n if (zKey in usedTiles && usedTiles[zKey].contains(tile.tileCoord)) {\n break;\n } else {\n this.pop().dispose();\n }\n }\n }\n\n /**\n * Prune all tiles from the cache that don't have the same z as the newest tile.\n */\n pruneExceptNewestZ() {\n if (this.getCount() === 0) {\n return;\n }\n const key = this.peekFirstKey();\n const tileCoord = fromKey(key);\n const z = tileCoord[0];\n this.forEach(function(tile) {\n if (tile.tileCoord[0] !== z) {\n this.remove(getKey(tile.tileCoord));\n tile.dispose();\n }\n }, this);\n }\n}\n\n\nexport default TileCache;\n","/**\n * @module ol/reproj\n */\nimport {createCanvasContext2D} from './dom.js';\nimport {containsCoordinate, createEmpty, extend, getHeight, getTopLeft, getWidth} from './extent.js';\nimport {solveLinearSystem} from './math.js';\nimport {getPointResolution, transform} from './proj.js';\n\n\n/**\n * Calculates ideal resolution to use from the source in order to achieve\n * pixel mapping as close as possible to 1:1 during reprojection.\n * The resolution is calculated regardless of what resolutions\n * are actually available in the dataset (TileGrid, Image, ...).\n *\n * @param {module:ol/proj/Projection} sourceProj Source projection.\n * @param {module:ol/proj/Projection} targetProj Target projection.\n * @param {module:ol/coordinate~Coordinate} targetCenter Target center.\n * @param {number} targetResolution Target resolution.\n * @return {number} The best resolution to use. Can be +-Infinity, NaN or 0.\n */\nexport function calculateSourceResolution(sourceProj, targetProj,\n targetCenter, targetResolution) {\n\n const sourceCenter = transform(targetCenter, targetProj, sourceProj);\n\n // calculate the ideal resolution of the source data\n let sourceResolution = getPointResolution(targetProj, targetResolution, targetCenter);\n\n const targetMetersPerUnit = targetProj.getMetersPerUnit();\n if (targetMetersPerUnit !== undefined) {\n sourceResolution *= targetMetersPerUnit;\n }\n const sourceMetersPerUnit = sourceProj.getMetersPerUnit();\n if (sourceMetersPerUnit !== undefined) {\n sourceResolution /= sourceMetersPerUnit;\n }\n\n // Based on the projection properties, the point resolution at the specified\n // coordinates may be slightly different. We need to reverse-compensate this\n // in order to achieve optimal results.\n\n const sourceExtent = sourceProj.getExtent();\n if (!sourceExtent || containsCoordinate(sourceExtent, sourceCenter)) {\n const compensationFactor = getPointResolution(sourceProj, sourceResolution, sourceCenter) /\n sourceResolution;\n if (isFinite(compensationFactor) && compensationFactor > 0) {\n sourceResolution /= compensationFactor;\n }\n }\n\n return sourceResolution;\n}\n\n\n/**\n * Enlarge the clipping triangle point by 1 pixel to ensure the edges overlap\n * in order to mask gaps caused by antialiasing.\n *\n * @param {number} centroidX Centroid of the triangle (x coordinate in pixels).\n * @param {number} centroidY Centroid of the triangle (y coordinate in pixels).\n * @param {number} x X coordinate of the point (in pixels).\n * @param {number} y Y coordinate of the point (in pixels).\n * @return {module:ol/coordinate~Coordinate} New point 1 px farther from the centroid.\n */\nfunction enlargeClipPoint(centroidX, centroidY, x, y) {\n const dX = x - centroidX;\n const dY = y - centroidY;\n const distance = Math.sqrt(dX * dX + dY * dY);\n return [Math.round(x + dX / distance), Math.round(y + dY / distance)];\n}\n\n\n/**\n * Renders the source data into new canvas based on the triangulation.\n *\n * @param {number} width Width of the canvas.\n * @param {number} height Height of the canvas.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} sourceResolution Source resolution.\n * @param {module:ol/extent~Extent} sourceExtent Extent of the data source.\n * @param {number} targetResolution Target resolution.\n * @param {module:ol/extent~Extent} targetExtent Target extent.\n * @param {module:ol/reproj/Triangulation} triangulation\n * Calculated triangulation.\n * @param {Array<{extent: module:ol/extent~Extent,\n * image: (HTMLCanvasElement|HTMLImageElement|HTMLVideoElement)}>} sources\n * Array of sources.\n * @param {number} gutter Gutter of the sources.\n * @param {boolean=} opt_renderEdges Render reprojection edges.\n * @return {HTMLCanvasElement} Canvas with reprojected data.\n */\nexport function render(width, height, pixelRatio,\n sourceResolution, sourceExtent, targetResolution, targetExtent,\n triangulation, sources, gutter, opt_renderEdges) {\n\n const context = createCanvasContext2D(Math.round(pixelRatio * width),\n Math.round(pixelRatio * height));\n\n if (sources.length === 0) {\n return context.canvas;\n }\n\n context.scale(pixelRatio, pixelRatio);\n\n const sourceDataExtent = createEmpty();\n sources.forEach(function(src, i, arr) {\n extend(sourceDataExtent, src.extent);\n });\n\n const canvasWidthInUnits = getWidth(sourceDataExtent);\n const canvasHeightInUnits = getHeight(sourceDataExtent);\n const stitchContext = createCanvasContext2D(\n Math.round(pixelRatio * canvasWidthInUnits / sourceResolution),\n Math.round(pixelRatio * canvasHeightInUnits / sourceResolution));\n\n const stitchScale = pixelRatio / sourceResolution;\n\n sources.forEach(function(src, i, arr) {\n const xPos = src.extent[0] - sourceDataExtent[0];\n const yPos = -(src.extent[3] - sourceDataExtent[3]);\n const srcWidth = getWidth(src.extent);\n const srcHeight = getHeight(src.extent);\n\n stitchContext.drawImage(\n src.image,\n gutter, gutter,\n src.image.width - 2 * gutter, src.image.height - 2 * gutter,\n xPos * stitchScale, yPos * stitchScale,\n srcWidth * stitchScale, srcHeight * stitchScale);\n });\n\n const targetTopLeft = getTopLeft(targetExtent);\n\n triangulation.getTriangles().forEach(function(triangle, i, arr) {\n /* Calculate affine transform (src -> dst)\n * Resulting matrix can be used to transform coordinate\n * from `sourceProjection` to destination pixels.\n *\n * To optimize number of context calls and increase numerical stability,\n * we also do the following operations:\n * trans(-topLeftExtentCorner), scale(1 / targetResolution), scale(1, -1)\n * here before solving the linear system so [ui, vi] are pixel coordinates.\n *\n * Src points: xi, yi\n * Dst points: ui, vi\n * Affine coefficients: aij\n *\n * | x0 y0 1 0 0 0 | |a00| |u0|\n * | x1 y1 1 0 0 0 | |a01| |u1|\n * | x2 y2 1 0 0 0 | x |a02| = |u2|\n * | 0 0 0 x0 y0 1 | |a10| |v0|\n * | 0 0 0 x1 y1 1 | |a11| |v1|\n * | 0 0 0 x2 y2 1 | |a12| |v2|\n */\n const source = triangle.source;\n const target = triangle.target;\n let x0 = source[0][0], y0 = source[0][1];\n let x1 = source[1][0], y1 = source[1][1];\n let x2 = source[2][0], y2 = source[2][1];\n const u0 = (target[0][0] - targetTopLeft[0]) / targetResolution;\n const v0 = -(target[0][1] - targetTopLeft[1]) / targetResolution;\n const u1 = (target[1][0] - targetTopLeft[0]) / targetResolution;\n const v1 = -(target[1][1] - targetTopLeft[1]) / targetResolution;\n const u2 = (target[2][0] - targetTopLeft[0]) / targetResolution;\n const v2 = -(target[2][1] - targetTopLeft[1]) / targetResolution;\n\n // Shift all the source points to improve numerical stability\n // of all the subsequent calculations. The [x0, y0] is used here.\n // This is also used to simplify the linear system.\n const sourceNumericalShiftX = x0;\n const sourceNumericalShiftY = y0;\n x0 = 0;\n y0 = 0;\n x1 -= sourceNumericalShiftX;\n y1 -= sourceNumericalShiftY;\n x2 -= sourceNumericalShiftX;\n y2 -= sourceNumericalShiftY;\n\n const augmentedMatrix = [\n [x1, y1, 0, 0, u1 - u0],\n [x2, y2, 0, 0, u2 - u0],\n [0, 0, x1, y1, v1 - v0],\n [0, 0, x2, y2, v2 - v0]\n ];\n const affineCoefs = solveLinearSystem(augmentedMatrix);\n if (!affineCoefs) {\n return;\n }\n\n context.save();\n context.beginPath();\n const centroidX = (u0 + u1 + u2) / 3;\n const centroidY = (v0 + v1 + v2) / 3;\n const p0 = enlargeClipPoint(centroidX, centroidY, u0, v0);\n const p1 = enlargeClipPoint(centroidX, centroidY, u1, v1);\n const p2 = enlargeClipPoint(centroidX, centroidY, u2, v2);\n\n context.moveTo(p1[0], p1[1]);\n context.lineTo(p0[0], p0[1]);\n context.lineTo(p2[0], p2[1]);\n context.clip();\n\n context.transform(\n affineCoefs[0], affineCoefs[2], affineCoefs[1], affineCoefs[3], u0, v0);\n\n context.translate(sourceDataExtent[0] - sourceNumericalShiftX,\n sourceDataExtent[3] - sourceNumericalShiftY);\n\n context.scale(sourceResolution / pixelRatio,\n -sourceResolution / pixelRatio);\n\n context.drawImage(stitchContext.canvas, 0, 0);\n context.restore();\n });\n\n if (opt_renderEdges) {\n context.save();\n\n context.strokeStyle = 'black';\n context.lineWidth = 1;\n\n triangulation.getTriangles().forEach(function(triangle, i, arr) {\n const target = triangle.target;\n const u0 = (target[0][0] - targetTopLeft[0]) / targetResolution;\n const v0 = -(target[0][1] - targetTopLeft[1]) / targetResolution;\n const u1 = (target[1][0] - targetTopLeft[0]) / targetResolution;\n const v1 = -(target[1][1] - targetTopLeft[1]) / targetResolution;\n const u2 = (target[2][0] - targetTopLeft[0]) / targetResolution;\n const v2 = -(target[2][1] - targetTopLeft[1]) / targetResolution;\n\n context.beginPath();\n context.moveTo(u1, v1);\n context.lineTo(u0, v0);\n context.lineTo(u2, v2);\n context.closePath();\n context.stroke();\n });\n\n context.restore();\n }\n return context.canvas;\n}\n","/**\n * @module ol/reproj/Triangulation\n */\nimport {boundingExtent, createEmpty, extendCoordinate, getBottomLeft, getBottomRight,\n getTopLeft, getTopRight, getWidth, intersects} from '../extent.js';\nimport {modulo} from '../math.js';\nimport {getTransform} from '../proj.js';\n\n\n/**\n * Single triangle; consists of 3 source points and 3 target points.\n * @typedef {Object} Triangle\n * @property {Array} source\n * @property {Array} target\n */\n\n\n/**\n * Maximum number of subdivision steps during raster reprojection triangulation.\n * Prevents high memory usage and large number of proj4 calls (for certain\n * transformations and areas). At most `2*(2^this)` triangles are created for\n * each triangulated extent (tile/image).\n * @type {number}\n */\nconst MAX_SUBDIVISION = 10;\n\n\n/**\n * Maximum allowed size of triangle relative to world width. When transforming\n * corners of world extent between certain projections, the resulting\n * triangulation seems to have zero error and no subdivision is performed. If\n * the triangle width is more than this (relative to world width; 0-1),\n * subdivison is forced (up to `MAX_SUBDIVISION`). Default is `0.25`.\n * @type {number}\n */\nconst MAX_TRIANGLE_WIDTH = 0.25;\n\n\n/**\n * @classdesc\n * Class containing triangulation of the given target extent.\n * Used for determining source data and the reprojection itself.\n */\nclass Triangulation {\n\n /**\n * @param {module:ol/proj/Projection} sourceProj Source projection.\n * @param {module:ol/proj/Projection} targetProj Target projection.\n * @param {module:ol/extent~Extent} targetExtent Target extent to triangulate.\n * @param {module:ol/extent~Extent} maxSourceExtent Maximal source extent that can be used.\n * @param {number} errorThreshold Acceptable error (in source units).\n */\n constructor(sourceProj, targetProj, targetExtent, maxSourceExtent, errorThreshold) {\n\n /**\n * @type {module:ol/proj/Projection}\n * @private\n */\n this.sourceProj_ = sourceProj;\n\n /**\n * @type {module:ol/proj/Projection}\n * @private\n */\n this.targetProj_ = targetProj;\n\n /** @type {!Object} */\n let transformInvCache = {};\n const transformInv = getTransform(this.targetProj_, this.sourceProj_);\n\n /**\n * @param {module:ol/coordinate~Coordinate} c A coordinate.\n * @return {module:ol/coordinate~Coordinate} Transformed coordinate.\n * @private\n */\n this.transformInv_ = function(c) {\n const key = c[0] + '/' + c[1];\n if (!transformInvCache[key]) {\n transformInvCache[key] = transformInv(c);\n }\n return transformInvCache[key];\n };\n\n /**\n * @type {module:ol/extent~Extent}\n * @private\n */\n this.maxSourceExtent_ = maxSourceExtent;\n\n /**\n * @type {number}\n * @private\n */\n this.errorThresholdSquared_ = errorThreshold * errorThreshold;\n\n /**\n * @type {Array}\n * @private\n */\n this.triangles_ = [];\n\n /**\n * Indicates that the triangulation crosses edge of the source projection.\n * @type {boolean}\n * @private\n */\n this.wrapsXInSource_ = false;\n\n /**\n * @type {boolean}\n * @private\n */\n this.canWrapXInSource_ = this.sourceProj_.canWrapX() &&\n !!maxSourceExtent &&\n !!this.sourceProj_.getExtent() &&\n (getWidth(maxSourceExtent) == getWidth(this.sourceProj_.getExtent()));\n\n /**\n * @type {?number}\n * @private\n */\n this.sourceWorldWidth_ = this.sourceProj_.getExtent() ?\n getWidth(this.sourceProj_.getExtent()) : null;\n\n /**\n * @type {?number}\n * @private\n */\n this.targetWorldWidth_ = this.targetProj_.getExtent() ?\n getWidth(this.targetProj_.getExtent()) : null;\n\n const destinationTopLeft = getTopLeft(targetExtent);\n const destinationTopRight = getTopRight(targetExtent);\n const destinationBottomRight = getBottomRight(targetExtent);\n const destinationBottomLeft = getBottomLeft(targetExtent);\n const sourceTopLeft = this.transformInv_(destinationTopLeft);\n const sourceTopRight = this.transformInv_(destinationTopRight);\n const sourceBottomRight = this.transformInv_(destinationBottomRight);\n const sourceBottomLeft = this.transformInv_(destinationBottomLeft);\n\n this.addQuad_(\n destinationTopLeft, destinationTopRight,\n destinationBottomRight, destinationBottomLeft,\n sourceTopLeft, sourceTopRight, sourceBottomRight, sourceBottomLeft,\n MAX_SUBDIVISION);\n\n if (this.wrapsXInSource_) {\n let leftBound = Infinity;\n this.triangles_.forEach(function(triangle, i, arr) {\n leftBound = Math.min(leftBound,\n triangle.source[0][0], triangle.source[1][0], triangle.source[2][0]);\n });\n\n // Shift triangles to be as close to `leftBound` as possible\n // (if the distance is more than `worldWidth / 2` it can be closer.\n this.triangles_.forEach(function(triangle) {\n if (Math.max(triangle.source[0][0], triangle.source[1][0],\n triangle.source[2][0]) - leftBound > this.sourceWorldWidth_ / 2) {\n const newTriangle = [[triangle.source[0][0], triangle.source[0][1]],\n [triangle.source[1][0], triangle.source[1][1]],\n [triangle.source[2][0], triangle.source[2][1]]];\n if ((newTriangle[0][0] - leftBound) > this.sourceWorldWidth_ / 2) {\n newTriangle[0][0] -= this.sourceWorldWidth_;\n }\n if ((newTriangle[1][0] - leftBound) > this.sourceWorldWidth_ / 2) {\n newTriangle[1][0] -= this.sourceWorldWidth_;\n }\n if ((newTriangle[2][0] - leftBound) > this.sourceWorldWidth_ / 2) {\n newTriangle[2][0] -= this.sourceWorldWidth_;\n }\n\n // Rarely (if the extent contains both the dateline and prime meridian)\n // the shift can in turn break some triangles.\n // Detect this here and don't shift in such cases.\n const minX = Math.min(\n newTriangle[0][0], newTriangle[1][0], newTriangle[2][0]);\n const maxX = Math.max(\n newTriangle[0][0], newTriangle[1][0], newTriangle[2][0]);\n if ((maxX - minX) < this.sourceWorldWidth_ / 2) {\n triangle.source = newTriangle;\n }\n }\n }.bind(this));\n }\n\n transformInvCache = {};\n }\n\n /**\n * Adds triangle to the triangulation.\n * @param {module:ol/coordinate~Coordinate} a The target a coordinate.\n * @param {module:ol/coordinate~Coordinate} b The target b coordinate.\n * @param {module:ol/coordinate~Coordinate} c The target c coordinate.\n * @param {module:ol/coordinate~Coordinate} aSrc The source a coordinate.\n * @param {module:ol/coordinate~Coordinate} bSrc The source b coordinate.\n * @param {module:ol/coordinate~Coordinate} cSrc The source c coordinate.\n * @private\n */\n addTriangle_(a, b, c, aSrc, bSrc, cSrc) {\n this.triangles_.push({\n source: [aSrc, bSrc, cSrc],\n target: [a, b, c]\n });\n }\n\n /**\n * Adds quad (points in clock-wise order) to the triangulation\n * (and reprojects the vertices) if valid.\n * Performs quad subdivision if needed to increase precision.\n *\n * @param {module:ol/coordinate~Coordinate} a The target a coordinate.\n * @param {module:ol/coordinate~Coordinate} b The target b coordinate.\n * @param {module:ol/coordinate~Coordinate} c The target c coordinate.\n * @param {module:ol/coordinate~Coordinate} d The target d coordinate.\n * @param {module:ol/coordinate~Coordinate} aSrc The source a coordinate.\n * @param {module:ol/coordinate~Coordinate} bSrc The source b coordinate.\n * @param {module:ol/coordinate~Coordinate} cSrc The source c coordinate.\n * @param {module:ol/coordinate~Coordinate} dSrc The source d coordinate.\n * @param {number} maxSubdivision Maximal allowed subdivision of the quad.\n * @private\n */\n addQuad_(a, b, c, d, aSrc, bSrc, cSrc, dSrc, maxSubdivision) {\n\n const sourceQuadExtent = boundingExtent([aSrc, bSrc, cSrc, dSrc]);\n const sourceCoverageX = this.sourceWorldWidth_ ?\n getWidth(sourceQuadExtent) / this.sourceWorldWidth_ : null;\n const sourceWorldWidth = /** @type {number} */ (this.sourceWorldWidth_);\n\n // when the quad is wrapped in the source projection\n // it covers most of the projection extent, but not fully\n const wrapsX = this.sourceProj_.canWrapX() &&\n sourceCoverageX > 0.5 && sourceCoverageX < 1;\n\n let needsSubdivision = false;\n\n if (maxSubdivision > 0) {\n if (this.targetProj_.isGlobal() && this.targetWorldWidth_) {\n const targetQuadExtent = boundingExtent([a, b, c, d]);\n const targetCoverageX = getWidth(targetQuadExtent) / this.targetWorldWidth_;\n needsSubdivision |=\n targetCoverageX > MAX_TRIANGLE_WIDTH;\n }\n if (!wrapsX && this.sourceProj_.isGlobal() && sourceCoverageX) {\n needsSubdivision |=\n sourceCoverageX > MAX_TRIANGLE_WIDTH;\n }\n }\n\n if (!needsSubdivision && this.maxSourceExtent_) {\n if (!intersects(sourceQuadExtent, this.maxSourceExtent_)) {\n // whole quad outside source projection extent -> ignore\n return;\n }\n }\n\n if (!needsSubdivision) {\n if (!isFinite(aSrc[0]) || !isFinite(aSrc[1]) ||\n !isFinite(bSrc[0]) || !isFinite(bSrc[1]) ||\n !isFinite(cSrc[0]) || !isFinite(cSrc[1]) ||\n !isFinite(dSrc[0]) || !isFinite(dSrc[1])) {\n if (maxSubdivision > 0) {\n needsSubdivision = true;\n } else {\n return;\n }\n }\n }\n\n if (maxSubdivision > 0) {\n if (!needsSubdivision) {\n const center = [(a[0] + c[0]) / 2, (a[1] + c[1]) / 2];\n const centerSrc = this.transformInv_(center);\n\n let dx;\n if (wrapsX) {\n const centerSrcEstimX =\n (modulo(aSrc[0], sourceWorldWidth) +\n modulo(cSrc[0], sourceWorldWidth)) / 2;\n dx = centerSrcEstimX -\n modulo(centerSrc[0], sourceWorldWidth);\n } else {\n dx = (aSrc[0] + cSrc[0]) / 2 - centerSrc[0];\n }\n const dy = (aSrc[1] + cSrc[1]) / 2 - centerSrc[1];\n const centerSrcErrorSquared = dx * dx + dy * dy;\n needsSubdivision = centerSrcErrorSquared > this.errorThresholdSquared_;\n }\n if (needsSubdivision) {\n if (Math.abs(a[0] - c[0]) <= Math.abs(a[1] - c[1])) {\n // split horizontally (top & bottom)\n const bc = [(b[0] + c[0]) / 2, (b[1] + c[1]) / 2];\n const bcSrc = this.transformInv_(bc);\n const da = [(d[0] + a[0]) / 2, (d[1] + a[1]) / 2];\n const daSrc = this.transformInv_(da);\n\n this.addQuad_(\n a, b, bc, da, aSrc, bSrc, bcSrc, daSrc, maxSubdivision - 1);\n this.addQuad_(\n da, bc, c, d, daSrc, bcSrc, cSrc, dSrc, maxSubdivision - 1);\n } else {\n // split vertically (left & right)\n const ab = [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2];\n const abSrc = this.transformInv_(ab);\n const cd = [(c[0] + d[0]) / 2, (c[1] + d[1]) / 2];\n const cdSrc = this.transformInv_(cd);\n\n this.addQuad_(\n a, ab, cd, d, aSrc, abSrc, cdSrc, dSrc, maxSubdivision - 1);\n this.addQuad_(\n ab, b, c, cd, abSrc, bSrc, cSrc, cdSrc, maxSubdivision - 1);\n }\n return;\n }\n }\n\n if (wrapsX) {\n if (!this.canWrapXInSource_) {\n return;\n }\n this.wrapsXInSource_ = true;\n }\n\n this.addTriangle_(a, c, d, aSrc, cSrc, dSrc);\n this.addTriangle_(a, b, c, aSrc, bSrc, cSrc);\n }\n\n /**\n * Calculates extent of the 'source' coordinates from all the triangles.\n *\n * @return {module:ol/extent~Extent} Calculated extent.\n */\n calculateSourceExtent() {\n const extent = createEmpty();\n\n this.triangles_.forEach(function(triangle, i, arr) {\n const src = triangle.source;\n extendCoordinate(extent, src[0]);\n extendCoordinate(extent, src[1]);\n extendCoordinate(extent, src[2]);\n });\n\n return extent;\n }\n\n /**\n * @return {Array} Array of the calculated triangles.\n */\n getTriangles() {\n return this.triangles_;\n }\n}\n\nexport default Triangulation;\n","/**\n * @module ol/reproj/Tile\n */\nimport {ERROR_THRESHOLD} from './common.js';\n\nimport Tile from '../Tile.js';\nimport TileState from '../TileState.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport EventType from '../events/EventType.js';\nimport {getArea, getCenter, getIntersection} from '../extent.js';\nimport {clamp} from '../math.js';\nimport {calculateSourceResolution, render as renderReprojected} from '../reproj.js';\nimport Triangulation from '../reproj/Triangulation.js';\n\n\n/**\n * @typedef {function(number, number, number, number) : module:ol/Tile} FunctionType\n */\n\n\n/**\n * @classdesc\n * Class encapsulating single reprojected tile.\n * See {@link module:ol/source/TileImage~TileImage}.\n *\n */\nclass ReprojTile extends Tile {\n /**\n * @param {module:ol/proj/Projection} sourceProj Source projection.\n * @param {module:ol/tilegrid/TileGrid} sourceTileGrid Source tile grid.\n * @param {module:ol/proj/Projection} targetProj Target projection.\n * @param {module:ol/tilegrid/TileGrid} targetTileGrid Target tile grid.\n * @param {module:ol/tilecoord~TileCoord} tileCoord Coordinate of the tile.\n * @param {module:ol/tilecoord~TileCoord} wrappedTileCoord Coordinate of the tile wrapped in X.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} gutter Gutter of the source tiles.\n * @param {module:ol/reproj/Tile~FunctionType} getTileFunction\n * Function returning source tiles (z, x, y, pixelRatio).\n * @param {number=} opt_errorThreshold Acceptable reprojection error (in px).\n * @param {boolean=} opt_renderEdges Render reprojection edges.\n */\n constructor(\n sourceProj,\n sourceTileGrid,\n targetProj,\n targetTileGrid,\n tileCoord,\n wrappedTileCoord,\n pixelRatio,\n gutter,\n getTileFunction,\n opt_errorThreshold,\n opt_renderEdges\n ) {\n super(tileCoord, TileState.IDLE);\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderEdges_ = opt_renderEdges !== undefined ? opt_renderEdges : false;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ = pixelRatio;\n\n /**\n * @private\n * @type {number}\n */\n this.gutter_ = gutter;\n\n /**\n * @private\n * @type {HTMLCanvasElement}\n */\n this.canvas_ = null;\n\n /**\n * @private\n * @type {module:ol/tilegrid/TileGrid}\n */\n this.sourceTileGrid_ = sourceTileGrid;\n\n /**\n * @private\n * @type {module:ol/tilegrid/TileGrid}\n */\n this.targetTileGrid_ = targetTileGrid;\n\n /**\n * @private\n * @type {module:ol/tilecoord~TileCoord}\n */\n this.wrappedTileCoord_ = wrappedTileCoord ? wrappedTileCoord : tileCoord;\n\n /**\n * @private\n * @type {!Array}\n */\n this.sourceTiles_ = [];\n\n /**\n * @private\n * @type {Array}\n */\n this.sourcesListenerKeys_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.sourceZ_ = 0;\n\n const targetExtent = targetTileGrid.getTileCoordExtent(this.wrappedTileCoord_);\n const maxTargetExtent = this.targetTileGrid_.getExtent();\n let maxSourceExtent = this.sourceTileGrid_.getExtent();\n\n const limitedTargetExtent = maxTargetExtent ?\n getIntersection(targetExtent, maxTargetExtent) : targetExtent;\n\n if (getArea(limitedTargetExtent) === 0) {\n // Tile is completely outside range -> EMPTY\n // TODO: is it actually correct that the source even creates the tile ?\n this.state = TileState.EMPTY;\n return;\n }\n\n const sourceProjExtent = sourceProj.getExtent();\n if (sourceProjExtent) {\n if (!maxSourceExtent) {\n maxSourceExtent = sourceProjExtent;\n } else {\n maxSourceExtent = getIntersection(maxSourceExtent, sourceProjExtent);\n }\n }\n\n const targetResolution = targetTileGrid.getResolution(\n this.wrappedTileCoord_[0]);\n\n const targetCenter = getCenter(limitedTargetExtent);\n const sourceResolution = calculateSourceResolution(\n sourceProj, targetProj, targetCenter, targetResolution);\n\n if (!isFinite(sourceResolution) || sourceResolution <= 0) {\n // invalid sourceResolution -> EMPTY\n // probably edges of the projections when no extent is defined\n this.state = TileState.EMPTY;\n return;\n }\n\n const errorThresholdInPixels = opt_errorThreshold !== undefined ?\n opt_errorThreshold : ERROR_THRESHOLD;\n\n /**\n * @private\n * @type {!module:ol/reproj/Triangulation}\n */\n this.triangulation_ = new Triangulation(\n sourceProj, targetProj, limitedTargetExtent, maxSourceExtent,\n sourceResolution * errorThresholdInPixels);\n\n if (this.triangulation_.getTriangles().length === 0) {\n // no valid triangles -> EMPTY\n this.state = TileState.EMPTY;\n return;\n }\n\n this.sourceZ_ = sourceTileGrid.getZForResolution(sourceResolution);\n let sourceExtent = this.triangulation_.calculateSourceExtent();\n\n if (maxSourceExtent) {\n if (sourceProj.canWrapX()) {\n sourceExtent[1] = clamp(\n sourceExtent[1], maxSourceExtent[1], maxSourceExtent[3]);\n sourceExtent[3] = clamp(\n sourceExtent[3], maxSourceExtent[1], maxSourceExtent[3]);\n } else {\n sourceExtent = getIntersection(sourceExtent, maxSourceExtent);\n }\n }\n\n if (!getArea(sourceExtent)) {\n this.state = TileState.EMPTY;\n } else {\n const sourceRange = sourceTileGrid.getTileRangeForExtentAndZ(\n sourceExtent, this.sourceZ_);\n\n for (let srcX = sourceRange.minX; srcX <= sourceRange.maxX; srcX++) {\n for (let srcY = sourceRange.minY; srcY <= sourceRange.maxY; srcY++) {\n const tile = getTileFunction(this.sourceZ_, srcX, srcY, pixelRatio);\n if (tile) {\n this.sourceTiles_.push(tile);\n }\n }\n }\n\n if (this.sourceTiles_.length === 0) {\n this.state = TileState.EMPTY;\n }\n }\n }\n\n /**\n * @inheritDoc\n */\n disposeInternal() {\n if (this.state == TileState.LOADING) {\n this.unlistenSources_();\n }\n super.disposeInternal();\n }\n\n /**\n * Get the HTML Canvas element for this tile.\n * @return {HTMLCanvasElement} Canvas.\n */\n getImage() {\n return this.canvas_;\n }\n\n /**\n * @private\n */\n reproject_() {\n const sources = [];\n this.sourceTiles_.forEach(function(tile, i, arr) {\n if (tile && tile.getState() == TileState.LOADED) {\n sources.push({\n extent: this.sourceTileGrid_.getTileCoordExtent(tile.tileCoord),\n image: tile.getImage()\n });\n }\n }.bind(this));\n this.sourceTiles_.length = 0;\n\n if (sources.length === 0) {\n this.state = TileState.ERROR;\n } else {\n const z = this.wrappedTileCoord_[0];\n const size = this.targetTileGrid_.getTileSize(z);\n const width = typeof size === 'number' ? size : size[0];\n const height = typeof size === 'number' ? size : size[1];\n const targetResolution = this.targetTileGrid_.getResolution(z);\n const sourceResolution = this.sourceTileGrid_.getResolution(this.sourceZ_);\n\n const targetExtent = this.targetTileGrid_.getTileCoordExtent(\n this.wrappedTileCoord_);\n this.canvas_ = renderReprojected(width, height, this.pixelRatio_,\n sourceResolution, this.sourceTileGrid_.getExtent(),\n targetResolution, targetExtent, this.triangulation_, sources,\n this.gutter_, this.renderEdges_);\n\n this.state = TileState.LOADED;\n }\n this.changed();\n }\n\n /**\n * @inheritDoc\n */\n load() {\n if (this.state == TileState.IDLE) {\n this.state = TileState.LOADING;\n this.changed();\n\n let leftToLoad = 0;\n\n this.sourcesListenerKeys_ = [];\n this.sourceTiles_.forEach(function(tile, i, arr) {\n const state = tile.getState();\n if (state == TileState.IDLE || state == TileState.LOADING) {\n leftToLoad++;\n\n const sourceListenKey = listen(tile, EventType.CHANGE,\n function(e) {\n const state = tile.getState();\n if (state == TileState.LOADED ||\n state == TileState.ERROR ||\n state == TileState.EMPTY) {\n unlistenByKey(sourceListenKey);\n leftToLoad--;\n if (leftToLoad === 0) {\n this.unlistenSources_();\n this.reproject_();\n }\n }\n }, this);\n this.sourcesListenerKeys_.push(sourceListenKey);\n }\n }.bind(this));\n\n this.sourceTiles_.forEach(function(tile, i, arr) {\n const state = tile.getState();\n if (state == TileState.IDLE) {\n tile.load();\n }\n });\n\n if (leftToLoad === 0) {\n setTimeout(this.reproject_.bind(this), 0);\n }\n }\n }\n\n /**\n * @private\n */\n unlistenSources_() {\n this.sourcesListenerKeys_.forEach(unlistenByKey);\n this.sourcesListenerKeys_ = null;\n }\n}\n\n\nexport default ReprojTile;\n","/**\n * @module ol/source/Tile\n */\n\nimport {VOID} from '../functions.js';\nimport TileCache from '../TileCache.js';\nimport TileState from '../TileState.js';\nimport Event from '../events/Event.js';\nimport {equivalent} from '../proj.js';\nimport {toSize, scale as scaleSize} from '../size.js';\nimport Source from '../source/Source.js';\nimport {getKeyZXY, withinExtentAndZ} from '../tilecoord.js';\nimport {wrapX, getForProjection as getTileGridForProjection} from '../tilegrid.js';\n\n/**\n * @typedef {Object} Options\n * @property {module:ol/source/Source~AttributionLike} [attributions]\n * @property {number} [cacheSize]\n * @property {module:ol/extent~Extent} [extent]\n * @property {boolean} [opaque]\n * @property {number} [tilePixelRatio]\n * @property {module:ol/proj~ProjectionLike} [projection]\n * @property {module:ol/source/State} [state]\n * @property {module:ol/tilegrid/TileGrid} [tileGrid]\n * @property {boolean} [wrapX=true]\n * @property {number} [transition]\n */\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for sources providing images divided into a tile grid.\n * @api\n */\nclass TileSource extends Source {\n /**\n * @param {module:ol/source/Tile~Options=} options SourceTile source options.\n */\n constructor(options) {\n\n super({\n attributions: options.attributions,\n extent: options.extent,\n projection: options.projection,\n state: options.state,\n wrapX: options.wrapX\n });\n\n /**\n * @private\n * @type {boolean}\n */\n this.opaque_ = options.opaque !== undefined ? options.opaque : false;\n\n /**\n * @private\n * @type {number}\n */\n this.tilePixelRatio_ = options.tilePixelRatio !== undefined ?\n options.tilePixelRatio : 1;\n\n /**\n * @protected\n * @type {module:ol/tilegrid/TileGrid}\n */\n this.tileGrid = options.tileGrid !== undefined ? options.tileGrid : null;\n\n /**\n * @protected\n * @type {module:ol/TileCache}\n */\n this.tileCache = new TileCache(options.cacheSize);\n\n /**\n * @protected\n * @type {module:ol/size~Size}\n */\n this.tmpSize = [0, 0];\n\n /**\n * @private\n * @type {string}\n */\n this.key_ = '';\n\n /**\n * @protected\n * @type {module:ol/Tile~Options}\n */\n this.tileOptions = {transition: options.transition};\n\n }\n\n /**\n * @return {boolean} Can expire cache.\n */\n canExpireCache() {\n return this.tileCache.canExpireCache();\n }\n\n /**\n * @param {module:ol/proj/Projection} projection Projection.\n * @param {!Object} usedTiles Used tiles.\n */\n expireCache(projection, usedTiles) {\n const tileCache = this.getTileCacheForProjection(projection);\n if (tileCache) {\n tileCache.expireCache(usedTiles);\n }\n }\n\n /**\n * @param {module:ol/proj/Projection} projection Projection.\n * @param {number} z Zoom level.\n * @param {module:ol/TileRange} tileRange Tile range.\n * @param {function(module:ol/Tile):(boolean|undefined)} callback Called with each\n * loaded tile. If the callback returns `false`, the tile will not be\n * considered loaded.\n * @return {boolean} The tile range is fully covered with loaded tiles.\n */\n forEachLoadedTile(projection, z, tileRange, callback) {\n const tileCache = this.getTileCacheForProjection(projection);\n if (!tileCache) {\n return false;\n }\n\n let covered = true;\n let tile, tileCoordKey, loaded;\n for (let x = tileRange.minX; x <= tileRange.maxX; ++x) {\n for (let y = tileRange.minY; y <= tileRange.maxY; ++y) {\n tileCoordKey = getKeyZXY(z, x, y);\n loaded = false;\n if (tileCache.containsKey(tileCoordKey)) {\n tile = /** @type {!module:ol/Tile} */ (tileCache.get(tileCoordKey));\n loaded = tile.getState() === TileState.LOADED;\n if (loaded) {\n loaded = (callback(tile) !== false);\n }\n }\n if (!loaded) {\n covered = false;\n }\n }\n }\n return covered;\n }\n\n /**\n * @param {module:ol/proj/Projection} projection Projection.\n * @return {number} Gutter.\n */\n getGutterForProjection(projection) {\n return 0;\n }\n\n /**\n * Return the key to be used for all tiles in the source.\n * @return {string} The key for all tiles.\n * @protected\n */\n getKey() {\n return this.key_;\n }\n\n /**\n * Set the value to be used as the key for all tiles in the source.\n * @param {string} key The key for tiles.\n * @protected\n */\n setKey(key) {\n if (this.key_ !== key) {\n this.key_ = key;\n this.changed();\n }\n }\n\n /**\n * @param {module:ol/proj/Projection} projection Projection.\n * @return {boolean} Opaque.\n */\n getOpaque(projection) {\n return this.opaque_;\n }\n\n /**\n * @inheritDoc\n */\n getResolutions() {\n return this.tileGrid.getResolutions();\n }\n\n /**\n * @abstract\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @param {number} pixelRatio Pixel ratio.\n * @param {module:ol/proj/Projection} projection Projection.\n * @return {!module:ol/Tile} Tile.\n */\n getTile(z, x, y, pixelRatio, projection) {}\n\n /**\n * Return the tile grid of the tile source.\n * @return {module:ol/tilegrid/TileGrid} Tile grid.\n * @api\n */\n getTileGrid() {\n return this.tileGrid;\n }\n\n /**\n * @param {module:ol/proj/Projection} projection Projection.\n * @return {!module:ol/tilegrid/TileGrid} Tile grid.\n */\n getTileGridForProjection(projection) {\n if (!this.tileGrid) {\n return getTileGridForProjection(projection);\n } else {\n return this.tileGrid;\n }\n }\n\n /**\n * @param {module:ol/proj/Projection} projection Projection.\n * @return {module:ol/TileCache} Tile cache.\n * @protected\n */\n getTileCacheForProjection(projection) {\n const thisProj = this.getProjection();\n if (thisProj && !equivalent(thisProj, projection)) {\n return null;\n } else {\n return this.tileCache;\n }\n }\n\n /**\n * Get the tile pixel ratio for this source. Subclasses may override this\n * method, which is meant to return a supported pixel ratio that matches the\n * provided `pixelRatio` as close as possible.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Tile pixel ratio.\n */\n getTilePixelRatio(pixelRatio) {\n return this.tilePixelRatio_;\n }\n\n /**\n * @param {number} z Z.\n * @param {number} pixelRatio Pixel ratio.\n * @param {module:ol/proj/Projection} projection Projection.\n * @return {module:ol/size~Size} Tile size.\n */\n getTilePixelSize(z, pixelRatio, projection) {\n const tileGrid = this.getTileGridForProjection(projection);\n const tilePixelRatio = this.getTilePixelRatio(pixelRatio);\n const tileSize = toSize(tileGrid.getTileSize(z), this.tmpSize);\n if (tilePixelRatio == 1) {\n return tileSize;\n } else {\n return scaleSize(tileSize, tilePixelRatio, this.tmpSize);\n }\n }\n\n /**\n * Returns a tile coordinate wrapped around the x-axis. When the tile coordinate\n * is outside the resolution and extent range of the tile grid, `null` will be\n * returned.\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile coordinate.\n * @param {module:ol/proj/Projection=} opt_projection Projection.\n * @return {module:ol/tilecoord~TileCoord} Tile coordinate to be passed to the tileUrlFunction or\n * null if no tile URL should be created for the passed `tileCoord`.\n */\n getTileCoordForTileUrlFunction(tileCoord, opt_projection) {\n const projection = opt_projection !== undefined ?\n opt_projection : this.getProjection();\n const tileGrid = this.getTileGridForProjection(projection);\n if (this.getWrapX() && projection.isGlobal()) {\n tileCoord = wrapX(tileGrid, tileCoord, projection);\n }\n return withinExtentAndZ(tileCoord, tileGrid) ? tileCoord : null;\n }\n\n /**\n * @inheritDoc\n */\n refresh() {\n this.tileCache.clear();\n this.changed();\n }\n}\n\n\n/**\n * Marks a tile coord as being used, without triggering a load.\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @param {module:ol/proj/Projection} projection Projection.\n */\nTileSource.prototype.useTile = VOID;\n\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/source/Tile~TileSource} instances are instances of this\n * type.\n */\nexport class TileSourceEvent extends Event {\n /**\n * @param {string} type Type.\n * @param {module:ol/Tile} tile The tile.\n */\n constructor(type, tile) {\n\n super(type);\n\n /**\n * The tile related to the event.\n * @type {module:ol/Tile}\n * @api\n */\n this.tile = tile;\n\n }\n\n}\n\nexport default TileSource;\n","/**\n * @module ol/source/TileEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n\n /**\n * Triggered when a tile starts loading.\n * @event module:ol/source/Tile~TileSourceEvent#tileloadstart\n * @api\n */\n TILELOADSTART: 'tileloadstart',\n\n /**\n * Triggered when a tile finishes loading, either when its data is loaded,\n * or when loading was aborted because the tile is no longer needed.\n * @event module:ol/source/Tile~TileSourceEvent#tileloadend\n * @api\n */\n TILELOADEND: 'tileloadend',\n\n /**\n * Triggered if tile loading results in an error.\n * @event module:ol/source/Tile~TileSourceEvent#tileloaderror\n * @api\n */\n TILELOADERROR: 'tileloaderror'\n\n};\n","/**\n * @module ol/source/UrlTile\n */\nimport {getUid} from '../util.js';\nimport TileState from '../TileState.js';\nimport {expandUrl, createFromTemplates, nullTileUrlFunction} from '../tileurlfunction.js';\nimport TileSource, {TileSourceEvent} from '../source/Tile.js';\nimport TileEventType from '../source/TileEventType.js';\nimport {getKeyZXY} from '../tilecoord.js';\n\n/**\n * @typedef {Object} Options\n * @property {module:ol/source/Source~AttributionLike} [attributions]\n * @property {number} [cacheSize]\n * @property {module:ol/extent~Extent} [extent]\n * @property {boolean} [opaque]\n * @property {module:ol/proj~ProjectionLike} [projection]\n * @property {module:ol/source/State} [state]\n * @property {module:ol/tilegrid/TileGrid} [tileGrid]\n * @property {module:ol/Tile~LoadFunction} tileLoadFunction\n * @property {number} [tilePixelRatio]\n * @property {module:ol/Tile~UrlFunction} [tileUrlFunction]\n * @property {string} [url]\n * @property {Array} [urls]\n * @property {boolean} [wrapX=true]\n * @property {number} [transition]\n */\n\n\n/**\n * @classdesc\n * Base class for sources providing tiles divided into a tile grid over http.\n *\n * @fires module:ol/source/TileEvent\n */\nclass UrlTile extends TileSource {\n /**\n * @param {module:ol/source/UrlTile~Options=} options Image tile options.\n */\n constructor(options) {\n\n super({\n attributions: options.attributions,\n cacheSize: options.cacheSize,\n extent: options.extent,\n opaque: options.opaque,\n projection: options.projection,\n state: options.state,\n tileGrid: options.tileGrid,\n tilePixelRatio: options.tilePixelRatio,\n wrapX: options.wrapX,\n transition: options.transition\n });\n\n /**\n * @protected\n * @type {module:ol/Tile~LoadFunction}\n */\n this.tileLoadFunction = options.tileLoadFunction;\n\n /**\n * @protected\n * @type {module:ol/Tile~UrlFunction}\n */\n this.tileUrlFunction = this.fixedTileUrlFunction ?\n this.fixedTileUrlFunction.bind(this) : nullTileUrlFunction;\n\n /**\n * @protected\n * @type {!Array|null}\n */\n this.urls = null;\n\n if (options.urls) {\n this.setUrls(options.urls);\n } else if (options.url) {\n this.setUrl(options.url);\n }\n if (options.tileUrlFunction) {\n this.setTileUrlFunction(options.tileUrlFunction);\n }\n\n /**\n * @private\n * @type {!Object}\n */\n this.tileLoadingKeys_ = {};\n\n }\n\n /**\n * Return the tile load function of the source.\n * @return {module:ol/Tile~LoadFunction} TileLoadFunction\n * @api\n */\n getTileLoadFunction() {\n return this.tileLoadFunction;\n }\n\n /**\n * Return the tile URL function of the source.\n * @return {module:ol/Tile~UrlFunction} TileUrlFunction\n * @api\n */\n getTileUrlFunction() {\n return this.tileUrlFunction;\n }\n\n /**\n * Return the URLs used for this source.\n * When a tileUrlFunction is used instead of url or urls,\n * null will be returned.\n * @return {!Array|null} URLs.\n * @api\n */\n getUrls() {\n return this.urls;\n }\n\n /**\n * Handle tile change events.\n * @param {module:ol/events/Event} event Event.\n * @protected\n */\n handleTileChange(event) {\n const tile = /** @type {module:ol/Tile} */ (event.target);\n const uid = getUid(tile);\n const tileState = tile.getState();\n let type;\n if (tileState == TileState.LOADING) {\n this.tileLoadingKeys_[uid] = true;\n type = TileEventType.TILELOADSTART;\n } else if (uid in this.tileLoadingKeys_) {\n delete this.tileLoadingKeys_[uid];\n type = tileState == TileState.ERROR ? TileEventType.TILELOADERROR :\n (tileState == TileState.LOADED || tileState == TileState.ABORT) ?\n TileEventType.TILELOADEND : undefined;\n }\n if (type != undefined) {\n this.dispatchEvent(new TileSourceEvent(type, tile));\n }\n }\n\n /**\n * Set the tile load function of the source.\n * @param {module:ol/Tile~LoadFunction} tileLoadFunction Tile load function.\n * @api\n */\n setTileLoadFunction(tileLoadFunction) {\n this.tileCache.clear();\n this.tileLoadFunction = tileLoadFunction;\n this.changed();\n }\n\n /**\n * Set the tile URL function of the source.\n * @param {module:ol/Tile~UrlFunction} tileUrlFunction Tile URL function.\n * @param {string=} opt_key Optional new tile key for the source.\n * @api\n */\n setTileUrlFunction(tileUrlFunction, opt_key) {\n this.tileUrlFunction = tileUrlFunction;\n this.tileCache.pruneExceptNewestZ();\n if (typeof opt_key !== 'undefined') {\n this.setKey(opt_key);\n } else {\n this.changed();\n }\n }\n\n /**\n * Set the URL to use for requests.\n * @param {string} url URL.\n * @api\n */\n setUrl(url) {\n const urls = this.urls = expandUrl(url);\n this.setTileUrlFunction(this.fixedTileUrlFunction ?\n this.fixedTileUrlFunction.bind(this) :\n createFromTemplates(urls, this.tileGrid), url);\n }\n\n /**\n * Set the URLs to use for requests.\n * @param {Array} urls URLs.\n * @api\n */\n setUrls(urls) {\n this.urls = urls;\n const key = urls.join('\\n');\n this.setTileUrlFunction(this.fixedTileUrlFunction ?\n this.fixedTileUrlFunction.bind(this) :\n createFromTemplates(urls, this.tileGrid), key);\n }\n\n /**\n * @inheritDoc\n */\n useTile(z, x, y) {\n const tileCoordKey = getKeyZXY(z, x, y);\n if (this.tileCache.containsKey(tileCoordKey)) {\n this.tileCache.get(tileCoordKey);\n }\n }\n}\n\n\n/**\n * @type {module:ol/Tile~UrlFunction|undefined}\n * @protected\n */\nUrlTile.prototype.fixedTileUrlFunction;\n\nexport default UrlTile;\n","/**\n * @module ol/source/TileImage\n */\nimport {ENABLE_RASTER_REPROJECTION} from '../reproj/common.js';\nimport {getUid} from '../util.js';\nimport ImageTile from '../ImageTile.js';\nimport TileCache from '../TileCache.js';\nimport TileState from '../TileState.js';\nimport {listen} from '../events.js';\nimport EventType from '../events/EventType.js';\nimport {equivalent, get as getProjection} from '../proj.js';\nimport ReprojTile from '../reproj/Tile.js';\nimport UrlTile from '../source/UrlTile.js';\nimport {getKey, getKeyZXY} from '../tilecoord.js';\nimport {getForProjection as getTileGridForProjection} from '../tilegrid.js';\n\n/**\n * @typedef {Object} Options\n * @property {module:ol/source/Source~AttributionLike} [attributions] Attributions.\n * @property {number} [cacheSize=2048] Cache size.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images. Note that\n * you must provide a `crossOrigin` value if you are using the WebGL renderer or if you want to\n * access pixel data with the Canvas renderer. See\n * https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {boolean} [opaque=true] Whether the layer is opaque.\n * @property {module:ol/proj~ProjectionLike} projection Projection.\n * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).\n * Higher values can increase reprojection performance, but decrease precision.\n * @property {module:ol/source/State} [state] Source state.\n * @property {module:ol/ImageTile~TileClass} [tileClass] Class used to instantiate image tiles.\n * Default is {@link module:ol/ImageTile~ImageTile}.\n * @property {module:ol/tilegrid/TileGrid} [tileGrid] Tile grid.\n * @property {module:ol/Tile~LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is\n * ```js\n * function(imageTile, src) {\n * imageTile.getImage().src = src;\n * };\n * ```\n * @property {number} [tilePixelRatio=1] The pixel ratio used by the tile service. For example, if the tile\n * service advertizes 256px by 256px tiles but actually sends 512px\n * by 512px images (for retina/hidpi devices) then `tilePixelRatio`\n * should be set to `2`.\n * @property {module:ol/Tile~UrlFunction} [tileUrlFunction] Optional function to get tile URL given a tile coordinate and the projection.\n * @property {string} [url] URL template. Must include `{x}`, `{y}` or `{-y}`, and `{z}` placeholders.\n * A `{?-?}` template pattern, for example `subdomain{a-f}.domain.com`, may be\n * used instead of defining each one separately in the `urls` option.\n * @property {Array} [urls] An array of URL templates.\n * @property {boolean} [wrapX] Whether to wrap the world horizontally. The default, is to\n * request out-of-bounds tiles from the server. When set to `false`, only one\n * world will be rendered. When set to `true`, tiles will be requested for one\n * world only, but they will be wrapped horizontally to render multiple worlds.\n * @property {number} [transition] Duration of the opacity transition for rendering.\n * To disable the opacity transition, pass `transition: 0`.\n */\n\n\n/**\n * @classdesc\n * Base class for sources providing images divided into a tile grid.\n *\n * @fires module:ol/source/Tile~TileSourceEvent\n * @api\n */\nclass TileImage extends UrlTile {\n /**\n * @param {module:ol/source/TileImage~Options=} options Image tile options.\n */\n constructor(options) {\n\n super({\n attributions: options.attributions,\n cacheSize: options.cacheSize,\n extent: options.extent,\n opaque: options.opaque,\n projection: options.projection,\n state: options.state,\n tileGrid: options.tileGrid,\n tileLoadFunction: options.tileLoadFunction ?\n options.tileLoadFunction : defaultTileLoadFunction,\n tilePixelRatio: options.tilePixelRatio,\n tileUrlFunction: options.tileUrlFunction,\n url: options.url,\n urls: options.urls,\n wrapX: options.wrapX,\n transition: options.transition\n });\n\n /**\n * @protected\n * @type {?string}\n */\n this.crossOrigin =\n options.crossOrigin !== undefined ? options.crossOrigin : null;\n\n /**\n * @protected\n * @type {function(new: module:ol/ImageTile, module:ol/tilecoord~TileCoord, module:ol/TileState, string,\n * ?string, module:ol/Tile~LoadFunction, module:ol/Tile~Options=)}\n */\n this.tileClass = options.tileClass !== undefined ?\n options.tileClass : ImageTile;\n\n /**\n * @protected\n * @type {!Object}\n */\n this.tileCacheForProjection = {};\n\n /**\n * @protected\n * @type {!Object}\n */\n this.tileGridForProjection = {};\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.reprojectionErrorThreshold_ = options.reprojectionErrorThreshold;\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderReprojectionEdges_ = false;\n }\n\n /**\n * @inheritDoc\n */\n canExpireCache() {\n if (!ENABLE_RASTER_REPROJECTION) {\n return super.canExpireCache();\n }\n if (this.tileCache.canExpireCache()) {\n return true;\n } else {\n for (const key in this.tileCacheForProjection) {\n if (this.tileCacheForProjection[key].canExpireCache()) {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * @inheritDoc\n */\n expireCache(projection, usedTiles) {\n if (!ENABLE_RASTER_REPROJECTION) {\n super.expireCache(projection, usedTiles);\n return;\n }\n const usedTileCache = this.getTileCacheForProjection(projection);\n\n this.tileCache.expireCache(this.tileCache == usedTileCache ? usedTiles : {});\n for (const id in this.tileCacheForProjection) {\n const tileCache = this.tileCacheForProjection[id];\n tileCache.expireCache(tileCache == usedTileCache ? usedTiles : {});\n }\n }\n\n /**\n * @inheritDoc\n */\n getGutterForProjection(projection) {\n if (ENABLE_RASTER_REPROJECTION &&\n this.getProjection() && projection && !equivalent(this.getProjection(), projection)) {\n return 0;\n } else {\n return this.getGutter();\n }\n }\n\n /**\n * @return {number} Gutter.\n */\n getGutter() {\n return 0;\n }\n\n /**\n * @inheritDoc\n */\n getOpaque(projection) {\n if (ENABLE_RASTER_REPROJECTION &&\n this.getProjection() && projection && !equivalent(this.getProjection(), projection)) {\n return false;\n } else {\n return super.getOpaque(projection);\n }\n }\n\n /**\n * @inheritDoc\n */\n getTileGridForProjection(projection) {\n if (!ENABLE_RASTER_REPROJECTION) {\n return UrlTile.prototype.getTileGridForProjection.call(this, projection);\n }\n const thisProj = this.getProjection();\n if (this.tileGrid && (!thisProj || equivalent(thisProj, projection))) {\n return this.tileGrid;\n } else {\n const projKey = getUid(projection).toString();\n if (!(projKey in this.tileGridForProjection)) {\n this.tileGridForProjection[projKey] = getTileGridForProjection(projection);\n }\n return (\n /** @type {!module:ol/tilegrid/TileGrid} */ (this.tileGridForProjection[projKey])\n );\n }\n }\n\n /**\n * @inheritDoc\n */\n getTileCacheForProjection(projection) {\n if (!ENABLE_RASTER_REPROJECTION) {\n return UrlTile.prototype.getTileCacheForProjection.call(this, projection);\n }\n const thisProj = this.getProjection(); if (!thisProj || equivalent(thisProj, projection)) {\n return this.tileCache;\n } else {\n const projKey = getUid(projection).toString();\n if (!(projKey in this.tileCacheForProjection)) {\n this.tileCacheForProjection[projKey] = new TileCache(this.tileCache.highWaterMark);\n }\n return this.tileCacheForProjection[projKey];\n }\n }\n\n /**\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @param {number} pixelRatio Pixel ratio.\n * @param {module:ol/proj/Projection} projection Projection.\n * @param {string} key The key set on the tile.\n * @return {!module:ol/Tile} Tile.\n * @private\n */\n createTile_(z, x, y, pixelRatio, projection, key) {\n const tileCoord = [z, x, y];\n const urlTileCoord = this.getTileCoordForTileUrlFunction(\n tileCoord, projection);\n const tileUrl = urlTileCoord ?\n this.tileUrlFunction(urlTileCoord, pixelRatio, projection) : undefined;\n const tile = new this.tileClass(\n tileCoord,\n tileUrl !== undefined ? TileState.IDLE : TileState.EMPTY,\n tileUrl !== undefined ? tileUrl : '',\n this.crossOrigin,\n this.tileLoadFunction,\n this.tileOptions);\n tile.key = key;\n listen(tile, EventType.CHANGE,\n this.handleTileChange, this);\n return tile;\n }\n\n /**\n * @inheritDoc\n */\n getTile(z, x, y, pixelRatio, projection) {\n const sourceProjection = /** @type {!module:ol/proj/Projection} */ (this.getProjection());\n if (!ENABLE_RASTER_REPROJECTION ||\n !sourceProjection || !projection || equivalent(sourceProjection, projection)) {\n return this.getTileInternal(z, x, y, pixelRatio, sourceProjection || projection);\n } else {\n const cache = this.getTileCacheForProjection(projection);\n const tileCoord = [z, x, y];\n let tile;\n const tileCoordKey = getKey(tileCoord);\n if (cache.containsKey(tileCoordKey)) {\n tile = /** @type {!module:ol/Tile} */ (cache.get(tileCoordKey));\n }\n const key = this.getKey();\n if (tile && tile.key == key) {\n return tile;\n } else {\n const sourceTileGrid = this.getTileGridForProjection(sourceProjection);\n const targetTileGrid = this.getTileGridForProjection(projection);\n const wrappedTileCoord =\n this.getTileCoordForTileUrlFunction(tileCoord, projection);\n const newTile = new ReprojTile(\n sourceProjection, sourceTileGrid,\n projection, targetTileGrid,\n tileCoord, wrappedTileCoord, this.getTilePixelRatio(pixelRatio),\n this.getGutter(),\n function(z, x, y, pixelRatio) {\n return this.getTileInternal(z, x, y, pixelRatio, sourceProjection);\n }.bind(this), this.reprojectionErrorThreshold_,\n this.renderReprojectionEdges_);\n newTile.key = key;\n\n if (tile) {\n newTile.interimTile = tile;\n newTile.refreshInterimChain();\n cache.replace(tileCoordKey, newTile);\n } else {\n cache.set(tileCoordKey, newTile);\n }\n return newTile;\n }\n }\n }\n\n /**\n * @param {number} z Tile coordinate z.\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @param {number} pixelRatio Pixel ratio.\n * @param {!module:ol/proj/Projection} projection Projection.\n * @return {!module:ol/Tile} Tile.\n * @protected\n */\n getTileInternal(z, x, y, pixelRatio, projection) {\n let tile = null;\n const tileCoordKey = getKeyZXY(z, x, y);\n const key = this.getKey();\n if (!this.tileCache.containsKey(tileCoordKey)) {\n tile = this.createTile_(z, x, y, pixelRatio, projection, key);\n this.tileCache.set(tileCoordKey, tile);\n } else {\n tile = this.tileCache.get(tileCoordKey);\n if (tile.key != key) {\n // The source's params changed. If the tile has an interim tile and if we\n // can use it then we use it. Otherwise we create a new tile. In both\n // cases we attempt to assign an interim tile to the new tile.\n const interimTile = tile;\n tile = this.createTile_(z, x, y, pixelRatio, projection, key);\n\n //make the new tile the head of the list,\n if (interimTile.getState() == TileState.IDLE) {\n //the old tile hasn't begun loading yet, and is now outdated, so we can simply discard it\n tile.interimTile = interimTile.interimTile;\n } else {\n tile.interimTile = interimTile;\n }\n tile.refreshInterimChain();\n this.tileCache.replace(tileCoordKey, tile);\n }\n }\n return tile;\n }\n\n /**\n * Sets whether to render reprojection edges or not (usually for debugging).\n * @param {boolean} render Render the edges.\n * @api\n */\n setRenderReprojectionEdges(render) {\n if (!ENABLE_RASTER_REPROJECTION ||\n this.renderReprojectionEdges_ == render) {\n return;\n }\n this.renderReprojectionEdges_ = render;\n for (const id in this.tileCacheForProjection) {\n this.tileCacheForProjection[id].clear();\n }\n this.changed();\n }\n\n /**\n * Sets the tile grid to use when reprojecting the tiles to the given\n * projection instead of the default tile grid for the projection.\n *\n * This can be useful when the default tile grid cannot be created\n * (e.g. projection has no extent defined) or\n * for optimization reasons (custom tile size, resolutions, ...).\n *\n * @param {module:ol/proj~ProjectionLike} projection Projection.\n * @param {module:ol/tilegrid/TileGrid} tilegrid Tile grid to use for the projection.\n * @api\n */\n setTileGridForProjection(projection, tilegrid) {\n if (ENABLE_RASTER_REPROJECTION) {\n const proj = getProjection(projection);\n if (proj) {\n const projKey = getUid(proj).toString();\n if (!(projKey in this.tileGridForProjection)) {\n this.tileGridForProjection[projKey] = tilegrid;\n }\n }\n }\n }\n}\n\n\n/**\n * @param {module:ol/ImageTile} imageTile Image tile.\n * @param {string} src Source.\n */\nfunction defaultTileLoadFunction(imageTile, src) {\n imageTile.getImage().src = src;\n}\n\nexport default TileImage;\n","/**\n * @module ol/source/TileJSON\n */\n// FIXME check order of async callbacks\n\n/**\n * See http://mapbox.com/developers/api/.\n */\n\n\nimport {createFromTemplates} from '../tileurlfunction.js';\nimport {assert} from '../asserts.js';\nimport {applyTransform, intersects} from '../extent.js';\nimport {jsonp as requestJSONP} from '../net.js';\nimport {get as getProjection, getTransformFromProjections} from '../proj.js';\nimport SourceState from '../source/State.js';\nimport TileImage from '../source/TileImage.js';\nimport {createXYZ, extentFromProjection} from '../tilegrid.js';\n\n/**\n * @typedef {Object} Options\n * @property {module:ol/source/Source~AttributionLike} [attributions] Attributions.\n * @property {number} [cacheSize=2048] Cache size.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images. Note that\n * you must provide a `crossOrigin` value if you are using the WebGL renderer or if you want to\n * access pixel data with the Canvas renderer. See\n * https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {boolean} [jsonp=false] Use JSONP with callback to load the TileJSON.\n * Useful when the server does not support CORS..\n * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).\n * Higher values can increase reprojection performance, but decrease precision.\n * @property {tileJSON} [tileJSON] TileJSON configuration for this source.\n * If not provided, `url` must be configured.\n * @property {module:ol/Tile~LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is\n * ```js\n * function(imageTile, src) {\n * imageTile.getImage().src = src;\n * };\n * ```\n * @property {string} [url] URL to the TileJSON file. If not provided, `tileJSON` must be configured.\n * @property {boolean} [wrapX=true] Whether to wrap the world horizontally.\n * @property {number} [transition] Duration of the opacity transition for rendering.\n * To disable the opacity transition, pass `transition: 0`.\n */\n\n\n/**\n * @classdesc\n * Layer source for tile data in TileJSON format.\n * @api\n */\nclass TileJSON extends TileImage {\n /**\n * @param {module:ol/source/TileJSON~Options=} options TileJSON options.\n */\n constructor(options) {\n super({\n attributions: options.attributions,\n cacheSize: options.cacheSize,\n crossOrigin: options.crossOrigin,\n projection: getProjection('EPSG:3857'),\n reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n state: SourceState.LOADING,\n tileLoadFunction: options.tileLoadFunction,\n wrapX: options.wrapX !== undefined ? options.wrapX : true,\n transition: options.transition\n });\n\n /**\n * @type {TileJSON}\n * @private\n */\n this.tileJSON_ = null;\n\n\n if (options.url) {\n if (options.jsonp) {\n requestJSONP(options.url, this.handleTileJSONResponse.bind(this),\n this.handleTileJSONError.bind(this));\n } else {\n const client = new XMLHttpRequest();\n client.addEventListener('load', this.onXHRLoad_.bind(this));\n client.addEventListener('error', this.onXHRError_.bind(this));\n client.open('GET', options.url);\n client.send();\n }\n } else if (options.tileJSON) {\n this.handleTileJSONResponse(options.tileJSON);\n } else {\n assert(false, 51); // Either `url` or `tileJSON` options must be provided\n }\n\n }\n\n /**\n * @private\n * @param {Event} event The load event.\n */\n onXHRLoad_(event) {\n const client = /** @type {XMLHttpRequest} */ (event.target);\n // status will be 0 for file:// urls\n if (!client.status || client.status >= 200 && client.status < 300) {\n let response;\n try {\n response = /** @type {TileJSON} */(JSON.parse(client.responseText));\n } catch (err) {\n this.handleTileJSONError();\n return;\n }\n this.handleTileJSONResponse(response);\n } else {\n this.handleTileJSONError();\n }\n }\n\n /**\n * @private\n * @param {Event} event The error event.\n */\n onXHRError_(event) {\n this.handleTileJSONError();\n }\n\n /**\n * @return {TileJSON} The tilejson object.\n * @api\n */\n getTileJSON() {\n return this.tileJSON_;\n }\n\n /**\n * @protected\n * @param {TileJSON} tileJSON Tile JSON.\n */\n handleTileJSONResponse(tileJSON) {\n\n const epsg4326Projection = getProjection('EPSG:4326');\n\n const sourceProjection = this.getProjection();\n let extent;\n if (tileJSON.bounds !== undefined) {\n const transform = getTransformFromProjections(\n epsg4326Projection, sourceProjection);\n extent = applyTransform(tileJSON.bounds, transform);\n }\n\n const minZoom = tileJSON.minzoom || 0;\n const maxZoom = tileJSON.maxzoom || 22;\n const tileGrid = createXYZ({\n extent: extentFromProjection(sourceProjection),\n maxZoom: maxZoom,\n minZoom: minZoom\n });\n this.tileGrid = tileGrid;\n\n this.tileUrlFunction = createFromTemplates(tileJSON.tiles, tileGrid);\n\n if (tileJSON.attribution !== undefined && !this.getAttributions()) {\n const attributionExtent = extent !== undefined ?\n extent : epsg4326Projection.getExtent();\n\n this.setAttributions(function(frameState) {\n if (intersects(attributionExtent, frameState.extent)) {\n return [tileJSON.attribution];\n }\n return null;\n });\n\n }\n this.tileJSON_ = tileJSON;\n this.setState(SourceState.READY);\n\n }\n\n /**\n * @protected\n */\n handleTileJSONError() {\n this.setState(SourceState.ERROR);\n }\n}\n\n\nexport default TileJSON;\n","/**\n * @module ol/net\n */\nimport {getUid} from './util.js';\n\n\n/**\n * Simple JSONP helper. Supports error callbacks and a custom callback param.\n * The error callback will be called when no JSONP is executed after 10 seconds.\n *\n * @param {string} url Request url. A 'callback' query parameter will be\n * appended.\n * @param {Function} callback Callback on success.\n * @param {function()=} opt_errback Callback on error.\n * @param {string=} opt_callbackParam Custom query parameter for the JSONP\n * callback. Default is 'callback'.\n */\nexport function jsonp(url, callback, opt_errback, opt_callbackParam) {\n const script = document.createElement('script');\n const key = 'olc_' + getUid(callback);\n function cleanup() {\n delete window[key];\n script.parentNode.removeChild(script);\n }\n script.async = true;\n script.src = url + (url.indexOf('?') == -1 ? '?' : '&') +\n (opt_callbackParam || 'callback') + '=' + key;\n const timer = setTimeout(function() {\n cleanup();\n if (opt_errback) {\n opt_errback();\n }\n }, 10000);\n window[key] = function(data) {\n clearTimeout(timer);\n cleanup();\n callback(data);\n };\n document.getElementsByTagName('head')[0].appendChild(script);\n}\n","/**\n * @module ol/VectorImageTile\n */\nimport {getUid} from './util.js';\nimport Tile from './Tile.js';\nimport TileState from './TileState.js';\nimport {createCanvasContext2D} from './dom.js';\nimport {listen, unlistenByKey} from './events.js';\nimport {getHeight, getIntersection, getWidth} from './extent.js';\nimport EventType from './events/EventType.js';\nimport {loadFeaturesXhr} from './featureloader.js';\nimport {VOID} from './functions.js';\n\n\n/**\n * @typedef {Object} ReplayState\n * @property {boolean} dirty\n * @property {null|module:ol/render~OrderFunction} renderedRenderOrder\n * @property {number} renderedTileRevision\n * @property {number} renderedRevision\n */\n\n\nclass VectorImageTile extends Tile {\n\n /**\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile coordinate.\n * @param {module:ol/TileState} state State.\n * @param {number} sourceRevision Source revision.\n * @param {module:ol/format/Feature} format Feature format.\n * @param {module:ol/Tile~LoadFunction} tileLoadFunction Tile load function.\n * @param {module:ol/tilecoord~TileCoord} urlTileCoord Wrapped tile coordinate for source urls.\n * @param {module:ol/Tile~UrlFunction} tileUrlFunction Tile url function.\n * @param {module:ol/tilegrid/TileGrid} sourceTileGrid Tile grid of the source.\n * @param {module:ol/tilegrid/TileGrid} tileGrid Tile grid of the renderer.\n * @param {Object} sourceTiles Source tiles.\n * @param {number} pixelRatio Pixel ratio.\n * @param {module:ol/proj/Projection} projection Projection.\n * @param {function(new: module:ol/VectorTile, module:ol/tilecoord~TileCoord, module:ol/TileState, string,\n * module:ol/format/Feature, module:ol/Tile~LoadFunction)} tileClass Class to\n * instantiate for source tiles.\n * @param {function(this: module:ol/source/VectorTile, module:ol/events/Event)} handleTileChange\n * Function to call when a source tile's state changes.\n * @param {number} zoom Integer zoom to render the tile for.\n */\n constructor(tileCoord, state, sourceRevision, format, tileLoadFunction,\n urlTileCoord, tileUrlFunction, sourceTileGrid, tileGrid, sourceTiles,\n pixelRatio, projection, tileClass, handleTileChange, zoom) {\n\n super(tileCoord, state, {transition: 0});\n\n /**\n * @private\n * @type {!Object}\n */\n this.context_ = {};\n\n /**\n * @private\n * @type {module:ol/featureloader~FeatureLoader}\n */\n this.loader_;\n\n /**\n * @private\n * @type {!Object}\n */\n this.replayState_ = {};\n\n /**\n * @private\n * @type {Object}\n */\n this.sourceTiles_ = sourceTiles;\n\n /**\n * Keys of source tiles used by this tile. Use with {@link #getTile}.\n * @type {Array}\n */\n this.tileKeys = [];\n\n /**\n * @type {module:ol/extent~Extent}\n */\n this.extent = null;\n\n /**\n * @type {number}\n */\n this.sourceRevision_ = sourceRevision;\n\n /**\n * @type {module:ol/tilecoord~TileCoord}\n */\n this.wrappedTileCoord = urlTileCoord;\n\n /**\n * @type {Array}\n */\n this.loadListenerKeys_ = [];\n\n /**\n * @type {Array}\n */\n this.sourceTileListenerKeys_ = [];\n\n if (urlTileCoord) {\n const extent = this.extent = tileGrid.getTileCoordExtent(urlTileCoord);\n const resolution = tileGrid.getResolution(zoom);\n const sourceZ = sourceTileGrid.getZForResolution(resolution);\n const useLoadedOnly = zoom != tileCoord[0];\n let loadCount = 0;\n sourceTileGrid.forEachTileCoord(extent, sourceZ, function(sourceTileCoord) {\n let sharedExtent = getIntersection(extent,\n sourceTileGrid.getTileCoordExtent(sourceTileCoord));\n const sourceExtent = sourceTileGrid.getExtent();\n if (sourceExtent) {\n sharedExtent = getIntersection(sharedExtent, sourceExtent, sharedExtent);\n }\n if (getWidth(sharedExtent) / resolution >= 0.5 &&\n getHeight(sharedExtent) / resolution >= 0.5) {\n // only include source tile if overlap is at least 1 pixel\n ++loadCount;\n const sourceTileKey = sourceTileCoord.toString();\n let sourceTile = sourceTiles[sourceTileKey];\n if (!sourceTile && !useLoadedOnly) {\n const tileUrl = tileUrlFunction(sourceTileCoord, pixelRatio, projection);\n sourceTile = sourceTiles[sourceTileKey] = new tileClass(sourceTileCoord,\n tileUrl == undefined ? TileState.EMPTY : TileState.IDLE,\n tileUrl == undefined ? '' : tileUrl,\n format, tileLoadFunction);\n this.sourceTileListenerKeys_.push(\n listen(sourceTile, EventType.CHANGE, handleTileChange));\n }\n if (sourceTile && (!useLoadedOnly || sourceTile.getState() == TileState.LOADED)) {\n sourceTile.consumers++;\n this.tileKeys.push(sourceTileKey);\n }\n }\n }.bind(this));\n\n if (useLoadedOnly && loadCount == this.tileKeys.length) {\n this.finishLoading_();\n }\n\n if (zoom <= tileCoord[0] && this.state != TileState.LOADED) {\n while (zoom > tileGrid.getMinZoom()) {\n const tile = new VectorImageTile(tileCoord, state, sourceRevision,\n format, tileLoadFunction, urlTileCoord, tileUrlFunction,\n sourceTileGrid, tileGrid, sourceTiles, pixelRatio, projection,\n tileClass, VOID, --zoom);\n if (tile.state == TileState.LOADED) {\n this.interimTile = tile;\n break;\n }\n }\n }\n }\n\n }\n\n /**\n * @inheritDoc\n */\n disposeInternal() {\n this.state = TileState.ABORT;\n this.changed();\n if (this.interimTile) {\n this.interimTile.dispose();\n }\n\n for (let i = 0, ii = this.tileKeys.length; i < ii; ++i) {\n const sourceTileKey = this.tileKeys[i];\n const sourceTile = this.getTile(sourceTileKey);\n sourceTile.consumers--;\n if (sourceTile.consumers == 0) {\n delete this.sourceTiles_[sourceTileKey];\n sourceTile.dispose();\n }\n }\n this.tileKeys.length = 0;\n this.sourceTiles_ = null;\n this.loadListenerKeys_.forEach(unlistenByKey);\n this.loadListenerKeys_.length = 0;\n this.sourceTileListenerKeys_.forEach(unlistenByKey);\n this.sourceTileListenerKeys_.length = 0;\n super.disposeInternal();\n }\n\n /**\n * @param {module:ol/layer/Layer} layer Layer.\n * @return {CanvasRenderingContext2D} The rendering context.\n */\n getContext(layer) {\n const key = getUid(layer).toString();\n if (!(key in this.context_)) {\n this.context_[key] = createCanvasContext2D();\n }\n return this.context_[key];\n }\n\n /**\n * Get the Canvas for this tile.\n * @param {module:ol/layer/Layer} layer Layer.\n * @return {HTMLCanvasElement} Canvas.\n */\n getImage(layer) {\n return this.getReplayState(layer).renderedTileRevision == -1 ?\n null : this.getContext(layer).canvas;\n }\n\n /**\n * @param {module:ol/layer/Layer} layer Layer.\n * @return {module:ol/VectorImageTile~ReplayState} The replay state.\n */\n getReplayState(layer) {\n const key = getUid(layer).toString();\n if (!(key in this.replayState_)) {\n this.replayState_[key] = {\n dirty: false,\n renderedRenderOrder: null,\n renderedRevision: -1,\n renderedTileRevision: -1\n };\n }\n return this.replayState_[key];\n }\n\n /**\n * @inheritDoc\n */\n getKey() {\n return this.tileKeys.join('/') + '-' + this.sourceRevision_;\n }\n\n /**\n * @param {string} tileKey Key (tileCoord) of the source tile.\n * @return {module:ol/VectorTile} Source tile.\n */\n getTile(tileKey) {\n return this.sourceTiles_[tileKey];\n }\n\n /**\n * @inheritDoc\n */\n load() {\n // Source tiles with LOADED state - we just count them because once they are\n // loaded, we're no longer listening to state changes.\n let leftToLoad = 0;\n // Source tiles with ERROR state - we track them because they can still have\n // an ERROR state after another load attempt.\n const errorSourceTiles = {};\n\n if (this.state == TileState.IDLE) {\n this.setState(TileState.LOADING);\n }\n if (this.state == TileState.LOADING) {\n this.tileKeys.forEach(function(sourceTileKey) {\n const sourceTile = this.getTile(sourceTileKey);\n if (sourceTile.state == TileState.IDLE) {\n sourceTile.setLoader(this.loader_);\n sourceTile.load();\n }\n if (sourceTile.state == TileState.LOADING) {\n const key = listen(sourceTile, EventType.CHANGE, function(e) {\n const state = sourceTile.getState();\n if (state == TileState.LOADED ||\n state == TileState.ERROR) {\n const uid = getUid(sourceTile);\n if (state == TileState.ERROR) {\n errorSourceTiles[uid] = true;\n } else {\n --leftToLoad;\n delete errorSourceTiles[uid];\n }\n if (leftToLoad - Object.keys(errorSourceTiles).length == 0) {\n this.finishLoading_();\n }\n }\n }.bind(this));\n this.loadListenerKeys_.push(key);\n ++leftToLoad;\n }\n }.bind(this));\n }\n if (leftToLoad - Object.keys(errorSourceTiles).length == 0) {\n setTimeout(this.finishLoading_.bind(this), 0);\n }\n }\n\n /**\n * @private\n */\n finishLoading_() {\n let loaded = this.tileKeys.length;\n let empty = 0;\n for (let i = loaded - 1; i >= 0; --i) {\n const state = this.getTile(this.tileKeys[i]).getState();\n if (state != TileState.LOADED) {\n --loaded;\n }\n if (state == TileState.EMPTY) {\n ++empty;\n }\n }\n if (loaded == this.tileKeys.length) {\n this.loadListenerKeys_.forEach(unlistenByKey);\n this.loadListenerKeys_.length = 0;\n this.setState(TileState.LOADED);\n } else {\n this.setState(empty == this.tileKeys.length ? TileState.EMPTY : TileState.ERROR);\n }\n }\n}\n\n\nexport default VectorImageTile;\n\n/**\n * Sets the loader for a tile.\n * @param {module:ol/VectorTile} tile Vector tile.\n * @param {string} url URL.\n */\nexport function defaultLoadFunction(tile, url) {\n const loader = loadFeaturesXhr(url, tile.getFormat(), tile.onLoad.bind(tile), tile.onError.bind(tile));\n tile.setLoader(loader);\n}\n","/**\n * @module ol/VectorTile\n */\nimport {getUid} from './util.js';\nimport Tile from './Tile.js';\nimport TileState from './TileState.js';\n\n/**\n * @const\n * @type {module:ol/extent~Extent}\n */\nconst DEFAULT_EXTENT = [0, 0, 4096, 4096];\n\n\n/**\n * @typedef {function(new: module:ol/VectorTile, module:ol/tilecoord~TileCoord,\n * module:ol/TileState, string, ?string, module:ol/Tile~LoadFunction)} TileClass\n * @api\n */\n\nclass VectorTile extends Tile {\n\n /**\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile coordinate.\n * @param {module:ol/TileState} state State.\n * @param {string} src Data source url.\n * @param {module:ol/format/Feature} format Feature format.\n * @param {module:ol/Tile~LoadFunction} tileLoadFunction Tile load function.\n * @param {module:ol/Tile~Options=} opt_options Tile options.\n */\n constructor(tileCoord, state, src, format, tileLoadFunction, opt_options) {\n\n super(tileCoord, state, opt_options);\n\n /**\n * @type {number}\n */\n this.consumers = 0;\n\n /**\n * @private\n * @type {module:ol/extent~Extent}\n */\n this.extent_ = null;\n\n /**\n * @private\n * @type {module:ol/format/Feature}\n */\n this.format_ = format;\n\n /**\n * @private\n * @type {Array}\n */\n this.features_ = null;\n\n /**\n * @private\n * @type {module:ol/featureloader~FeatureLoader}\n */\n this.loader_;\n\n /**\n * Data projection\n * @private\n * @type {module:ol/proj/Projection}\n */\n this.projection_ = null;\n\n /**\n * @private\n * @type {Object}\n */\n this.replayGroups_ = {};\n\n /**\n * @private\n * @type {module:ol/Tile~LoadFunction}\n */\n this.tileLoadFunction_ = tileLoadFunction;\n\n /**\n * @private\n * @type {string}\n */\n this.url_ = src;\n\n }\n\n /**\n * @inheritDoc\n */\n disposeInternal() {\n this.features_ = null;\n this.replayGroups_ = {};\n this.state = TileState.ABORT;\n this.changed();\n super.disposeInternal();\n }\n\n /**\n * Gets the extent of the vector tile.\n * @return {module:ol/extent~Extent} The extent.\n * @api\n */\n getExtent() {\n return this.extent_ || DEFAULT_EXTENT;\n }\n\n /**\n * Get the feature format assigned for reading this tile's features.\n * @return {module:ol/format/Feature} Feature format.\n * @api\n */\n getFormat() {\n return this.format_;\n }\n\n /**\n * Get the features for this tile. Geometries will be in the projection returned\n * by {@link module:ol/VectorTile~VectorTile#getProjection}.\n * @return {Array} Features.\n * @api\n */\n getFeatures() {\n return this.features_;\n }\n\n /**\n * @inheritDoc\n */\n getKey() {\n return this.url_;\n }\n\n /**\n * Get the feature projection of features returned by\n * {@link module:ol/VectorTile~VectorTile#getFeatures}.\n * @return {module:ol/proj/Projection} Feature projection.\n * @api\n */\n getProjection() {\n return this.projection_;\n }\n\n /**\n * @param {module:ol/layer/Layer} layer Layer.\n * @param {string} key Key.\n * @return {module:ol/render/ReplayGroup} Replay group.\n */\n getReplayGroup(layer, key) {\n return this.replayGroups_[getUid(layer) + ',' + key];\n }\n\n /**\n * @inheritDoc\n */\n load() {\n if (this.state == TileState.IDLE) {\n this.setState(TileState.LOADING);\n this.tileLoadFunction_(this, this.url_);\n this.loader_(null, NaN, null);\n }\n }\n\n /**\n * Handler for successful tile load.\n * @param {Array} features The loaded features.\n * @param {module:ol/proj/Projection} dataProjection Data projection.\n * @param {module:ol/extent~Extent} extent Extent.\n */\n onLoad(features, dataProjection, extent) {\n this.setProjection(dataProjection);\n this.setFeatures(features);\n this.setExtent(extent);\n }\n\n /**\n * Handler for tile load errors.\n */\n onError() {\n this.setState(TileState.ERROR);\n }\n\n /**\n * Function for use in an {@link module:ol/source/VectorTile~VectorTile}'s\n * `tileLoadFunction`. Sets the extent of the vector tile. This is only required\n * for tiles in projections with `tile-pixels` as units. The extent should be\n * set to `[0, 0, tilePixelSize, tilePixelSize]`, where `tilePixelSize` is\n * calculated by multiplying the tile size with the tile pixel ratio. For\n * sources using {@link module:ol/format/MVT~MVT} as feature format, the\n * {@link module:ol/format/MVT~MVT#getLastExtent} method will return the correct\n * extent. The default is `[0, 0, 4096, 4096]`.\n * @param {module:ol/extent~Extent} extent The extent.\n * @api\n */\n setExtent(extent) {\n this.extent_ = extent;\n }\n\n /**\n * Function for use in an {@link module:ol/source/VectorTile~VectorTile}'s `tileLoadFunction`.\n * Sets the features for the tile.\n * @param {Array} features Features.\n * @api\n */\n setFeatures(features) {\n this.features_ = features;\n this.setState(TileState.LOADED);\n }\n\n /**\n * Function for use in an {@link module:ol/source/VectorTile~VectorTile}'s `tileLoadFunction`.\n * Sets the projection of the features that were added with\n * {@link module:ol/VectorTile~VectorTile#setFeatures}.\n * @param {module:ol/proj/Projection} projection Feature projection.\n * @api\n */\n setProjection(projection) {\n this.projection_ = projection;\n }\n\n /**\n * @param {module:ol/layer/Layer} layer Layer.\n * @param {string} key Key.\n * @param {module:ol/render/ReplayGroup} replayGroup Replay group.\n */\n setReplayGroup(layer, key, replayGroup) {\n this.replayGroups_[getUid(layer) + ',' + key] = replayGroup;\n }\n\n /**\n * Set the feature loader for reading this tile's features.\n * @param {module:ol/featureloader~FeatureLoader} loader Feature loader.\n * @api\n */\n setLoader(loader) {\n this.loader_ = loader;\n }\n}\n\nexport default VectorTile;\n","/**\n * @module ol/source/VectorTile\n */\n\nimport TileState from '../TileState.js';\nimport VectorImageTile, {defaultLoadFunction} from '../VectorImageTile.js';\nimport Tile from '../VectorTile.js';\nimport {toSize} from '../size.js';\nimport UrlTile from '../source/UrlTile.js';\nimport {getKeyZXY} from '../tilecoord.js';\nimport {createXYZ, extentFromProjection, createForProjection} from '../tilegrid.js';\n\n/**\n * @typedef {Object} Options\n * @property {module:ol/source/Source~AttributionLike} [attributions] Attributions.\n * @property {number} [cacheSize=128] Cache size.\n * @property {module:ol/format/Feature} [format] Feature format for tiles. Used and required by the default.\n * @property {boolean} [overlaps=true] This source may have overlapping geometries. Setting this\n * to `false` (e.g. for sources with polygons that represent administrative\n * boundaries or TopoJSON sources) allows the renderer to optimise fill and\n * stroke operations.\n * @property {module:ol/proj~ProjectionLike} projection Projection.\n * @property {module:ol/source/State} [state] Source state.\n * @property {module:ol/VectorTile~TileClass} [tileClass] Class used to instantiate image tiles.\n * Default is {@link module:ol/VectorTile}.\n * @property {number} [maxZoom=22] Optional max zoom level.\n * @property {number} [minZoom] Optional min zoom level.\n * @property {number|module:ol/size~Size} [tileSize=512] Optional tile size.\n * @property {module:ol/tilegrid/TileGrid} [tileGrid] Tile grid.\n * @property {module:ol/Tile~LoadFunction} [tileLoadFunction]\n * Optional function to load a tile given a URL. Could look like this:\n * ```js\n * function(tile, url) {\n * tile.setLoader(function() {\n * var data = // ... fetch data\n * var format = tile.getFormat();\n * tile.setProjection(format.readProjection(data));\n * tile.setFeatures(format.readFeatures(data, {\n * // featureProjection is not required for ol/format/MVT\n * featureProjection: map.getView().getProjection()\n * }));\n * // the line below is only required for ol/format/MVT\n * tile.setExtent(format.getLastExtent());\n * }\n * });\n * ```\n * @property {module:ol/Tile~UrlFunction} [tileUrlFunction] Optional function to get tile URL given a tile coordinate and the projection.\n * @property {string} [url] URL template. Must include `{x}`, `{y}` or `{-y}`, and `{z}` placeholders.\n * A `{?-?}` template pattern, for example `subdomain{a-f}.domain.com`, may be\n * used instead of defining each one separately in the `urls` option.\n * @property {number} [transition] A duration for tile opacity\n * transitions in milliseconds. A duration of 0 disables the opacity transition.\n * @property {Array} [urls] An array of URL templates.\n * @property {boolean} [wrapX=true] Whether to wrap the world horizontally.\n * When set to `false`, only one world\n * will be rendered. When set to `true`, tiles will be wrapped horizontally to\n * render multiple worlds.\n */\n\n\n/**\n * @classdesc\n * Class for layer sources providing vector data divided into a tile grid, to be\n * used with {@link module:ol/layer/VectorTile~VectorTile}. Although this source receives tiles\n * with vector features from the server, it is not meant for feature editing.\n * Features are optimized for rendering, their geometries are clipped at or near\n * tile boundaries and simplified for a view resolution. See\n * {@link module:ol/source/Vector} for vector sources that are suitable for feature\n * editing.\n *\n * @fires module:ol/source/Tile~TileSourceEvent\n * @api\n */\nclass VectorTile extends UrlTile {\n /**\n * @param {module:ol/source/VectorTile~Options=} options Vector tile options.\n */\n constructor(options) {\n const projection = options.projection || 'EPSG:3857';\n\n const extent = options.extent || extentFromProjection(projection);\n\n const tileGrid = options.tileGrid || createXYZ({\n extent: extent,\n maxZoom: options.maxZoom || 22,\n minZoom: options.minZoom,\n tileSize: options.tileSize || 512\n });\n\n super({\n attributions: options.attributions,\n cacheSize: options.cacheSize !== undefined ? options.cacheSize : 128,\n extent: extent,\n opaque: false,\n projection: projection,\n state: options.state,\n tileGrid: tileGrid,\n tileLoadFunction: options.tileLoadFunction ? options.tileLoadFunction : defaultLoadFunction,\n tileUrlFunction: options.tileUrlFunction,\n url: options.url,\n urls: options.urls,\n wrapX: options.wrapX === undefined ? true : options.wrapX,\n transition: options.transition\n });\n\n /**\n * @private\n * @type {module:ol/format/Feature}\n */\n this.format_ = options.format ? options.format : null;\n\n /**\n * @private\n * @type {Object}\n */\n this.sourceTiles_ = {};\n\n /**\n * @private\n * @type {boolean}\n */\n this.overlaps_ = options.overlaps == undefined ? true : options.overlaps;\n\n /**\n * @protected\n * @type {function(new: module:ol/VectorTile, module:ol/tilecoord~TileCoord, module:ol/TileState, string,\n * module:ol/format/Feature, module:ol/Tile~LoadFunction)}\n */\n this.tileClass = options.tileClass ? options.tileClass : Tile;\n\n /**\n * @private\n * @type {Object}\n */\n this.tileGrids_ = {};\n\n }\n\n /**\n * @return {boolean} The source can have overlapping geometries.\n */\n getOverlaps() {\n return this.overlaps_;\n }\n\n /**\n * clear {@link module:ol/TileCache~TileCache} and delete all source tiles\n * @api\n */\n clear() {\n this.tileCache.clear();\n this.sourceTiles_ = {};\n }\n\n /**\n * @inheritDoc\n */\n getTile(z, x, y, pixelRatio, projection) {\n const tileCoordKey = getKeyZXY(z, x, y);\n if (this.tileCache.containsKey(tileCoordKey)) {\n return (\n /** @type {!module:ol/Tile} */ (this.tileCache.get(tileCoordKey))\n );\n } else {\n const tileCoord = [z, x, y];\n const urlTileCoord = this.getTileCoordForTileUrlFunction(\n tileCoord, projection);\n const tile = new VectorImageTile(\n tileCoord,\n urlTileCoord !== null ? TileState.IDLE : TileState.EMPTY,\n this.getRevision(),\n this.format_, this.tileLoadFunction, urlTileCoord, this.tileUrlFunction,\n this.tileGrid, this.getTileGridForProjection(projection),\n this.sourceTiles_, pixelRatio, projection, this.tileClass,\n this.handleTileChange.bind(this), tileCoord[0]);\n\n this.tileCache.set(tileCoordKey, tile);\n return tile;\n }\n }\n\n\n /**\n * @inheritDoc\n */\n getTileGridForProjection(projection) {\n const code = projection.getCode();\n let tileGrid = this.tileGrids_[code];\n if (!tileGrid) {\n // A tile grid that matches the tile size of the source tile grid is more\n // likely to have 1:1 relationships between source tiles and rendered tiles.\n const sourceTileGrid = this.tileGrid;\n tileGrid = this.tileGrids_[code] = createForProjection(projection, undefined,\n sourceTileGrid ? sourceTileGrid.getTileSize(sourceTileGrid.getMinZoom()) : undefined);\n }\n return tileGrid;\n }\n\n\n /**\n * @inheritDoc\n */\n getTilePixelRatio(pixelRatio) {\n return pixelRatio;\n }\n\n\n /**\n * @inheritDoc\n */\n getTilePixelSize(z, pixelRatio, projection) {\n const tileGrid = this.getTileGridForProjection(projection);\n const tileSize = toSize(tileGrid.getTileSize(z), this.tmpSize);\n return [Math.round(tileSize[0] * pixelRatio), Math.round(tileSize[1] * pixelRatio)];\n }\n}\n\n\nexport default VectorTile;\n","/**\n * @module ol/source/XYZ\n */\n\nimport TileImage from '../source/TileImage.js';\nimport {createXYZ, extentFromProjection} from '../tilegrid.js';\n\n/**\n * @typedef {Object} Options\n * @property {module:ol/source/Source~AttributionLike} [attributions] Attributions.\n * @property {number} [cacheSize=2048] Cache size.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images. Note that\n * you must provide a `crossOrigin` value if you are using the WebGL renderer or if you want to\n * access pixel data with the Canvas renderer. See\n * https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {boolean} [opaque=true] Whether the layer is opaque.\n * @property {module:ol/proj~ProjectionLike} [projection='EPSG:3857'] Projection.\n * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).\n * Higher values can increase reprojection performance, but decrease precision.\n * @property {number} [maxZoom=18] Optional max zoom level.\n * @property {number} [minZoom=0] Optional min zoom level.\n * @property {module:ol/tilegrid/TileGrid} [tileGrid] Tile grid.\n * @property {module:ol/Tile~LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is\n * ```js\n * function(imageTile, src) {\n * imageTile.getImage().src = src;\n * };\n * ```\n * @property {number} [tilePixelRatio=1] The pixel ratio used by the tile service.\n * For example, if the tile service advertizes 256px by 256px tiles but actually sends 512px\n * by 512px images (for retina/hidpi devices) then `tilePixelRatio`\n * should be set to `2`.\n * @property {number|module:ol/size~Size} [tileSize=[256, 256]] The tile size used by the tile service.\n * @property {module:ol/Tile~UrlFunction} [tileUrlFunction] Optional function to get\n * tile URL given a tile coordinate and the projection.\n * Required if url or urls are not provided.\n * @property {string} [url] URL template. Must include `{x}`, `{y}` or `{-y}`,\n * and `{z}` placeholders. A `{?-?}` template pattern, for example `subdomain{a-f}.domain.com`,\n * may be used instead of defining each one separately in the `urls` option.\n * @property {Array} [urls] An array of URL templates.\n * @property {boolean} [wrapX=true] Whether to wrap the world horizontally.\n * @property {number} [transition] Duration of the opacity transition for rendering.\n * To disable the opacity transition, pass `transition: 0`.\n */\n\n\n/**\n * @classdesc\n * Layer source for tile data with URLs in a set XYZ format that are\n * defined in a URL template. By default, this follows the widely-used\n * Google grid where `x` 0 and `y` 0 are in the top left. Grids like\n * TMS where `x` 0 and `y` 0 are in the bottom left can be used by\n * using the `{-y}` placeholder in the URL template, so long as the\n * source does not have a custom tile grid. In this case,\n * {@link module:ol/source/TileImage} can be used with a `tileUrlFunction`\n * such as:\n *\n * tileUrlFunction: function(coordinate) {\n * return 'http://mapserver.com/' + coordinate[0] + '/' +\n * coordinate[1] + '/' + coordinate[2] + '.png';\n * }\n *\n * @api\n */\nclass XYZ extends TileImage {\n /**\n * @param {module:ol/source/XYZ~Options=} opt_options XYZ options.\n */\n constructor(opt_options) {\n const options = opt_options || {};\n const projection = options.projection !== undefined ?\n options.projection : 'EPSG:3857';\n\n const tileGrid = options.tileGrid !== undefined ? options.tileGrid :\n createXYZ({\n extent: extentFromProjection(projection),\n maxZoom: options.maxZoom,\n minZoom: options.minZoom,\n tileSize: options.tileSize\n });\n\n super({\n attributions: options.attributions,\n cacheSize: options.cacheSize,\n crossOrigin: options.crossOrigin,\n opaque: options.opaque,\n projection: projection,\n reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n tileGrid: tileGrid,\n tileLoadFunction: options.tileLoadFunction,\n tilePixelRatio: options.tilePixelRatio,\n tileUrlFunction: options.tileUrlFunction,\n url: options.url,\n urls: options.urls,\n wrapX: options.wrapX !== undefined ? options.wrapX : true,\n transition: options.transition\n });\n\n }\n\n}\n\nexport default XYZ;\n","/*\nol-mapbox-style - Use Mapbox Style objects with OpenLayers\nCopyright 2016-present Boundless Spatial, Inc.\nLicense: https://raw.githubusercontent.com/boundlessgeo/ol-mapbox-gl-style/master/LICENSE\n*/\n\nimport mb2css from 'mapbox-to-css-font';\nimport applyStyleFunction, {getValue} from './stylefunction';\nimport googleFonts from 'webfont-matcher/lib/fonts/google';\nimport {fromLonLat} from 'ol/proj';\nimport {createXYZ} from 'ol/tilegrid';\nimport Map from 'ol/Map';\nimport GeoJSON from 'ol/format/GeoJSON';\nimport MVT from 'ol/format/MVT';\nimport {unByKey} from 'ol/Observable';\nimport TileLayer from 'ol/layer/Tile';\nimport VectorLayer from 'ol/layer/Vector';\nimport VectorTileLayer from 'ol/layer/VectorTile';\nimport TileJSON from 'ol/source/TileJSON';\nimport VectorSource from 'ol/source/Vector';\nimport VectorTileSource from 'ol/source/VectorTile';\nimport XYZ from 'ol/source/XYZ';\nimport {Color} from '@mapbox/mapbox-gl-style-spec';\n\nconst fontFamilyRegEx = /font-family: ?([^;]*);/;\nconst stripQuotesRegEx = /(\"|')/g;\nlet loadedFontFamilies;\nfunction hasFontFamily(family) {\n if (!loadedFontFamilies) {\n loadedFontFamilies = {};\n const styleSheets = document.styleSheets;\n for (let i = 0, ii = styleSheets.length; i < ii; ++i) {\n const styleSheet = styleSheets[i];\n try {\n const cssRules = styleSheet.rules || styleSheet.cssRules;\n if (cssRules) {\n for (let j = 0, jj = cssRules.length; j < jj; ++j) {\n const cssRule = cssRules[j];\n if (cssRule.type == 5) {\n const match = cssRule.cssText.match(fontFamilyRegEx);\n loadedFontFamilies[match[1].replace(stripQuotesRegEx, '')] = true;\n }\n }\n }\n } catch (e) {\n // empty catch block\n }\n }\n }\n return family in loadedFontFamilies;\n}\n\nconst fontFamilies = {};\nconst googleFamilies = googleFonts.getNames();\nfunction getFonts(fonts) {\n if (fonts in fontFamilies) {\n return fontFamilies[fonts];\n }\n const families = fonts.map(function(font) {\n return mb2css(font, 1).split(' 1px ')[1].replace(/\"/g, '');\n });\n const family = families[0];\n if (!hasFontFamily(family) && googleFamilies.indexOf(family) !== -1) {\n const fontUrl = 'https://fonts.googleapis.com/css?family=' + family.replace(/ /g, '+');\n if (!document.querySelector('link[href=\"' + fontUrl + '\"]')) {\n const markup = document.createElement('link');\n markup.href = fontUrl;\n markup.rel = 'stylesheet';\n document.getElementsByTagName('head')[0].appendChild(markup);\n }\n }\n return fonts;\n}\n\nconst spriteRegEx = /^(.*)(\\?.*)$/;\n\nfunction withPath(url, path) {\n if (path && url.indexOf('http') != 0) {\n url = path + url;\n }\n return url;\n}\n\nfunction toSpriteUrl(url, path, extension) {\n url = withPath(url, path);\n const parts = url.match(spriteRegEx);\n return parts ?\n parts[1] + extension + (parts.length > 2 ? parts[2] : '') :\n url + extension;\n}\n\n/**\n * Applies a style function to an `ol.layer.VectorTile` or `ol.layer.Vector`\n * with an `ol.source.VectorTile` or an `ol.source.Vector`. The style function\n * will render all layers from the `glStyle` object that use the specified\n * `source`, or a subset of layers from the same source. The source needs to be\n * a `\"type\": \"vector\"` or `\"type\": \"geojson\"` source.\n *\n * Two additional properties will be set on the provided layer:\n *\n * * `mapbox-source`: The `id` of the Mapbox Style document's source that the\n * OpenLayers layer was created from. Usually `apply()` creates one\n * OpenLayers layer per Mapbox Style source, unless the layer stack has\n * layers from different sources in between.\n * * `mapbox-layers`: The `id`s of the Mapbox Style document's layers that are\n * included in the OpenLayers layer.\n *\n * @param {ol.layer.VectorTile|ol.layer.Vector} layer OpenLayers layer.\n * @param {string|Object} glStyle Mapbox Style object.\n * @param {string|Array} source `source` key or an array of layer `id`s from the\n * Mapbox Style object. When a `source` key is provided, all layers for the\n * specified source will be included in the style function. When layer `id`s\n * are provided, they must be from layers that use the same source.\n * @param {string} [path=undefined] Path of the style file. Only required when\n * a relative path is used with the `\"sprite\"` property of the style.\n * @param {Array} [resolutions=undefined] Resolutions for mapping resolution to zoom level.\n * @return {Promise} Promise which will be resolved when the style can be used\n * for rendering.\n */\nexport function applyStyle(layer, glStyle, source, path, resolutions) {\n return new Promise(function(resolve, reject) {\n\n // TODO: figure out where best place to check source type is\n // Note that the source arg is an array of gl layer ids and each must be\n // dereferenced to get source type to validate\n if (typeof glStyle != 'object') {\n glStyle = JSON.parse(glStyle);\n }\n if (glStyle.version != 8) {\n return reject(new Error('glStyle version 8 required.'));\n }\n if (!(layer instanceof VectorLayer || layer instanceof VectorTileLayer)) {\n return reject(new Error('Can only apply to VectorLayer or VectorTileLayer'));\n }\n\n let spriteScale, spriteData, spriteImageUrl, style;\n function onChange() {\n if (!style && (!glStyle.sprite || spriteData)) {\n style = applyStyleFunction(layer, glStyle, source, resolutions, spriteData, spriteImageUrl, getFonts);\n if (!layer.getStyle()) {\n reject(new Error(`Nothing to show for source [${source}]`));\n } else {\n resolve();\n }\n } else if (style) {\n layer.setStyle(style);\n resolve();\n } else {\n reject(new Error('Something went wrong trying to apply style.'));\n }\n }\n\n if (glStyle.sprite) {\n spriteScale = window.devicePixelRatio >= 1.5 ? 0.5 : 1;\n const sizeFactor = spriteScale == 0.5 ? '@2x' : '';\n let spriteUrl = toSpriteUrl(glStyle.sprite, path, sizeFactor + '.json');\n\n fetch(spriteUrl, {credentials: 'same-origin'})\n .then(function(response) {\n if (!response.ok && (sizeFactor !== '')) {\n spriteUrl = toSpriteUrl(glStyle.sprite, path, '.json');\n return fetch(spriteUrl, {credentials: 'same-origin'});\n } else {\n return response;\n }\n })\n .then(function(response) {\n if (response.ok) {\n return response.json();\n } else {\n reject(new Error(`Problem fetching sprite from ${spriteUrl}: ${response.statusText}`));\n }\n })\n .then(function(spritesJson) {\n if ((spritesJson === undefined) || (Object.keys(spritesJson).length === 0)) {\n return reject(new Error('No sprites found.'));\n }\n spriteData = spritesJson;\n spriteImageUrl = toSpriteUrl(glStyle.sprite, path, sizeFactor + '.png');\n onChange();\n })\n .catch(function(err) {\n reject(new Error(`Sprites cannot be loaded: ${spriteUrl}: ${err.message}`));\n });\n } else {\n onChange();\n }\n\n });\n}\n\nconst emptyObj = {};\n\nfunction setBackground(map, layer) {\n const background = {\n type: layer.type\n };\n function updateStyle() {\n const element = map.getTargetElement();\n if (!element) {\n return;\n }\n const layout = layer.layout || {};\n const paint = layer.paint || {};\n background['paint'] = paint;\n background.id = 'olms-bg-' + paint['background-opacity'] + paint['background-color'];\n const zoom = map.getView().getZoom();\n if (paint['background-color'] !== undefined) {\n const bg = getValue(background, 'paint', 'background-color', zoom, emptyObj);\n element.style.backgroundColor = Color.parse(bg).toString();\n }\n if (paint['background-opacity'] !== undefined) {\n element.style.backgroundOpacity =\n getValue(background, 'paint', 'background-opacity', zoom, emptyObj);\n }\n if (layout.visibility == 'none') {\n element.style.backgroundColor = '';\n element.style.backgroundOpacity = '';\n }\n }\n if (map.getTargetElement()) {\n updateStyle();\n }\n map.on(['change:resolution', 'change:target'], updateStyle);\n}\n\n/**\n * ```js\n * import {applyBackground} from 'ol-mapbox-style';\n * ```\n * Applies properties of the Mapbox Style's first `background` layer to the map.\n * @param {ol.Map} map OpenLayers Map.\n * @param {Object} glStyle Mapbox Style object.\n */\nexport function applyBackground(map, glStyle) {\n glStyle.layers.some(function(l) {\n if (l.type == 'background') {\n setBackground(map, l);\n return true;\n }\n });\n}\n\nfunction getSourceIdByRef(layers, ref) {\n let sourceId;\n layers.some(function(layer) {\n if (layer.id == ref) {\n sourceId = layer.source;\n return true;\n }\n });\n return sourceId;\n}\n\nfunction setupVectorLayer(glSource, accessToken, url) {\n let tiles = glSource.tiles;\n if (url) {\n if (url.indexOf('mapbox://') == 0) {\n const mapid = url.replace('mapbox://', '');\n tiles = ['a', 'b', 'c', 'd'].map(function(host) {\n return 'https://' + host + '.tiles.mapbox.com/v4/' + mapid +\n '/{z}/{x}/{y}.' +\n (glSource.type == 'vector' ? 'vector.pbf' : 'png') +\n accessToken;\n });\n }\n }\n return tiles ? (function() {\n const tileGrid = createXYZ({\n tileSize: 512,\n maxZoom: 'maxzoom' in glSource ? glSource.maxzoom : 22,\n minZoom: glSource.minzoom\n });\n return new VectorTileLayer({\n declutter: true,\n maxResolution: tileGrid.getMinZoom() > 0 ?\n tileGrid.getResolution(tileGrid.getMinZoom()) : undefined,\n source: new VectorTileSource({\n attributions: glSource.attribution,\n format: new MVT(),\n tileGrid: tileGrid,\n urls: tiles\n }),\n visible: false\n });\n })() : (function() {\n const layer = new VectorTileLayer({\n declutter: true,\n visible: false\n });\n const tilejson = new TileJSON({\n url: url\n });\n const key = tilejson.on('change', function() {\n if (tilejson.getState() == 'ready') {\n const tileJSONDoc = tilejson.getTileJSON();\n const tiles = Array.isArray(tileJSONDoc.tiles) ? tileJSONDoc.tiles : [tileJSONDoc.tiles];\n for (let i = 0, ii = tiles.length; i < ii; ++i) {\n const tile = tiles[i];\n if (tile.indexOf('http') != 0) {\n tiles[i] = glSource.url + tile;\n }\n }\n const tileGrid = tilejson.getTileGrid();\n layer.setSource(new VectorTileSource({\n attributions: tilejson.getAttributions() || tileJSONDoc.attribution,\n format: new MVT(),\n tileGrid: createXYZ({\n minZoom: tileGrid.getMinZoom(),\n maxZoom: tileGrid.getMaxZoom(),\n tileSize: 512\n }),\n urls: tiles\n }));\n if (tileGrid.getMinZoom() > 0) {\n layer.setMaxResolution(\n tileGrid.getResolution(tileGrid.getMinZoom()));\n }\n unByKey(key);\n } else if (tilejson.getState() == 'error') {\n layer.setSource(undefined);\n unByKey(key);\n }\n });\n return layer;\n })();\n}\n\nfunction setupRasterLayer(glSource, url) {\n const layer = new TileLayer();\n let source;\n if (!glSource.tiles) {\n source = new TileJSON({\n transition: 0,\n url: url,\n crossOrigin: 'anonymous'\n });\n const key = source.on('change', function() {\n const state = source.getState();\n if (state === 'ready' || state === 'error') {\n unByKey(key);\n layer.setSource(source);\n }\n });\n } else {\n source = new XYZ({\n transition: 0,\n attributions: glSource.attribution,\n minZoom: glSource.minzoom,\n maxZoom: 'maxzoom' in glSource ? glSource.maxzoom : 22,\n tileSize: glSource.tileSize || 512,\n url: url,\n urls: glSource.tiles,\n crossOrigin: 'anonymous'\n });\n }\n source.setTileLoadFunction(function(tile, src) {\n if (src.indexOf('{bbox-epsg-3857}') != -1) {\n const bbox = source.getTileGrid().getTileCoordExtent(tile.getTileCoord());\n src = src.replace('{bbox-epsg-3857}', bbox.toString());\n }\n tile.getImage().src = src;\n });\n layer.setSource(source);\n return layer;\n}\n\nconst geoJsonFormat = new GeoJSON();\nfunction setupGeoJSONLayer(glSource, path) {\n const data = glSource.data;\n let features, geoJsonUrl;\n if (typeof data == 'string') {\n geoJsonUrl = withPath(data, path);\n } else {\n features = geoJsonFormat.readFeatures(data, {featureProjection: 'EPSG:3857'});\n }\n return new VectorLayer({\n source: new VectorSource({\n attributions: glSource.attribution,\n features: features,\n format: geoJsonFormat,\n url: geoJsonUrl\n }),\n visible: false\n });\n}\n\nfunction processStyle(glStyle, map, baseUrl, host, path, accessToken) {\n const promises = [];\n const view = map.getView();\n if ('center' in glStyle && !view.getCenter()) {\n view.setCenter(fromLonLat(glStyle.center));\n }\n if ('zoom' in glStyle && view.getZoom() === undefined) {\n view.setZoom(glStyle.zoom);\n }\n if (!view.getCenter() || view.getZoom() === undefined) {\n view.fit(view.getProjection().getExtent(), {\n nearest: true,\n size: map.getSize()\n });\n }\n if (glStyle.sprite) {\n if (glStyle.sprite.indexOf('mapbox://') == 0) {\n glStyle.sprite = baseUrl + '/sprite' + accessToken;\n } else if (glStyle.sprite.indexOf('http') != 0) {\n glStyle.sprite = (host ? (host + path) : '') + glStyle.sprite + accessToken;\n }\n }\n\n const glLayers = glStyle.layers;\n let layerIds = [];\n\n let glLayer, glSource, glSourceId, id, layer, url;\n for (let i = 0, ii = glLayers.length; i < ii; ++i) {\n glLayer = glLayers[i];\n if (glLayer.type == 'background') {\n setBackground(map, glLayer);\n } else {\n id = glLayer.source || getSourceIdByRef(glLayers, glLayer.ref);\n // this technique assumes gl layers will be in a particular order\n if (id != glSourceId) {\n if (layerIds.length) {\n promises.push(finalizeLayer(layer, layerIds, glStyle, path, map));\n layerIds = [];\n }\n glSource = glStyle.sources[id];\n url = glSource.url;\n\n if (glSource.type == 'vector') {\n layer = setupVectorLayer(glSource, accessToken, url);\n } else if (glSource.type == 'raster') {\n layer = setupRasterLayer(glSource, url);\n layer.setVisible(glLayer.layout ? glLayer.layout.visibility !== 'none' : true);\n } else if (glSource.type == 'geojson') {\n layer = setupGeoJSONLayer(glSource, path);\n }\n glSourceId = id;\n if (layer) {\n layer.set('mapbox-source', glSourceId);\n }\n }\n layerIds.push(glLayer.id);\n }\n }\n promises.push(finalizeLayer(layer, layerIds, glStyle, path, map));\n map.set('mapbox-style', glStyle);\n return Promise.all(promises);\n}\n\n/**\n * ```js\n * import olms from 'ol-mapbox-style';\n * ```\n *\n * Loads and applies a Mapbox Style object to an OpenLayers Map. This includes\n * the map background, the layers, the center and the zoom.\n *\n * The center and zoom will only be set if present in the Mapbox Style document,\n * and if not already set on the OpenLayers map.\n *\n * Layers will be added to the OpenLayers map, without affecting any layers that\n * might already be set on the map.\n *\n * Layers added by `apply()` will have two additional properties:\n *\n * * `mapbox-source`: The `id` of the Mapbox Style document's source that the\n * OpenLayers layer was created from. Usually `apply()` creates one\n * OpenLayers layer per Mapbox Style source, unless the layer stack has\n * layers from different sources in between.\n * * `mapbox-layers`: The `id`s of the Mapbox Style document's layers that are\n * included in the OpenLayers layer.\n *\n * This function sets an additional `mapbox-style` property on the OpenLayers\n * map instance, which holds the Mapbox Style object.\n *\n * @param {ol.Map|HTMLElement|string} map Either an existing OpenLayers Map\n * instance, or a HTML element, or the id of a HTML element that will be the\n * target of a new OpenLayers Map.\n * @param {string|Object} style JSON style object or style url pointing to a\n * Mapbox Style object. When using Mapbox APIs, the url must contain an access\n * token and look like\n * `https://api.mapbox.com/styles/v1/mapbox/bright-v9?access_token=[your_access_token_here]`.\n * When passed as JSON style object, all OpenLayers layers created by `apply()`\n * will be immediately available, but they may not have a source yet (i.e. when\n * they are defined by a TileJSON url in the Mapbox Style document). When passed\n * as style url, layers will be added to the map when the Mapbox Style document\n * is loaded and parsed.\n * @return {Promise} A promise that resolves after all layers have been added to\n * the OpenLayers Map instance, their sources set, and their styles applied. the\n * `resolve` callback will be called with the OpenLayers Map instance as\n * argument.\n */\nexport default function olms(map, style) {\n\n let accessToken, baseUrl, host, path, promise;\n accessToken = baseUrl = host = path = '';\n\n if (!(map instanceof Map)) {\n map = new Map({\n target: map\n });\n }\n\n if (typeof style === 'string') {\n const parts = style.match(spriteRegEx);\n if (parts) {\n baseUrl = parts[1];\n accessToken = parts.length > 2 ? parts[2] : '';\n }\n promise = new Promise(function(resolve, reject) {\n fetch(style, {\n credentials: 'same-origin'\n })\n .then(function(response) {\n return response.json();\n })\n .then(function(glStyle) {\n const a = document.createElement('A');\n a.href = style;\n path = a.pathname.split('/').slice(0, -1).join('/') + '/';\n host = style.substr(0, style.indexOf(path));\n\n processStyle(glStyle, map, baseUrl, host, path, accessToken)\n .then(function() {\n resolve(map);\n })\n .catch(reject);\n })\n .catch(function(err) {\n reject(new Error(`Could not load ${style}: ${err.message}`));\n });\n });\n } else {\n promise = new Promise(function(resolve, reject) {\n processStyle(style, map)\n .then(function() {\n resolve(map);\n })\n .catch(reject);\n });\n }\n\n return promise;\n}\n\n/**\n * ```js\n * import {apply} from 'ol-mapbox-style';\n * ```\n * Like `olms`, but returns an `ol.Map` instance instead of a `Promise`.\n *\n * @param {ol.Map|HTMLElement|string} map Either an existing OpenLayers Map\n * instance, or a HTML element, or the id of a HTML element that will be the\n * target of a new OpenLayers Map.\n * @param {string|Object} style JSON style object or style url pointing to a\n * Mapbox Style object. When using Mapbox APIs, the url must contain an access\n * token and look like\n * `https://api.mapbox.com/styles/v1/mapbox/bright-v9?access_token=[your_access_token_here]`.\n * When passed as JSON style object, all OpenLayers layers created by `apply()`\n * will be immediately available, but they may not have a source yet (i.e. when\n * they are defined by a TileJSON url in the Mapbox Style document). When passed\n * as style url, layers will be added to the map when the Mapbox Style document\n * is loaded and parsed.\n * @return {ol.Map} The OpenLayers Map instance that will be populated with the\n * contents described in the Mapbox Style object.\n */\nexport function apply(map, style) {\n if (!(map instanceof Map)) {\n map = new Map({\n target: map\n });\n }\n setTimeout(function() {\n olms(map, style);\n }, 0);\n return map;\n}\n\n\n/**\n * @private\n * If layerIds is not empty, applies the style specified in glStyle to the layer,\n * and adds the layer to the map.\n *\n * The layer may not yet have a source when the function is called. If so, the style\n * is applied to the layer via a once listener on the 'change:source' event.\n *\n * @param {ol.layer.Layer} layer An OpenLayers layer instance.\n * @param {Array} layerIds Array containing layer ids of already-processed layers.\n * @param {Object} glStyle Style as a JSON object.\n * @param {string|undefined} path The path part of the style URL. Only required\n * when a relative path is used with the `\"sprite\"` property of the style.\n * @param {ol.Map} map OpenLayers Map.\n * @return {Promise} Returns a promise that resolves after the source has\n * been set on the specified layer, and the style has been applied.\n */\nfunction finalizeLayer(layer, layerIds, glStyle, path, map) {\n return new Promise(function(resolve, reject) {\n const setStyle = function() {\n const source = layer.getSource();\n if (source instanceof VectorSource || source instanceof VectorTileSource) {\n applyStyle(layer, glStyle, layerIds, path).then(function() {\n layer.setVisible(true);\n resolve();\n }, function(e) {\n reject(e);\n });\n } else {\n if (!source || source.getState() === 'error') {\n reject(new Error('Error accessing data for source ' + layer.get('mapbox-source')));\n } else {\n resolve();\n }\n }\n };\n\n layer.set('mapbox-layers', layerIds);\n if (map.getLayers().getArray().indexOf(layer) === -1) {\n map.addLayer(layer);\n }\n\n if (layer.getSource()) {\n setStyle();\n } else {\n layer.once('change:source', setStyle);\n }\n });\n}\n\n\n/**\n * ```js\n * import {getLayer} from 'ol-mapbox-style';\n * ```\n * Get the OpenLayers layer instance that contains the provided Mapbox Style\n * `layer`. Note that multiple Mapbox Style layers are combined in a single\n * OpenLayers layer instance when they use the same Mapbox Style `source`.\n * @param {ol.Map} map OpenLayers Map.\n * @param {string} layerId Mapbox Style layer id.\n * @return {ol.layer.Layer} layer OpenLayers layer instance.\n */\nexport function getLayer(map, layerId) {\n const layers = map.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n if (layers[i].get('mapbox-layers').indexOf(layerId) !== -1) {\n return layers[i];\n }\n }\n}\n\n/**\n * ```js\n * import {getSource} from 'ol-mapbox-style';\n * ```\n * Get the OpenLayers source instance for the provided Mapbox Style `source`.\n * @param {ol.Map} map OpenLayers Map.\n * @param {string} sourceId Mapbox Style source id.\n * @return {ol.layer.Layer} layer OpenLayers layer instance.\n */\nexport function getSource(map, sourceId) {\n const layers = map.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const source = layers[i].getSource();\n if (layers[i].get('mapbox-source').indexOf(sourceId) !== -1) {\n return source;\n }\n }\n}\n","/**\n * @module ol/color\n */\nimport {assert} from './asserts.js';\nimport {clamp} from './math.js';\n\n\n/**\n * A color represented as a short array [red, green, blue, alpha].\n * red, green, and blue should be integers in the range 0..255 inclusive.\n * alpha should be a float in the range 0..1 inclusive. If no alpha value is\n * given then `1` will be used.\n * @typedef {Array} Color\n * @api\n */\n\n\n/**\n * This RegExp matches # followed by 3, 4, 6, or 8 hex digits.\n * @const\n * @type {RegExp}\n * @private\n */\nconst HEX_COLOR_RE_ = /^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i;\n\n\n/**\n * Regular expression for matching potential named color style strings.\n * @const\n * @type {RegExp}\n * @private\n */\nconst NAMED_COLOR_RE_ = /^([a-z]*)$/i;\n\n\n/**\n * Return the color as an rgba string.\n * @param {module:ol/color~Color|string} color Color.\n * @return {string} Rgba string.\n * @api\n */\nexport function asString(color) {\n if (typeof color === 'string') {\n return color;\n } else {\n return toString(color);\n }\n}\n\n/**\n * Return named color as an rgba string.\n * @param {string} color Named color.\n * @return {string} Rgb string.\n */\nfunction fromNamed(color) {\n const el = document.createElement('div');\n el.style.color = color;\n if (el.style.color !== '') {\n document.body.appendChild(el);\n const rgb = getComputedStyle(el).color;\n document.body.removeChild(el);\n return rgb;\n } else {\n return '';\n }\n}\n\n\n/**\n * @param {string} s String.\n * @return {module:ol/color~Color} Color.\n */\nexport const fromString = (\n function() {\n\n // We maintain a small cache of parsed strings. To provide cheap LRU-like\n // semantics, whenever the cache grows too large we simply delete an\n // arbitrary 25% of the entries.\n\n /**\n * @const\n * @type {number}\n */\n const MAX_CACHE_SIZE = 1024;\n\n /**\n * @type {Object}\n */\n const cache = {};\n\n /**\n * @type {number}\n */\n let cacheSize = 0;\n\n return (\n /**\n * @param {string} s String.\n * @return {module:ol/color~Color} Color.\n */\n function(s) {\n let color;\n if (cache.hasOwnProperty(s)) {\n color = cache[s];\n } else {\n if (cacheSize >= MAX_CACHE_SIZE) {\n let i = 0;\n for (const key in cache) {\n if ((i++ & 3) === 0) {\n delete cache[key];\n --cacheSize;\n }\n }\n }\n color = fromStringInternal_(s);\n cache[s] = color;\n ++cacheSize;\n }\n return color;\n }\n );\n\n })();\n\n/**\n * Return the color as an array. This function maintains a cache of calculated\n * arrays which means the result should not be modified.\n * @param {module:ol/color~Color|string} color Color.\n * @return {module:ol/color~Color} Color.\n * @api\n */\nexport function asArray(color) {\n if (Array.isArray(color)) {\n return color;\n } else {\n return fromString(/** @type {string} */ (color));\n }\n}\n\n/**\n * @param {string} s String.\n * @private\n * @return {module:ol/color~Color} Color.\n */\nfunction fromStringInternal_(s) {\n let r, g, b, a, color;\n\n if (NAMED_COLOR_RE_.exec(s)) {\n s = fromNamed(s);\n }\n\n if (HEX_COLOR_RE_.exec(s)) { // hex\n const n = s.length - 1; // number of hex digits\n let d; // number of digits per channel\n if (n <= 4) {\n d = 1;\n } else {\n d = 2;\n }\n const hasAlpha = n === 4 || n === 8;\n r = parseInt(s.substr(1 + 0 * d, d), 16);\n g = parseInt(s.substr(1 + 1 * d, d), 16);\n b = parseInt(s.substr(1 + 2 * d, d), 16);\n if (hasAlpha) {\n a = parseInt(s.substr(1 + 3 * d, d), 16);\n } else {\n a = 255;\n }\n if (d == 1) {\n r = (r << 4) + r;\n g = (g << 4) + g;\n b = (b << 4) + b;\n if (hasAlpha) {\n a = (a << 4) + a;\n }\n }\n color = [r, g, b, a / 255];\n } else if (s.indexOf('rgba(') == 0) { // rgba()\n color = s.slice(5, -1).split(',').map(Number);\n normalize(color);\n } else if (s.indexOf('rgb(') == 0) { // rgb()\n color = s.slice(4, -1).split(',').map(Number);\n color.push(1);\n normalize(color);\n } else {\n assert(false, 14); // Invalid color\n }\n return (\n /** @type {module:ol/color~Color} */ (color)\n );\n}\n\n\n/**\n * TODO this function is only used in the test, we probably shouldn't export it\n * @param {module:ol/color~Color} color Color.\n * @return {module:ol/color~Color} Clamped color.\n */\nexport function normalize(color) {\n color[0] = clamp((color[0] + 0.5) | 0, 0, 255);\n color[1] = clamp((color[1] + 0.5) | 0, 0, 255);\n color[2] = clamp((color[2] + 0.5) | 0, 0, 255);\n color[3] = clamp(color[3], 0, 1);\n return color;\n}\n\n\n/**\n * @param {module:ol/color~Color} color Color.\n * @return {string} String.\n */\nexport function toString(color) {\n let r = color[0];\n if (r != (r | 0)) {\n r = (r + 0.5) | 0;\n }\n let g = color[1];\n if (g != (g | 0)) {\n g = (g + 0.5) | 0;\n }\n let b = color[2];\n if (b != (b | 0)) {\n b = (b + 0.5) | 0;\n }\n const a = color[3] === undefined ? 1 : color[3];\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n}\n","/**\n * @module ol/geom/flat/contains\n */\nimport {forEachCorner} from '../../extent.js';\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {boolean} Contains extent.\n */\nexport function linearRingContainsExtent(flatCoordinates, offset, end, stride, extent) {\n const outside = forEachCorner(extent,\n /**\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n * @return {boolean} Contains (x, y).\n */\n function(coordinate) {\n return !linearRingContainsXY(flatCoordinates, offset, end, stride, coordinate[0], coordinate[1]);\n });\n return !outside;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingContainsXY(flatCoordinates, offset, end, stride, x, y) {\n // http://geomalgorithms.com/a03-_inclusion.html\n // Copyright 2000 softSurfer, 2012 Dan Sunday\n // This code may be freely used and modified for any purpose\n // providing that this copyright notice is included with it.\n // SoftSurfer makes no warranty for this code, and cannot be held\n // liable for any real or imagined damage resulting from its use.\n // Users of this code must verify correctness for their application.\n let wn = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n if (y1 <= y) {\n if (y2 > y && ((x2 - x1) * (y - y1)) - ((x - x1) * (y2 - y1)) > 0) {\n wn++;\n }\n } else if (y2 <= y && ((x2 - x1) * (y - y1)) - ((x - x1) * (y2 - y1)) < 0) {\n wn--;\n }\n x1 = x2;\n y1 = y2;\n }\n return wn !== 0;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y) {\n if (ends.length === 0) {\n return false;\n }\n if (!linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) {\n return false;\n }\n for (let i = 1, ii = ends.length; i < ii; ++i) {\n if (linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)) {\n return false;\n }\n }\n return true;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingssContainsXY(flatCoordinates, offset, endss, stride, x, y) {\n if (endss.length === 0) {\n return false;\n }\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n","/**\n * @module ol/coordinate\n */\nimport {modulo} from './math.js';\nimport {padNumber} from './string.js';\n\n\n/**\n * An array of numbers representing an xy coordinate. Example: `[16, 48]`.\n * @typedef {Array} Coordinate\n * @api\n */\n\n\n/**\n * A function that takes a {@link module:ol/coordinate~Coordinate} and\n * transforms it into a `{string}`.\n *\n * @typedef {function((module:ol/coordinate~Coordinate|undefined)): string} CoordinateFormat\n * @api\n */\n\n\n/**\n * Add `delta` to `coordinate`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {add} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * add(coord, [-2, 4]);\n * // coord is now [5.85, 51.983333]\n *\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n * @param {module:ol/coordinate~Coordinate} delta Delta.\n * @return {module:ol/coordinate~Coordinate} The input coordinate adjusted by\n * the given delta.\n * @api\n */\nexport function add(coordinate, delta) {\n coordinate[0] += delta[0];\n coordinate[1] += delta[1];\n return coordinate;\n}\n\n\n/**\n * Calculates the point closest to the passed coordinate on the passed circle.\n *\n * @param {module:ol/coordinate~Coordinate} coordinate The coordinate.\n * @param {module:ol/geom/Circle} circle The circle.\n * @return {module:ol/coordinate~Coordinate} Closest point on the circumference.\n */\nexport function closestOnCircle(coordinate, circle) {\n const r = circle.getRadius();\n const center = circle.getCenter();\n const x0 = center[0];\n const y0 = center[1];\n const x1 = coordinate[0];\n const y1 = coordinate[1];\n\n let dx = x1 - x0;\n const dy = y1 - y0;\n if (dx === 0 && dy === 0) {\n dx = 1;\n }\n const d = Math.sqrt(dx * dx + dy * dy);\n\n const x = x0 + r * dx / d;\n const y = y0 + r * dy / d;\n\n return [x, y];\n}\n\n\n/**\n * Calculates the point closest to the passed coordinate on the passed segment.\n * This is the foot of the perpendicular of the coordinate to the segment when\n * the foot is on the segment, or the closest segment coordinate when the foot\n * is outside the segment.\n *\n * @param {module:ol/coordinate~Coordinate} coordinate The coordinate.\n * @param {Array} segment The two coordinates\n * of the segment.\n * @return {module:ol/coordinate~Coordinate} The foot of the perpendicular of\n * the coordinate to the segment.\n */\nexport function closestOnSegment(coordinate, segment) {\n const x0 = coordinate[0];\n const y0 = coordinate[1];\n const start = segment[0];\n const end = segment[1];\n const x1 = start[0];\n const y1 = start[1];\n const x2 = end[0];\n const y2 = end[1];\n const dx = x2 - x1;\n const dy = y2 - y1;\n const along = (dx === 0 && dy === 0) ? 0 :\n ((dx * (x0 - x1)) + (dy * (y0 - y1))) / ((dx * dx + dy * dy) || 0);\n let x, y;\n if (along <= 0) {\n x = x1;\n y = y1;\n } else if (along >= 1) {\n x = x2;\n y = y2;\n } else {\n x = x1 + along * dx;\n y = y1 + along * dy;\n }\n return [x, y];\n}\n\n\n/**\n * Returns a {@link module:ol/coordinate~CoordinateFormat} function that can be\n * used to format\n * a {module:ol/coordinate~Coordinate} to a string.\n *\n * Example without specifying the fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var stringifyFunc = createStringXY();\n * var out = stringifyFunc(coord);\n * // out is now '8, 48'\n *\n * Example with explicitly specifying 2 fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var stringifyFunc = createStringXY(2);\n * var out = stringifyFunc(coord);\n * // out is now '7.85, 47.98'\n *\n * @param {number=} opt_fractionDigits The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {module:ol/coordinate~CoordinateFormat} Coordinate format.\n * @api\n */\nexport function createStringXY(opt_fractionDigits) {\n return (\n /**\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n * @return {string} String XY.\n */\n function(coordinate) {\n return toStringXY(coordinate, opt_fractionDigits);\n }\n );\n}\n\n\n/**\n * @param {string} hemispheres Hemispheres.\n * @param {number} degrees Degrees.\n * @param {number=} opt_fractionDigits The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} String.\n */\nexport function degreesToStringHDMS(hemispheres, degrees, opt_fractionDigits) {\n const normalizedDegrees = modulo(degrees + 180, 360) - 180;\n const x = Math.abs(3600 * normalizedDegrees);\n const dflPrecision = opt_fractionDigits || 0;\n const precision = Math.pow(10, dflPrecision);\n\n let deg = Math.floor(x / 3600);\n let min = Math.floor((x - deg * 3600) / 60);\n let sec = x - (deg * 3600) - (min * 60);\n sec = Math.ceil(sec * precision) / precision;\n\n if (sec >= 60) {\n sec = 0;\n min += 1;\n }\n\n if (min >= 60) {\n min = 0;\n deg += 1;\n }\n\n return deg + '\\u00b0 ' + padNumber(min, 2) + '\\u2032 ' +\n padNumber(sec, 2, dflPrecision) + '\\u2033' +\n (normalizedDegrees == 0 ? '' : ' ' + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0));\n}\n\n\n/**\n * Transforms the given {@link module:ol/coordinate~Coordinate} to a string\n * using the given string template. The strings `{x}` and `{y}` in the template\n * will be replaced with the first and second coordinate values respectively.\n *\n * Example without specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var template = 'Coordinate is ({x}|{y}).';\n * var out = format(coord, template);\n * // out is now 'Coordinate is (8|48).'\n *\n * Example explicitly specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var template = 'Coordinate is ({x}|{y}).';\n * var out = format(coord, template, 2);\n * // out is now 'Coordinate is (7.85|47.98).'\n *\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n * @param {string} template A template string with `{x}` and `{y}` placeholders\n * that will be replaced by first and second coordinate values.\n * @param {number=} opt_fractionDigits The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Formatted coordinate.\n * @api\n */\nexport function format(coordinate, template, opt_fractionDigits) {\n if (coordinate) {\n return template\n .replace('{x}', coordinate[0].toFixed(opt_fractionDigits))\n .replace('{y}', coordinate[1].toFixed(opt_fractionDigits));\n } else {\n return '';\n }\n}\n\n\n/**\n * @param {module:ol/coordinate~Coordinate} coordinate1 First coordinate.\n * @param {module:ol/coordinate~Coordinate} coordinate2 Second coordinate.\n * @return {boolean} The two coordinates are equal.\n */\nexport function equals(coordinate1, coordinate2) {\n let equals = true;\n for (let i = coordinate1.length - 1; i >= 0; --i) {\n if (coordinate1[i] != coordinate2[i]) {\n equals = false;\n break;\n }\n }\n return equals;\n}\n\n\n/**\n * Rotate `coordinate` by `angle`. `coordinate` is modified in place and\n * returned by the function.\n *\n * Example:\n *\n * import {rotate} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var rotateRadians = Math.PI / 2; // 90 degrees\n * rotate(coord, rotateRadians);\n * // coord is now [-47.983333, 7.85]\n *\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n * @param {number} angle Angle in radian.\n * @return {module:ol/coordinate~Coordinate} Coordinate.\n * @api\n */\nexport function rotate(coordinate, angle) {\n const cosAngle = Math.cos(angle);\n const sinAngle = Math.sin(angle);\n const x = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n const y = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n coordinate[0] = x;\n coordinate[1] = y;\n return coordinate;\n}\n\n\n/**\n * Scale `coordinate` by `scale`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {scale as scaleCoordinate} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var scale = 1.2;\n * scaleCoordinate(coord, scale);\n * // coord is now [9.42, 57.5799996]\n *\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n * @param {number} scale Scale factor.\n * @return {module:ol/coordinate~Coordinate} Coordinate.\n */\nexport function scale(coordinate, scale) {\n coordinate[0] *= scale;\n coordinate[1] *= scale;\n return coordinate;\n}\n\n\n/**\n * @param {module:ol/coordinate~Coordinate} coord1 First coordinate.\n * @param {module:ol/coordinate~Coordinate} coord2 Second coordinate.\n * @return {number} Squared distance between coord1 and coord2.\n */\nexport function squaredDistance(coord1, coord2) {\n const dx = coord1[0] - coord2[0];\n const dy = coord1[1] - coord2[1];\n return dx * dx + dy * dy;\n}\n\n\n/**\n * @param {module:ol/coordinate~Coordinate} coord1 First coordinate.\n * @param {module:ol/coordinate~Coordinate} coord2 Second coordinate.\n * @return {number} Distance between coord1 and coord2.\n */\nexport function distance(coord1, coord2) {\n return Math.sqrt(squaredDistance(coord1, coord2));\n}\n\n\n/**\n * Calculate the squared distance from a coordinate to a line segment.\n *\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate of the point.\n * @param {Array} segment Line segment (2\n * coordinates).\n * @return {number} Squared distance from the point to the line segment.\n */\nexport function squaredDistanceToSegment(coordinate, segment) {\n return squaredDistance(coordinate,\n closestOnSegment(coordinate, segment));\n}\n\n\n/**\n * Format a geographic coordinate with the hemisphere, degrees, minutes, and\n * seconds.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringHDMS} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringHDMS(coord);\n * // out is now '47° 58′ 60″ N 7° 50′ 60″ E'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringHDMS} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringHDMS(coord, 1);\n * // out is now '47° 58′ 60.0″ N 7° 50′ 60.0″ E'\n *\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n * @param {number=} opt_fractionDigits The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Hemisphere, degrees, minutes and seconds.\n * @api\n */\nexport function toStringHDMS(coordinate, opt_fractionDigits) {\n if (coordinate) {\n return degreesToStringHDMS('NS', coordinate[1], opt_fractionDigits) + ' ' +\n degreesToStringHDMS('EW', coordinate[0], opt_fractionDigits);\n } else {\n return '';\n }\n}\n\n\n/**\n * Format a coordinate as a comma delimited string.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringXY(coord);\n * // out is now '8, 48'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringXY} from 'ol/coordinate';\n *\n * var coord = [7.85, 47.983333];\n * var out = toStringXY(coord, 1);\n * // out is now '7.8, 48.0'\n *\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n * @param {number=} opt_fractionDigits The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} XY.\n * @api\n */\nexport function toStringXY(coordinate, opt_fractionDigits) {\n return format(coordinate, '{x}, {y}', opt_fractionDigits);\n}\n","/**\n * @module ol/layer/VectorTileRenderType\n */\n\n/**\n * @enum {string}\n * Render mode for vector tiles:\n * * `'image'`: Vector tiles are rendered as images. Great performance, but\n * point symbols and texts are always rotated with the view and pixels are\n * scaled during zoom animations.\n * * `'hybrid'`: Polygon and line elements are rendered as images, so pixels\n * are scaled during zoom animations. Point symbols and texts are accurately\n * rendered as vectors and can stay upright on rotated views.\n * * `'vector'`: Vector tiles are rendered as vectors. Most accurate rendering\n * even during animations, but slower performance than the other options.\n * @api\n */\nexport default {\n IMAGE: 'image',\n HYBRID: 'hybrid',\n VECTOR: 'vector'\n};\n","/**\n * @module ol/geom/Point\n */\nimport {createOrUpdateFromCoordinate, containsXY} from '../extent.js';\nimport GeometryType from '../geom/GeometryType.js';\nimport SimpleGeometry from '../geom/SimpleGeometry.js';\nimport {deflateCoordinate} from '../geom/flat/deflate.js';\nimport {squaredDistance as squaredDx} from '../math.js';\n\n/**\n * @classdesc\n * Point geometry.\n *\n * @api\n */\nclass Point extends SimpleGeometry {\n\n /**\n * @param {module:ol/coordinate~Coordinate} coordinates Coordinates.\n * @param {module:ol/geom/GeometryLayout=} opt_layout Layout.\n */\n constructor(coordinates, opt_layout) {\n super();\n this.setCoordinates(coordinates, opt_layout);\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!module:ol/geom/Point} Clone.\n * @override\n * @api\n */\n clone() {\n const point = new Point(this.flatCoordinates.slice(), this.layout);\n return point;\n }\n\n /**\n * @inheritDoc\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n const flatCoordinates = this.flatCoordinates;\n const squaredDistance = squaredDx(x, y, flatCoordinates[0], flatCoordinates[1]);\n if (squaredDistance < minSquaredDistance) {\n const stride = this.stride;\n for (let i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[i];\n }\n closestPoint.length = stride;\n return squaredDistance;\n } else {\n return minSquaredDistance;\n }\n }\n\n /**\n * Return the coordinate of the point.\n * @return {module:ol/coordinate~Coordinate} Coordinates.\n * @override\n * @api\n */\n getCoordinates() {\n return !this.flatCoordinates ? [] : this.flatCoordinates.slice();\n }\n\n /**\n * @inheritDoc\n */\n computeExtent(extent) {\n return createOrUpdateFromCoordinate(this.flatCoordinates, extent);\n }\n\n /**\n * @inheritDoc\n * @api\n */\n getType() {\n return GeometryType.POINT;\n }\n\n /**\n * @inheritDoc\n * @api\n */\n intersectsExtent(extent) {\n return containsXY(extent, this.flatCoordinates[0], this.flatCoordinates[1]);\n }\n\n /**\n * @inheritDoc\n * @api\n */\n setCoordinates(coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 0);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinate(\n this.flatCoordinates, 0, coordinates, this.stride);\n this.changed();\n }\n}\n\n\nexport default Point;\n","/**\n * @module ol/layer/Layer\n */\nimport {listen, unlistenByKey} from '../events.js';\nimport EventType from '../events/EventType.js';\nimport {getUid} from '../util.js';\nimport {getChangeEventType} from '../Object.js';\nimport BaseLayer from '../layer/Base.js';\nimport LayerProperty from '../layer/Property.js';\nimport {assign} from '../obj.js';\nimport RenderEventType from '../render/EventType.js';\nimport SourceState from '../source/State.js';\n\n\n/**\n * @typedef {Object} Options\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {module:ol/extent~Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex=0] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {module:ol/source/Source} [source] Source for this layer. If not provided to the constructor,\n * the source can be set by calling {@link module:ol/layer/Layer#setSource layer.setSource(source)} after\n * construction.\n */\n\n\n/**\n * @typedef {Object} State\n * @property {module:ol/layer/Layer} layer\n * @property {number} opacity\n * @property {module:ol/source/Source~State} sourceState\n * @property {boolean} visible\n * @property {boolean} managed\n * @property {module:ol/extent~Extent} [extent]\n * @property {number} zIndex\n * @property {number} maxResolution\n * @property {number} minResolution\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * A visual representation of raster or vector map data.\n * Layers group together those properties that pertain to how the data is to be\n * displayed, irrespective of the source of that data.\n *\n * Layers are usually added to a map with {@link module:ol/Map#addLayer}. Components\n * like {@link module:ol/interaction/Select~Select} use unmanaged layers\n * internally. These unmanaged layers are associated with the map using\n * {@link module:ol/layer/Layer~Layer#setMap} instead.\n *\n * A generic `change` event is fired when the state of the source changes.\n *\n * @fires module:ol/render/Event~RenderEvent\n */\nclass Layer extends BaseLayer {\n /**\n * @param {module:ol/layer/Layer~Options} options Layer options.\n */\n constructor(options) {\n\n const baseOptions = assign({}, options);\n delete baseOptions.source;\n\n super(baseOptions);\n\n /**\n * @private\n * @type {?module:ol/events~EventsKey}\n */\n this.mapPrecomposeKey_ = null;\n\n /**\n * @private\n * @type {?module:ol/events~EventsKey}\n */\n this.mapRenderKey_ = null;\n\n /**\n * @private\n * @type {?module:ol/events~EventsKey}\n */\n this.sourceChangeKey_ = null;\n\n if (options.map) {\n this.setMap(options.map);\n }\n\n listen(this,\n getChangeEventType(LayerProperty.SOURCE),\n this.handleSourcePropertyChange_, this);\n\n const source = options.source ? options.source : null;\n this.setSource(source);\n }\n\n /**\n * @inheritDoc\n */\n getLayersArray(opt_array) {\n const array = opt_array ? opt_array : [];\n array.push(this);\n return array;\n }\n\n /**\n * @inheritDoc\n */\n getLayerStatesArray(opt_states) {\n const states = opt_states ? opt_states : [];\n states.push(this.getLayerState());\n return states;\n }\n\n /**\n * Get the layer source.\n * @return {module:ol/source/Source} The layer source (or `null` if not yet set).\n * @observable\n * @api\n */\n getSource() {\n const source = this.get(LayerProperty.SOURCE);\n return (\n /** @type {module:ol/source/Source} */ (source) || null\n );\n }\n\n /**\n * @inheritDoc\n */\n getSourceState() {\n const source = this.getSource();\n return !source ? SourceState.UNDEFINED : source.getState();\n }\n\n /**\n * @private\n */\n handleSourceChange_() {\n this.changed();\n }\n\n /**\n * @private\n */\n handleSourcePropertyChange_() {\n if (this.sourceChangeKey_) {\n unlistenByKey(this.sourceChangeKey_);\n this.sourceChangeKey_ = null;\n }\n const source = this.getSource();\n if (source) {\n this.sourceChangeKey_ = listen(source,\n EventType.CHANGE, this.handleSourceChange_, this);\n }\n this.changed();\n }\n\n /**\n * Sets the layer to be rendered on top of other layers on a map. The map will\n * not manage this layer in its layers collection, and the callback in\n * {@link module:ol/Map#forEachLayerAtPixel} will receive `null` as layer. This\n * is useful for temporary layers. To remove an unmanaged layer from the map,\n * use `#setMap(null)`.\n *\n * To add the layer to a map and have it managed by the map, use\n * {@link module:ol/Map#addLayer} instead.\n * @param {module:ol/PluggableMap} map Map.\n * @api\n */\n setMap(map) {\n if (this.mapPrecomposeKey_) {\n unlistenByKey(this.mapPrecomposeKey_);\n this.mapPrecomposeKey_ = null;\n }\n if (!map) {\n this.changed();\n }\n if (this.mapRenderKey_) {\n unlistenByKey(this.mapRenderKey_);\n this.mapRenderKey_ = null;\n }\n if (map) {\n this.mapPrecomposeKey_ = listen(map, RenderEventType.PRECOMPOSE, function(evt) {\n const layerState = this.getLayerState();\n layerState.managed = false;\n if (this.getZIndex() === undefined) {\n layerState.zIndex = Infinity;\n }\n evt.frameState.layerStatesArray.push(layerState);\n evt.frameState.layerStates[getUid(this)] = layerState;\n }, this);\n this.mapRenderKey_ = listen(this, EventType.CHANGE, map.render, map);\n this.changed();\n }\n }\n\n /**\n * Set the layer source.\n * @param {module:ol/source/Source} source The layer source.\n * @observable\n * @api\n */\n setSource(source) {\n this.set(LayerProperty.SOURCE, source);\n }\n}\n\n\n/**\n * Return `true` if the layer is visible, and if the passed resolution is\n * between the layer's minResolution and maxResolution. The comparison is\n * inclusive for `minResolution` and exclusive for `maxResolution`.\n * @param {module:ol/layer/Layer~State} layerState Layer state.\n * @param {number} resolution Resolution.\n * @return {boolean} The layer is visible at the given resolution.\n */\nexport function visibleAtResolution(layerState, resolution) {\n return layerState.visible && resolution >= layerState.minResolution &&\n resolution < layerState.maxResolution;\n}\n\n\nexport default Layer;\n","/**\n * @module ol/style/Fill\n */\nimport {getUid} from '../util.js';\nimport {asString} from '../color.js';\n\n\n/**\n * @typedef {Object} Options\n * @property {module:ol/color~Color|module:ol/colorlike~ColorLike} [color] A color, gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.\n * Default null; if null, the Canvas/renderer default black will be used.\n */\n\n\n/**\n * @classdesc\n * Set fill style for vector features.\n * @api\n */\nclass Fill {\n /**\n * @param {module:ol/style/Fill~Options=} opt_options Options.\n */\n constructor(opt_options) {\n\n const options = opt_options || {};\n\n /**\n * @private\n * @type {module:ol/color~Color|module:ol/colorlike~ColorLike}\n */\n this.color_ = options.color !== undefined ? options.color : null;\n\n /**\n * @private\n * @type {string|undefined}\n */\n this.checksum_ = undefined;\n }\n\n /**\n * Clones the style. The color is not cloned if it is an {@link module:ol/colorlike~ColorLike}.\n * @return {module:ol/style/Fill} The cloned style.\n * @api\n */\n clone() {\n const color = this.getColor();\n return new Fill({\n color: (color && color.slice) ? color.slice() : color || undefined\n });\n }\n\n /**\n * Get the fill color.\n * @return {module:ol/color~Color|module:ol/colorlike~ColorLike} Color.\n * @api\n */\n getColor() {\n return this.color_;\n }\n\n /**\n * Set the color.\n *\n * @param {module:ol/color~Color|module:ol/colorlike~ColorLike} color Color.\n * @api\n */\n setColor(color) {\n this.color_ = color;\n this.checksum_ = undefined;\n }\n\n /**\n * @return {string} The checksum.\n */\n getChecksum() {\n if (this.checksum_ === undefined) {\n if (\n this.color_ instanceof CanvasPattern ||\n this.color_ instanceof CanvasGradient\n ) {\n this.checksum_ = getUid(this.color_).toString();\n } else {\n this.checksum_ = 'f' + (this.color_ ? asString(this.color_) : '-');\n }\n }\n\n return this.checksum_;\n }\n}\n\nexport default Fill;\n","/**\n * @module ol/ObjectEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when a property is changed.\n * @event module:ol/Object~ObjectEvent#propertychange\n * @api\n */\n PROPERTYCHANGE: 'propertychange'\n};\n","/**\n * @module ol/format/FormatType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n ARRAY_BUFFER: 'arraybuffer',\n JSON: 'json',\n TEXT: 'text',\n XML: 'xml'\n};\n","/**\n * @module ol/rotationconstraint\n */\nimport {toRadians} from './math.js';\n\n\n/**\n * @typedef {function((number|undefined), number): (number|undefined)} Type\n */\n\n\n/**\n * @param {number|undefined} rotation Rotation.\n * @param {number} delta Delta.\n * @return {number|undefined} Rotation.\n */\nexport function disable(rotation, delta) {\n if (rotation !== undefined) {\n return 0;\n } else {\n return undefined;\n }\n}\n\n\n/**\n * @param {number|undefined} rotation Rotation.\n * @param {number} delta Delta.\n * @return {number|undefined} Rotation.\n */\nexport function none(rotation, delta) {\n if (rotation !== undefined) {\n return rotation + delta;\n } else {\n return undefined;\n }\n}\n\n\n/**\n * @param {number} n N.\n * @return {module:ol/rotationconstraint~Type} Rotation constraint.\n */\nexport function createSnapToN(n) {\n const theta = 2 * Math.PI / n;\n return (\n /**\n * @param {number|undefined} rotation Rotation.\n * @param {number} delta Delta.\n * @return {number|undefined} Rotation.\n */\n function(rotation, delta) {\n if (rotation !== undefined) {\n rotation = Math.floor((rotation + delta) / theta + 0.5) * theta;\n return rotation;\n } else {\n return undefined;\n }\n });\n}\n\n\n/**\n * @param {number=} opt_tolerance Tolerance.\n * @return {module:ol/rotationconstraint~Type} Rotation constraint.\n */\nexport function createSnapToZero(opt_tolerance) {\n const tolerance = opt_tolerance || toRadians(5);\n return (\n /**\n * @param {number|undefined} rotation Rotation.\n * @param {number} delta Delta.\n * @return {number|undefined} Rotation.\n */\n function(rotation, delta) {\n if (rotation !== undefined) {\n if (Math.abs(rotation + delta) <= tolerance) {\n return 0;\n } else {\n return rotation + delta;\n }\n } else {\n return undefined;\n }\n });\n}\n","/**\n * @module ol/geom/flat/reverse\n */\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n */\nexport function coordinates(flatCoordinates, offset, end, stride) {\n while (offset < end - stride) {\n for (let i = 0; i < stride; ++i) {\n const tmp = flatCoordinates[offset + i];\n flatCoordinates[offset + i] = flatCoordinates[end - stride + i];\n flatCoordinates[end - stride + i] = tmp;\n }\n offset += stride;\n end -= stride;\n }\n}\n","/**\n * @module ol/geom/flat/orient\n */\nimport {coordinates as reverseCoordinates} from '../flat/reverse.js';\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {boolean} Is clockwise.\n */\nexport function linearRingIsClockwise(flatCoordinates, offset, end, stride) {\n // http://tinyurl.com/clockwise-method\n // https://github.com/OSGeo/gdal/blob/trunk/gdal/ogr/ogrlinearring.cpp\n let edge = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n edge += (x2 - x1) * (y2 + y1);\n x1 = x2;\n y1 = y2;\n }\n return edge > 0;\n}\n\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `opt_right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean=} opt_right Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingIsOriented(flatCoordinates, offset, ends, stride, opt_right) {\n const right = opt_right !== undefined ? opt_right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates, offset, end, stride);\n if (i === 0) {\n if ((right && isClockwise) || (!right && !isClockwise)) {\n return false;\n }\n } else {\n if ((right && !isClockwise) || (!right && isClockwise)) {\n return false;\n }\n }\n offset = end;\n }\n return true;\n}\n\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `opt_right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean=} opt_right Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingsAreOriented(flatCoordinates, offset, endss, stride, opt_right) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n if (!linearRingIsOriented(\n flatCoordinates, offset, endss[i], stride, opt_right)) {\n return false;\n }\n }\n return true;\n}\n\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `opt_right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {boolean=} opt_right Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRings(flatCoordinates, offset, ends, stride, opt_right) {\n const right = opt_right !== undefined ? opt_right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates, offset, end, stride);\n const reverse = i === 0 ?\n (right && isClockwise) || (!right && !isClockwise) :\n (right && !isClockwise) || (!right && isClockwise);\n if (reverse) {\n reverseCoordinates(flatCoordinates, offset, end, stride);\n }\n offset = end;\n }\n return offset;\n}\n\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `opt_right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean=} opt_right Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRingsArray(flatCoordinates, offset, endss, stride, opt_right) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n offset = orientLinearRings(\n flatCoordinates, offset, endss[i], stride, opt_right);\n }\n return offset;\n}\n","/**\n * @module ol/style/Stroke\n */\nimport {getUid} from '../util.js';\n\n\n/**\n * @typedef {Object} Options\n * @property {module:ol/color~Color|module:ol/colorlike~ColorLike} [color] A color, gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.\n * Default null; if null, the Canvas/renderer default black will be used.\n * @property {string} [lineCap='round'] Line cap style: `butt`, `round`, or `square`.\n * @property {string} [lineJoin='round'] Line join style: `bevel`, `round`, or `miter`.\n * @property {Array} [lineDash] Line dash pattern. Default is `undefined` (no dash).\n * Please note that Internet Explorer 10 and lower do not support the `setLineDash` method on\n * the `CanvasRenderingContext2D` and therefore this option will have no visual effect in these browsers.\n * @property {number} [lineDashOffset=0] Line dash offset.\n * @property {number} [miterLimit=10] Miter limit.\n * @property {number} [width] Width.\n */\n\n\n/**\n * @classdesc\n * Set stroke style for vector features.\n * Note that the defaults given are the Canvas defaults, which will be used if\n * option is not defined. The `get` functions return whatever was entered in\n * the options; they will not return the default.\n * @api\n */\nclass Stroke {\n /**\n * @param {module:ol/style/Stroke~Options=} opt_options Options.\n */\n constructor(opt_options) {\n\n const options = opt_options || {};\n\n /**\n * @private\n * @type {module:ol/color~Color|module:ol/colorlike~ColorLike}\n */\n this.color_ = options.color !== undefined ? options.color : null;\n\n /**\n * @private\n * @type {string|undefined}\n */\n this.lineCap_ = options.lineCap;\n\n /**\n * @private\n * @type {Array}\n */\n this.lineDash_ = options.lineDash !== undefined ? options.lineDash : null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lineDashOffset_ = options.lineDashOffset;\n\n /**\n * @private\n * @type {string|undefined}\n */\n this.lineJoin_ = options.lineJoin;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.miterLimit_ = options.miterLimit;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.width_ = options.width;\n\n /**\n * @private\n * @type {string|undefined}\n */\n this.checksum_ = undefined;\n }\n\n /**\n * Clones the style.\n * @return {module:ol/style/Stroke} The cloned style.\n * @api\n */\n clone() {\n const color = this.getColor();\n return new Stroke({\n color: (color && color.slice) ? color.slice() : color || undefined,\n lineCap: this.getLineCap(),\n lineDash: this.getLineDash() ? this.getLineDash().slice() : undefined,\n lineDashOffset: this.getLineDashOffset(),\n lineJoin: this.getLineJoin(),\n miterLimit: this.getMiterLimit(),\n width: this.getWidth()\n });\n }\n\n /**\n * Get the stroke color.\n * @return {module:ol/color~Color|module:ol/colorlike~ColorLike} Color.\n * @api\n */\n getColor() {\n return this.color_;\n }\n\n /**\n * Get the line cap type for the stroke.\n * @return {string|undefined} Line cap.\n * @api\n */\n getLineCap() {\n return this.lineCap_;\n }\n\n /**\n * Get the line dash style for the stroke.\n * @return {Array} Line dash.\n * @api\n */\n getLineDash() {\n return this.lineDash_;\n }\n\n /**\n * Get the line dash offset for the stroke.\n * @return {number|undefined} Line dash offset.\n * @api\n */\n getLineDashOffset() {\n return this.lineDashOffset_;\n }\n\n /**\n * Get the line join type for the stroke.\n * @return {string|undefined} Line join.\n * @api\n */\n getLineJoin() {\n return this.lineJoin_;\n }\n\n /**\n * Get the miter limit for the stroke.\n * @return {number|undefined} Miter limit.\n * @api\n */\n getMiterLimit() {\n return this.miterLimit_;\n }\n\n /**\n * Get the stroke width.\n * @return {number|undefined} Width.\n * @api\n */\n getWidth() {\n return this.width_;\n }\n\n /**\n * Set the color.\n *\n * @param {module:ol/color~Color|module:ol/colorlike~ColorLike} color Color.\n * @api\n */\n setColor(color) {\n this.color_ = color;\n this.checksum_ = undefined;\n }\n\n /**\n * Set the line cap.\n *\n * @param {string|undefined} lineCap Line cap.\n * @api\n */\n setLineCap(lineCap) {\n this.lineCap_ = lineCap;\n this.checksum_ = undefined;\n }\n\n /**\n * Set the line dash.\n *\n * Please note that Internet Explorer 10 and lower [do not support][mdn] the\n * `setLineDash` method on the `CanvasRenderingContext2D` and therefore this\n * property will have no visual effect in these browsers.\n *\n * [mdn]: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility\n *\n * @param {Array} lineDash Line dash.\n * @api\n */\n setLineDash(lineDash) {\n this.lineDash_ = lineDash;\n this.checksum_ = undefined;\n }\n\n /**\n * Set the line dash offset.\n *\n * @param {number|undefined} lineDashOffset Line dash offset.\n * @api\n */\n setLineDashOffset(lineDashOffset) {\n this.lineDashOffset_ = lineDashOffset;\n this.checksum_ = undefined;\n }\n\n /**\n * Set the line join.\n *\n * @param {string|undefined} lineJoin Line join.\n * @api\n */\n setLineJoin(lineJoin) {\n this.lineJoin_ = lineJoin;\n this.checksum_ = undefined;\n }\n\n /**\n * Set the miter limit.\n *\n * @param {number|undefined} miterLimit Miter limit.\n * @api\n */\n setMiterLimit(miterLimit) {\n this.miterLimit_ = miterLimit;\n this.checksum_ = undefined;\n }\n\n /**\n * Set the width.\n *\n * @param {number|undefined} width Width.\n * @api\n */\n setWidth(width) {\n this.width_ = width;\n this.checksum_ = undefined;\n }\n\n /**\n * @return {string} The checksum.\n */\n getChecksum() {\n if (this.checksum_ === undefined) {\n this.checksum_ = 's';\n if (this.color_) {\n if (typeof this.color_ === 'string') {\n this.checksum_ += this.color_;\n } else {\n this.checksum_ += getUid(this.color_).toString();\n }\n } else {\n this.checksum_ += '-';\n }\n this.checksum_ += ',' +\n (this.lineCap_ !== undefined ?\n this.lineCap_.toString() : '-') + ',' +\n (this.lineDash_ ?\n this.lineDash_.toString() : '-') + ',' +\n (this.lineDashOffset_ !== undefined ?\n this.lineDashOffset_ : '-') + ',' +\n (this.lineJoin_ !== undefined ?\n this.lineJoin_ : '-') + ',' +\n (this.miterLimit_ !== undefined ?\n this.miterLimit_.toString() : '-') + ',' +\n (this.width_ !== undefined ?\n this.width_.toString() : '-');\n }\n\n return this.checksum_;\n }\n}\n\nexport default Stroke;\n","/**\n * @module ol/proj/Projection\n */\nimport {METERS_PER_UNIT} from '../proj/Units.js';\n\n\n/**\n * @typedef {Object} Options\n * @property {string} code The SRS identifier code, e.g. `EPSG:4326`.\n * @property {module:ol/proj/Units|string} [units] Units. Required unless a\n * proj4 projection is defined for `code`.\n * @property {module:ol/extent~Extent} [extent] The validity extent for the SRS.\n * @property {string} [axisOrientation='enu'] The axis orientation as specified in Proj4.\n * @property {boolean} [global=false] Whether the projection is valid for the whole globe.\n * @property {number} [metersPerUnit] The meters per unit for the SRS.\n * If not provided, the `units` are used to get the meters per unit from the {@link module:ol/proj/Units~METERS_PER_UNIT}\n * lookup table.\n * @property {module:ol/extent~Extent} [worldExtent] The world extent for the SRS.\n * @property {function(number, module:ol/coordinate~Coordinate):number} [getPointResolution]\n * Function to determine resolution at a point. The function is called with a\n * `{number}` view resolution and an `{module:ol/coordinate~Coordinate}` as arguments, and returns\n * the `{number}` resolution at the passed coordinate. If this is `undefined`,\n * the default {@link module:ol/proj#getPointResolution} function will be used.\n */\n\n\n/**\n * @classdesc\n * Projection definition class. One of these is created for each projection\n * supported in the application and stored in the {@link module:ol/proj} namespace.\n * You can use these in applications, but this is not required, as API params\n * and options use {@link module:ol/proj~ProjectionLike} which means the simple string\n * code will suffice.\n *\n * You can use {@link module:ol/proj~get} to retrieve the object for a particular\n * projection.\n *\n * The library includes definitions for `EPSG:4326` and `EPSG:3857`, together\n * with the following aliases:\n * * `EPSG:4326`: CRS:84, urn:ogc:def:crs:EPSG:6.6:4326,\n * urn:ogc:def:crs:OGC:1.3:CRS84, urn:ogc:def:crs:OGC:2:84,\n * http://www.opengis.net/gml/srs/epsg.xml#4326,\n * urn:x-ogc:def:crs:EPSG:4326\n * * `EPSG:3857`: EPSG:102100, EPSG:102113, EPSG:900913,\n * urn:ogc:def:crs:EPSG:6.18:3:3857,\n * http://www.opengis.net/gml/srs/epsg.xml#3857\n *\n * If you use [proj4js](https://github.com/proj4js/proj4js), aliases can\n * be added using `proj4.defs()`. After all required projection definitions are\n * added, call the {@link module:ol/proj/proj4~register} function.\n *\n * @api\n */\nclass Projection {\n\n /**\n * @param {module:ol/proj/Projection~Options} options Projection options.\n */\n constructor(options) {\n /**\n * @private\n * @type {string}\n */\n this.code_ = options.code;\n\n /**\n * Units of projected coordinates. When set to `TILE_PIXELS`, a\n * `this.extent_` and `this.worldExtent_` must be configured properly for each\n * tile.\n * @private\n * @type {module:ol/proj/Units}\n */\n this.units_ = /** @type {module:ol/proj/Units} */ (options.units);\n\n /**\n * Validity extent of the projection in projected coordinates. For projections\n * with `TILE_PIXELS` units, this is the extent of the tile in\n * tile pixel space.\n * @private\n * @type {module:ol/extent~Extent}\n */\n this.extent_ = options.extent !== undefined ? options.extent : null;\n\n /**\n * Extent of the world in EPSG:4326. For projections with\n * `TILE_PIXELS` units, this is the extent of the tile in\n * projected coordinate space.\n * @private\n * @type {module:ol/extent~Extent}\n */\n this.worldExtent_ = options.worldExtent !== undefined ?\n options.worldExtent : null;\n\n /**\n * @private\n * @type {string}\n */\n this.axisOrientation_ = options.axisOrientation !== undefined ?\n options.axisOrientation : 'enu';\n\n /**\n * @private\n * @type {boolean}\n */\n this.global_ = options.global !== undefined ? options.global : false;\n\n /**\n * @private\n * @type {boolean}\n */\n this.canWrapX_ = !!(this.global_ && this.extent_);\n\n /**\n * @private\n * @type {function(number, module:ol/coordinate~Coordinate):number|undefined}\n */\n this.getPointResolutionFunc_ = options.getPointResolution;\n\n /**\n * @private\n * @type {module:ol/tilegrid/TileGrid}\n */\n this.defaultTileGrid_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.metersPerUnit_ = options.metersPerUnit;\n }\n\n /**\n * @return {boolean} The projection is suitable for wrapping the x-axis\n */\n canWrapX() {\n return this.canWrapX_;\n }\n\n /**\n * Get the code for this projection, e.g. 'EPSG:4326'.\n * @return {string} Code.\n * @api\n */\n getCode() {\n return this.code_;\n }\n\n /**\n * Get the validity extent for this projection.\n * @return {module:ol/extent~Extent} Extent.\n * @api\n */\n getExtent() {\n return this.extent_;\n }\n\n /**\n * Get the units of this projection.\n * @return {module:ol/proj/Units} Units.\n * @api\n */\n getUnits() {\n return this.units_;\n }\n\n /**\n * Get the amount of meters per unit of this projection. If the projection is\n * not configured with `metersPerUnit` or a units identifier, the return is\n * `undefined`.\n * @return {number|undefined} Meters.\n * @api\n */\n getMetersPerUnit() {\n return this.metersPerUnit_ || METERS_PER_UNIT[this.units_];\n }\n\n /**\n * Get the world extent for this projection.\n * @return {module:ol/extent~Extent} Extent.\n * @api\n */\n getWorldExtent() {\n return this.worldExtent_;\n }\n\n /**\n * Get the axis orientation of this projection.\n * Example values are:\n * enu - the default easting, northing, elevation.\n * neu - northing, easting, up - useful for \"lat/long\" geographic coordinates,\n * or south orientated transverse mercator.\n * wnu - westing, northing, up - some planetary coordinate systems have\n * \"west positive\" coordinate systems\n * @return {string} Axis orientation.\n * @api\n */\n getAxisOrientation() {\n return this.axisOrientation_;\n }\n\n /**\n * Is this projection a global projection which spans the whole world?\n * @return {boolean} Whether the projection is global.\n * @api\n */\n isGlobal() {\n return this.global_;\n }\n\n /**\n * Set if the projection is a global projection which spans the whole world\n * @param {boolean} global Whether the projection is global.\n * @api\n */\n setGlobal(global) {\n this.global_ = global;\n this.canWrapX_ = !!(global && this.extent_);\n }\n\n /**\n * @return {module:ol/tilegrid/TileGrid} The default tile grid.\n */\n getDefaultTileGrid() {\n return this.defaultTileGrid_;\n }\n\n /**\n * @param {module:ol/tilegrid/TileGrid} tileGrid The default tile grid.\n */\n setDefaultTileGrid(tileGrid) {\n this.defaultTileGrid_ = tileGrid;\n }\n\n /**\n * Set the validity extent for this projection.\n * @param {module:ol/extent~Extent} extent Extent.\n * @api\n */\n setExtent(extent) {\n this.extent_ = extent;\n this.canWrapX_ = !!(this.global_ && extent);\n }\n\n /**\n * Set the world extent for this projection.\n * @param {module:ol/extent~Extent} worldExtent World extent\n * [minlon, minlat, maxlon, maxlat].\n * @api\n */\n setWorldExtent(worldExtent) {\n this.worldExtent_ = worldExtent;\n }\n\n /**\n * Set the getPointResolution function (see {@link module:ol/proj~getPointResolution}\n * for this projection.\n * @param {function(number, module:ol/coordinate~Coordinate):number} func Function\n * @api\n */\n setGetPointResolution(func) {\n this.getPointResolutionFunc_ = func;\n }\n\n /**\n * Get the custom point resolution function for this projection (if set).\n * @return {function(number, module:ol/coordinate~Coordinate):number|undefined} The custom point\n * resolution function (if set).\n */\n getPointResolutionFunc() {\n return this.getPointResolutionFunc_;\n }\n}\n\nexport default Projection;\n","/**\n * @module ol/geom/flat/interpolate\n */\nimport {binarySearch} from '../../array.js';\nimport {lerp} from '../../math.js';\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} fraction Fraction.\n * @param {Array=} opt_dest Destination.\n * @return {Array} Destination.\n */\nexport function interpolatePoint(flatCoordinates, offset, end, stride, fraction, opt_dest) {\n let pointX = NaN;\n let pointY = NaN;\n const n = (end - offset) / stride;\n if (n === 1) {\n pointX = flatCoordinates[offset];\n pointY = flatCoordinates[offset + 1];\n } else if (n == 2) {\n pointX = (1 - fraction) * flatCoordinates[offset] +\n fraction * flatCoordinates[offset + stride];\n pointY = (1 - fraction) * flatCoordinates[offset + 1] +\n fraction * flatCoordinates[offset + stride + 1];\n } else if (n !== 0) {\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n let length = 0;\n const cumulativeLengths = [0];\n for (let i = offset + stride; i < end; i += stride) {\n const x2 = flatCoordinates[i];\n const y2 = flatCoordinates[i + 1];\n length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n cumulativeLengths.push(length);\n x1 = x2;\n y1 = y2;\n }\n const target = fraction * length;\n const index = binarySearch(cumulativeLengths, target);\n if (index < 0) {\n const t = (target - cumulativeLengths[-index - 2]) /\n (cumulativeLengths[-index - 1] - cumulativeLengths[-index - 2]);\n const o = offset + (-index - 2) * stride;\n pointX = lerp(\n flatCoordinates[o], flatCoordinates[o + stride], t);\n pointY = lerp(\n flatCoordinates[o + 1], flatCoordinates[o + stride + 1], t);\n } else {\n pointX = flatCoordinates[offset + index * stride];\n pointY = flatCoordinates[offset + index * stride + 1];\n }\n }\n if (opt_dest) {\n opt_dest[0] = pointX;\n opt_dest[1] = pointY;\n return opt_dest;\n } else {\n return [pointX, pointY];\n }\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @return {module:ol/coordinate~Coordinate} Coordinate.\n */\nexport function lineStringCoordinateAtM(flatCoordinates, offset, end, stride, m, extrapolate) {\n if (end == offset) {\n return null;\n }\n let coordinate;\n if (m < flatCoordinates[offset + stride - 1]) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(offset, offset + stride);\n coordinate[stride - 1] = m;\n return coordinate;\n } else {\n return null;\n }\n } else if (flatCoordinates[end - 1] < m) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(end - stride, end);\n coordinate[stride - 1] = m;\n return coordinate;\n } else {\n return null;\n }\n }\n // FIXME use O(1) search\n if (m == flatCoordinates[offset + stride - 1]) {\n return flatCoordinates.slice(offset, offset + stride);\n }\n let lo = offset / stride;\n let hi = end / stride;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (m < flatCoordinates[(mid + 1) * stride - 1]) {\n hi = mid;\n } else {\n lo = mid + 1;\n }\n }\n const m0 = flatCoordinates[lo * stride - 1];\n if (m == m0) {\n return flatCoordinates.slice((lo - 1) * stride, (lo - 1) * stride + stride);\n }\n const m1 = flatCoordinates[(lo + 1) * stride - 1];\n const t = (m - m0) / (m1 - m0);\n coordinate = [];\n for (let i = 0; i < stride - 1; ++i) {\n coordinate.push(lerp(flatCoordinates[(lo - 1) * stride + i],\n flatCoordinates[lo * stride + i], t));\n }\n coordinate.push(m);\n return coordinate;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @param {boolean} interpolate Interpolate.\n * @return {module:ol/coordinate~Coordinate} Coordinate.\n */\nexport function lineStringsCoordinateAtM(\n flatCoordinates, offset, ends, stride, m, extrapolate, interpolate) {\n if (interpolate) {\n return lineStringCoordinateAtM(\n flatCoordinates, offset, ends[ends.length - 1], stride, m, extrapolate);\n }\n let coordinate;\n if (m < flatCoordinates[stride - 1]) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(0, stride);\n coordinate[stride - 1] = m;\n return coordinate;\n } else {\n return null;\n }\n }\n if (flatCoordinates[flatCoordinates.length - 1] < m) {\n if (extrapolate) {\n coordinate = flatCoordinates.slice(flatCoordinates.length - stride);\n coordinate[stride - 1] = m;\n return coordinate;\n } else {\n return null;\n }\n }\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n if (offset == end) {\n continue;\n }\n if (m < flatCoordinates[offset + stride - 1]) {\n return null;\n } else if (m <= flatCoordinates[end - 1]) {\n return lineStringCoordinateAtM(\n flatCoordinates, offset, end, stride, m, false);\n }\n offset = end;\n }\n return null;\n}\n","function stringify (obj, options) {\n options = options || {}\n var indent = JSON.stringify([1], null, get(options, 'indent', 2)).slice(2, -3)\n var addMargin = get(options, 'margins', false)\n var maxLength = (indent === '' ? Infinity : get(options, 'maxLength', 80))\n\n return (function _stringify (obj, currentIndent, reserved) {\n if (obj && typeof obj.toJSON === 'function') {\n obj = obj.toJSON()\n }\n\n var string = JSON.stringify(obj)\n\n if (string === undefined) {\n return string\n }\n\n var length = maxLength - currentIndent.length - reserved\n\n if (string.length <= length) {\n var prettified = prettify(string, addMargin)\n if (prettified.length <= length) {\n return prettified\n }\n }\n\n if (typeof obj === 'object' && obj !== null) {\n var nextIndent = currentIndent + indent\n var items = []\n var delimiters\n var comma = function (array, index) {\n return (index === array.length - 1 ? 0 : 1)\n }\n\n if (Array.isArray(obj)) {\n for (var index = 0; index < obj.length; index++) {\n items.push(\n _stringify(obj[index], nextIndent, comma(obj, index)) || 'null'\n )\n }\n delimiters = '[]'\n } else {\n Object.keys(obj).forEach(function (key, index, array) {\n var keyPart = JSON.stringify(key) + ': '\n var value = _stringify(obj[key], nextIndent,\n keyPart.length + comma(array, index))\n if (value !== undefined) {\n items.push(keyPart + value)\n }\n })\n delimiters = '{}'\n }\n\n if (items.length > 0) {\n return [\n delimiters[0],\n indent + items.join(',\\n' + nextIndent),\n delimiters[1]\n ].join('\\n' + currentIndent)\n }\n }\n\n return string\n }(obj, '', 0))\n}\n\n// Note: This regex matches even invalid JSON strings, but since we’re\n// working on the output of `JSON.stringify` we know that only valid strings\n// are present (unless the user supplied a weird `options.indent` but in\n// that case we don’t care since the output would be invalid anyway).\nvar stringOrChar = /(\"(?:[^\\\\\"]|\\\\.)*\")|[:,\\][}{]/g\n\nfunction prettify (string, addMargin) {\n var m = addMargin ? ' ' : ''\n var tokens = {\n '{': '{' + m,\n '[': '[' + m,\n '}': m + '}',\n ']': m + ']',\n ',': ', ',\n ':': ': '\n }\n return string.replace(stringOrChar, function (match, string) {\n return string ? match : tokens[match]\n })\n}\n\nfunction get (options, name, defaultValue) {\n return (name in options ? options[name] : defaultValue)\n}\n\nmodule.exports = stringify\n","\nimport reference from './reference/latest.js';\nimport stringifyPretty from 'json-stringify-pretty-compact';\n\nfunction sortKeysBy(obj, reference) {\n const result = {};\n for (const key in reference) {\n if (obj[key] !== undefined) {\n result[key] = obj[key];\n }\n }\n for (const key in obj) {\n if (result[key] === undefined) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\n/**\n * Format a Mapbox GL Style. Returns a stringified style with its keys\n * sorted in the same order as the reference style.\n *\n * The optional `space` argument is passed to\n * [`JSON.stringify`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)\n * to generate formatted output.\n *\n * If `space` is unspecified, a default of `2` spaces will be used.\n *\n * @private\n * @param {Object} style a Mapbox GL Style\n * @param {number} [space] space argument to pass to `JSON.stringify`\n * @returns {string} stringified formatted JSON\n * @example\n * var fs = require('fs');\n * var format = require('mapbox-gl-style-spec').format;\n * var style = fs.readFileSync('./source.json', 'utf8');\n * fs.writeFileSync('./dest.json', format(style));\n * fs.writeFileSync('./dest.min.json', format(style, 0));\n */\nfunction format(style, space = 2) {\n style = sortKeysBy(style, reference.$root);\n\n if (style.layers) {\n style.layers = style.layers.map((layer) => sortKeysBy(layer, reference.layer));\n }\n\n return stringifyPretty(style, {indent: space});\n}\n\nexport default format;\n","/*! https://mths.be/punycode v1.3.2 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * http://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","'use strict';\n\nmodule.exports = {\n isString: function(arg) {\n return typeof(arg) === 'string';\n },\n isObject: function(arg) {\n return typeof(arg) === 'object' && arg !== null;\n },\n isNull: function(arg) {\n return arg === null;\n },\n isNullOrUndefined: function(arg) {\n return arg == null;\n }\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (Array.isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return Object.keys(obj).map(function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (Array.isArray(obj[k])) {\n return obj[k].map(function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n util.isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n","// @flow\n\nimport Reference from './reference/v8.json';\nimport type {StylePropertySpecification} from './style-spec';\nimport type {\n StyleSpecification,\n SourceSpecification,\n LayerSpecification,\n PropertyValueSpecification,\n DataDrivenPropertyValueSpecification\n} from './types';\n\nfunction getPropertyReference(propertyName): StylePropertySpecification {\n for (let i = 0; i < Reference.layout.length; i++) {\n for (const key in Reference[Reference.layout[i]]) {\n if (key === propertyName) return (Reference[Reference.layout[i]][key]: any);\n }\n }\n for (let i = 0; i < Reference.paint.length; i++) {\n for (const key in Reference[Reference.paint[i]]) {\n if (key === propertyName) return (Reference[Reference.paint[i]][key]: any);\n }\n }\n\n return (null: any);\n}\n\nexport function eachSource(style: StyleSpecification, callback: (SourceSpecification) => void) {\n for (const k in style.sources) {\n callback(style.sources[k]);\n }\n}\n\nexport function eachLayer(style: StyleSpecification, callback: (LayerSpecification) => void) {\n for (const layer of style.layers) {\n callback(layer);\n }\n}\n\ntype PropertyCallback = ({\n path: [string, 'paint' | 'layout', string], // [layerid, paint/layout, property key]\n key: string,\n value: PropertyValueSpecification | DataDrivenPropertyValueSpecification,\n reference: StylePropertySpecification,\n set: (PropertyValueSpecification | DataDrivenPropertyValueSpecification) => void\n}) => void;\n\nexport function eachProperty(\n style: StyleSpecification,\n options: {paint?: boolean, layout?: boolean},\n callback: PropertyCallback\n) {\n function inner(layer, propertyType: 'paint' | 'layout') {\n const properties = (layer[propertyType]: any);\n if (!properties) return;\n Object.keys(properties).forEach((key) => {\n callback({\n path: [layer.id, propertyType, key],\n key: key,\n value: properties[key],\n reference: getPropertyReference(key),\n set: function(x) {\n properties[key] = x;\n }\n });\n });\n }\n\n eachLayer(style, (layer) => {\n if (options.paint) {\n inner(layer, 'paint');\n }\n if (options.layout) {\n inner(layer, 'layout');\n }\n });\n}\n","\nimport URL from 'url';\nimport {eachSource, eachLayer, eachProperty} from '../visit';\n\nfunction eachLayout(layer, callback) {\n for (const k in layer) {\n if (k.indexOf('layout') === 0) {\n callback(layer[k], k);\n }\n }\n}\n\nfunction eachPaint(layer, callback) {\n for (const k in layer) {\n if (k.indexOf('paint') === 0) {\n callback(layer[k], k);\n }\n }\n}\n\nfunction resolveConstant(style, value) {\n if (typeof value === 'string' && value[0] === '@') {\n return resolveConstant(style, style.constants[value]);\n } else {\n return value;\n }\n}\n\nfunction isFunction(value) {\n return Array.isArray(value.stops);\n}\n\nfunction renameProperty(obj, from, to) {\n obj[to] = obj[from]; delete obj[from];\n}\n\nexport default function(style) {\n style.version = 8;\n\n // Rename properties, reverse coordinates in source and layers\n eachSource(style, (source) => {\n if (source.type === 'video' && source.url !== undefined) {\n renameProperty(source, 'url', 'urls');\n }\n if (source.type === 'video') {\n source.coordinates.forEach((coord) => {\n return coord.reverse();\n });\n }\n });\n\n eachLayer(style, (layer) => {\n eachLayout(layer, (layout) => {\n if (layout['symbol-min-distance'] !== undefined) {\n renameProperty(layout, 'symbol-min-distance', 'symbol-spacing');\n }\n });\n\n eachPaint(layer, (paint) => {\n if (paint['background-image'] !== undefined) {\n renameProperty(paint, 'background-image', 'background-pattern');\n }\n if (paint['line-image'] !== undefined) {\n renameProperty(paint, 'line-image', 'line-pattern');\n }\n if (paint['fill-image'] !== undefined) {\n renameProperty(paint, 'fill-image', 'fill-pattern');\n }\n });\n });\n\n // Inline Constants\n eachProperty(style, {paint: true, layout: true}, (property) => {\n const value = resolveConstant(style, property.value);\n\n if (isFunction(value)) {\n value.stops.forEach((stop) => {\n stop[1] = resolveConstant(style, stop[1]);\n });\n }\n\n property.set(value);\n });\n delete style.constants;\n\n eachLayer(style, (layer) => {\n // get rid of text-max-size, icon-max-size\n // turn text-size, icon-size into layout properties\n // https://github.com/mapbox/mapbox-gl-style-spec/issues/255\n\n eachLayout(layer, (layout) => {\n delete layout['text-max-size'];\n delete layout['icon-max-size'];\n });\n\n eachPaint(layer, (paint) => {\n if (paint['text-size']) {\n if (!layer.layout) layer.layout = {};\n layer.layout['text-size'] = paint['text-size'];\n delete paint['text-size'];\n }\n\n if (paint['icon-size']) {\n if (!layer.layout) layer.layout = {};\n layer.layout['icon-size'] = paint['icon-size'];\n delete paint['icon-size'];\n }\n });\n });\n\n function migrateFontstackURL(input) {\n const inputParsed = URL.parse(input);\n const inputPathnameParts = inputParsed.pathname.split('/');\n\n if (inputParsed.protocol !== 'mapbox:') {\n return input;\n\n } else if (inputParsed.hostname === 'fontstack') {\n assert(decodeURI(inputParsed.pathname) === '/{fontstack}/{range}.pbf');\n return 'mapbox://fonts/mapbox/{fontstack}/{range}.pbf';\n\n } else if (inputParsed.hostname === 'fonts') {\n assert(inputPathnameParts[1] === 'v1');\n assert(decodeURI(inputPathnameParts[3]) === '{fontstack}');\n assert(decodeURI(inputPathnameParts[4]) === '{range}.pbf');\n return `mapbox://fonts/${inputPathnameParts[2]}/{fontstack}/{range}.pbf`;\n\n } else {\n assert(false);\n }\n\n function assert(predicate) {\n if (!predicate) {\n throw new Error(`Invalid font url: \"${input}\"`);\n }\n }\n }\n\n if (style.glyphs) {\n style.glyphs = migrateFontstackURL(style.glyphs);\n }\n\n function migrateFontStack(font) {\n function splitAndTrim(string) {\n return string.split(',').map((s) => {\n return s.trim();\n });\n }\n\n if (Array.isArray(font)) {\n // Assume it's a previously migrated font-array.\n return font;\n\n } else if (typeof font === 'string') {\n return splitAndTrim(font);\n\n } else if (typeof font === 'object') {\n font.stops.forEach((stop) => {\n stop[1] = splitAndTrim(stop[1]);\n });\n return font;\n\n } else {\n throw new Error(\"unexpected font value\");\n }\n }\n\n eachLayer(style, (layer) => {\n eachLayout(layer, (layout) => {\n if (layout['text-font']) {\n layout['text-font'] = migrateFontStack(layout['text-font']);\n }\n });\n });\n\n // Reverse order of symbol layers. This is an imperfect migration.\n //\n // The order of a symbol layer in the layers list affects two things:\n // - how it is drawn relative to other layers (like oneway arrows below bridges)\n // - the placement priority compared to other layers\n //\n // It's impossible to reverse the placement priority without breaking the draw order\n // in some cases. This migration only reverses the order of symbol layers that\n // are above all other types of layers.\n //\n // Symbol layers that are at the top of the map preserve their priority.\n // Symbol layers that are below another type (line, fill) of layer preserve their draw order.\n\n let firstSymbolLayer = 0;\n for (let i = style.layers.length - 1; i >= 0; i--) {\n const layer = style.layers[i];\n if (layer.type !== 'symbol') {\n firstSymbolLayer = i + 1;\n break;\n }\n }\n\n const symbolLayers = style.layers.splice(firstSymbolLayer);\n symbolLayers.reverse();\n style.layers = style.layers.concat(symbolLayers);\n\n return style;\n}\n","\nexport default function (output, ...inputs) {\n for (const input of inputs) {\n for (const k in input) {\n output[k] = input[k];\n }\n }\n return output;\n}\n","// @flow\n\nclass ParsingError extends Error {\n key: string;\n message: string;\n constructor(key: string, message: string) {\n super(message);\n this.message = message;\n this.key = key;\n }\n}\n\nexport default ParsingError;\n","// @flow\n\nimport type {Expression} from './expression';\n\n/**\n * Tracks `let` bindings during expression parsing.\n * @private\n */\nclass Scope {\n parent: ?Scope;\n bindings: {[string]: Expression};\n constructor(parent?: Scope, bindings: Array<[string, Expression]> = []) {\n this.parent = parent;\n this.bindings = {};\n for (const [name, expression] of bindings) {\n this.bindings[name] = expression;\n }\n }\n\n concat(bindings: Array<[string, Expression]>) {\n return new Scope(this, bindings);\n }\n\n get(name: string): Expression {\n if (this.bindings[name]) { return this.bindings[name]; }\n if (this.parent) { return this.parent.get(name); }\n throw new Error(`${name} not found in scope.`);\n }\n\n has(name: string): boolean {\n if (this.bindings[name]) return true;\n return this.parent ? this.parent.has(name) : false;\n }\n}\n\nexport default Scope;\n","// @flow\n\nexport type NullTypeT = { kind: 'null' };\nexport type NumberTypeT = { kind: 'number' };\nexport type StringTypeT = { kind: 'string' };\nexport type BooleanTypeT = { kind: 'boolean' };\nexport type ColorTypeT = { kind: 'color' };\nexport type ObjectTypeT = { kind: 'object' };\nexport type ValueTypeT = { kind: 'value' };\nexport type ErrorTypeT = { kind: 'error' };\nexport type CollatorTypeT = { kind: 'collator' };\nexport type FormattedTypeT = { kind: 'formatted' };\n\nexport type Type =\n NullTypeT |\n NumberTypeT |\n StringTypeT |\n BooleanTypeT |\n ColorTypeT |\n ObjectTypeT |\n ValueTypeT |\n ArrayType | // eslint-disable-line no-use-before-define\n ErrorTypeT |\n CollatorTypeT |\n FormattedTypeT\n\nexport type ArrayType = {\n kind: 'array',\n itemType: Type,\n N: ?number\n}\n\nexport const NullType = { kind: 'null' };\nexport const NumberType = { kind: 'number' };\nexport const StringType = { kind: 'string' };\nexport const BooleanType = { kind: 'boolean' };\nexport const ColorType = { kind: 'color' };\nexport const ObjectType = { kind: 'object' };\nexport const ValueType = { kind: 'value' };\nexport const ErrorType = { kind: 'error' };\nexport const CollatorType = { kind: 'collator' };\nexport const FormattedType = { kind: 'formatted' };\n\nexport function array(itemType: Type, N: ?number): ArrayType {\n return {\n kind: 'array',\n itemType,\n N\n };\n}\n\nexport function toString(type: Type): string {\n if (type.kind === 'array') {\n const itemType = toString(type.itemType);\n return typeof type.N === 'number' ?\n `array<${itemType}, ${type.N}>` :\n type.itemType.kind === 'value' ? 'array' : `array<${itemType}>`;\n } else {\n return type.kind;\n }\n}\n\nconst valueMemberTypes = [\n NullType,\n NumberType,\n StringType,\n BooleanType,\n ColorType,\n FormattedType,\n ObjectType,\n array(ValueType)\n];\n\n/**\n * Returns null if `t` is a subtype of `expected`; otherwise returns an\n * error message.\n * @private\n */\nexport function checkSubtype(expected: Type, t: Type): ?string {\n if (t.kind === 'error') {\n // Error is a subtype of every type\n return null;\n } else if (expected.kind === 'array') {\n if (t.kind === 'array' &&\n ((t.N === 0 && t.itemType.kind === 'value') || !checkSubtype(expected.itemType, t.itemType)) &&\n (typeof expected.N !== 'number' || expected.N === t.N)) {\n return null;\n }\n } else if (expected.kind === t.kind) {\n return null;\n } else if (expected.kind === 'value') {\n for (const memberType of valueMemberTypes) {\n if (!checkSubtype(memberType, t)) {\n return null;\n }\n }\n }\n\n return `Expected ${toString(expected)} but found ${toString(t)} instead.`;\n}\n","// (c) Dean McNamee , 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n \"rebeccapurple\": [102,51,153,1],\n \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) { // Clamp to integer 0 .. 255.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) { // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) { // int or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_byte(parseFloat(str) / 100 * 255);\n return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) { // float or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_float(parseFloat(str) / 100);\n return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n if (h < 0) h += 1;\n else if (h > 1) h -= 1;\n\n if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n if (h * 2 < 1) return m2;\n if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n return m1;\n}\n\nfunction parseCSSColor(css_str) {\n // Remove all whitespace, not compliant, but should just be more accepting.\n var str = css_str.replace(/ /g, '').toLowerCase();\n\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable) return kCSSColorTable[str].slice(); // dup.\n\n // #abc and #abc123 syntax.\n if (str[0] === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xfff)) return null; // Covers NaN.\n return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n (iv & 0xf0) | ((iv & 0xf0) >> 4),\n (iv & 0xf) | ((iv & 0xf) << 4),\n 1];\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xffffff)) return null; // Covers NaN.\n return [(iv & 0xff0000) >> 16,\n (iv & 0xff00) >> 8,\n iv & 0xff,\n 1];\n }\n\n return null;\n }\n\n var op = str.indexOf('('), ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op+1, ep-(op+1)).split(',');\n var alpha = 1; // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'rgb':\n if (params.length !== 3) return null;\n return [parse_css_int(params[0]),\n parse_css_int(params[1]),\n parse_css_int(params[2]),\n alpha];\n case 'hsla':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'hsl':\n if (params.length !== 3) return null;\n var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360; // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n var s = parse_css_float(params[1]);\n var l = parse_css_float(params[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n alpha];\n default:\n return null;\n }\n }\n\n return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n","// @flow\n\nimport { parseCSSColor } from 'csscolorparser';\n\n/**\n * An RGBA color value. Create instances from color strings using the static\n * method `Color.parse`. The constructor accepts RGB channel values in the range\n * `[0, 1]`, premultiplied by A.\n *\n * @param {number} r The red channel.\n * @param {number} g The green channel.\n * @param {number} b The blue channel.\n * @param {number} a The alpha channel.\n * @private\n */\nclass Color {\n r: number;\n g: number;\n b: number;\n a: number;\n\n constructor(r: number, g: number, b: number, a: number = 1) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n }\n\n static black: Color;\n static white: Color;\n static transparent: Color;\n static red: Color;\n\n /**\n * Parses valid CSS color strings and returns a `Color` instance.\n * @returns A `Color` instance, or `undefined` if the input is not a valid color string.\n */\n static parse(input: ?string): Color | void {\n if (!input) {\n return undefined;\n }\n\n if (input instanceof Color) {\n return input;\n }\n\n if (typeof input !== 'string') {\n return undefined;\n }\n\n const rgba = parseCSSColor(input);\n if (!rgba) {\n return undefined;\n }\n\n return new Color(\n rgba[0] / 255 * rgba[3],\n rgba[1] / 255 * rgba[3],\n rgba[2] / 255 * rgba[3],\n rgba[3]\n );\n }\n\n /**\n * Returns an RGBA string representing the color value.\n *\n * @returns An RGBA string.\n * @example\n * var purple = new Color.parse('purple');\n * purple.toString; // = \"rgba(128,0,128,1)\"\n * var translucentGreen = new Color.parse('rgba(26, 207, 26, .73)');\n * translucentGreen.toString(); // = \"rgba(26,207,26,0.73)\"\n */\n toString(): string {\n const [r, g, b, a] = this.toArray();\n return `rgba(${Math.round(r)},${Math.round(g)},${Math.round(b)},${a})`;\n }\n\n toArray(): [number, number, number, number] {\n const {r, g, b, a} = this;\n return a === 0 ? [0, 0, 0, 0] : [\n r * 255 / a,\n g * 255 / a,\n b * 255 / a,\n a\n ];\n }\n}\n\nColor.black = new Color(0, 0, 0, 1);\nColor.white = new Color(1, 1, 1, 1);\nColor.transparent = new Color(0, 0, 0, 0);\nColor.red = new Color(1, 0, 0, 1);\n\nexport default Color;\n","// @flow\n\n// Flow type declarations for Intl cribbed from\n// https://github.com/facebook/flow/issues/1270\n\ndeclare var Intl: {\n Collator: Class\n};\n\ndeclare class Intl$Collator {\n constructor (\n locales?: string | string[],\n options?: CollatorOptions\n ): Intl$Collator;\n\n static (\n locales?: string | string[],\n options?: CollatorOptions\n ): Intl$Collator;\n\n compare (a: string, b: string): number;\n\n resolvedOptions(): any;\n}\n\ntype CollatorOptions = {\n localeMatcher?: 'lookup' | 'best fit',\n usage?: 'sort' | 'search',\n sensitivity?: 'base' | 'accent' | 'case' | 'variant',\n ignorePunctuation?: boolean,\n numeric?: boolean,\n caseFirst?: 'upper' | 'lower' | 'false'\n}\n\nexport default class Collator {\n locale: string | null;\n sensitivity: 'base' | 'accent' | 'case' | 'variant';\n collator: Intl$Collator;\n\n constructor(caseSensitive: boolean, diacriticSensitive: boolean, locale: string | null) {\n if (caseSensitive)\n this.sensitivity = diacriticSensitive ? 'variant' : 'case';\n else\n this.sensitivity = diacriticSensitive ? 'accent' : 'base';\n\n this.locale = locale;\n this.collator = new Intl.Collator(this.locale ? this.locale : [],\n { sensitivity: this.sensitivity, usage: 'search' });\n }\n\n compare(lhs: string, rhs: string): number {\n return this.collator.compare(lhs, rhs);\n }\n\n resolvedLocale(): string {\n // We create a Collator without \"usage: search\" because we don't want\n // the search options encoded in our result (e.g. \"en-u-co-search\")\n return new Intl.Collator(this.locale ? this.locale : [])\n .resolvedOptions().locale;\n }\n}\n","// @flow\n\nexport class FormattedSection {\n text: string;\n scale: number | null;\n fontStack: string | null;\n\n constructor(text: string, scale: number | null, fontStack: string | null) {\n this.text = text;\n this.scale = scale;\n this.fontStack = fontStack;\n }\n}\n\nexport default class Formatted {\n sections: Array;\n\n constructor(sections: Array) {\n this.sections = sections;\n }\n\n static fromString(unformatted: string): Formatted {\n return new Formatted([new FormattedSection(unformatted, null, null)]);\n }\n\n toString(): string {\n return this.sections.map(section => section.text).join('');\n }\n\n serialize() {\n const serialized = [\"format\"];\n for (const section of this.sections) {\n serialized.push(section.text);\n const options = {};\n if (section.fontStack) {\n options[\"text-font\"] = [\"literal\", section.fontStack.split(',')];\n }\n if (section.scale) {\n options[\"font-scale\"] = section.scale;\n }\n serialized.push(options);\n }\n return serialized;\n }\n}\n","// @flow\n\nimport assert from 'assert';\n\nimport Color from '../util/color';\nimport Collator from './types/collator';\nimport Formatted from './types/formatted';\nimport { NullType, NumberType, StringType, BooleanType, ColorType, ObjectType, ValueType, CollatorType, FormattedType, array } from './types';\n\nimport type { Type } from './types';\n\nexport function validateRGBA(r: mixed, g: mixed, b: mixed, a?: mixed): ?string {\n if (!(\n typeof r === 'number' && r >= 0 && r <= 255 &&\n typeof g === 'number' && g >= 0 && g <= 255 &&\n typeof b === 'number' && b >= 0 && b <= 255\n )) {\n const value = typeof a === 'number' ? [r, g, b, a] : [r, g, b];\n return `Invalid rgba value [${value.join(', ')}]: 'r', 'g', and 'b' must be between 0 and 255.`;\n }\n\n if (!(\n typeof a === 'undefined' || (typeof a === 'number' && a >= 0 && a <= 1)\n )) {\n return `Invalid rgba value [${[r, g, b, a].join(', ')}]: 'a' must be between 0 and 1.`;\n }\n\n return null;\n}\n\nexport type Value = null | string | boolean | number | Color | Collator | Formatted | $ReadOnlyArray | { +[string]: Value }\n\nexport function isValue(mixed: mixed): boolean {\n if (mixed === null) {\n return true;\n } else if (typeof mixed === 'string') {\n return true;\n } else if (typeof mixed === 'boolean') {\n return true;\n } else if (typeof mixed === 'number') {\n return true;\n } else if (mixed instanceof Color) {\n return true;\n } else if (mixed instanceof Collator) {\n return true;\n } else if (mixed instanceof Formatted) {\n return true;\n } else if (Array.isArray(mixed)) {\n for (const item of mixed) {\n if (!isValue(item)) {\n return false;\n }\n }\n return true;\n } else if (typeof mixed === 'object') {\n for (const key in mixed) {\n if (!isValue(mixed[key])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n}\n\nexport function typeOf(value: Value): Type {\n if (value === null) {\n return NullType;\n } else if (typeof value === 'string') {\n return StringType;\n } else if (typeof value === 'boolean') {\n return BooleanType;\n } else if (typeof value === 'number') {\n return NumberType;\n } else if (value instanceof Color) {\n return ColorType;\n } else if (value instanceof Collator) {\n return CollatorType;\n } else if (value instanceof Formatted) {\n return FormattedType;\n } else if (Array.isArray(value)) {\n const length = value.length;\n let itemType: ?Type;\n\n for (const item of value) {\n const t = typeOf(item);\n if (!itemType) {\n itemType = t;\n } else if (itemType === t) {\n continue;\n } else {\n itemType = ValueType;\n break;\n }\n }\n\n return array(itemType || ValueType, length);\n } else {\n assert(typeof value === 'object');\n return ObjectType;\n }\n}\n\nexport function toString(value: Value) {\n const type = typeof value;\n if (value === null) {\n return '';\n } else if (type === 'string' || type === 'number' || type === 'boolean') {\n return String(value);\n } else if (value instanceof Color || value instanceof Formatted) {\n return value.toString();\n } else {\n return JSON.stringify(value);\n }\n}\n\nexport { Color, Collator };\n","// @flow\n\nimport assert from 'assert';\nimport { isValue, typeOf, Color } from '../values';\nimport Formatted from '../types/formatted';\n\nimport type { Type } from '../types';\nimport type { Value } from '../values';\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\n\nclass Literal implements Expression {\n type: Type;\n value: Value;\n\n constructor(type: Type, value: Value) {\n this.type = type;\n this.value = value;\n }\n\n static parse(args: Array, context: ParsingContext) {\n if (args.length !== 2)\n return context.error(`'literal' expression requires exactly one argument, but found ${args.length - 1} instead.`);\n\n if (!isValue(args[1]))\n return context.error(`invalid value`);\n\n const value = (args[1]: any);\n let type = typeOf(value);\n\n // special case: infer the item type if possible for zero-length arrays\n const expected = context.expectedType;\n if (\n type.kind === 'array' &&\n type.N === 0 &&\n expected &&\n expected.kind === 'array' &&\n (typeof expected.N !== 'number' || expected.N === 0)\n ) {\n type = expected;\n }\n\n return new Literal(type, value);\n }\n\n evaluate() {\n return this.value;\n }\n\n eachChild() {}\n\n possibleOutputs() {\n return [this.value];\n }\n\n serialize(): Array {\n if (this.type.kind === 'array' || this.type.kind === 'object') {\n return [\"literal\", this.value];\n } else if (this.value instanceof Color) {\n // Constant-folding can generate Literal expressions that you\n // couldn't actually generate with a \"literal\" expression,\n // so we have to implement an equivalent serialization here\n return [\"rgba\"].concat(this.value.toArray());\n } else if (this.value instanceof Formatted) {\n // Same as Color\n return this.value.serialize();\n } else {\n assert(this.value === null ||\n typeof this.value === 'string' ||\n typeof this.value === 'number' ||\n typeof this.value === 'boolean');\n return (this.value: any);\n }\n }\n}\n\nexport default Literal;\n","// @flow\n\nclass RuntimeError {\n name: string;\n message: string;\n\n constructor(message: string) {\n this.name = 'ExpressionEvaluationError';\n this.message = message;\n }\n\n toJSON() {\n return this.message;\n }\n}\n\nexport default RuntimeError;\n","// @flow\n\nimport assert from 'assert';\n\nimport {\n ObjectType,\n ValueType,\n StringType,\n NumberType,\n BooleanType,\n checkSubtype,\n toString,\n array\n} from '../types';\nimport RuntimeError from '../runtime_error';\nimport { typeOf } from '../values';\n\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Value } from '../values';\nimport type { Type } from '../types';\n\nconst types = {\n string: StringType,\n number: NumberType,\n boolean: BooleanType,\n object: ObjectType\n};\n\nclass Assertion implements Expression {\n type: Type;\n args: Array;\n\n constructor(type: Type, args: Array) {\n this.type = type;\n this.args = args;\n }\n\n static parse(args: Array, context: ParsingContext): ?Expression {\n if (args.length < 2)\n return context.error(`Expected at least one argument.`);\n\n let i = 1;\n let type;\n\n const name: string = (args[0]: any);\n if (name === 'array') {\n let itemType;\n if (args.length > 2) {\n const type = args[1];\n if (typeof type !== 'string' || !(type in types) || type === 'object')\n return context.error('The item type argument of \"array\" must be one of string, number, boolean', 1);\n itemType = types[type];\n i++;\n } else {\n itemType = ValueType;\n }\n\n let N;\n if (args.length > 3) {\n if (args[2] !== null &&\n (typeof args[2] !== 'number' ||\n args[2] < 0 ||\n args[2] !== Math.floor(args[2]))\n ) {\n return context.error('The length argument to \"array\" must be a positive integer literal', 2);\n }\n N = args[2];\n i++;\n }\n\n type = array(itemType, N);\n } else {\n assert(types[name], name);\n type = types[name];\n }\n\n const parsed = [];\n for (; i < args.length; i++) {\n const input = context.parse(args[i], i, ValueType);\n if (!input) return null;\n parsed.push(input);\n }\n\n return new Assertion(type, parsed);\n }\n\n evaluate(ctx: EvaluationContext) {\n for (let i = 0; i < this.args.length; i++) {\n const value = this.args[i].evaluate(ctx);\n const error = checkSubtype(this.type, typeOf(value));\n if (!error) {\n return value;\n } else if (i === this.args.length - 1) {\n throw new RuntimeError(`Expected value to be of type ${toString(this.type)}, but found ${toString(typeOf(value))} instead.`);\n }\n }\n\n assert(false);\n return null;\n }\n\n eachChild(fn: (Expression) => void) {\n this.args.forEach(fn);\n }\n\n possibleOutputs(): Array {\n return [].concat(...this.args.map((arg) => arg.possibleOutputs()));\n }\n\n serialize(): Array {\n const type = this.type;\n const serialized = [type.kind];\n if (type.kind === 'array') {\n const itemType = type.itemType;\n if (itemType.kind === 'string' ||\n itemType.kind === 'number' ||\n itemType.kind === 'boolean') {\n serialized.push(itemType.kind);\n const N = type.N;\n if (typeof N === 'number' || this.args.length > 1) {\n serialized.push(N);\n }\n }\n }\n return serialized.concat(this.args.map(arg => arg.serialize()));\n }\n}\n\nexport default Assertion;\n","// @flow\n\nimport { NumberType, ValueType, FormattedType, array, StringType } from '../types';\nimport Formatted, { FormattedSection } from '../types/formatted';\nimport { toString } from '../values';\n\nimport type { Expression } from '../expression';\nimport type EvaluationContext from '../evaluation_context';\nimport type ParsingContext from '../parsing_context';\nimport type { Type } from '../types';\n\ntype FormattedSectionExpression = {\n text: Expression,\n scale: Expression | null;\n font: Expression | null;\n}\n\nexport default class FormatExpression implements Expression {\n type: Type;\n sections: Array;\n\n constructor(sections: Array) {\n this.type = FormattedType;\n this.sections = sections;\n }\n\n static parse(args: Array, context: ParsingContext): ?Expression {\n if (args.length < 3) {\n return context.error(`Expected at least two arguments.`);\n }\n\n if ((args.length - 1) % 2 !== 0) {\n return context.error(`Expected an even number of arguments.`);\n }\n\n const sections: Array = [];\n for (let i = 1; i < args.length - 1; i += 2) {\n const text = context.parse(args[i], 1, ValueType);\n if (!text) return null;\n const kind = text.type.kind;\n if (kind !== 'string' && kind !== 'value' && kind !== 'null')\n return context.error(`Formatted text type must be 'string', 'value', or 'null'.`);\n\n const options = (args[i + 1]: any);\n if (typeof options !== \"object\" || Array.isArray(options))\n return context.error(`Format options argument must be an object.`);\n\n let scale = null;\n if (options['font-scale']) {\n scale = context.parse(options['font-scale'], 1, NumberType);\n if (!scale) return null;\n }\n\n let font = null;\n if (options['text-font']) {\n font = context.parse(options['text-font'], 1, array(StringType));\n if (!font) return null;\n }\n sections.push({text, scale, font});\n }\n\n return new FormatExpression(sections);\n }\n\n evaluate(ctx: EvaluationContext) {\n return new Formatted(\n this.sections.map(section =>\n new FormattedSection(\n toString(section.text.evaluate(ctx)),\n section.scale ? section.scale.evaluate(ctx) : null,\n section.font ? section.font.evaluate(ctx).join(',') : null\n )\n )\n );\n }\n\n eachChild(fn: (Expression) => void) {\n for (const section of this.sections) {\n fn(section.text);\n if (section.scale) {\n fn(section.scale);\n }\n if (section.font) {\n fn(section.font);\n }\n }\n }\n\n possibleOutputs() {\n // Technically the combinatoric set of all children\n // Usually, this.text will be undefined anyway\n return [undefined];\n }\n\n serialize() {\n const serialized = [\"format\"];\n for (const section of this.sections) {\n serialized.push(section.text.serialize());\n const options = {};\n if (section.scale) {\n options['font-scale'] = section.scale.serialize();\n }\n if (section.font) {\n options['text-font'] = section.font.serialize();\n }\n serialized.push(options);\n }\n return serialized;\n }\n}\n","// @flow\n\nimport assert from 'assert';\n\nimport {BooleanType, ColorType, NumberType, StringType, ValueType} from '../types';\nimport {Color, toString as valueToString, validateRGBA} from '../values';\nimport RuntimeError from '../runtime_error';\nimport Formatted from '../types/formatted';\nimport FormatExpression from '../definitions/format';\n\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Value } from '../values';\nimport type { Type } from '../types';\n\nconst types = {\n 'to-boolean': BooleanType,\n 'to-color': ColorType,\n 'to-number': NumberType,\n 'to-string': StringType\n};\n\n/**\n * Special form for error-coalescing coercion expressions \"to-number\",\n * \"to-color\". Since these coercions can fail at runtime, they accept multiple\n * arguments, only evaluating one at a time until one succeeds.\n *\n * @private\n */\nclass Coercion implements Expression {\n type: Type;\n args: Array;\n\n constructor(type: Type, args: Array) {\n this.type = type;\n this.args = args;\n }\n\n static parse(args: Array, context: ParsingContext): ?Expression {\n if (args.length < 2)\n return context.error(`Expected at least one argument.`);\n\n const name: string = (args[0]: any);\n assert(types[name], name);\n\n if ((name === 'to-boolean' || name === 'to-string') && args.length !== 2)\n return context.error(`Expected one argument.`);\n\n const type = types[name];\n\n const parsed = [];\n for (let i = 1; i < args.length; i++) {\n const input = context.parse(args[i], i, ValueType);\n if (!input) return null;\n parsed.push(input);\n }\n\n return new Coercion(type, parsed);\n }\n\n evaluate(ctx: EvaluationContext) {\n if (this.type.kind === 'boolean') {\n return Boolean(this.args[0].evaluate(ctx));\n } else if (this.type.kind === 'color') {\n let input;\n let error;\n for (const arg of this.args) {\n input = arg.evaluate(ctx);\n error = null;\n if (input instanceof Color) {\n return input;\n } else if (typeof input === 'string') {\n const c = ctx.parseColor(input);\n if (c) return c;\n } else if (Array.isArray(input)) {\n if (input.length < 3 || input.length > 4) {\n error = `Invalid rbga value ${JSON.stringify(input)}: expected an array containing either three or four numeric values.`;\n } else {\n error = validateRGBA(input[0], input[1], input[2], input[3]);\n }\n if (!error) {\n return new Color((input[0]: any) / 255, (input[1]: any) / 255, (input[2]: any) / 255, (input[3]: any));\n }\n }\n }\n throw new RuntimeError(error || `Could not parse color from value '${typeof input === 'string' ? input : JSON.stringify(input)}'`);\n } else if (this.type.kind === 'number') {\n let value = null;\n for (const arg of this.args) {\n value = arg.evaluate(ctx);\n if (value === null) return 0;\n const num = Number(value);\n if (isNaN(num)) continue;\n return num;\n }\n throw new RuntimeError(`Could not convert ${JSON.stringify(value)} to number.`);\n } else if (this.type.kind === 'formatted') {\n // There is no explicit 'to-formatted' but this coercion can be implicitly\n // created by properties that expect the 'formatted' type.\n return Formatted.fromString(valueToString(this.args[0].evaluate(ctx)));\n } else {\n return valueToString(this.args[0].evaluate(ctx));\n }\n }\n\n eachChild(fn: (Expression) => void) {\n this.args.forEach(fn);\n }\n\n possibleOutputs(): Array {\n return [].concat(...this.args.map((arg) => arg.possibleOutputs()));\n }\n\n serialize() {\n if (this.type.kind === 'formatted') {\n return new FormatExpression([{text: this.args[0], scale: null, font: null}]).serialize();\n }\n const serialized = [`to-${this.type.kind}`];\n this.eachChild(child => { serialized.push(child.serialize()); });\n return serialized;\n }\n}\n\nexport default Coercion;\n","// @flow\n\nimport { Color } from './values';\n\nimport type { GlobalProperties, Feature, FeatureState } from './index';\n\nconst geometryTypes = ['Unknown', 'Point', 'LineString', 'Polygon'];\n\nclass EvaluationContext {\n globals: GlobalProperties;\n feature: ?Feature;\n featureState: ?FeatureState;\n\n _parseColorCache: {[string]: ?Color};\n\n constructor() {\n this.globals = (null: any);\n this.feature = null;\n this.featureState = null;\n this._parseColorCache = {};\n }\n\n id() {\n return this.feature && 'id' in this.feature ? this.feature.id : null;\n }\n\n geometryType() {\n return this.feature ? typeof this.feature.type === 'number' ? geometryTypes[this.feature.type] : this.feature.type : null;\n }\n\n properties() {\n return this.feature && this.feature.properties || {};\n }\n\n parseColor(input: string): ?Color {\n let cached = this._parseColorCache[input];\n if (!cached) {\n cached = this._parseColorCache[input] = Color.parse(input);\n }\n return cached;\n }\n}\n\nexport default EvaluationContext;\n","// @flow\n\nimport { toString } from './types';\n\nimport ParsingContext from './parsing_context';\nimport EvaluationContext from './evaluation_context';\nimport assert from 'assert';\n\nimport type { Expression, ExpressionRegistry } from './expression';\nimport type { Type } from './types';\nimport type { Value } from './values';\n\nexport type Varargs = {| type: Type |};\ntype Signature = Array | Varargs;\ntype Evaluate = (EvaluationContext, Array) => Value;\ntype Definition = [Type, Signature, Evaluate] |\n {|type: Type, overloads: Array<[Signature, Evaluate]>|};\n\nclass CompoundExpression implements Expression {\n name: string;\n type: Type;\n _evaluate: Evaluate;\n args: Array;\n\n static definitions: { [string]: Definition };\n\n constructor(name: string, type: Type, evaluate: Evaluate, args: Array) {\n this.name = name;\n this.type = type;\n this._evaluate = evaluate;\n this.args = args;\n }\n\n evaluate(ctx: EvaluationContext) {\n return this._evaluate(ctx, this.args);\n }\n\n eachChild(fn: (Expression) => void) {\n this.args.forEach(fn);\n }\n\n possibleOutputs() {\n return [undefined];\n }\n\n serialize(): Array {\n return [this.name].concat(this.args.map(arg => arg.serialize()));\n }\n\n static parse(args: Array, context: ParsingContext): ?Expression {\n const op: string = (args[0]: any);\n const definition = CompoundExpression.definitions[op];\n if (!definition) {\n return context.error(`Unknown expression \"${op}\". If you wanted a literal array, use [\"literal\", [...]].`, 0);\n }\n\n // Now check argument types against each signature\n const type = Array.isArray(definition) ?\n definition[0] : definition.type;\n\n const availableOverloads = Array.isArray(definition) ?\n [[definition[1], definition[2]]] :\n definition.overloads;\n\n const overloads = availableOverloads.filter(([signature]) => (\n !Array.isArray(signature) || // varags\n signature.length === args.length - 1 // correct param count\n ));\n\n let signatureContext: ParsingContext = (null: any);\n\n for (const [params, evaluate] of overloads) {\n // Use a fresh context for each attempted signature so that, if\n // we eventually succeed, we haven't polluted `context.errors`.\n signatureContext = new ParsingContext(context.registry, context.path, null, context.scope);\n\n // First parse all the args, potentially coercing to the\n // types expected by this overload.\n const parsedArgs: Array = [];\n let argParseFailed = false;\n for (let i = 1; i < args.length; i++) {\n const arg = args[i];\n const expectedType = Array.isArray(params) ?\n params[i - 1] :\n params.type;\n\n const parsed = signatureContext.parse(arg, 1 + parsedArgs.length, expectedType);\n if (!parsed) {\n argParseFailed = true;\n break;\n }\n parsedArgs.push(parsed);\n }\n if (argParseFailed) {\n // Couldn't coerce args of this overload to expected type, move\n // on to next one.\n continue;\n }\n\n if (Array.isArray(params)) {\n if (params.length !== parsedArgs.length) {\n signatureContext.error(`Expected ${params.length} arguments, but found ${parsedArgs.length} instead.`);\n continue;\n }\n }\n\n for (let i = 0; i < parsedArgs.length; i++) {\n const expected = Array.isArray(params) ? params[i] : params.type;\n const arg = parsedArgs[i];\n signatureContext.concat(i + 1).checkSubtype(expected, arg.type);\n }\n\n if (signatureContext.errors.length === 0) {\n return new CompoundExpression(op, type, evaluate, parsedArgs);\n }\n }\n\n assert(!signatureContext || signatureContext.errors.length > 0);\n\n if (overloads.length === 1) {\n context.errors.push.apply(context.errors, signatureContext.errors);\n } else {\n const expected = overloads.length ? overloads : availableOverloads;\n const signatures = expected\n .map(([params]) => stringifySignature(params))\n .join(' | ');\n\n const actualTypes = [];\n // For error message, re-parse arguments without trying to\n // apply any coercions\n for (let i = 1; i < args.length; i++) {\n const parsed = context.parse(args[i], 1 + actualTypes.length);\n if (!parsed) return null;\n actualTypes.push(toString(parsed.type));\n }\n context.error(`Expected arguments of type ${signatures}, but found (${actualTypes.join(', ')}) instead.`);\n }\n\n return null;\n }\n\n static register(\n registry: ExpressionRegistry,\n definitions: { [string]: Definition }\n ) {\n assert(!CompoundExpression.definitions);\n CompoundExpression.definitions = definitions;\n for (const name in definitions) {\n registry[name] = CompoundExpression;\n }\n }\n}\n\nfunction stringifySignature(signature: Signature): string {\n if (Array.isArray(signature)) {\n return `(${signature.map(toString).join(', ')})`;\n } else {\n return `(${toString(signature.type)}...)`;\n }\n}\n\nexport default CompoundExpression;\n","// @flow\n\nimport { StringType, BooleanType, CollatorType } from '../types';\nimport Collator from '../types/collator';\n\nimport type { Expression } from '../expression';\nimport type EvaluationContext from '../evaluation_context';\nimport type ParsingContext from '../parsing_context';\nimport type { Type } from '../types';\n\nexport default class CollatorExpression implements Expression {\n type: Type;\n caseSensitive: Expression;\n diacriticSensitive: Expression;\n locale: Expression | null;\n\n constructor(caseSensitive: Expression, diacriticSensitive: Expression, locale: Expression | null) {\n this.type = CollatorType;\n this.locale = locale;\n this.caseSensitive = caseSensitive;\n this.diacriticSensitive = diacriticSensitive;\n }\n\n static parse(args: Array, context: ParsingContext): ?Expression {\n if (args.length !== 2)\n return context.error(`Expected one argument.`);\n\n const options = (args[1]: any);\n if (typeof options !== \"object\" || Array.isArray(options))\n return context.error(`Collator options argument must be an object.`);\n\n const caseSensitive = context.parse(\n options['case-sensitive'] === undefined ? false : options['case-sensitive'], 1, BooleanType);\n if (!caseSensitive) return null;\n\n const diacriticSensitive = context.parse(\n options['diacritic-sensitive'] === undefined ? false : options['diacritic-sensitive'], 1, BooleanType);\n if (!diacriticSensitive) return null;\n\n let locale = null;\n if (options['locale']) {\n locale = context.parse(options['locale'], 1, StringType);\n if (!locale) return null;\n }\n\n return new CollatorExpression(caseSensitive, diacriticSensitive, locale);\n }\n\n evaluate(ctx: EvaluationContext) {\n return new Collator(this.caseSensitive.evaluate(ctx), this.diacriticSensitive.evaluate(ctx), this.locale ? this.locale.evaluate(ctx) : null);\n }\n\n eachChild(fn: (Expression) => void) {\n fn(this.caseSensitive);\n fn(this.diacriticSensitive);\n if (this.locale) {\n fn(this.locale);\n }\n }\n\n possibleOutputs() {\n // Technically the set of possible outputs is the combinatoric set of Collators produced\n // by all possibleOutputs of locale/caseSensitive/diacriticSensitive\n // But for the primary use of Collators in comparison operators, we ignore the Collator's\n // possibleOutputs anyway, so we can get away with leaving this undefined for now.\n return [undefined];\n }\n\n serialize() {\n const options = {};\n options['case-sensitive'] = this.caseSensitive.serialize();\n options['diacritic-sensitive'] = this.diacriticSensitive.serialize();\n if (this.locale) {\n options['locale'] = this.locale.serialize();\n }\n return [\"collator\", options];\n }\n}\n","// @flow\n\nimport CompoundExpression from './compound_expression';\n\nimport type { Expression } from './expression.js';\n\nfunction isFeatureConstant(e: Expression) {\n if (e instanceof CompoundExpression) {\n if (e.name === 'get' && e.args.length === 1) {\n return false;\n } else if (e.name === 'feature-state') {\n return false;\n } else if (e.name === 'has' && e.args.length === 1) {\n return false;\n } else if (\n e.name === 'properties' ||\n e.name === 'geometry-type' ||\n e.name === 'id'\n ) {\n return false;\n } else if (/^filter-/.test(e.name)) {\n return false;\n }\n }\n\n let result = true;\n e.eachChild(arg => {\n if (result && !isFeatureConstant(arg)) { result = false; }\n });\n return result;\n}\n\nfunction isStateConstant(e: Expression) {\n if (e instanceof CompoundExpression) {\n if (e.name === 'feature-state') {\n return false;\n }\n }\n let result = true;\n e.eachChild(arg => {\n if (result && !isStateConstant(arg)) { result = false; }\n });\n return result;\n}\n\nfunction isGlobalPropertyConstant(e: Expression, properties: Array) {\n if (e instanceof CompoundExpression && properties.indexOf(e.name) >= 0) { return false; }\n let result = true;\n e.eachChild((arg) => {\n if (result && !isGlobalPropertyConstant(arg, properties)) { result = false; }\n });\n return result;\n}\n\nexport { isFeatureConstant, isGlobalPropertyConstant, isStateConstant };\n","// @flow\n\nimport type { Type } from '../types';\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\n\nclass Var implements Expression {\n type: Type;\n name: string;\n boundExpression: Expression;\n\n constructor(name: string, boundExpression: Expression) {\n this.type = boundExpression.type;\n this.name = name;\n this.boundExpression = boundExpression;\n }\n\n static parse(args: Array, context: ParsingContext) {\n if (args.length !== 2 || typeof args[1] !== 'string')\n return context.error(`'var' expression requires exactly one string literal argument.`);\n\n const name = args[1];\n if (!context.scope.has(name)) {\n return context.error(`Unknown variable \"${name}\". Make sure \"${name}\" has been bound in an enclosing \"let\" expression before using it.`, 1);\n }\n\n return new Var(name, context.scope.get(name));\n }\n\n evaluate(ctx: EvaluationContext) {\n return this.boundExpression.evaluate(ctx);\n }\n\n eachChild() {}\n\n possibleOutputs() {\n return [undefined];\n }\n\n serialize() {\n return [\"var\", this.name];\n }\n}\n\nexport default Var;\n","// @flow\n\nimport Scope from './scope';\nimport { checkSubtype } from './types';\nimport ParsingError from './parsing_error';\nimport Literal from './definitions/literal';\nimport Assertion from './definitions/assertion';\nimport Coercion from './definitions/coercion';\nimport EvaluationContext from './evaluation_context';\nimport CompoundExpression from './compound_expression';\nimport CollatorExpression from './definitions/collator';\nimport {isGlobalPropertyConstant, isFeatureConstant} from './is_constant';\nimport Var from './definitions/var';\n\n\nimport type {Expression, ExpressionRegistry} from './expression';\nimport type {Type} from './types';\n\n/**\n * State associated parsing at a given point in an expression tree.\n * @private\n */\nclass ParsingContext {\n registry: ExpressionRegistry;\n path: Array;\n key: string;\n scope: Scope;\n errors: Array;\n\n // The expected type of this expression. Provided only to allow Expression\n // implementations to infer argument types: Expression#parse() need not\n // check that the output type of the parsed expression matches\n // `expectedType`.\n expectedType: ?Type;\n\n constructor(\n registry: ExpressionRegistry,\n path: Array = [],\n expectedType: ?Type,\n scope: Scope = new Scope(),\n errors: Array = []\n ) {\n this.registry = registry;\n this.path = path;\n this.key = path.map(part => `[${part}]`).join('');\n this.scope = scope;\n this.errors = errors;\n this.expectedType = expectedType;\n }\n\n /**\n * @param expr the JSON expression to parse\n * @param index the optional argument index if this expression is an argument of a parent expression that's being parsed\n * @param options\n * @param options.omitTypeAnnotations set true to omit inferred type annotations. Caller beware: with this option set, the parsed expression's type will NOT satisfy `expectedType` if it would normally be wrapped in an inferred annotation.\n * @private\n */\n parse(\n expr: mixed,\n index?: number,\n expectedType?: ?Type,\n bindings?: Array<[string, Expression]>,\n options: {typeAnnotation?: 'assert' | 'coerce' | 'omit'} = {}\n ): ?Expression {\n if (index) {\n return this.concat(index, expectedType, bindings)._parse(expr, options);\n }\n return this._parse(expr, options);\n }\n\n _parse(expr: mixed, options: {typeAnnotation?: 'assert' | 'coerce' | 'omit'}): ?Expression {\n if (expr === null || typeof expr === 'string' || typeof expr === 'boolean' || typeof expr === 'number') {\n expr = ['literal', expr];\n }\n\n function annotate(parsed, type, typeAnnotation: 'assert' | 'coerce' | 'omit') {\n if (typeAnnotation === 'assert') {\n return new Assertion(type, [parsed]);\n } else if (typeAnnotation === 'coerce') {\n return new Coercion(type, [parsed]);\n } else {\n return parsed;\n }\n }\n\n if (Array.isArray(expr)) {\n if (expr.length === 0) {\n return this.error(`Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].`);\n }\n\n const op = expr[0];\n if (typeof op !== 'string') {\n this.error(`Expression name must be a string, but found ${typeof op} instead. If you wanted a literal array, use [\"literal\", [...]].`, 0);\n return null;\n }\n\n const Expr = this.registry[op];\n if (Expr) {\n let parsed = Expr.parse(expr, this);\n if (!parsed) return null;\n\n if (this.expectedType) {\n const expected = this.expectedType;\n const actual = parsed.type;\n\n // When we expect a number, string, boolean, or array but have a value, wrap it in an assertion.\n // When we expect a color or formatted string, but have a string or value, wrap it in a coercion.\n // Otherwise, we do static type-checking.\n //\n // These behaviors are overridable for:\n // * The \"coalesce\" operator, which needs to omit type annotations.\n // * String-valued properties (e.g. `text-field`), where coercion is more convenient than assertion.\n //\n if ((expected.kind === 'string' || expected.kind === 'number' || expected.kind === 'boolean' || expected.kind === 'object' || expected.kind === 'array') && actual.kind === 'value') {\n parsed = annotate(parsed, expected, options.typeAnnotation || 'assert');\n } else if ((expected.kind === 'color' || expected.kind === 'formatted') && (actual.kind === 'value' || actual.kind === 'string')) {\n parsed = annotate(parsed, expected, options.typeAnnotation || 'coerce');\n } else if (this.checkSubtype(expected, actual)) {\n return null;\n }\n }\n\n // If an expression's arguments are all literals, we can evaluate\n // it immediately and replace it with a literal value in the\n // parsed/compiled result.\n if (!(parsed instanceof Literal) && isConstant(parsed)) {\n const ec = new EvaluationContext();\n try {\n parsed = new Literal(parsed.type, parsed.evaluate(ec));\n } catch (e) {\n this.error(e.message);\n return null;\n }\n }\n\n return parsed;\n }\n\n return this.error(`Unknown expression \"${op}\". If you wanted a literal array, use [\"literal\", [...]].`, 0);\n } else if (typeof expr === 'undefined') {\n return this.error(`'undefined' value invalid. Use null instead.`);\n } else if (typeof expr === 'object') {\n return this.error(`Bare objects invalid. Use [\"literal\", {...}] instead.`);\n } else {\n return this.error(`Expected an array, but found ${typeof expr} instead.`);\n }\n }\n\n /**\n * Returns a copy of this context suitable for parsing the subexpression at\n * index `index`, optionally appending to 'let' binding map.\n *\n * Note that `errors` property, intended for collecting errors while\n * parsing, is copied by reference rather than cloned.\n * @private\n */\n concat(index: number, expectedType?: ?Type, bindings?: Array<[string, Expression]>) {\n const path = typeof index === 'number' ? this.path.concat(index) : this.path;\n const scope = bindings ? this.scope.concat(bindings) : this.scope;\n return new ParsingContext(\n this.registry,\n path,\n expectedType || null,\n scope,\n this.errors\n );\n }\n\n /**\n * Push a parsing (or type checking) error into the `this.errors`\n * @param error The message\n * @param keys Optionally specify the source of the error at a child\n * of the current expression at `this.key`.\n * @private\n */\n error(error: string, ...keys: Array) {\n const key = `${this.key}${keys.map(k => `[${k}]`).join('')}`;\n this.errors.push(new ParsingError(key, error));\n }\n\n /**\n * Returns null if `t` is a subtype of `expected`; otherwise returns an\n * error message and also pushes it to `this.errors`.\n */\n checkSubtype(expected: Type, t: Type): ?string {\n const error = checkSubtype(expected, t);\n if (error) this.error(error);\n return error;\n }\n}\n\nexport default ParsingContext;\n\nfunction isConstant(expression: Expression) {\n if (expression instanceof Var) {\n return isConstant(expression.boundExpression);\n } else if (expression instanceof CompoundExpression && expression.name === 'error') {\n return false;\n } else if (expression instanceof CollatorExpression) {\n // Although the results of a Collator expression with fixed arguments\n // generally shouldn't change between executions, we can't serialize them\n // as constant expressions because results change based on environment.\n return false;\n }\n\n const isTypeAnnotation = expression instanceof Coercion ||\n expression instanceof Assertion;\n\n let childrenConstant = true;\n expression.eachChild(child => {\n // We can _almost_ assume that if `expressions` children are constant,\n // they would already have been evaluated to Literal values when they\n // were parsed. Type annotations are the exception, because they might\n // have been inferred and added after a child was parsed.\n\n // So we recurse into isConstant() for the children of type annotations,\n // but otherwise simply check whether they are Literals.\n if (isTypeAnnotation) {\n childrenConstant = childrenConstant && isConstant(child);\n } else {\n childrenConstant = childrenConstant && child instanceof Literal;\n }\n });\n if (!childrenConstant) {\n return false;\n }\n\n return isFeatureConstant(expression) &&\n isGlobalPropertyConstant(expression, ['zoom', 'heatmap-density', 'line-progress', 'is-supported-script']);\n}\n","// @flow\n\nimport RuntimeError from './runtime_error';\n\nimport type { Expression } from './expression';\n\nexport type Stops = Array<[number, Expression]>;\n\n/**\n * Returns the index of the last stop <= input, or 0 if it doesn't exist.\n * @private\n */\nexport function findStopLessThanOrEqualTo(stops: Array, input: number) {\n const n = stops.length;\n let lowerIndex = 0;\n let upperIndex = n - 1;\n let currentIndex = 0;\n let currentValue, upperValue;\n\n while (lowerIndex <= upperIndex) {\n currentIndex = Math.floor((lowerIndex + upperIndex) / 2);\n currentValue = stops[currentIndex];\n upperValue = stops[currentIndex + 1];\n if (input === currentValue || input > currentValue && input < upperValue) { // Search complete\n return currentIndex;\n } else if (currentValue < input) {\n lowerIndex = currentIndex + 1;\n } else if (currentValue > input) {\n upperIndex = currentIndex - 1;\n } else {\n throw new RuntimeError('Input is not a number.');\n }\n }\n\n return Math.max(currentIndex - 1, 0);\n}\n","// @flow\n\nimport { NumberType } from '../types';\n\nimport { findStopLessThanOrEqualTo } from '../stops';\n\nimport type { Stops } from '../stops';\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Value } from '../values';\nimport type { Type } from '../types';\n\nclass Step implements Expression {\n type: Type;\n\n input: Expression;\n labels: Array;\n outputs: Array;\n\n constructor(type: Type, input: Expression, stops: Stops) {\n this.type = type;\n this.input = input;\n\n this.labels = [];\n this.outputs = [];\n for (const [label, expression] of stops) {\n this.labels.push(label);\n this.outputs.push(expression);\n }\n }\n\n static parse(args: Array, context: ParsingContext) {\n let [ , input, ...rest] = args;\n\n if (args.length - 1 < 4) {\n return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`);\n }\n\n if ((args.length - 1) % 2 !== 0) {\n return context.error(`Expected an even number of arguments.`);\n }\n\n input = context.parse(input, 1, NumberType);\n if (!input) return null;\n\n const stops: Stops = [];\n\n let outputType: Type = (null: any);\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n\n rest.unshift(-Infinity);\n\n for (let i = 0; i < rest.length; i += 2) {\n const label = rest[i];\n const value = rest[i + 1];\n\n const labelKey = i + 1;\n const valueKey = i + 2;\n\n if (typeof label !== 'number') {\n return context.error('Input/output pairs for \"step\" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey);\n }\n\n if (stops.length && stops[stops.length - 1][0] >= label) {\n return context.error('Input/output pairs for \"step\" expressions must be arranged with input values in strictly ascending order.', labelKey);\n }\n\n const parsed = context.parse(value, valueKey, outputType);\n if (!parsed) return null;\n outputType = outputType || parsed.type;\n stops.push([label, parsed]);\n }\n\n return new Step(outputType, input, stops);\n }\n\n evaluate(ctx: EvaluationContext) {\n const labels = this.labels;\n const outputs = this.outputs;\n\n if (labels.length === 1) {\n return outputs[0].evaluate(ctx);\n }\n\n const value = ((this.input.evaluate(ctx): any): number);\n if (value <= labels[0]) {\n return outputs[0].evaluate(ctx);\n }\n\n const stopCount = labels.length;\n if (value >= labels[stopCount - 1]) {\n return outputs[stopCount - 1].evaluate(ctx);\n }\n\n const index = findStopLessThanOrEqualTo(labels, value);\n return outputs[index].evaluate(ctx);\n }\n\n eachChild(fn: (Expression) => void) {\n fn(this.input);\n for (const expression of this.outputs) {\n fn(expression);\n }\n }\n\n possibleOutputs(): Array {\n return [].concat(...this.outputs.map((output) => output.possibleOutputs()));\n }\n\n serialize() {\n const serialized = [\"step\", this.input.serialize()];\n for (let i = 0; i < this.labels.length; i++) {\n if (i > 0) {\n serialized.push(this.labels[i]);\n }\n serialized.push(this.outputs[i].serialize());\n }\n return serialized;\n }\n}\n\nexport default Step;\n","/*\n * Copyright (C) 2008 Apple Inc. All Rights Reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Ported from Webkit\n * http://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/UnitBezier.h\n */\n\nmodule.exports = UnitBezier;\n\nfunction UnitBezier(p1x, p1y, p2x, p2y) {\n // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1).\n this.cx = 3.0 * p1x;\n this.bx = 3.0 * (p2x - p1x) - this.cx;\n this.ax = 1.0 - this.cx - this.bx;\n\n this.cy = 3.0 * p1y;\n this.by = 3.0 * (p2y - p1y) - this.cy;\n this.ay = 1.0 - this.cy - this.by;\n\n this.p1x = p1x;\n this.p1y = p2y;\n this.p2x = p2x;\n this.p2y = p2y;\n}\n\nUnitBezier.prototype.sampleCurveX = function(t) {\n // `ax t^3 + bx t^2 + cx t' expanded using Horner's rule.\n return ((this.ax * t + this.bx) * t + this.cx) * t;\n};\n\nUnitBezier.prototype.sampleCurveY = function(t) {\n return ((this.ay * t + this.by) * t + this.cy) * t;\n};\n\nUnitBezier.prototype.sampleCurveDerivativeX = function(t) {\n return (3.0 * this.ax * t + 2.0 * this.bx) * t + this.cx;\n};\n\nUnitBezier.prototype.solveCurveX = function(x, epsilon) {\n if (typeof epsilon === 'undefined') epsilon = 1e-6;\n\n var t0, t1, t2, x2, i;\n\n // First try a few iterations of Newton's method -- normally very fast.\n for (t2 = x, i = 0; i < 8; i++) {\n\n x2 = this.sampleCurveX(t2) - x;\n if (Math.abs(x2) < epsilon) return t2;\n\n var d2 = this.sampleCurveDerivativeX(t2);\n if (Math.abs(d2) < 1e-6) break;\n\n t2 = t2 - x2 / d2;\n }\n\n // Fall back to the bisection method for reliability.\n t0 = 0.0;\n t1 = 1.0;\n t2 = x;\n\n if (t2 < t0) return t0;\n if (t2 > t1) return t1;\n\n while (t0 < t1) {\n\n x2 = this.sampleCurveX(t2);\n if (Math.abs(x2 - x) < epsilon) return t2;\n\n if (x > x2) {\n t0 = t2;\n } else {\n t1 = t2;\n }\n\n t2 = (t1 - t0) * 0.5 + t0;\n }\n\n // Failure.\n return t2;\n};\n\nUnitBezier.prototype.solve = function(x, epsilon) {\n return this.sampleCurveY(this.solveCurveX(x, epsilon));\n};\n","// @flow\n\nimport Color from './color';\n\nexport function number(a: number, b: number, t: number) {\n return (a * (1 - t)) + (b * t);\n}\n\nexport function color(from: Color, to: Color, t: number) {\n return new Color(\n number(from.r, to.r, t),\n number(from.g, to.g, t),\n number(from.b, to.b, t),\n number(from.a, to.a, t)\n );\n}\n\nexport function array(from: Array, to: Array, t: number): Array {\n return from.map((d, i) => {\n return number(d, to[i], t);\n });\n}\n","// @flow\n\nimport Color from './color';\n\nimport {number as interpolateNumber} from './interpolate';\n\ntype LABColor = {\n l: number,\n a: number,\n b: number,\n alpha: number\n};\n\ntype HCLColor = {\n h: number,\n c: number,\n l: number,\n alpha: number\n};\n\n// Constants\nconst Xn = 0.950470, // D65 standard referent\n Yn = 1,\n Zn = 1.088830,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1,\n deg2rad = Math.PI / 180,\n rad2deg = 180 / Math.PI;\n\n// Utilities\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction xyz2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2xyz(x) {\n x /= 255;\n return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\n// LAB\nfunction rgbToLab(rgbColor: Color): LABColor {\n const b = rgb2xyz(rgbColor.r),\n a = rgb2xyz(rgbColor.g),\n l = rgb2xyz(rgbColor.b),\n x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),\n y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),\n z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);\n\n return {\n l: 116 * y - 16,\n a: 500 * (x - y),\n b: 200 * (y - z),\n alpha: rgbColor.a\n };\n}\n\nfunction labToRgb(labColor: LABColor): Color {\n let y = (labColor.l + 16) / 116,\n x = isNaN(labColor.a) ? y : y + labColor.a / 500,\n z = isNaN(labColor.b) ? y : y - labColor.b / 200;\n y = Yn * lab2xyz(y);\n x = Xn * lab2xyz(x);\n z = Zn * lab2xyz(z);\n return new Color(\n xyz2rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),\n xyz2rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z),\n labColor.alpha\n );\n}\n\nfunction interpolateLab(from: LABColor, to: LABColor, t: number) {\n return {\n l: interpolateNumber(from.l, to.l, t),\n a: interpolateNumber(from.a, to.a, t),\n b: interpolateNumber(from.b, to.b, t),\n alpha: interpolateNumber(from.alpha, to.alpha, t)\n };\n}\n\n// HCL\nfunction rgbToHcl(rgbColor: Color): HCLColor {\n const {l, a, b} = rgbToLab(rgbColor);\n const h = Math.atan2(b, a) * rad2deg;\n return {\n h: h < 0 ? h + 360 : h,\n c: Math.sqrt(a * a + b * b),\n l: l,\n alpha: rgbColor.a\n };\n}\n\nfunction hclToRgb(hclColor: HCLColor): Color {\n const h = hclColor.h * deg2rad,\n c = hclColor.c,\n l = hclColor.l;\n return labToRgb({\n l: l,\n a: Math.cos(h) * c,\n b: Math.sin(h) * c,\n alpha: hclColor.alpha\n });\n}\n\nfunction interpolateHue(a: number, b: number, t: number) {\n const d = b - a;\n return a + t * (d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d);\n}\n\nfunction interpolateHcl(from: HCLColor, to: HCLColor, t: number) {\n return {\n h: interpolateHue(from.h, to.h, t),\n c: interpolateNumber(from.c, to.c, t),\n l: interpolateNumber(from.l, to.l, t),\n alpha: interpolateNumber(from.alpha, to.alpha, t)\n };\n}\n\nexport const lab = {\n forward: rgbToLab,\n reverse: labToRgb,\n interpolate: interpolateLab\n};\n\nexport const hcl = {\n forward: rgbToHcl,\n reverse: hclToRgb,\n interpolate: interpolateHcl\n};\n","// @flow\n\nimport UnitBezier from '@mapbox/unitbezier';\n\nimport * as interpolate from '../../util/interpolate';\nimport { toString, NumberType, ColorType } from '../types';\nimport { findStopLessThanOrEqualTo } from '../stops';\nimport { hcl, lab } from '../../util/color_spaces';\n\nimport type { Stops } from '../stops';\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Value } from '../values';\nimport type { Type } from '../types';\n\nexport type InterpolationType =\n { name: 'linear' } |\n { name: 'exponential', base: number } |\n { name: 'cubic-bezier', controlPoints: [number, number, number, number] };\n\nclass Interpolate implements Expression {\n type: Type;\n\n operator: 'interpolate' | 'interpolate-hcl' | 'interpolate-lab';\n interpolation: InterpolationType;\n input: Expression;\n labels: Array;\n outputs: Array;\n\n constructor(type: Type, operator: 'interpolate' | 'interpolate-hcl' | 'interpolate-lab', interpolation: InterpolationType, input: Expression, stops: Stops) {\n this.type = type;\n this.operator = operator;\n this.interpolation = interpolation;\n this.input = input;\n\n this.labels = [];\n this.outputs = [];\n for (const [label, expression] of stops) {\n this.labels.push(label);\n this.outputs.push(expression);\n }\n }\n\n static interpolationFactor(interpolation: InterpolationType, input: number, lower: number, upper: number) {\n let t = 0;\n if (interpolation.name === 'exponential') {\n t = exponentialInterpolation(input, interpolation.base, lower, upper);\n } else if (interpolation.name === 'linear') {\n t = exponentialInterpolation(input, 1, lower, upper);\n } else if (interpolation.name === 'cubic-bezier') {\n const c = interpolation.controlPoints;\n const ub = new UnitBezier(c[0], c[1], c[2], c[3]);\n t = ub.solve(exponentialInterpolation(input, 1, lower, upper));\n }\n return t;\n }\n\n static parse(args: Array, context: ParsingContext) {\n let [operator, interpolation, input, ...rest] = args;\n\n if (!Array.isArray(interpolation) || interpolation.length === 0) {\n return context.error(`Expected an interpolation type expression.`, 1);\n }\n\n if (interpolation[0] === 'linear') {\n interpolation = { name: 'linear' };\n } else if (interpolation[0] === 'exponential') {\n const base = interpolation[1];\n if (typeof base !== 'number')\n return context.error(`Exponential interpolation requires a numeric base.`, 1, 1);\n interpolation = {\n name: 'exponential',\n base\n };\n } else if (interpolation[0] === 'cubic-bezier') {\n const controlPoints = interpolation.slice(1);\n if (\n controlPoints.length !== 4 ||\n controlPoints.some(t => typeof t !== 'number' || t < 0 || t > 1)\n ) {\n return context.error('Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.', 1);\n }\n\n interpolation = {\n name: 'cubic-bezier',\n controlPoints: (controlPoints: any)\n };\n } else {\n return context.error(`Unknown interpolation type ${String(interpolation[0])}`, 1, 0);\n }\n\n if (args.length - 1 < 4) {\n return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`);\n }\n\n if ((args.length - 1) % 2 !== 0) {\n return context.error(`Expected an even number of arguments.`);\n }\n\n input = context.parse(input, 2, NumberType);\n if (!input) return null;\n\n const stops: Stops = [];\n\n let outputType: Type = (null: any);\n if (operator === 'interpolate-hcl' || operator === 'interpolate-lab') {\n outputType = ColorType;\n } else if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n\n for (let i = 0; i < rest.length; i += 2) {\n const label = rest[i];\n const value = rest[i + 1];\n\n const labelKey = i + 3;\n const valueKey = i + 4;\n\n if (typeof label !== 'number') {\n return context.error('Input/output pairs for \"interpolate\" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey);\n }\n\n if (stops.length && stops[stops.length - 1][0] >= label) {\n return context.error('Input/output pairs for \"interpolate\" expressions must be arranged with input values in strictly ascending order.', labelKey);\n }\n\n const parsed = context.parse(value, valueKey, outputType);\n if (!parsed) return null;\n outputType = outputType || parsed.type;\n stops.push([label, parsed]);\n }\n\n if (outputType.kind !== 'number' &&\n outputType.kind !== 'color' &&\n !(\n outputType.kind === 'array' &&\n outputType.itemType.kind === 'number' &&\n typeof outputType.N === 'number'\n )\n ) {\n return context.error(`Type ${toString(outputType)} is not interpolatable.`);\n }\n\n return new Interpolate(outputType, (operator: any), interpolation, input, stops);\n }\n\n evaluate(ctx: EvaluationContext) {\n const labels = this.labels;\n const outputs = this.outputs;\n\n if (labels.length === 1) {\n return outputs[0].evaluate(ctx);\n }\n\n const value = ((this.input.evaluate(ctx): any): number);\n if (value <= labels[0]) {\n return outputs[0].evaluate(ctx);\n }\n\n const stopCount = labels.length;\n if (value >= labels[stopCount - 1]) {\n return outputs[stopCount - 1].evaluate(ctx);\n }\n\n const index = findStopLessThanOrEqualTo(labels, value);\n const lower = labels[index];\n const upper = labels[index + 1];\n const t = Interpolate.interpolationFactor(this.interpolation, value, lower, upper);\n\n const outputLower = outputs[index].evaluate(ctx);\n const outputUpper = outputs[index + 1].evaluate(ctx);\n\n if (this.operator === 'interpolate') {\n return (interpolate[this.type.kind.toLowerCase()]: any)(outputLower, outputUpper, t); // eslint-disable-line import/namespace\n } else if (this.operator === 'interpolate-hcl') {\n return hcl.reverse(hcl.interpolate(hcl.forward(outputLower), hcl.forward(outputUpper), t));\n } else {\n return lab.reverse(lab.interpolate(lab.forward(outputLower), lab.forward(outputUpper), t));\n }\n }\n\n eachChild(fn: (Expression) => void) {\n fn(this.input);\n for (const expression of this.outputs) {\n fn(expression);\n }\n }\n\n possibleOutputs(): Array {\n return [].concat(...this.outputs.map((output) => output.possibleOutputs()));\n }\n\n serialize(): Array {\n let interpolation;\n if (this.interpolation.name === 'linear') {\n interpolation = [\"linear\"];\n } else if (this.interpolation.name === 'exponential') {\n if (this.interpolation.base === 1) {\n interpolation = [\"linear\"];\n } else {\n interpolation = [\"exponential\", this.interpolation.base];\n }\n } else {\n interpolation = [\"cubic-bezier\" ].concat(this.interpolation.controlPoints);\n }\n\n const serialized = [this.operator, interpolation, this.input.serialize()];\n\n for (let i = 0; i < this.labels.length; i++) {\n serialized.push(\n this.labels[i],\n this.outputs[i].serialize()\n );\n }\n return serialized;\n }\n}\n\n/**\n * Returns a ratio that can be used to interpolate between exponential function\n * stops.\n * How it works: Two consecutive stop values define a (scaled and shifted) exponential function `f(x) = a * base^x + b`, where `base` is the user-specified base,\n * and `a` and `b` are constants affording sufficient degrees of freedom to fit\n * the function to the given stops.\n *\n * Here's a bit of algebra that lets us compute `f(x)` directly from the stop\n * values without explicitly solving for `a` and `b`:\n *\n * First stop value: `f(x0) = y0 = a * base^x0 + b`\n * Second stop value: `f(x1) = y1 = a * base^x1 + b`\n * => `y1 - y0 = a(base^x1 - base^x0)`\n * => `a = (y1 - y0)/(base^x1 - base^x0)`\n *\n * Desired value: `f(x) = y = a * base^x + b`\n * => `f(x) = y0 + a * (base^x - base^x0)`\n *\n * From the above, we can replace the `a` in `a * (base^x - base^x0)` and do a\n * little algebra:\n * ```\n * a * (base^x - base^x0) = (y1 - y0)/(base^x1 - base^x0) * (base^x - base^x0)\n * = (y1 - y0) * (base^x - base^x0) / (base^x1 - base^x0)\n * ```\n *\n * If we let `(base^x - base^x0) / (base^x1 base^x0)`, then we have\n * `f(x) = y0 + (y1 - y0) * ratio`. In other words, `ratio` may be treated as\n * an interpolation factor between the two stops' output values.\n *\n * (Note: a slightly different form for `ratio`,\n * `(base^(x-x0) - 1) / (base^(x1-x0) - 1) `, is equivalent, but requires fewer\n * expensive `Math.pow()` operations.)\n *\n * @private\n*/\nfunction exponentialInterpolation(input, base, lowerValue, upperValue) {\n const difference = upperValue - lowerValue;\n const progress = input - lowerValue;\n\n if (difference === 0) {\n return 0;\n } else if (base === 1) {\n return progress / difference;\n } else {\n return (Math.pow(base, progress) - 1) / (Math.pow(base, difference) - 1);\n }\n}\n\nexport default Interpolate;\n","// @flow\n\nimport assert from 'assert';\n\nimport { checkSubtype, ValueType } from '../types';\n\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Value } from '../values';\nimport type { Type } from '../types';\n\nclass Coalesce implements Expression {\n type: Type;\n args: Array;\n\n constructor(type: Type, args: Array) {\n this.type = type;\n this.args = args;\n }\n\n static parse(args: Array, context: ParsingContext) {\n if (args.length < 2) {\n return context.error(\"Expectected at least one argument.\");\n }\n let outputType: Type = (null: any);\n const expectedType = context.expectedType;\n if (expectedType && expectedType.kind !== 'value') {\n outputType = expectedType;\n }\n const parsedArgs = [];\n\n for (const arg of args.slice(1)) {\n const parsed = context.parse(arg, 1 + parsedArgs.length, outputType, undefined, {typeAnnotation: 'omit'});\n if (!parsed) return null;\n outputType = outputType || parsed.type;\n parsedArgs.push(parsed);\n }\n assert(outputType);\n\n // Above, we parse arguments without inferred type annotation so that\n // they don't produce a runtime error for `null` input, which would\n // preempt the desired null-coalescing behavior.\n // Thus, if any of our arguments would have needed an annotation, we\n // need to wrap the enclosing coalesce expression with it instead.\n const needsAnnotation = expectedType &&\n parsedArgs.some(arg => checkSubtype(expectedType, arg.type));\n\n return needsAnnotation ?\n new Coalesce(ValueType, parsedArgs) :\n new Coalesce((outputType: any), parsedArgs);\n }\n\n evaluate(ctx: EvaluationContext) {\n let result = null;\n for (const arg of this.args) {\n result = arg.evaluate(ctx);\n if (result !== null) break;\n }\n return result;\n }\n\n eachChild(fn: (Expression) => void) {\n this.args.forEach(fn);\n }\n\n possibleOutputs(): Array {\n return [].concat(...this.args.map((arg) => arg.possibleOutputs()));\n }\n\n serialize() {\n const serialized = [\"coalesce\"];\n this.eachChild(child => { serialized.push(child.serialize()); });\n return serialized;\n }\n}\n\nexport default Coalesce;\n","// @flow\n\nimport type { Type } from '../types';\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\n\nclass Let implements Expression {\n type: Type;\n bindings: Array<[string, Expression]>;\n result: Expression;\n\n constructor(bindings: Array<[string, Expression]>, result: Expression) {\n this.type = result.type;\n this.bindings = [].concat(bindings);\n this.result = result;\n }\n\n evaluate(ctx: EvaluationContext) {\n return this.result.evaluate(ctx);\n }\n\n eachChild(fn: (Expression) => void) {\n for (const binding of this.bindings) {\n fn(binding[1]);\n }\n fn(this.result);\n }\n\n static parse(args: Array, context: ParsingContext) {\n if (args.length < 4)\n return context.error(`Expected at least 3 arguments, but found ${args.length - 1} instead.`);\n\n const bindings: Array<[string, Expression]> = [];\n for (let i = 1; i < args.length - 1; i += 2) {\n const name = args[i];\n\n if (typeof name !== 'string') {\n return context.error(`Expected string, but found ${typeof name} instead.`, i);\n }\n\n if (/[^a-zA-Z0-9_]/.test(name)) {\n return context.error(`Variable names must contain only alphanumeric characters or '_'.`, i);\n }\n\n const value = context.parse(args[i + 1], i + 1);\n if (!value) return null;\n\n bindings.push([name, value]);\n }\n\n const result = context.parse(args[args.length - 1], args.length - 1, context.expectedType, bindings);\n if (!result) return null;\n\n return new Let(bindings, result);\n }\n\n possibleOutputs() {\n return this.result.possibleOutputs();\n }\n\n serialize() {\n const serialized = [\"let\"];\n for (const [name, expr] of this.bindings) {\n serialized.push(name, expr.serialize());\n }\n serialized.push(this.result.serialize());\n return serialized;\n }\n}\n\nexport default Let;\n","// @flow\n\nimport { array, ValueType, NumberType } from '../types';\n\nimport RuntimeError from '../runtime_error';\n\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Type, ArrayType } from '../types';\nimport type { Value } from '../values';\n\nclass At implements Expression {\n type: Type;\n index: Expression;\n input: Expression;\n\n constructor(type: Type, index: Expression, input: Expression) {\n this.type = type;\n this.index = index;\n this.input = input;\n }\n\n static parse(args: Array, context: ParsingContext) {\n if (args.length !== 3)\n return context.error(`Expected 2 arguments, but found ${args.length - 1} instead.`);\n\n const index = context.parse(args[1], 1, NumberType);\n const input = context.parse(args[2], 2, array(context.expectedType || ValueType));\n\n if (!index || !input) return null;\n\n const t: ArrayType = (input.type: any);\n return new At(t.itemType, index, input);\n }\n\n evaluate(ctx: EvaluationContext) {\n const index = ((this.index.evaluate(ctx): any): number);\n const array = ((this.input.evaluate(ctx): any): Array);\n\n if (index < 0) {\n throw new RuntimeError(`Array index out of bounds: ${index} < 0.`);\n }\n\n if (index >= array.length) {\n throw new RuntimeError(`Array index out of bounds: ${index} > ${array.length - 1}.`);\n }\n\n if (index !== Math.floor(index)) {\n throw new RuntimeError(`Array index must be an integer, but found ${index} instead.`);\n }\n\n return array[index];\n }\n\n eachChild(fn: (Expression) => void) {\n fn(this.index);\n fn(this.input);\n }\n\n possibleOutputs() {\n return [undefined];\n }\n\n serialize() {\n return [\"at\", this.index.serialize(), this.input.serialize()];\n }\n}\n\nexport default At;\n","// @flow\n\nimport assert from 'assert';\n\nimport { typeOf } from '../values';\nimport { ValueType, type Type } from '../types';\n\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Value } from '../values';\n\n// Map input label values to output expression index\ntype Cases = {[number | string]: number};\n\nclass Match implements Expression {\n type: Type;\n inputType: Type;\n\n input: Expression;\n cases: Cases;\n outputs: Array;\n otherwise: Expression;\n\n constructor(inputType: Type, outputType: Type, input: Expression, cases: Cases, outputs: Array, otherwise: Expression) {\n this.inputType = inputType;\n this.type = outputType;\n this.input = input;\n this.cases = cases;\n this.outputs = outputs;\n this.otherwise = otherwise;\n }\n\n static parse(args: Array, context: ParsingContext) {\n if (args.length < 5)\n return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`);\n if (args.length % 2 !== 1)\n return context.error(`Expected an even number of arguments.`);\n\n let inputType;\n let outputType;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n const cases = {};\n const outputs = [];\n for (let i = 2; i < args.length - 1; i += 2) {\n let labels = args[i];\n const value = args[i + 1];\n\n if (!Array.isArray(labels)) {\n labels = [labels];\n }\n\n const labelContext = context.concat(i);\n if (labels.length === 0) {\n return labelContext.error('Expected at least one branch label.');\n }\n\n for (const label of labels) {\n if (typeof label !== 'number' && typeof label !== 'string') {\n return labelContext.error(`Branch labels must be numbers or strings.`);\n } else if (typeof label === 'number' && Math.abs(label) > Number.MAX_SAFE_INTEGER) {\n return labelContext.error(`Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`);\n\n } else if (typeof label === 'number' && Math.floor(label) !== label) {\n return labelContext.error(`Numeric branch labels must be integer values.`);\n\n } else if (!inputType) {\n inputType = typeOf(label);\n } else if (labelContext.checkSubtype(inputType, typeOf(label))) {\n return null;\n }\n\n if (typeof cases[String(label)] !== 'undefined') {\n return labelContext.error('Branch labels must be unique.');\n }\n\n cases[String(label)] = outputs.length;\n }\n\n const result = context.parse(value, i, outputType);\n if (!result) return null;\n outputType = outputType || result.type;\n outputs.push(result);\n }\n\n const input = context.parse(args[1], 1, ValueType);\n if (!input) return null;\n\n const otherwise = context.parse(args[args.length - 1], args.length - 1, outputType);\n if (!otherwise) return null;\n\n assert(inputType && outputType);\n\n if (input.type.kind !== 'value' && context.concat(1).checkSubtype((inputType: any), input.type)) {\n return null;\n }\n\n return new Match((inputType: any), (outputType: any), input, cases, outputs, otherwise);\n }\n\n evaluate(ctx: EvaluationContext) {\n const input = (this.input.evaluate(ctx): any);\n const output = (typeOf(input) === this.inputType && this.outputs[this.cases[input]]) || this.otherwise;\n return output.evaluate(ctx);\n }\n\n eachChild(fn: (Expression) => void) {\n fn(this.input);\n this.outputs.forEach(fn);\n fn(this.otherwise);\n }\n\n possibleOutputs(): Array {\n return []\n .concat(...this.outputs.map((out) => out.possibleOutputs()))\n .concat(this.otherwise.possibleOutputs());\n }\n\n serialize(): Array {\n const serialized = [\"match\", this.input.serialize()];\n\n // Sort so serialization has an arbitrary defined order, even though\n // branch order doesn't affect evaluation\n const sortedLabels = Object.keys(this.cases).sort();\n\n // Group branches by unique match expression to support condensed\n // serializations of the form [case1, case2, ...] -> matchExpression\n const groupedByOutput: Array<[number, Array]> = [];\n const outputLookup: {[index: number]: number} = {}; // lookup index into groupedByOutput for a given output expression\n for (const label of sortedLabels) {\n const outputIndex = outputLookup[this.cases[label]];\n if (outputIndex === undefined) {\n // First time seeing this output, add it to the end of the grouped list\n outputLookup[this.cases[label]] = groupedByOutput.length;\n groupedByOutput.push([this.cases[label], [label]]);\n } else {\n // We've seen this expression before, add the label to that output's group\n groupedByOutput[outputIndex][1].push(label);\n }\n }\n\n const coerceLabel = (label) => this.inputType.kind === 'number' ? Number(label) : label;\n\n for (const [outputIndex, labels] of groupedByOutput) {\n if (labels.length === 1) {\n // Only a single label matches this output expression\n serialized.push(coerceLabel(labels[0]));\n } else {\n // Array of literal labels pointing to this output expression\n serialized.push(labels.map(coerceLabel));\n }\n serialized.push(this.outputs[outputIndex].serialize());\n }\n serialized.push(this.otherwise.serialize());\n return serialized;\n }\n}\n\nexport default Match;\n","// @flow\n\nimport assert from 'assert';\n\nimport { BooleanType } from '../types';\n\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Value } from '../values';\nimport type { Type } from '../types';\n\ntype Branches = Array<[Expression, Expression]>;\n\nclass Case implements Expression {\n type: Type;\n\n branches: Branches;\n otherwise: Expression;\n\n constructor(type: Type, branches: Branches, otherwise: Expression) {\n this.type = type;\n this.branches = branches;\n this.otherwise = otherwise;\n }\n\n static parse(args: Array, context: ParsingContext) {\n if (args.length < 4)\n return context.error(`Expected at least 3 arguments, but found only ${args.length - 1}.`);\n if (args.length % 2 !== 0)\n return context.error(`Expected an odd number of arguments.`);\n\n let outputType: ?Type;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n\n const branches = [];\n for (let i = 1; i < args.length - 1; i += 2) {\n const test = context.parse(args[i], i, BooleanType);\n if (!test) return null;\n\n const result = context.parse(args[i + 1], i + 1, outputType);\n if (!result) return null;\n\n branches.push([test, result]);\n\n outputType = outputType || result.type;\n }\n\n const otherwise = context.parse(args[args.length - 1], args.length - 1, outputType);\n if (!otherwise) return null;\n\n assert(outputType);\n return new Case((outputType: any), branches, otherwise);\n }\n\n evaluate(ctx: EvaluationContext) {\n for (const [test, expression] of this.branches) {\n if (test.evaluate(ctx)) {\n return expression.evaluate(ctx);\n }\n }\n return this.otherwise.evaluate(ctx);\n }\n\n eachChild(fn: (Expression) => void) {\n for (const [test, expression] of this.branches) {\n fn(test);\n fn(expression);\n }\n fn(this.otherwise);\n }\n\n possibleOutputs(): Array {\n return []\n .concat(...this.branches.map(([_, out]) => out.possibleOutputs()))\n .concat(this.otherwise.possibleOutputs());\n }\n\n serialize() {\n const serialized = [\"case\"];\n this.eachChild(child => { serialized.push(child.serialize()); });\n return serialized;\n }\n}\n\nexport default Case;\n","// @flow\n\nimport { toString, ValueType, BooleanType, CollatorType } from '../types';\nimport Assertion from './assertion';\nimport { typeOf } from '../values';\nimport RuntimeError from '../runtime_error';\n\nimport type { Expression } from '../expression';\nimport type EvaluationContext from '../evaluation_context';\nimport type ParsingContext from '../parsing_context';\nimport type { Type } from '../types';\n\ntype ComparisonOperator = '==' | '!=' | '<' | '>' | '<=' | '>=' ;\n\nfunction isComparableType(op: ComparisonOperator, type: Type) {\n if (op === '==' || op === '!=') {\n // equality operator\n return type.kind === 'boolean' ||\n type.kind === 'string' ||\n type.kind === 'number' ||\n type.kind === 'null' ||\n type.kind === 'value';\n } else {\n // ordering operator\n return type.kind === 'string' ||\n type.kind === 'number' ||\n type.kind === 'value';\n }\n}\n\n\nfunction eq(ctx, a, b) { return a === b; }\nfunction neq(ctx, a, b) { return a !== b; }\nfunction lt(ctx, a, b) { return a < b; }\nfunction gt(ctx, a, b) { return a > b; }\nfunction lteq(ctx, a, b) { return a <= b; }\nfunction gteq(ctx, a, b) { return a >= b; }\n\nfunction eqCollate(ctx, a, b, c) { return c.compare(a, b) === 0; }\nfunction neqCollate(ctx, a, b, c) { return !eqCollate(ctx, a, b, c); }\nfunction ltCollate(ctx, a, b, c) { return c.compare(a, b) < 0; }\nfunction gtCollate(ctx, a, b, c) { return c.compare(a, b) > 0; }\nfunction lteqCollate(ctx, a, b, c) { return c.compare(a, b) <= 0; }\nfunction gteqCollate(ctx, a, b, c) { return c.compare(a, b) >= 0; }\n\n/**\n * Special form for comparison operators, implementing the signatures:\n * - (T, T, ?Collator) => boolean\n * - (T, value, ?Collator) => boolean\n * - (value, T, ?Collator) => boolean\n *\n * For inequalities, T must be either value, string, or number. For ==/!=, it\n * can also be boolean or null.\n *\n * Equality semantics are equivalent to Javascript's strict equality (===/!==)\n * -- i.e., when the arguments' types don't match, == evaluates to false, != to\n * true.\n *\n * When types don't match in an ordering comparison, a runtime error is thrown.\n *\n * @private\n */\nfunction makeComparison(op: ComparisonOperator, compareBasic, compareWithCollator) {\n const isOrderComparison = op !== '==' && op !== '!=';\n\n return class Comparison implements Expression {\n type: Type;\n lhs: Expression;\n rhs: Expression;\n collator: ?Expression;\n hasUntypedArgument: boolean;\n\n constructor(lhs: Expression, rhs: Expression, collator: ?Expression) {\n this.type = BooleanType;\n this.lhs = lhs;\n this.rhs = rhs;\n this.collator = collator;\n this.hasUntypedArgument = lhs.type.kind === 'value' || rhs.type.kind === 'value';\n }\n\n static parse(args: Array, context: ParsingContext): ?Expression {\n if (args.length !== 3 && args.length !== 4)\n return context.error(`Expected two or three arguments.`);\n\n const op: ComparisonOperator = (args[0]: any);\n\n let lhs = context.parse(args[1], 1, ValueType);\n if (!lhs) return null;\n if (!isComparableType(op, lhs.type)) {\n return context.concat(1).error(`\"${op}\" comparisons are not supported for type '${toString(lhs.type)}'.`);\n }\n let rhs = context.parse(args[2], 2, ValueType);\n if (!rhs) return null;\n if (!isComparableType(op, rhs.type)) {\n return context.concat(2).error(`\"${op}\" comparisons are not supported for type '${toString(rhs.type)}'.`);\n }\n\n if (\n lhs.type.kind !== rhs.type.kind &&\n lhs.type.kind !== 'value' &&\n rhs.type.kind !== 'value'\n ) {\n return context.error(`Cannot compare types '${toString(lhs.type)}' and '${toString(rhs.type)}'.`);\n }\n\n if (isOrderComparison) {\n // typing rules specific to less/greater than operators\n if (lhs.type.kind === 'value' && rhs.type.kind !== 'value') {\n // (value, T)\n lhs = new Assertion(rhs.type, [lhs]);\n } else if (lhs.type.kind !== 'value' && rhs.type.kind === 'value') {\n // (T, value)\n rhs = new Assertion(lhs.type, [rhs]);\n }\n }\n\n let collator = null;\n if (args.length === 4) {\n if (\n lhs.type.kind !== 'string' &&\n rhs.type.kind !== 'string' &&\n lhs.type.kind !== 'value' &&\n rhs.type.kind !== 'value'\n ) {\n return context.error(`Cannot use collator to compare non-string types.`);\n }\n collator = context.parse(args[3], 3, CollatorType);\n if (!collator) return null;\n }\n\n return new Comparison(lhs, rhs, collator);\n }\n\n evaluate(ctx: EvaluationContext) {\n const lhs = this.lhs.evaluate(ctx);\n const rhs = this.rhs.evaluate(ctx);\n\n if (isOrderComparison && this.hasUntypedArgument) {\n const lt = typeOf(lhs);\n const rt = typeOf(rhs);\n // check that type is string or number, and equal\n if (lt.kind !== rt.kind || !(lt.kind === 'string' || lt.kind === 'number')) {\n throw new RuntimeError(`Expected arguments for \"${op}\" to be (string, string) or (number, number), but found (${lt.kind}, ${rt.kind}) instead.`);\n }\n }\n\n if (this.collator && !isOrderComparison && this.hasUntypedArgument) {\n const lt = typeOf(lhs);\n const rt = typeOf(rhs);\n if (lt.kind !== 'string' || rt.kind !== 'string') {\n return compareBasic(ctx, lhs, rhs);\n }\n }\n\n return this.collator ?\n compareWithCollator(ctx, lhs, rhs, this.collator.evaluate(ctx)) :\n compareBasic(ctx, lhs, rhs);\n }\n\n eachChild(fn: (Expression) => void) {\n fn(this.lhs);\n fn(this.rhs);\n if (this.collator) {\n fn(this.collator);\n }\n }\n\n possibleOutputs() {\n return [true, false];\n }\n\n serialize() {\n const serialized = [op];\n this.eachChild(child => { serialized.push(child.serialize()); });\n return serialized;\n }\n };\n}\n\nexport const Equals = makeComparison('==', eq, eqCollate);\nexport const NotEquals = makeComparison('!=', neq, neqCollate);\nexport const LessThan = makeComparison('<', lt, ltCollate);\nexport const GreaterThan = makeComparison('>', gt, gtCollate);\nexport const LessThanOrEqual = makeComparison('<=', lteq, lteqCollate);\nexport const GreaterThanOrEqual = makeComparison('>=', gteq, gteqCollate);\n","// @flow\n\nimport { NumberType, toString } from '../types';\n\nimport { typeOf } from '../values';\nimport RuntimeError from '../runtime_error';\n\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Type } from '../types';\n\nclass Length implements Expression {\n type: Type;\n input: Expression;\n\n constructor(input: Expression) {\n this.type = NumberType;\n this.input = input;\n }\n\n static parse(args: Array, context: ParsingContext) {\n if (args.length !== 2)\n return context.error(`Expected 1 argument, but found ${args.length - 1} instead.`);\n\n const input = context.parse(args[1], 1);\n if (!input) return null;\n\n if (input.type.kind !== 'array' && input.type.kind !== 'string' && input.type.kind !== 'value')\n return context.error(`Expected argument of type string or array, but found ${toString(input.type)} instead.`);\n\n return new Length(input);\n }\n\n evaluate(ctx: EvaluationContext) {\n const input = this.input.evaluate(ctx);\n if (typeof input === 'string') {\n return input.length;\n } else if (Array.isArray(input)) {\n return input.length;\n } else {\n throw new RuntimeError(`Expected value to be of type string or array, but found ${toString(typeOf(input))} instead.`);\n }\n }\n\n eachChild(fn: (Expression) => void) {\n fn(this.input);\n }\n\n possibleOutputs() {\n return [undefined];\n }\n\n serialize() {\n const serialized = [\"length\"];\n this.eachChild(child => { serialized.push(child.serialize()); });\n return serialized;\n }\n}\n\nexport default Length;\n","// @flow\n\nimport {\n type Type,\n NumberType,\n StringType,\n BooleanType,\n ColorType,\n ObjectType,\n ValueType,\n ErrorType,\n CollatorType,\n array,\n toString as typeToString\n} from '../types';\n\nimport { typeOf, Color, validateRGBA, toString as valueToString } from '../values';\nimport CompoundExpression from '../compound_expression';\nimport RuntimeError from '../runtime_error';\nimport Let from './let';\nimport Var from './var';\nimport Literal from './literal';\nimport Assertion from './assertion';\nimport Coercion from './coercion';\nimport At from './at';\nimport Match from './match';\nimport Case from './case';\nimport Step from './step';\nimport Interpolate from './interpolate';\nimport Coalesce from './coalesce';\nimport {\n Equals,\n NotEquals,\n LessThan,\n GreaterThan,\n LessThanOrEqual,\n GreaterThanOrEqual\n} from './comparison';\nimport CollatorExpression from './collator';\nimport FormatExpression from './format';\nimport Length from './length';\n\nimport type { Varargs } from '../compound_expression';\nimport type { ExpressionRegistry } from '../expression';\n\nconst expressions: ExpressionRegistry = {\n // special forms\n '==': Equals,\n '!=': NotEquals,\n '>': GreaterThan,\n '<': LessThan,\n '>=': GreaterThanOrEqual,\n '<=': LessThanOrEqual,\n 'array': Assertion,\n 'at': At,\n 'boolean': Assertion,\n 'case': Case,\n 'coalesce': Coalesce,\n 'collator': CollatorExpression,\n 'format': FormatExpression,\n 'interpolate': Interpolate,\n 'interpolate-hcl': Interpolate,\n 'interpolate-lab': Interpolate,\n 'length': Length,\n 'let': Let,\n 'literal': Literal,\n 'match': Match,\n 'number': Assertion,\n 'object': Assertion,\n 'step': Step,\n 'string': Assertion,\n 'to-boolean': Coercion,\n 'to-color': Coercion,\n 'to-number': Coercion,\n 'to-string': Coercion,\n 'var': Var\n};\n\nfunction rgba(ctx, [r, g, b, a]) {\n r = r.evaluate(ctx);\n g = g.evaluate(ctx);\n b = b.evaluate(ctx);\n const alpha = a ? a.evaluate(ctx) : 1;\n const error = validateRGBA(r, g, b, alpha);\n if (error) throw new RuntimeError(error);\n return new Color(r / 255 * alpha, g / 255 * alpha, b / 255 * alpha, alpha);\n}\n\nfunction has(key, obj) {\n return key in obj;\n}\n\nfunction get(key, obj) {\n const v = obj[key];\n return typeof v === 'undefined' ? null : v;\n}\n\nfunction binarySearch(v, a, i, j) {\n while (i <= j) {\n const m = (i + j) >> 1;\n if (a[m] === v)\n return true;\n if (a[m] > v)\n j = m - 1;\n else\n i = m + 1;\n }\n return false;\n}\n\nfunction varargs(type: Type): Varargs {\n return { type };\n}\n\nCompoundExpression.register(expressions, {\n 'error': [\n ErrorType,\n [StringType],\n (ctx, [v]) => { throw new RuntimeError(v.evaluate(ctx)); }\n ],\n 'typeof': [\n StringType,\n [ValueType],\n (ctx, [v]) => typeToString(typeOf(v.evaluate(ctx)))\n ],\n 'to-rgba': [\n array(NumberType, 4),\n [ColorType],\n (ctx, [v]) => {\n return v.evaluate(ctx).toArray();\n }\n ],\n 'rgb': [\n ColorType,\n [NumberType, NumberType, NumberType],\n rgba\n ],\n 'rgba': [\n ColorType,\n [NumberType, NumberType, NumberType, NumberType],\n rgba\n ],\n 'has': {\n type: BooleanType,\n overloads: [\n [\n [StringType],\n (ctx, [key]) => has(key.evaluate(ctx), ctx.properties())\n ], [\n [StringType, ObjectType],\n (ctx, [key, obj]) => has(key.evaluate(ctx), obj.evaluate(ctx))\n ]\n ]\n },\n 'get': {\n type: ValueType,\n overloads: [\n [\n [StringType],\n (ctx, [key]) => get(key.evaluate(ctx), ctx.properties())\n ], [\n [StringType, ObjectType],\n (ctx, [key, obj]) => get(key.evaluate(ctx), obj.evaluate(ctx))\n ]\n ]\n },\n 'feature-state': [\n ValueType,\n [StringType],\n (ctx, [key]) => get(key.evaluate(ctx), ctx.featureState || {})\n ],\n 'properties': [\n ObjectType,\n [],\n (ctx) => ctx.properties()\n ],\n 'geometry-type': [\n StringType,\n [],\n (ctx) => ctx.geometryType()\n ],\n 'id': [\n ValueType,\n [],\n (ctx) => ctx.id()\n ],\n 'zoom': [\n NumberType,\n [],\n (ctx) => ctx.globals.zoom\n ],\n 'heatmap-density': [\n NumberType,\n [],\n (ctx) => ctx.globals.heatmapDensity || 0\n ],\n 'line-progress': [\n NumberType,\n [],\n (ctx) => ctx.globals.lineProgress || 0\n ],\n '+': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => {\n let result = 0;\n for (const arg of args) {\n result += arg.evaluate(ctx);\n }\n return result;\n }\n ],\n '*': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => {\n let result = 1;\n for (const arg of args) {\n result *= arg.evaluate(ctx);\n }\n return result;\n }\n ],\n '-': {\n type: NumberType,\n overloads: [\n [\n [NumberType, NumberType],\n (ctx, [a, b]) => a.evaluate(ctx) - b.evaluate(ctx)\n ], [\n [NumberType],\n (ctx, [a]) => -a.evaluate(ctx)\n ]\n ]\n },\n '/': [\n NumberType,\n [NumberType, NumberType],\n (ctx, [a, b]) => a.evaluate(ctx) / b.evaluate(ctx)\n ],\n '%': [\n NumberType,\n [NumberType, NumberType],\n (ctx, [a, b]) => a.evaluate(ctx) % b.evaluate(ctx)\n ],\n 'ln2': [\n NumberType,\n [],\n () => Math.LN2\n ],\n 'pi': [\n NumberType,\n [],\n () => Math.PI\n ],\n 'e': [\n NumberType,\n [],\n () => Math.E\n ],\n '^': [\n NumberType,\n [NumberType, NumberType],\n (ctx, [b, e]) => Math.pow(b.evaluate(ctx), e.evaluate(ctx))\n ],\n 'sqrt': [\n NumberType,\n [NumberType],\n (ctx, [x]) => Math.sqrt(x.evaluate(ctx))\n ],\n 'log10': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN10\n ],\n 'ln': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx))\n ],\n 'log2': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN2\n ],\n 'sin': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.sin(n.evaluate(ctx))\n ],\n 'cos': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.cos(n.evaluate(ctx))\n ],\n 'tan': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.tan(n.evaluate(ctx))\n ],\n 'asin': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.asin(n.evaluate(ctx))\n ],\n 'acos': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.acos(n.evaluate(ctx))\n ],\n 'atan': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.atan(n.evaluate(ctx))\n ],\n 'min': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => Math.min(...args.map(arg => arg.evaluate(ctx)))\n ],\n 'max': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => Math.max(...args.map(arg => arg.evaluate(ctx)))\n ],\n 'abs': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.abs(n.evaluate(ctx))\n ],\n 'round': [\n NumberType,\n [NumberType],\n (ctx, [n]) => {\n const v = n.evaluate(ctx);\n // Javascript's Math.round() rounds towards +Infinity for halfway\n // values, even when they're negative. It's more common to round\n // away from 0 (e.g., this is what python and C++ do)\n return v < 0 ? -Math.round(-v) : Math.round(v);\n }\n ],\n 'floor': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.floor(n.evaluate(ctx))\n ],\n 'ceil': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.ceil(n.evaluate(ctx))\n ],\n 'filter-==': [\n BooleanType,\n [StringType, ValueType],\n (ctx, [k, v]) => ctx.properties()[(k: any).value] === (v: any).value\n ],\n 'filter-id-==': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => ctx.id() === (v: any).value\n ],\n 'filter-type-==': [\n BooleanType,\n [StringType],\n (ctx, [v]) => ctx.geometryType() === (v: any).value\n ],\n 'filter-<': [\n BooleanType,\n [StringType, ValueType],\n (ctx, [k, v]) => {\n const a = ctx.properties()[(k: any).value];\n const b = (v: any).value;\n return typeof a === typeof b && a < b;\n }\n ],\n 'filter-id-<': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = (v: any).value;\n return typeof a === typeof b && a < b;\n }\n ],\n 'filter->': [\n BooleanType,\n [StringType, ValueType],\n (ctx, [k, v]) => {\n const a = ctx.properties()[(k: any).value];\n const b = (v: any).value;\n return typeof a === typeof b && a > b;\n }\n ],\n 'filter-id->': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = (v: any).value;\n return typeof a === typeof b && a > b;\n }\n ],\n 'filter-<=': [\n BooleanType,\n [StringType, ValueType],\n (ctx, [k, v]) => {\n const a = ctx.properties()[(k: any).value];\n const b = (v: any).value;\n return typeof a === typeof b && a <= b;\n }\n ],\n 'filter-id-<=': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = (v: any).value;\n return typeof a === typeof b && a <= b;\n }\n ],\n 'filter->=': [\n BooleanType,\n [StringType, ValueType],\n (ctx, [k, v]) => {\n const a = ctx.properties()[(k: any).value];\n const b = (v: any).value;\n return typeof a === typeof b && a >= b;\n }\n ],\n 'filter-id->=': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = (v: any).value;\n return typeof a === typeof b && a >= b;\n }\n ],\n 'filter-has': [\n BooleanType,\n [ValueType],\n (ctx, [k]) => (k: any).value in ctx.properties()\n ],\n 'filter-has-id': [\n BooleanType,\n [],\n (ctx) => ctx.id() !== null\n ],\n 'filter-type-in': [\n BooleanType,\n [array(StringType)],\n (ctx, [v]) => (v: any).value.indexOf(ctx.geometryType()) >= 0\n ],\n 'filter-id-in': [\n BooleanType,\n [array(ValueType)],\n (ctx, [v]) => (v: any).value.indexOf(ctx.id()) >= 0\n ],\n 'filter-in-small': [\n BooleanType,\n [StringType, array(ValueType)],\n // assumes v is an array literal\n (ctx, [k, v]) => (v: any).value.indexOf(ctx.properties()[(k: any).value]) >= 0\n ],\n 'filter-in-large': [\n BooleanType,\n [StringType, array(ValueType)],\n // assumes v is a array literal with values sorted in ascending order and of a single type\n (ctx, [k, v]) => binarySearch(ctx.properties()[(k: any).value], (v: any).value, 0, (v: any).value.length - 1)\n ],\n 'all': {\n type: BooleanType,\n overloads: [\n [\n [BooleanType, BooleanType],\n (ctx, [a, b]) => a.evaluate(ctx) && b.evaluate(ctx)\n ],\n [\n varargs(BooleanType),\n (ctx, args) => {\n for (const arg of args) {\n if (!arg.evaluate(ctx))\n return false;\n }\n return true;\n }\n ]\n ]\n },\n 'any': {\n type: BooleanType,\n overloads: [\n [\n [BooleanType, BooleanType],\n (ctx, [a, b]) => a.evaluate(ctx) || b.evaluate(ctx)\n ],\n [\n varargs(BooleanType),\n (ctx, args) => {\n for (const arg of args) {\n if (arg.evaluate(ctx))\n return true;\n }\n return false;\n }\n ]\n ]\n },\n '!': [\n BooleanType,\n [BooleanType],\n (ctx, [b]) => !b.evaluate(ctx)\n ],\n 'is-supported-script': [\n BooleanType,\n [StringType],\n // At parse time this will always return true, so we need to exclude this expression with isGlobalPropertyConstant\n (ctx, [s]) => {\n const isSupportedScript = ctx.globals && ctx.globals.isSupportedScript;\n if (isSupportedScript) {\n return isSupportedScript(s.evaluate(ctx));\n }\n return true;\n }\n ],\n 'upcase': [\n StringType,\n [StringType],\n (ctx, [s]) => s.evaluate(ctx).toUpperCase()\n ],\n 'downcase': [\n StringType,\n [StringType],\n (ctx, [s]) => s.evaluate(ctx).toLowerCase()\n ],\n 'concat': [\n StringType,\n varargs(ValueType),\n (ctx, args) => args.map(arg => valueToString(arg.evaluate(ctx))).join('')\n ],\n 'resolved-locale': [\n StringType,\n [CollatorType],\n (ctx, [collator]) => collator.evaluate(ctx).resolvedLocale()\n ]\n});\n\nexport default expressions;\n","// @flow\n\n/**\n * A type used for returning and propagating errors. The first element of the union\n * represents success and contains a value, and the second represents an error and\n * contains an error value.\n * @private\n */\nexport type Result =\n | {| result: 'success', value: T |}\n | {| result: 'error', value: E |};\n\nexport function success(value: T): Result {\n return { result: 'success', value };\n}\n\nexport function error(value: E): Result {\n return { result: 'error', value };\n}\n","// @flow\n\nimport type {StylePropertySpecification} from '../style-spec';\n\nexport function supportsPropertyExpression(spec: StylePropertySpecification): boolean {\n return spec['property-type'] === 'data-driven' || spec['property-type'] === 'cross-faded-data-driven';\n}\n\nexport function supportsZoomExpression(spec: StylePropertySpecification): boolean {\n return !!spec.expression && spec.expression.parameters.indexOf('zoom') > -1;\n}\n\nexport function supportsInterpolation(spec: StylePropertySpecification): boolean {\n return !!spec.expression && spec.expression.interpolated;\n}\n","\nexport default function getType(val) {\n if (val instanceof Number) {\n return 'number';\n } else if (val instanceof String) {\n return 'string';\n } else if (val instanceof Boolean) {\n return 'boolean';\n } else if (Array.isArray(val)) {\n return 'array';\n } else if (val === null) {\n return 'null';\n } else {\n return typeof val;\n }\n}\n","\nimport * as colorSpaces from '../util/color_spaces';\nimport Color from '../util/color';\nimport extend from '../util/extend';\nimport getType from '../util/get_type';\nimport * as interpolate from '../util/interpolate';\nimport Interpolate from '../expression/definitions/interpolate';\nimport Formatted from '../expression/types/formatted';\nimport { supportsInterpolation } from '../util/properties';\n\nexport function isFunction(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction identityFunction(x) {\n return x;\n}\n\nexport function createFunction(parameters, propertySpec) {\n const isColor = propertySpec.type === 'color';\n const zoomAndFeatureDependent = parameters.stops && typeof parameters.stops[0][0] === 'object';\n const featureDependent = zoomAndFeatureDependent || parameters.property !== undefined;\n const zoomDependent = zoomAndFeatureDependent || !featureDependent;\n const type = parameters.type || (supportsInterpolation(propertySpec) ? 'exponential' : 'interval');\n\n if (isColor) {\n parameters = extend({}, parameters);\n\n if (parameters.stops) {\n parameters.stops = parameters.stops.map((stop) => {\n return [stop[0], Color.parse(stop[1])];\n });\n }\n\n if (parameters.default) {\n parameters.default = Color.parse(parameters.default);\n } else {\n parameters.default = Color.parse(propertySpec.default);\n }\n }\n\n if (parameters.colorSpace && parameters.colorSpace !== 'rgb' && !colorSpaces[parameters.colorSpace]) { // eslint-disable-line import/namespace\n throw new Error(`Unknown color space: ${parameters.colorSpace}`);\n }\n\n let innerFun;\n let hashedStops;\n let categoricalKeyType;\n if (type === 'exponential') {\n innerFun = evaluateExponentialFunction;\n } else if (type === 'interval') {\n innerFun = evaluateIntervalFunction;\n } else if (type === 'categorical') {\n innerFun = evaluateCategoricalFunction;\n\n // For categorical functions, generate an Object as a hashmap of the stops for fast searching\n hashedStops = Object.create(null);\n for (const stop of parameters.stops) {\n hashedStops[stop[0]] = stop[1];\n }\n\n // Infer key type based on first stop key-- used to encforce strict type checking later\n categoricalKeyType = typeof parameters.stops[0][0];\n\n } else if (type === 'identity') {\n innerFun = evaluateIdentityFunction;\n } else {\n throw new Error(`Unknown function type \"${type}\"`);\n }\n\n if (zoomAndFeatureDependent) {\n const featureFunctions = {};\n const zoomStops = [];\n for (let s = 0; s < parameters.stops.length; s++) {\n const stop = parameters.stops[s];\n const zoom = stop[0].zoom;\n if (featureFunctions[zoom] === undefined) {\n featureFunctions[zoom] = {\n zoom: zoom,\n type: parameters.type,\n property: parameters.property,\n default: parameters.default,\n stops: []\n };\n zoomStops.push(zoom);\n }\n featureFunctions[zoom].stops.push([stop[0].value, stop[1]]);\n }\n\n const featureFunctionStops = [];\n for (const z of zoomStops) {\n featureFunctionStops.push([featureFunctions[z].zoom, createFunction(featureFunctions[z], propertySpec)]);\n }\n\n return {\n kind: 'composite',\n interpolationFactor: Interpolate.interpolationFactor.bind(undefined, {name: 'linear'}),\n zoomStops: featureFunctionStops.map(s => s[0]),\n evaluate({zoom}, properties) {\n return evaluateExponentialFunction({\n stops: featureFunctionStops,\n base: parameters.base\n }, propertySpec, zoom).evaluate(zoom, properties);\n }\n };\n } else if (zoomDependent) {\n return {\n kind: 'camera',\n interpolationFactor: type === 'exponential' ?\n Interpolate.interpolationFactor.bind(undefined, {name: 'exponential', base: parameters.base !== undefined ? parameters.base : 1}) :\n () => 0,\n zoomStops: parameters.stops.map(s => s[0]),\n evaluate: ({zoom}) => innerFun(parameters, propertySpec, zoom, hashedStops, categoricalKeyType)\n };\n } else {\n return {\n kind: 'source',\n evaluate(_, feature) {\n const value = feature && feature.properties ? feature.properties[parameters.property] : undefined;\n if (value === undefined) {\n return coalesce(parameters.default, propertySpec.default);\n }\n return innerFun(parameters, propertySpec, value, hashedStops, categoricalKeyType);\n }\n };\n }\n}\n\nfunction coalesce(a, b, c) {\n if (a !== undefined) return a;\n if (b !== undefined) return b;\n if (c !== undefined) return c;\n}\n\nfunction evaluateCategoricalFunction(parameters, propertySpec, input, hashedStops, keyType) {\n const evaluated = typeof input === keyType ? hashedStops[input] : undefined; // Enforce strict typing on input\n return coalesce(evaluated, parameters.default, propertySpec.default);\n}\n\nfunction evaluateIntervalFunction(parameters, propertySpec, input) {\n // Edge cases\n if (getType(input) !== 'number') return coalesce(parameters.default, propertySpec.default);\n const n = parameters.stops.length;\n if (n === 1) return parameters.stops[0][1];\n if (input <= parameters.stops[0][0]) return parameters.stops[0][1];\n if (input >= parameters.stops[n - 1][0]) return parameters.stops[n - 1][1];\n\n const index = findStopLessThanOrEqualTo(parameters.stops, input);\n\n return parameters.stops[index][1];\n}\n\nfunction evaluateExponentialFunction(parameters, propertySpec, input) {\n const base = parameters.base !== undefined ? parameters.base : 1;\n\n // Edge cases\n if (getType(input) !== 'number') return coalesce(parameters.default, propertySpec.default);\n const n = parameters.stops.length;\n if (n === 1) return parameters.stops[0][1];\n if (input <= parameters.stops[0][0]) return parameters.stops[0][1];\n if (input >= parameters.stops[n - 1][0]) return parameters.stops[n - 1][1];\n\n const index = findStopLessThanOrEqualTo(parameters.stops, input);\n const t = interpolationFactor(\n input, base,\n parameters.stops[index][0],\n parameters.stops[index + 1][0]);\n\n const outputLower = parameters.stops[index][1];\n const outputUpper = parameters.stops[index + 1][1];\n let interp = interpolate[propertySpec.type] || identityFunction; // eslint-disable-line import/namespace\n\n if (parameters.colorSpace && parameters.colorSpace !== 'rgb') {\n const colorspace = colorSpaces[parameters.colorSpace]; // eslint-disable-line import/namespace\n interp = (a, b) => colorspace.reverse(colorspace.interpolate(colorspace.forward(a), colorspace.forward(b), t));\n }\n\n if (typeof outputLower.evaluate === 'function') {\n return {\n evaluate(...args) {\n const evaluatedLower = outputLower.evaluate.apply(undefined, args);\n const evaluatedUpper = outputUpper.evaluate.apply(undefined, args);\n // Special case for fill-outline-color, which has no spec default.\n if (evaluatedLower === undefined || evaluatedUpper === undefined) {\n return undefined;\n }\n return interp(evaluatedLower, evaluatedUpper, t);\n }\n };\n }\n\n return interp(outputLower, outputUpper, t);\n}\n\nfunction evaluateIdentityFunction(parameters, propertySpec, input) {\n if (propertySpec.type === 'color') {\n input = Color.parse(input);\n } else if (propertySpec.type === 'formatted') {\n input = Formatted.fromString(input.toString());\n } else if (getType(input) !== propertySpec.type && (propertySpec.type !== 'enum' || !propertySpec.values[input])) {\n input = undefined;\n }\n return coalesce(input, parameters.default, propertySpec.default);\n}\n\n/**\n * Returns the index of the last stop <= input, or 0 if it doesn't exist.\n *\n * @private\n */\nfunction findStopLessThanOrEqualTo(stops, input) {\n const n = stops.length;\n let lowerIndex = 0;\n let upperIndex = n - 1;\n let currentIndex = 0;\n let currentValue, upperValue;\n\n while (lowerIndex <= upperIndex) {\n currentIndex = Math.floor((lowerIndex + upperIndex) / 2);\n currentValue = stops[currentIndex][0];\n upperValue = stops[currentIndex + 1][0];\n if (input === currentValue || input > currentValue && input < upperValue) { // Search complete\n return currentIndex;\n } else if (currentValue < input) {\n lowerIndex = currentIndex + 1;\n } else if (currentValue > input) {\n upperIndex = currentIndex - 1;\n }\n }\n\n return Math.max(currentIndex - 1, 0);\n}\n\n/**\n * Returns a ratio that can be used to interpolate between exponential function\n * stops.\n *\n * How it works:\n * Two consecutive stop values define a (scaled and shifted) exponential\n * function `f(x) = a * base^x + b`, where `base` is the user-specified base,\n * and `a` and `b` are constants affording sufficient degrees of freedom to fit\n * the function to the given stops.\n *\n * Here's a bit of algebra that lets us compute `f(x)` directly from the stop\n * values without explicitly solving for `a` and `b`:\n *\n * First stop value: `f(x0) = y0 = a * base^x0 + b`\n * Second stop value: `f(x1) = y1 = a * base^x1 + b`\n * => `y1 - y0 = a(base^x1 - base^x0)`\n * => `a = (y1 - y0)/(base^x1 - base^x0)`\n *\n * Desired value: `f(x) = y = a * base^x + b`\n * => `f(x) = y0 + a * (base^x - base^x0)`\n *\n * From the above, we can replace the `a` in `a * (base^x - base^x0)` and do a\n * little algebra:\n * ```\n * a * (base^x - base^x0) = (y1 - y0)/(base^x1 - base^x0) * (base^x - base^x0)\n * = (y1 - y0) * (base^x - base^x0) / (base^x1 - base^x0)\n * ```\n *\n * If we let `(base^x - base^x0) / (base^x1 base^x0)`, then we have\n * `f(x) = y0 + (y1 - y0) * ratio`. In other words, `ratio` may be treated as\n * an interpolation factor between the two stops' output values.\n *\n * (Note: a slightly different form for `ratio`,\n * `(base^(x-x0) - 1) / (base^(x1-x0) - 1) `, is equivalent, but requires fewer\n * expensive `Math.pow()` operations.)\n *\n * @private\n */\nfunction interpolationFactor(input, base, lowerValue, upperValue) {\n const difference = upperValue - lowerValue;\n const progress = input - lowerValue;\n\n if (difference === 0) {\n return 0;\n } else if (base === 1) {\n return progress / difference;\n } else {\n return (Math.pow(base, progress) - 1) / (Math.pow(base, difference) - 1);\n }\n}\n","// @flow\n\nimport assert from 'assert';\n\nimport extend from '../util/extend';\nimport ParsingError from './parsing_error';\nimport ParsingContext from './parsing_context';\nimport EvaluationContext from './evaluation_context';\nimport CompoundExpression from './compound_expression';\nimport Step from './definitions/step';\nimport Interpolate from './definitions/interpolate';\nimport Coalesce from './definitions/coalesce';\nimport Let from './definitions/let';\nimport definitions from './definitions';\nimport * as isConstant from './is_constant';\nimport RuntimeError from './runtime_error';\nimport { success, error } from '../util/result';\nimport { supportsPropertyExpression, supportsZoomExpression, supportsInterpolation } from '../util/properties';\n\nimport type {Type} from './types';\nimport type {Value} from './values';\nimport type {Expression} from './expression';\nimport type {StylePropertySpecification} from '../style-spec';\nimport type {Result} from '../util/result';\nimport type {InterpolationType} from './definitions/interpolate';\nimport type {PropertyValueSpecification} from '../types';\n\nexport type Feature = {\n +type: 1 | 2 | 3 | 'Unknown' | 'Point' | 'MultiPoint' | 'LineString' | 'MultiLineString' | 'Polygon' | 'MultiPolygon',\n +id?: any,\n +properties: {[string]: any},\n +patterns?: {[string]: {\"min\": string, \"mid\": string, \"max\": string}}\n};\n\nexport type FeatureState = {[string]: any};\n\nexport type GlobalProperties = $ReadOnly<{\n zoom: number,\n heatmapDensity?: number,\n lineProgress?: number,\n isSupportedScript?: (string) => boolean\n}>;\n\nexport class StyleExpression {\n expression: Expression;\n\n _evaluator: EvaluationContext;\n _defaultValue: Value;\n _warningHistory: {[key: string]: boolean};\n _enumValues: ?{[string]: any};\n\n constructor(expression: Expression, propertySpec: StylePropertySpecification) {\n this.expression = expression;\n this._warningHistory = {};\n this._evaluator = new EvaluationContext();\n this._defaultValue = getDefaultValue(propertySpec);\n this._enumValues = propertySpec.type === 'enum' ? propertySpec.values : null;\n }\n\n evaluateWithoutErrorHandling(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState): any {\n this._evaluator.globals = globals;\n this._evaluator.feature = feature;\n this._evaluator.featureState = featureState;\n\n return this.expression.evaluate(this._evaluator);\n }\n\n evaluate(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState): any {\n this._evaluator.globals = globals;\n this._evaluator.feature = feature || null;\n this._evaluator.featureState = featureState || null;\n\n try {\n const val = this.expression.evaluate(this._evaluator);\n if (val === null || val === undefined) {\n return this._defaultValue;\n }\n if (this._enumValues && !(val in this._enumValues)) {\n throw new RuntimeError(`Expected value to be one of ${Object.keys(this._enumValues).map(v => JSON.stringify(v)).join(', ')}, but found ${JSON.stringify(val)} instead.`);\n }\n return val;\n } catch (e) {\n if (!this._warningHistory[e.message]) {\n this._warningHistory[e.message] = true;\n if (typeof console !== 'undefined') {\n console.warn(e.message);\n }\n }\n return this._defaultValue;\n }\n }\n}\n\nexport function isExpression(expression: mixed) {\n return Array.isArray(expression) && expression.length > 0 &&\n typeof expression[0] === 'string' && expression[0] in definitions;\n}\n\n/**\n * Parse and typecheck the given style spec JSON expression. If\n * options.defaultValue is provided, then the resulting StyleExpression's\n * `evaluate()` method will handle errors by logging a warning (once per\n * message) and returning the default value. Otherwise, it will throw\n * evaluation errors.\n *\n * @private\n */\nexport function createExpression(expression: mixed, propertySpec: StylePropertySpecification): Result> {\n const parser = new ParsingContext(definitions, [], getExpectedType(propertySpec));\n\n // For string-valued properties, coerce to string at the top level rather than asserting.\n const parsed = parser.parse(expression, undefined, undefined, undefined,\n propertySpec.type === 'string' ? {typeAnnotation: 'coerce'} : undefined);\n\n if (!parsed) {\n assert(parser.errors.length > 0);\n return error(parser.errors);\n }\n\n return success(new StyleExpression(parsed, propertySpec));\n}\n\nexport class ZoomConstantExpression {\n kind: Kind;\n isStateDependent: boolean;\n _styleExpression: StyleExpression;\n\n constructor(kind: Kind, expression: StyleExpression) {\n this.kind = kind;\n this._styleExpression = expression;\n this.isStateDependent = kind !== 'constant' && !isConstant.isStateConstant(expression.expression);\n }\n\n evaluateWithoutErrorHandling(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState): any {\n return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState);\n }\n\n evaluate(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState): any {\n return this._styleExpression.evaluate(globals, feature, featureState);\n }\n}\n\nexport class ZoomDependentExpression {\n kind: Kind;\n zoomStops: Array;\n isStateDependent: boolean;\n\n _styleExpression: StyleExpression;\n _interpolationType: ?InterpolationType;\n\n constructor(kind: Kind, expression: StyleExpression, zoomCurve: Step | Interpolate) {\n this.kind = kind;\n this.zoomStops = zoomCurve.labels;\n this._styleExpression = expression;\n this.isStateDependent = kind !== 'camera' && !isConstant.isStateConstant(expression.expression);\n if (zoomCurve instanceof Interpolate) {\n this._interpolationType = zoomCurve.interpolation;\n }\n }\n\n evaluateWithoutErrorHandling(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState): any {\n return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState);\n }\n\n evaluate(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState): any {\n return this._styleExpression.evaluate(globals, feature, featureState);\n }\n\n interpolationFactor(input: number, lower: number, upper: number): number {\n if (this._interpolationType) {\n return Interpolate.interpolationFactor(this._interpolationType, input, lower, upper);\n } else {\n return 0;\n }\n }\n}\n\nexport type ConstantExpression = {\n kind: 'constant',\n +evaluate: (globals: GlobalProperties, feature?: Feature) => any,\n}\n\nexport type SourceExpression = {\n kind: 'source',\n isStateDependent: boolean,\n +evaluate: (globals: GlobalProperties, feature?: Feature, featureState?: FeatureState) => any,\n};\n\nexport type CameraExpression = {\n kind: 'camera',\n +evaluate: (globals: GlobalProperties, feature?: Feature, featureState?: FeatureState) => any,\n +interpolationFactor: (input: number, lower: number, upper: number) => number,\n zoomStops: Array\n};\n\nexport type CompositeExpression = {\n kind: 'composite',\n isStateDependent: boolean,\n +evaluate: (globals: GlobalProperties, feature?: Feature, featureState?: FeatureState) => any,\n +interpolationFactor: (input: number, lower: number, upper: number) => number,\n zoomStops: Array\n};\n\nexport type StylePropertyExpression =\n | ConstantExpression\n | SourceExpression\n | CameraExpression\n | CompositeExpression;\n\nexport function createPropertyExpression(expression: mixed, propertySpec: StylePropertySpecification): Result> {\n expression = createExpression(expression, propertySpec);\n if (expression.result === 'error') {\n return expression;\n }\n\n const parsed = expression.value.expression;\n\n const isFeatureConstant = isConstant.isFeatureConstant(parsed);\n if (!isFeatureConstant && !supportsPropertyExpression(propertySpec)) {\n return error([new ParsingError('', 'data expressions not supported')]);\n }\n\n const isZoomConstant = isConstant.isGlobalPropertyConstant(parsed, ['zoom']);\n if (!isZoomConstant && !supportsZoomExpression(propertySpec)) {\n return error([new ParsingError('', 'zoom expressions not supported')]);\n }\n\n const zoomCurve = findZoomCurve(parsed);\n if (!zoomCurve && !isZoomConstant) {\n return error([new ParsingError('', '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.')]);\n } else if (zoomCurve instanceof ParsingError) {\n return error([zoomCurve]);\n } else if (zoomCurve instanceof Interpolate && !supportsInterpolation(propertySpec)) {\n return error([new ParsingError('', '\"interpolate\" expressions cannot be used with this property')]);\n }\n\n if (!zoomCurve) {\n return success(isFeatureConstant ?\n (new ZoomConstantExpression('constant', expression.value): ConstantExpression) :\n (new ZoomConstantExpression('source', expression.value): SourceExpression));\n }\n\n return success(isFeatureConstant ?\n (new ZoomDependentExpression('camera', expression.value, zoomCurve): CameraExpression) :\n (new ZoomDependentExpression('composite', expression.value, zoomCurve): CompositeExpression));\n}\n\nimport { isFunction, createFunction } from '../function';\nimport { Color } from './values';\n\n// serialization wrapper for old-style stop functions normalized to the\n// expression interface\nexport class StylePropertyFunction {\n _parameters: PropertyValueSpecification;\n _specification: StylePropertySpecification;\n\n kind: 'constant' | 'source' | 'camera' | 'composite';\n evaluate: (globals: GlobalProperties, feature?: Feature) => any;\n interpolationFactor: ?(input: number, lower: number, upper: number) => number;\n zoomStops: ?Array;\n\n constructor(parameters: PropertyValueSpecification, specification: StylePropertySpecification) {\n this._parameters = parameters;\n this._specification = specification;\n extend(this, createFunction(this._parameters, this._specification));\n }\n\n static deserialize(serialized: {_parameters: PropertyValueSpecification, _specification: StylePropertySpecification}) {\n return ((new StylePropertyFunction(serialized._parameters, serialized._specification)): StylePropertyFunction);\n }\n\n static serialize(input: StylePropertyFunction) {\n return {\n _parameters: input._parameters,\n _specification: input._specification\n };\n }\n}\n\nexport function normalizePropertyExpression(value: PropertyValueSpecification, specification: StylePropertySpecification): StylePropertyExpression {\n if (isFunction(value)) {\n return (new StylePropertyFunction(value, specification): any);\n\n } else if (isExpression(value)) {\n const expression = createPropertyExpression(value, specification);\n if (expression.result === 'error') {\n // this should have been caught in validation\n throw new Error(expression.value.map(err => `${err.key}: ${err.message}`).join(', '));\n }\n return expression.value;\n\n } else {\n let constant: any = value;\n if (typeof value === 'string' && specification.type === 'color') {\n constant = Color.parse(value);\n }\n return {\n kind: 'constant',\n evaluate: () => constant\n };\n }\n}\n\n// Zoom-dependent expressions may only use [\"zoom\"] as the input to a top-level \"step\" or \"interpolate\"\n// expression (collectively referred to as a \"curve\"). The curve may be wrapped in one or more \"let\" or\n// \"coalesce\" expressions.\nfunction findZoomCurve(expression: Expression): Step | Interpolate | ParsingError | null {\n let result = null;\n if (expression instanceof Let) {\n result = findZoomCurve(expression.result);\n\n } else if (expression instanceof Coalesce) {\n for (const arg of expression.args) {\n result = findZoomCurve(arg);\n if (result) {\n break;\n }\n }\n\n } else if ((expression instanceof Step || expression instanceof Interpolate) &&\n expression.input instanceof CompoundExpression &&\n expression.input.name === 'zoom') {\n\n result = expression;\n }\n\n if (result instanceof ParsingError) {\n return result;\n }\n\n expression.eachChild((child) => {\n const childResult = findZoomCurve(child);\n if (childResult instanceof ParsingError) {\n result = childResult;\n } else if (!result && childResult) {\n result = new ParsingError('', '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.');\n } else if (result && childResult && result !== childResult) {\n result = new ParsingError('', 'Only one zoom-based \"step\" or \"interpolate\" subexpression may be used in an expression.');\n }\n });\n\n return result;\n}\n\nimport { ColorType, StringType, NumberType, BooleanType, ValueType, FormattedType, array } from './types';\n\nfunction getExpectedType(spec: StylePropertySpecification): Type {\n const types = {\n color: ColorType,\n string: StringType,\n number: NumberType,\n enum: StringType,\n boolean: BooleanType,\n formatted: FormattedType\n };\n\n if (spec.type === 'array') {\n return array(types[spec.value] || ValueType, spec.length);\n }\n\n return types[spec.type];\n}\n\nfunction getDefaultValue(spec: StylePropertySpecification): Value {\n if (spec.type === 'color' && isFunction(spec.default)) {\n // Special case for heatmap-color: it uses the 'default:' to define a\n // default color ramp, but createExpression expects a simple value to fall\n // back to in case of runtime errors\n return new Color(0, 0, 0, 0);\n } else if (spec.type === 'color') {\n return Color.parse(spec.default) || null;\n } else if (spec.default === undefined) {\n return null;\n } else {\n return spec.default;\n }\n}\n","// @flow\n\nimport assert from 'assert';\nimport type {StylePropertySpecification} from '../style-spec';\n\nexport default convertFunction;\n\nfunction convertLiteral(value) {\n return typeof value === 'object' ? ['literal', value] : value;\n}\n\nfunction convertFunction(parameters: any, propertySpec: StylePropertySpecification) {\n let stops = parameters.stops;\n if (!stops) {\n // identity function\n return convertIdentityFunction(parameters, propertySpec);\n }\n\n const zoomAndFeatureDependent = stops && typeof stops[0][0] === 'object';\n const featureDependent = zoomAndFeatureDependent || parameters.property !== undefined;\n const zoomDependent = zoomAndFeatureDependent || !featureDependent;\n\n stops = stops.map((stop) => {\n if (!featureDependent && propertySpec.tokens && typeof stop[1] === 'string') {\n return [stop[0], convertTokenString(stop[1])];\n }\n return [stop[0], convertLiteral(stop[1])];\n });\n\n if (zoomAndFeatureDependent) {\n return convertZoomAndPropertyFunction(parameters, propertySpec, stops);\n } else if (zoomDependent) {\n return convertZoomFunction(parameters, propertySpec, stops);\n } else {\n return convertPropertyFunction(parameters, propertySpec, stops);\n }\n}\n\nfunction convertIdentityFunction(parameters, propertySpec): Array {\n const get = ['get', parameters.property];\n\n if (parameters.default === undefined) {\n // By default, expressions for string-valued properties get coerced. To preserve\n // legacy function semantics, insert an explicit assertion instead.\n return propertySpec.type === 'string' ? ['string', get] : get;\n } else if (propertySpec.type === 'enum') {\n return [\n 'match',\n get,\n Object.keys(propertySpec.values),\n get,\n parameters.default\n ];\n } else {\n const expression = [propertySpec.type === 'color' ? 'to-color' : propertySpec.type, get, convertLiteral(parameters.default)];\n if (propertySpec.type === 'array') {\n expression.splice(1, 0, propertySpec.value, propertySpec.length || null);\n }\n return expression;\n }\n}\n\nfunction getInterpolateOperator(parameters) {\n switch (parameters.colorSpace) {\n case 'hcl': return 'interpolate-hcl';\n case 'lab': return 'interpolate-lab';\n default: return 'interpolate';\n }\n}\n\nfunction convertZoomAndPropertyFunction(parameters, propertySpec, stops) {\n const featureFunctionParameters = {};\n const featureFunctionStops = {};\n const zoomStops = [];\n for (let s = 0; s < stops.length; s++) {\n const stop = stops[s];\n const zoom = stop[0].zoom;\n if (featureFunctionParameters[zoom] === undefined) {\n featureFunctionParameters[zoom] = {\n zoom: zoom,\n type: parameters.type,\n property: parameters.property,\n default: parameters.default,\n };\n featureFunctionStops[zoom] = [];\n zoomStops.push(zoom);\n }\n featureFunctionStops[zoom].push([stop[0].value, stop[1]]);\n }\n\n // the interpolation type for the zoom dimension of a zoom-and-property\n // function is determined directly from the style property specification\n // for which it's being used: linear for interpolatable properties, step\n // otherwise.\n const functionType = getFunctionType({}, propertySpec);\n if (functionType === 'exponential') {\n const expression = [getInterpolateOperator(parameters), ['linear'], ['zoom']];\n\n for (const z of zoomStops) {\n const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);\n appendStopPair(expression, z, output, false);\n }\n\n return expression;\n } else {\n const expression = ['step', ['zoom']];\n\n for (const z of zoomStops) {\n const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);\n appendStopPair(expression, z, output, true);\n }\n\n fixupDegenerateStepCurve(expression);\n\n return expression;\n }\n}\n\nfunction coalesce(a, b) {\n if (a !== undefined) return a;\n if (b !== undefined) return b;\n}\n\nfunction convertPropertyFunction(parameters, propertySpec, stops) {\n const type = getFunctionType(parameters, propertySpec);\n const get = ['get', parameters.property];\n if (type === 'categorical' && typeof stops[0][0] === 'boolean') {\n assert(parameters.stops.length > 0 && parameters.stops.length <= 2);\n const expression = ['case'];\n for (const stop of stops) {\n expression.push(['==', get, stop[0]], stop[1]);\n }\n expression.push(convertLiteral(coalesce(parameters.default, propertySpec.default)));\n return expression;\n } else if (type === 'categorical') {\n const expression = ['match', get];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], false);\n }\n expression.push(convertLiteral(coalesce(parameters.default, propertySpec.default)));\n return expression;\n } else if (type === 'interval') {\n const expression = ['step', ['number', get]];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], true);\n }\n fixupDegenerateStepCurve(expression);\n return parameters.default === undefined ? expression : [\n 'case',\n ['==', ['typeof', get], 'number'],\n expression,\n convertLiteral(parameters.default)\n ];\n } else if (type === 'exponential') {\n const base = parameters.base !== undefined ? parameters.base : 1;\n const expression = [getInterpolateOperator(parameters), ['exponential', base], ['number', get]];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], false);\n }\n return parameters.default === undefined ? expression : [\n 'case',\n ['==', ['typeof', get], 'number'],\n expression,\n convertLiteral(parameters.default)\n ];\n } else {\n throw new Error(`Unknown property function type ${type}`);\n }\n}\n\nfunction convertZoomFunction(parameters, propertySpec, stops, input = ['zoom']) {\n const type = getFunctionType(parameters, propertySpec);\n let expression;\n let isStep = false;\n if (type === 'interval') {\n expression = ['step', input];\n isStep = true;\n } else if (type === 'exponential') {\n const base = parameters.base !== undefined ? parameters.base : 1;\n expression = [getInterpolateOperator(parameters), ['exponential', base], input];\n } else {\n throw new Error(`Unknown zoom function type \"${type}\"`);\n }\n\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], isStep);\n }\n\n fixupDegenerateStepCurve(expression);\n\n return expression;\n}\n\nfunction fixupDegenerateStepCurve(expression) {\n // degenerate step curve (i.e. a constant function): add a noop stop\n if (expression[0] === 'step' && expression.length === 3) {\n expression.push(0);\n expression.push(expression[3]);\n }\n}\n\nfunction appendStopPair(curve, input, output, isStep) {\n // Skip duplicate stop values. They were not validated for functions, but they are for expressions.\n // https://github.com/mapbox/mapbox-gl-js/issues/4107\n if (curve.length > 3 && input === curve[curve.length - 2]) {\n return;\n }\n // step curves don't get the first input value, as it is redundant.\n if (!(isStep && curve.length === 2)) {\n curve.push(input);\n }\n curve.push(output);\n}\n\nfunction getFunctionType(parameters, propertySpec) {\n if (parameters.type) {\n return parameters.type;\n } else {\n assert(propertySpec.expression);\n return (propertySpec.expression: any).interpolated ? 'exponential' : 'interval';\n }\n}\n\n// \"String with {name} token\" => [\"concat\", \"String with \", [\"get\", \"name\"], \" token\"]\nexport function convertTokenString(s: string) {\n const result = ['concat'];\n const re = /{([^{}]+)}/g;\n let pos = 0;\n for (let match = re.exec(s); match !== null; match = re.exec(s)) {\n const literal = s.slice(pos, re.lastIndex - match[0].length);\n pos = re.lastIndex;\n if (literal.length > 0) result.push(literal);\n result.push(['get', match[1]]);\n }\n\n if (result.length === 1) {\n return s;\n }\n\n if (pos < s.length) {\n result.push(s.slice(pos));\n } else if (result.length === 2) {\n return ['to-string', result[1]];\n }\n\n return result;\n}\n\n","// @flow\n\nimport { createExpression } from '../expression';\n\nimport type {GlobalProperties} from '../expression';\nexport type FeatureFilter = (globalProperties: GlobalProperties, feature: VectorTileFeature) => boolean;\n\nexport default createFilter;\nexport { isExpressionFilter };\n\nfunction isExpressionFilter(filter: any) {\n if (filter === true || filter === false) {\n return true;\n }\n\n if (!Array.isArray(filter) || filter.length === 0) {\n return false;\n }\n switch (filter[0]) {\n case 'has':\n return filter.length >= 2 && filter[1] !== '$id' && filter[1] !== '$type';\n\n case 'in':\n case '!in':\n case '!has':\n case 'none':\n return false;\n\n case '==':\n case '!=':\n case '>':\n case '>=':\n case '<':\n case '<=':\n return filter.length !== 3 || (Array.isArray(filter[1]) || Array.isArray(filter[2]));\n\n case 'any':\n case 'all':\n for (const f of filter.slice(1)) {\n if (!isExpressionFilter(f) && typeof f !== 'boolean') {\n return false;\n }\n }\n return true;\n\n default:\n return true;\n }\n}\n\nconst filterSpec = {\n 'type': 'boolean',\n 'default': false,\n 'transition': false,\n 'property-type': 'data-driven',\n 'expression': {\n 'interpolated': false,\n 'parameters': ['zoom', 'feature']\n }\n};\n\n/**\n * Given a filter expressed as nested arrays, return a new function\n * that evaluates whether a given feature (with a .properties or .tags property)\n * passes its test.\n *\n * @private\n * @param {Array} filter mapbox gl filter\n * @returns {Function} filter-evaluating function\n */\nfunction createFilter(filter: any): FeatureFilter {\n if (filter === null || filter === undefined) {\n return () => true;\n }\n\n if (!isExpressionFilter(filter)) {\n filter = convertFilter(filter);\n }\n\n const compiled = createExpression(filter, filterSpec);\n if (compiled.result === 'error') {\n throw new Error(compiled.value.map(err => `${err.key}: ${err.message}`).join(', '));\n } else {\n return (globalProperties: GlobalProperties, feature: VectorTileFeature) => compiled.value.evaluate(globalProperties, feature);\n }\n}\n\n// Comparison function to sort numbers and strings\nfunction compare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction convertFilter(filter: ?Array): mixed {\n if (!filter) return true;\n const op = filter[0];\n if (filter.length <= 1) return (op !== 'any');\n const converted =\n op === '==' ? convertComparisonOp(filter[1], filter[2], '==') :\n op === '!=' ? convertNegation(convertComparisonOp(filter[1], filter[2], '==')) :\n op === '<' ||\n op === '>' ||\n op === '<=' ||\n op === '>=' ? convertComparisonOp(filter[1], filter[2], op) :\n op === 'any' ? convertDisjunctionOp(filter.slice(1)) :\n op === 'all' ? ['all'].concat(filter.slice(1).map(convertFilter)) :\n op === 'none' ? ['all'].concat(filter.slice(1).map(convertFilter).map(convertNegation)) :\n op === 'in' ? convertInOp(filter[1], filter.slice(2)) :\n op === '!in' ? convertNegation(convertInOp(filter[1], filter.slice(2))) :\n op === 'has' ? convertHasOp(filter[1]) :\n op === '!has' ? convertNegation(convertHasOp(filter[1])) :\n true;\n return converted;\n}\n\nfunction convertComparisonOp(property: string, value: any, op: string) {\n switch (property) {\n case '$type':\n return [`filter-type-${op}`, value];\n case '$id':\n return [`filter-id-${op}`, value];\n default:\n return [`filter-${op}`, property, value];\n }\n}\n\nfunction convertDisjunctionOp(filters: Array>) {\n return ['any'].concat(filters.map(convertFilter));\n}\n\nfunction convertInOp(property: string, values: Array) {\n if (values.length === 0) { return false; }\n switch (property) {\n case '$type':\n return [`filter-type-in`, ['literal', values]];\n case '$id':\n return [`filter-id-in`, ['literal', values]];\n default:\n if (values.length > 200 && !values.some(v => typeof v !== typeof values[0])) {\n return ['filter-in-large', property, ['literal', values.sort(compare)]];\n } else {\n return ['filter-in-small', property, ['literal', values]];\n }\n }\n}\n\nfunction convertHasOp(property: string) {\n switch (property) {\n case '$type':\n return true;\n case '$id':\n return [`filter-has-id`];\n default:\n return [`filter-has`, property];\n }\n}\n\nfunction convertNegation(filter: mixed) {\n return ['!', filter];\n}\n","// @flow\n\nimport { isExpressionFilter } from './index';\n\nimport type { FilterSpecification } from '../types';\n\ntype ExpectedTypes = {[string]: 'string' | 'number' | 'boolean'};\n\n/**\n * Convert the given legacy filter to (the JSON representation of) an\n * equivalent expression\n * @private\n */\nexport default function convertFilter(filter: FilterSpecification): mixed {\n return _convertFilter(filter, {});\n}\n\n/*\n * Convert the given filter to an expression, storing the expected types for\n * any feature properties referenced in expectedTypes.\n *\n * These expected types are needed in order to construct preflight type checks\n * needed for handling 'any' filters. A preflight type check is necessary in\n * order to mimic legacy filters' semantics around expected type mismatches.\n * For example, consider the legacy filter:\n *\n * [\"any\", [\"all\", [\">\", \"y\", 0], [\">\", \"y\", 0]], [\">\", \"x\", 0]]\n *\n * Naively, we might convert this to the expression:\n *\n * [\"any\", [\"all\", [\">\", [\"get\", \"y\"], 0], [\">\", [\"get\", \"z\"], 0]], [\">\", [\"get\", \"x\"], 0]]\n *\n * But if we tried to evaluate this against, say `{x: 1, y: null, z: 0}`, the\n * [\">\", [\"get\", \"y\"], 0] would cause an evaluation error, leading to the\n * entire filter returning false. Legacy filter semantics, though, ask for\n * [\">\", \"y\", 0] to simply return `false` when `y` is of the wrong type,\n * allowing the subsequent terms of the outer \"any\" expression to be evaluated\n * (resulting, in this case, in a `true` value, because x > 0).\n *\n * We account for this by inserting a preflight type-checking expression before\n * each \"any\" term, allowing us to avoid evaluating the actual converted filter\n * if any type mismatches would cause it to produce an evalaution error:\n *\n * [\"any\",\n * [\"case\",\n * [\"all\", [\"==\", [\"typeof\", [\"get\", \"y\"]], \"number\"], [\"==\", [\"typeof\", [\"get\", \"z\"], \"number]],\n * [\"all\", [\">\", [\"get\", \"y\"], 0], [\">\", [\"get\", \"z\"], 0]],\n * false\n * ],\n * [\"case\",\n * [\"==\", [\"typeof\", [\"get\", \"x\"], \"number\"]],\n * [\">\", [\"get\", \"x\"], 0],\n * false\n * ]\n * ]\n *\n * An alternative, possibly more direct approach would be to use type checks\n * in the conversion of each comparison operator, so that the converted version\n * of each individual ==, >=, etc. would mimic the legacy filter semantics. The\n * downside of this approach is that it can lead to many more type checks than\n * would otherwise be necessary: outside the context of an \"any\" expression,\n * bailing out due to a runtime type error (expression semantics) and returning\n * false (legacy filter semantics) are equivalent: they cause the filter to\n * produce a `false` result.\n */\nfunction _convertFilter(filter: FilterSpecification, expectedTypes: ExpectedTypes): mixed {\n if (isExpressionFilter(filter)) { return filter; }\n\n if (!filter) return true;\n const op = filter[0];\n if (filter.length <= 1) return (op !== 'any');\n\n let converted;\n\n if (\n op === '==' ||\n op === '!=' ||\n op === '<' ||\n op === '>' ||\n op === '<=' ||\n op === '>='\n ) {\n const [, property, value] = (filter: any);\n converted = convertComparisonOp(property, value, op, expectedTypes);\n } else if (op === 'any') {\n const children = (filter: any).slice(1).map(f => {\n const types = {};\n const child = _convertFilter(f, types);\n const typechecks = runtimeTypeChecks(types);\n return typechecks === true ? child : ['case', typechecks, child, false];\n });\n return ['any'].concat(children);\n } else if (op === 'all') {\n const children = (filter: any).slice(1).map(f => _convertFilter(f, expectedTypes));\n return ['all'].concat(children);\n } else if (op === 'none') {\n return ['!', _convertFilter(['any'].concat(filter.slice(1)), {})];\n } else if (op === 'in') {\n converted = convertInOp((filter[1]: any), filter.slice(2));\n } else if (op === '!in') {\n converted = convertInOp((filter[1]: any), filter.slice(2), true);\n } else if (op === 'has') {\n converted = convertHasOp((filter[1]: any));\n } else if (op === '!has') {\n converted = ['!', convertHasOp((filter[1]: any))];\n } else {\n converted = true;\n }\n\n return converted;\n}\n\n// Given a set of feature properties and an expected type for each one,\n// construct an boolean expression that tests whether each property has the\n// right type.\n// E.g.: for {name: 'string', population: 'number'}, return\n// [ 'all',\n// ['==', ['typeof', ['get', 'name'], 'string']],\n// ['==', ['typeof', ['get', 'population'], 'number]]\n// ]\nfunction runtimeTypeChecks(expectedTypes: ExpectedTypes) {\n const conditions = [];\n for (const property in expectedTypes) {\n const get = property === '$id' ? ['id'] : ['get', property];\n conditions.push(['==', ['typeof', get], expectedTypes[property]]);\n }\n if (conditions.length === 0) return true;\n if (conditions.length === 1) return conditions[0];\n return ['all'].concat(conditions);\n}\n\nfunction convertComparisonOp(property: string, value: any, op: string, expectedTypes: ?ExpectedTypes) {\n let get;\n if (property === '$type') {\n return [op, ['geometry-type'], value];\n } else if (property === '$id') {\n get = ['id'];\n } else {\n get = ['get', property];\n }\n\n if (expectedTypes && value !== null) {\n const type = ((typeof value): any);\n expectedTypes[property] = type;\n }\n\n if (op === '==' && property !== '$id' && value === null) {\n return [\n 'all',\n ['has', property], // missing property != null for legacy filters\n ['==', get, null]\n ];\n } else if (op === '!=' && property !== '$id' && value === null) {\n return [\n 'any',\n ['!', ['has', property]], // missing property != null for legacy filters\n ['!=', get, null]\n ];\n }\n\n return [op, get, value];\n}\n\nfunction convertInOp(property: string, values: Array, negate = false) {\n if (values.length === 0) return negate;\n\n let get;\n if (property === '$type') {\n get = ['geometry-type'];\n } else if (property === '$id') {\n get = ['id'];\n } else {\n get = ['get', property];\n }\n\n // Determine if the list of values to be searched is homogenously typed.\n // If so (and if the type is string or number), then we can use a\n // [match, input, [...values], true, false] construction rather than a\n // bunch of `==` tests.\n let uniformTypes = true;\n const type = typeof values[0];\n for (const value of values) {\n if (typeof value !== type) {\n uniformTypes = false;\n break;\n }\n }\n\n if (uniformTypes && (type === 'string' || type === 'number')) {\n return ['match', get, values, !negate, negate];\n }\n\n return [ negate ? 'all' : 'any' ].concat(\n values.map(v => [negate ? '!=' : '==', get, v])\n );\n}\n\nfunction convertHasOp(property: string) {\n if (property === '$type') {\n return true;\n } else if (property === '$id') {\n return ['!=', ['id'], null];\n } else {\n return ['has', property];\n }\n}\n","// @flow\n\n/**\n * Deeply compares two object literals.\n *\n * @private\n */\nfunction deepEqual(a: ?mixed, b: ?mixed): boolean {\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n if (typeof a === 'object' && a !== null && b !== null) {\n if (!(typeof b === 'object')) return false;\n const keys = Object.keys(a);\n if (keys.length !== Object.keys(b).length) return false;\n for (const key in a) {\n if (!deepEqual(a[key], b[key])) return false;\n }\n return true;\n }\n return a === b;\n}\n\nexport default deepEqual;\n","\nimport isEqual from './util/deep_equal';\n\nconst operations = {\n\n /*\n * { command: 'setStyle', args: [stylesheet] }\n */\n setStyle: 'setStyle',\n\n /*\n * { command: 'addLayer', args: [layer, 'beforeLayerId'] }\n */\n addLayer: 'addLayer',\n\n /*\n * { command: 'removeLayer', args: ['layerId'] }\n */\n removeLayer: 'removeLayer',\n\n /*\n * { command: 'setPaintProperty', args: ['layerId', 'prop', value] }\n */\n setPaintProperty: 'setPaintProperty',\n\n /*\n * { command: 'setLayoutProperty', args: ['layerId', 'prop', value] }\n */\n setLayoutProperty: 'setLayoutProperty',\n\n /*\n * { command: 'setFilter', args: ['layerId', filter] }\n */\n setFilter: 'setFilter',\n\n /*\n * { command: 'addSource', args: ['sourceId', source] }\n */\n addSource: 'addSource',\n\n /*\n * { command: 'removeSource', args: ['sourceId'] }\n */\n removeSource: 'removeSource',\n\n /*\n * { command: 'setGeoJSONSourceData', args: ['sourceId', data] }\n */\n setGeoJSONSourceData: 'setGeoJSONSourceData',\n\n /*\n * { command: 'setLayerZoomRange', args: ['layerId', 0, 22] }\n */\n setLayerZoomRange: 'setLayerZoomRange',\n\n /*\n * { command: 'setLayerProperty', args: ['layerId', 'prop', value] }\n */\n setLayerProperty: 'setLayerProperty',\n\n /*\n * { command: 'setCenter', args: [[lon, lat]] }\n */\n setCenter: 'setCenter',\n\n /*\n * { command: 'setZoom', args: [zoom] }\n */\n setZoom: 'setZoom',\n\n /*\n * { command: 'setBearing', args: [bearing] }\n */\n setBearing: 'setBearing',\n\n /*\n * { command: 'setPitch', args: [pitch] }\n */\n setPitch: 'setPitch',\n\n /*\n * { command: 'setSprite', args: ['spriteUrl'] }\n */\n setSprite: 'setSprite',\n\n /*\n * { command: 'setGlyphs', args: ['glyphsUrl'] }\n */\n setGlyphs: 'setGlyphs',\n\n /*\n * { command: 'setTransition', args: [transition] }\n */\n setTransition: 'setTransition',\n\n /*\n * { command: 'setLighting', args: [lightProperties] }\n */\n setLight: 'setLight'\n\n};\n\nfunction addSource(sourceId, after, commands) {\n commands.push({ command: operations.addSource, args: [sourceId, after[sourceId]] });\n}\n\nfunction removeSource(sourceId, commands, sourcesRemoved) {\n commands.push({ command: operations.removeSource, args: [sourceId] });\n sourcesRemoved[sourceId] = true;\n}\n\nfunction updateSource(sourceId, after, commands, sourcesRemoved) {\n removeSource(sourceId, commands, sourcesRemoved);\n addSource(sourceId, after, commands);\n}\n\nfunction canUpdateGeoJSON(before, after, sourceId) {\n let prop;\n for (prop in before[sourceId]) {\n if (!before[sourceId].hasOwnProperty(prop)) continue;\n if (prop !== 'data' && !isEqual(before[sourceId][prop], after[sourceId][prop])) {\n return false;\n }\n }\n for (prop in after[sourceId]) {\n if (!after[sourceId].hasOwnProperty(prop)) continue;\n if (prop !== 'data' && !isEqual(before[sourceId][prop], after[sourceId][prop])) {\n return false;\n }\n }\n return true;\n}\n\nfunction diffSources(before, after, commands, sourcesRemoved) {\n before = before || {};\n after = after || {};\n\n let sourceId;\n\n // look for sources to remove\n for (sourceId in before) {\n if (!before.hasOwnProperty(sourceId)) continue;\n if (!after.hasOwnProperty(sourceId)) {\n removeSource(sourceId, commands, sourcesRemoved);\n }\n }\n\n // look for sources to add/update\n for (sourceId in after) {\n if (!after.hasOwnProperty(sourceId)) continue;\n if (!before.hasOwnProperty(sourceId)) {\n addSource(sourceId, after, commands);\n } else if (!isEqual(before[sourceId], after[sourceId])) {\n if (before[sourceId].type === 'geojson' && after[sourceId].type === 'geojson' && canUpdateGeoJSON(before, after, sourceId)) {\n commands.push({ command: operations.setGeoJSONSourceData, args: [sourceId, after[sourceId].data] });\n } else {\n // no update command, must remove then add\n updateSource(sourceId, after, commands, sourcesRemoved);\n }\n }\n }\n}\n\nfunction diffLayerPropertyChanges(before, after, commands, layerId, klass, command) {\n before = before || {};\n after = after || {};\n\n let prop;\n\n for (prop in before) {\n if (!before.hasOwnProperty(prop)) continue;\n if (!isEqual(before[prop], after[prop])) {\n commands.push({ command: command, args: [layerId, prop, after[prop], klass] });\n }\n }\n for (prop in after) {\n if (!after.hasOwnProperty(prop) || before.hasOwnProperty(prop)) continue;\n if (!isEqual(before[prop], after[prop])) {\n commands.push({ command: command, args: [layerId, prop, after[prop], klass] });\n }\n }\n}\n\nfunction pluckId(layer) {\n return layer.id;\n}\nfunction indexById(group, layer) {\n group[layer.id] = layer;\n return group;\n}\n\nfunction diffLayers(before, after, commands) {\n before = before || [];\n after = after || [];\n\n // order of layers by id\n const beforeOrder = before.map(pluckId);\n const afterOrder = after.map(pluckId);\n\n // index of layer by id\n const beforeIndex = before.reduce(indexById, {});\n const afterIndex = after.reduce(indexById, {});\n\n // track order of layers as if they have been mutated\n const tracker = beforeOrder.slice();\n\n // layers that have been added do not need to be diffed\n const clean = Object.create(null);\n\n let i, d, layerId, beforeLayer, afterLayer, insertBeforeLayerId, prop;\n\n // remove layers\n for (i = 0, d = 0; i < beforeOrder.length; i++) {\n layerId = beforeOrder[i];\n if (!afterIndex.hasOwnProperty(layerId)) {\n commands.push({ command: operations.removeLayer, args: [layerId] });\n tracker.splice(tracker.indexOf(layerId, d), 1);\n } else {\n // limit where in tracker we need to look for a match\n d++;\n }\n }\n\n // add/reorder layers\n for (i = 0, d = 0; i < afterOrder.length; i++) {\n // work backwards as insert is before an existing layer\n layerId = afterOrder[afterOrder.length - 1 - i];\n\n if (tracker[tracker.length - 1 - i] === layerId) continue;\n\n if (beforeIndex.hasOwnProperty(layerId)) {\n // remove the layer before we insert at the correct position\n commands.push({ command: operations.removeLayer, args: [layerId] });\n tracker.splice(tracker.lastIndexOf(layerId, tracker.length - d), 1);\n } else {\n // limit where in tracker we need to look for a match\n d++;\n }\n\n // add layer at correct position\n insertBeforeLayerId = tracker[tracker.length - i];\n commands.push({ command: operations.addLayer, args: [afterIndex[layerId], insertBeforeLayerId] });\n tracker.splice(tracker.length - i, 0, layerId);\n clean[layerId] = true;\n }\n\n // update layers\n for (i = 0; i < afterOrder.length; i++) {\n layerId = afterOrder[i];\n beforeLayer = beforeIndex[layerId];\n afterLayer = afterIndex[layerId];\n\n // no need to update if previously added (new or moved)\n if (clean[layerId] || isEqual(beforeLayer, afterLayer)) continue;\n\n // If source, source-layer, or type have changes, then remove the layer\n // and add it back 'from scratch'.\n if (!isEqual(beforeLayer.source, afterLayer.source) || !isEqual(beforeLayer['source-layer'], afterLayer['source-layer']) || !isEqual(beforeLayer.type, afterLayer.type)) {\n commands.push({ command: operations.removeLayer, args: [layerId] });\n // we add the layer back at the same position it was already in, so\n // there's no need to update the `tracker`\n insertBeforeLayerId = tracker[tracker.lastIndexOf(layerId) + 1];\n commands.push({ command: operations.addLayer, args: [afterLayer, insertBeforeLayerId] });\n continue;\n }\n\n // layout, paint, filter, minzoom, maxzoom\n diffLayerPropertyChanges(beforeLayer.layout, afterLayer.layout, commands, layerId, null, operations.setLayoutProperty);\n diffLayerPropertyChanges(beforeLayer.paint, afterLayer.paint, commands, layerId, null, operations.setPaintProperty);\n if (!isEqual(beforeLayer.filter, afterLayer.filter)) {\n commands.push({ command: operations.setFilter, args: [layerId, afterLayer.filter] });\n }\n if (!isEqual(beforeLayer.minzoom, afterLayer.minzoom) || !isEqual(beforeLayer.maxzoom, afterLayer.maxzoom)) {\n commands.push({ command: operations.setLayerZoomRange, args: [layerId, afterLayer.minzoom, afterLayer.maxzoom] });\n }\n\n // handle all other layer props, including paint.*\n for (prop in beforeLayer) {\n if (!beforeLayer.hasOwnProperty(prop)) continue;\n if (prop === 'layout' || prop === 'paint' || prop === 'filter' ||\n prop === 'metadata' || prop === 'minzoom' || prop === 'maxzoom') continue;\n if (prop.indexOf('paint.') === 0) {\n diffLayerPropertyChanges(beforeLayer[prop], afterLayer[prop], commands, layerId, prop.slice(6), operations.setPaintProperty);\n } else if (!isEqual(beforeLayer[prop], afterLayer[prop])) {\n commands.push({ command: operations.setLayerProperty, args: [layerId, prop, afterLayer[prop]] });\n }\n }\n for (prop in afterLayer) {\n if (!afterLayer.hasOwnProperty(prop) || beforeLayer.hasOwnProperty(prop)) continue;\n if (prop === 'layout' || prop === 'paint' || prop === 'filter' ||\n prop === 'metadata' || prop === 'minzoom' || prop === 'maxzoom') continue;\n if (prop.indexOf('paint.') === 0) {\n diffLayerPropertyChanges(beforeLayer[prop], afterLayer[prop], commands, layerId, prop.slice(6), operations.setPaintProperty);\n } else if (!isEqual(beforeLayer[prop], afterLayer[prop])) {\n commands.push({ command: operations.setLayerProperty, args: [layerId, prop, afterLayer[prop]] });\n }\n }\n }\n}\n\n/**\n * Diff two stylesheet\n *\n * Creates semanticly aware diffs that can easily be applied at runtime.\n * Operations produced by the diff closely resemble the mapbox-gl-js API. Any\n * error creating the diff will fall back to the 'setStyle' operation.\n *\n * Example diff:\n * [\n * { command: 'setConstant', args: ['@water', '#0000FF'] },\n * { command: 'setPaintProperty', args: ['background', 'background-color', 'black'] }\n * ]\n *\n * @private\n * @param {*} [before] stylesheet to compare from\n * @param {*} after stylesheet to compare to\n * @returns Array list of changes\n */\nfunction diffStyles(before, after) {\n if (!before) return [{ command: operations.setStyle, args: [after] }];\n\n let commands = [];\n\n try {\n // Handle changes to top-level properties\n if (!isEqual(before.version, after.version)) {\n return [{ command: operations.setStyle, args: [after] }];\n }\n if (!isEqual(before.center, after.center)) {\n commands.push({ command: operations.setCenter, args: [after.center] });\n }\n if (!isEqual(before.zoom, after.zoom)) {\n commands.push({ command: operations.setZoom, args: [after.zoom] });\n }\n if (!isEqual(before.bearing, after.bearing)) {\n commands.push({ command: operations.setBearing, args: [after.bearing] });\n }\n if (!isEqual(before.pitch, after.pitch)) {\n commands.push({ command: operations.setPitch, args: [after.pitch] });\n }\n if (!isEqual(before.sprite, after.sprite)) {\n commands.push({ command: operations.setSprite, args: [after.sprite] });\n }\n if (!isEqual(before.glyphs, after.glyphs)) {\n commands.push({ command: operations.setGlyphs, args: [after.glyphs] });\n }\n if (!isEqual(before.transition, after.transition)) {\n commands.push({ command: operations.setTransition, args: [after.transition] });\n }\n if (!isEqual(before.light, after.light)) {\n commands.push({ command: operations.setLight, args: [after.light] });\n }\n\n // Handle changes to `sources`\n // If a source is to be removed, we also--before the removeSource\n // command--need to remove all the style layers that depend on it.\n const sourcesRemoved = {};\n\n // First collect the {add,remove}Source commands\n const removeOrAddSourceCommands = [];\n diffSources(before.sources, after.sources, removeOrAddSourceCommands, sourcesRemoved);\n\n // Push a removeLayer command for each style layer that depends on a\n // source that's being removed.\n // Also, exclude any such layers them from the input to `diffLayers`\n // below, so that diffLayers produces the appropriate `addLayers`\n // command\n const beforeLayers = [];\n if (before.layers) {\n before.layers.forEach((layer) => {\n if (sourcesRemoved[layer.source]) {\n commands.push({ command: operations.removeLayer, args: [layer.id] });\n } else {\n beforeLayers.push(layer);\n }\n });\n }\n commands = commands.concat(removeOrAddSourceCommands);\n\n // Handle changes to `layers`\n diffLayers(beforeLayers, after.layers, commands);\n\n } catch (e) {\n // fall back to setStyle\n console.warn('Unable to compute style diff:', e);\n commands = [{ command: operations.setStyle, args: [after] }];\n }\n\n return commands;\n}\n\nexport default diffStyles;\nexport { operations };\n","\nexport default class ValidationError {\n constructor(key, value, message, identifier) {\n this.message = (key ? `${key}: ` : '') + message;\n if (identifier) this.identifier = identifier;\n\n if (value !== null && value !== undefined && value.__line__) {\n this.line = value.__line__;\n }\n }\n}\n","\nfunction ParsingError(error) {\n this.error = error;\n this.message = error.message;\n const match = error.message.match(/line (\\d+)/);\n this.line = match ? parseInt(match[1], 10) : 0;\n}\n\nexport default ParsingError;\n","\nimport ValidationError from '../error/validation_error';\n\nexport default function validateConstants(options) {\n const key = options.key;\n const constants = options.value;\n\n if (constants) {\n return [new ValidationError(key, constants, 'constants have been deprecated as of v8')];\n } else {\n return [];\n }\n}\n","\n// Turn jsonlint-lines-primitives objects into primitive objects\nexport function unbundle(value) {\n if (value instanceof Number || value instanceof String || value instanceof Boolean) {\n return value.valueOf();\n } else {\n return value;\n }\n}\n\nexport function deepUnbundle(value) {\n if (Array.isArray(value)) {\n return value.map(deepUnbundle);\n }\n return unbundle(value);\n}\n\n","\nimport ValidationError from '../error/validation_error';\nimport getType from '../util/get_type';\nimport validateSpec from './validate';\n\nexport default function validateObject(options) {\n const key = options.key;\n const object = options.value;\n const elementSpecs = options.valueSpec || {};\n const elementValidators = options.objectElementValidators || {};\n const style = options.style;\n const styleSpec = options.styleSpec;\n let errors = [];\n\n const type = getType(object);\n if (type !== 'object') {\n return [new ValidationError(key, object, `object expected, ${type} found`)];\n }\n\n for (const objectKey in object) {\n const elementSpecKey = objectKey.split('.')[0]; // treat 'paint.*' as 'paint'\n const elementSpec = elementSpecs[elementSpecKey] || elementSpecs['*'];\n\n let validateElement;\n if (elementValidators[elementSpecKey]) {\n validateElement = elementValidators[elementSpecKey];\n } else if (elementSpecs[elementSpecKey]) {\n validateElement = validateSpec;\n } else if (elementValidators['*']) {\n validateElement = elementValidators['*'];\n } else if (elementSpecs['*']) {\n validateElement = validateSpec;\n } else {\n errors.push(new ValidationError(key, object[objectKey], `unknown property \"${objectKey}\"`));\n continue;\n }\n\n errors = errors.concat(validateElement({\n key: (key ? `${key}.` : key) + objectKey,\n value: object[objectKey],\n valueSpec: elementSpec,\n style: style,\n styleSpec: styleSpec,\n object: object,\n objectKey: objectKey\n }, object));\n }\n\n for (const elementSpecKey in elementSpecs) {\n // Don't check `required` when there's a custom validator for that property.\n if (elementValidators[elementSpecKey]) {\n continue;\n }\n\n if (elementSpecs[elementSpecKey].required && elementSpecs[elementSpecKey]['default'] === undefined && object[elementSpecKey] === undefined) {\n errors.push(new ValidationError(key, object, `missing required property \"${elementSpecKey}\"`));\n }\n }\n\n return errors;\n}\n","\nimport getType from '../util/get_type';\nimport validate from './validate';\nimport ValidationError from '../error/validation_error';\n\nexport default function validateArray(options) {\n const array = options.value;\n const arraySpec = options.valueSpec;\n const style = options.style;\n const styleSpec = options.styleSpec;\n const key = options.key;\n const validateArrayElement = options.arrayElementValidator || validate;\n\n if (getType(array) !== 'array') {\n return [new ValidationError(key, array, `array expected, ${getType(array)} found`)];\n }\n\n if (arraySpec.length && array.length !== arraySpec.length) {\n return [new ValidationError(key, array, `array length ${arraySpec.length} expected, length ${array.length} found`)];\n }\n\n if (arraySpec['min-length'] && array.length < arraySpec['min-length']) {\n return [new ValidationError(key, array, `array length at least ${arraySpec['min-length']} expected, length ${array.length} found`)];\n }\n\n let arrayElementSpec = {\n \"type\": arraySpec.value\n };\n\n if (styleSpec.$version < 7) {\n arrayElementSpec.function = arraySpec.function;\n }\n\n if (getType(arraySpec.value) === 'object') {\n arrayElementSpec = arraySpec.value;\n }\n\n let errors = [];\n for (let i = 0; i < array.length; i++) {\n errors = errors.concat(validateArrayElement({\n array: array,\n arrayIndex: i,\n value: array[i],\n valueSpec: arrayElementSpec,\n style: style,\n styleSpec: styleSpec,\n key: `${key}[${i}]`\n }));\n }\n return errors;\n}\n","\nimport getType from '../util/get_type';\nimport ValidationError from '../error/validation_error';\n\nexport default function validateNumber(options) {\n const key = options.key;\n const value = options.value;\n const valueSpec = options.valueSpec;\n const type = getType(value);\n\n if (type !== 'number') {\n return [new ValidationError(key, value, `number expected, ${type} found`)];\n }\n\n if ('minimum' in valueSpec && value < valueSpec.minimum) {\n return [new ValidationError(key, value, `${value} is less than the minimum value ${valueSpec.minimum}`)];\n }\n\n if ('maximum' in valueSpec && value > valueSpec.maximum) {\n return [new ValidationError(key, value, `${value} is greater than the maximum value ${valueSpec.maximum}`)];\n }\n\n return [];\n}\n","\nimport ValidationError from '../error/validation_error';\nimport getType from '../util/get_type';\nimport validate from './validate';\nimport validateObject from './validate_object';\nimport validateArray from './validate_array';\nimport validateNumber from './validate_number';\nimport { unbundle } from '../util/unbundle_jsonlint';\nimport {\n supportsPropertyExpression,\n supportsZoomExpression,\n supportsInterpolation\n} from '../util/properties';\n\nexport default function validateFunction(options) {\n const functionValueSpec = options.valueSpec;\n const functionType = unbundle(options.value.type);\n let stopKeyType;\n let stopDomainValues = {};\n let previousStopDomainValue;\n let previousStopDomainZoom;\n\n const isZoomFunction = functionType !== 'categorical' && options.value.property === undefined;\n const isPropertyFunction = !isZoomFunction;\n const isZoomAndPropertyFunction =\n getType(options.value.stops) === 'array' &&\n getType(options.value.stops[0]) === 'array' &&\n getType(options.value.stops[0][0]) === 'object';\n\n const errors = validateObject({\n key: options.key,\n value: options.value,\n valueSpec: options.styleSpec.function,\n style: options.style,\n styleSpec: options.styleSpec,\n objectElementValidators: {\n stops: validateFunctionStops,\n default: validateFunctionDefault\n }\n });\n\n if (functionType === 'identity' && isZoomFunction) {\n errors.push(new ValidationError(options.key, options.value, 'missing required property \"property\"'));\n }\n\n if (functionType !== 'identity' && !options.value.stops) {\n errors.push(new ValidationError(options.key, options.value, 'missing required property \"stops\"'));\n }\n\n if (functionType === 'exponential' && options.valueSpec.expression && !supportsInterpolation(options.valueSpec)) {\n errors.push(new ValidationError(options.key, options.value, 'exponential functions not supported'));\n }\n\n if (options.styleSpec.$version >= 8) {\n if (isPropertyFunction && !supportsPropertyExpression(options.valueSpec)) {\n errors.push(new ValidationError(options.key, options.value, 'property functions not supported'));\n } else if (isZoomFunction && !supportsZoomExpression(options.valueSpec)) {\n errors.push(new ValidationError(options.key, options.value, 'zoom functions not supported'));\n }\n }\n\n if ((functionType === 'categorical' || isZoomAndPropertyFunction) && options.value.property === undefined) {\n errors.push(new ValidationError(options.key, options.value, '\"property\" property is required'));\n }\n\n return errors;\n\n function validateFunctionStops(options) {\n if (functionType === 'identity') {\n return [new ValidationError(options.key, options.value, 'identity function may not have a \"stops\" property')];\n }\n\n let errors = [];\n const value = options.value;\n\n errors = errors.concat(validateArray({\n key: options.key,\n value: value,\n valueSpec: options.valueSpec,\n style: options.style,\n styleSpec: options.styleSpec,\n arrayElementValidator: validateFunctionStop\n }));\n\n if (getType(value) === 'array' && value.length === 0) {\n errors.push(new ValidationError(options.key, value, 'array must have at least one stop'));\n }\n\n return errors;\n }\n\n function validateFunctionStop(options) {\n let errors = [];\n const value = options.value;\n const key = options.key;\n\n if (getType(value) !== 'array') {\n return [new ValidationError(key, value, `array expected, ${getType(value)} found`)];\n }\n\n if (value.length !== 2) {\n return [new ValidationError(key, value, `array length 2 expected, length ${value.length} found`)];\n }\n\n if (isZoomAndPropertyFunction) {\n if (getType(value[0]) !== 'object') {\n return [new ValidationError(key, value, `object expected, ${getType(value[0])} found`)];\n }\n if (value[0].zoom === undefined) {\n return [new ValidationError(key, value, 'object stop key must have zoom')];\n }\n if (value[0].value === undefined) {\n return [new ValidationError(key, value, 'object stop key must have value')];\n }\n if (previousStopDomainZoom && previousStopDomainZoom > unbundle(value[0].zoom)) {\n return [new ValidationError(key, value[0].zoom, 'stop zoom values must appear in ascending order')];\n }\n if (unbundle(value[0].zoom) !== previousStopDomainZoom) {\n previousStopDomainZoom = unbundle(value[0].zoom);\n previousStopDomainValue = undefined;\n stopDomainValues = {};\n }\n errors = errors.concat(validateObject({\n key: `${key}[0]`,\n value: value[0],\n valueSpec: { zoom: {} },\n style: options.style,\n styleSpec: options.styleSpec,\n objectElementValidators: { zoom: validateNumber, value: validateStopDomainValue }\n }));\n } else {\n errors = errors.concat(validateStopDomainValue({\n key: `${key}[0]`,\n value: value[0],\n valueSpec: {},\n style: options.style,\n styleSpec: options.styleSpec\n }, value));\n }\n\n return errors.concat(validate({\n key: `${key}[1]`,\n value: value[1],\n valueSpec: functionValueSpec,\n style: options.style,\n styleSpec: options.styleSpec\n }));\n }\n\n function validateStopDomainValue(options, stop) {\n const type = getType(options.value);\n const value = unbundle(options.value);\n\n const reportValue = options.value !== null ? options.value : stop;\n\n if (!stopKeyType) {\n stopKeyType = type;\n } else if (type !== stopKeyType) {\n return [new ValidationError(options.key, reportValue, `${type} stop domain type must match previous stop domain type ${stopKeyType}`)];\n }\n\n if (type !== 'number' && type !== 'string' && type !== 'boolean') {\n return [new ValidationError(options.key, reportValue, 'stop domain value must be a number, string, or boolean')];\n }\n\n if (type !== 'number' && functionType !== 'categorical') {\n let message = `number expected, ${type} found`;\n if (supportsPropertyExpression(functionValueSpec) && functionType === undefined) {\n message += '\\nIf you intended to use a categorical function, specify `\"type\": \"categorical\"`.';\n }\n return [new ValidationError(options.key, reportValue, message)];\n }\n\n if (functionType === 'categorical' && type === 'number' && (!isFinite(value) || Math.floor(value) !== value)) {\n return [new ValidationError(options.key, reportValue, `integer expected, found ${value}`)];\n }\n\n if (functionType !== 'categorical' && type === 'number' && previousStopDomainValue !== undefined && value < previousStopDomainValue) {\n return [new ValidationError(options.key, reportValue, 'stop domain values must appear in ascending order')];\n } else {\n previousStopDomainValue = value;\n }\n\n if (functionType === 'categorical' && value in stopDomainValues) {\n return [new ValidationError(options.key, reportValue, 'stop domain values must be unique')];\n } else {\n stopDomainValues[value] = true;\n }\n\n return [];\n }\n\n function validateFunctionDefault(options) {\n return validate({\n key: options.key,\n value: options.value,\n valueSpec: functionValueSpec,\n style: options.style,\n styleSpec: options.styleSpec\n });\n }\n}\n","// @flow\n\nimport ValidationError from '../error/validation_error';\n\nimport { createExpression, createPropertyExpression } from '../expression';\nimport { deepUnbundle } from '../util/unbundle_jsonlint';\nimport { isStateConstant } from '../expression/is_constant';\n\nexport default function validateExpression(options: any) {\n const expression = (options.expressionContext === 'property' ? createPropertyExpression : createExpression)(deepUnbundle(options.value), options.valueSpec);\n if (expression.result === 'error') {\n return expression.value.map((error) => {\n return new ValidationError(`${options.key}${error.key}`, options.value, error.message);\n });\n }\n\n if (options.expressionContext === 'property' && (options.propertyKey === 'text-font') &&\n (expression.value: any)._styleExpression.expression.possibleOutputs().indexOf(undefined) !== -1) {\n return [new ValidationError(options.key, options.value, `Invalid data expression for \"${options.propertyKey}\". Output values must be contained as literals within the expression.`)];\n }\n\n if (options.expressionContext === 'property' && options.propertyType === 'layout' &&\n (!isStateConstant((expression.value: any)._styleExpression.expression))) {\n return [new ValidationError(options.key, options.value, '\"feature-state\" data expressions are not supported with layout properties.')];\n }\n return [];\n}\n","\nimport ValidationError from '../error/validation_error';\nimport { unbundle } from '../util/unbundle_jsonlint';\n\nexport default function validateEnum(options) {\n const key = options.key;\n const value = options.value;\n const valueSpec = options.valueSpec;\n const errors = [];\n\n if (Array.isArray(valueSpec.values)) { // <=v7\n if (valueSpec.values.indexOf(unbundle(value)) === -1) {\n errors.push(new ValidationError(key, value, `expected one of [${valueSpec.values.join(', ')}], ${JSON.stringify(value)} found`));\n }\n } else { // >=v8\n if (Object.keys(valueSpec.values).indexOf(unbundle(value)) === -1) {\n errors.push(new ValidationError(key, value, `expected one of [${Object.keys(valueSpec.values).join(', ')}], ${JSON.stringify(value)} found`));\n }\n }\n return errors;\n}\n","\nimport ValidationError from '../error/validation_error';\nimport validateExpression from './validate_expression';\nimport validateEnum from './validate_enum';\nimport getType from '../util/get_type';\nimport { unbundle, deepUnbundle } from '../util/unbundle_jsonlint';\nimport extend from '../util/extend';\nimport { isExpressionFilter } from '../feature_filter';\n\nexport default function validateFilter(options) {\n if (isExpressionFilter(deepUnbundle(options.value))) {\n return validateExpression(extend({}, options, {\n expressionContext: 'filter',\n valueSpec: { value: 'boolean' }\n }));\n } else {\n return validateNonExpressionFilter(options);\n }\n}\n\nfunction validateNonExpressionFilter(options) {\n const value = options.value;\n const key = options.key;\n\n if (getType(value) !== 'array') {\n return [new ValidationError(key, value, `array expected, ${getType(value)} found`)];\n }\n\n const styleSpec = options.styleSpec;\n let type;\n\n let errors = [];\n\n if (value.length < 1) {\n return [new ValidationError(key, value, 'filter array must have at least 1 element')];\n }\n\n errors = errors.concat(validateEnum({\n key: `${key}[0]`,\n value: value[0],\n valueSpec: styleSpec.filter_operator,\n style: options.style,\n styleSpec: options.styleSpec\n }));\n\n switch (unbundle(value[0])) {\n case '<':\n case '<=':\n case '>':\n case '>=':\n if (value.length >= 2 && unbundle(value[1]) === '$type') {\n errors.push(new ValidationError(key, value, `\"$type\" cannot be use with operator \"${value[0]}\"`));\n }\n /* falls through */\n case '==':\n case '!=':\n if (value.length !== 3) {\n errors.push(new ValidationError(key, value, `filter array for operator \"${value[0]}\" must have 3 elements`));\n }\n /* falls through */\n case 'in':\n case '!in':\n if (value.length >= 2) {\n type = getType(value[1]);\n if (type !== 'string') {\n errors.push(new ValidationError(`${key}[1]`, value[1], `string expected, ${type} found`));\n }\n }\n for (let i = 2; i < value.length; i++) {\n type = getType(value[i]);\n if (unbundle(value[1]) === '$type') {\n errors = errors.concat(validateEnum({\n key: `${key}[${i}]`,\n value: value[i],\n valueSpec: styleSpec.geometry_type,\n style: options.style,\n styleSpec: options.styleSpec\n }));\n } else if (type !== 'string' && type !== 'number' && type !== 'boolean') {\n errors.push(new ValidationError(`${key}[${i}]`, value[i], `string, number, or boolean expected, ${type} found`));\n }\n }\n break;\n\n case 'any':\n case 'all':\n case 'none':\n for (let i = 1; i < value.length; i++) {\n errors = errors.concat(validateNonExpressionFilter({\n key: `${key}[${i}]`,\n value: value[i],\n style: options.style,\n styleSpec: options.styleSpec\n }));\n }\n break;\n\n case 'has':\n case '!has':\n type = getType(value[1]);\n if (value.length !== 2) {\n errors.push(new ValidationError(key, value, `filter array for \"${value[0]}\" operator must have 2 elements`));\n } else if (type !== 'string') {\n errors.push(new ValidationError(`${key}[1]`, value[1], `string expected, ${type} found`));\n }\n break;\n\n }\n\n return errors;\n}\n","\nimport validate from './validate';\nimport ValidationError from '../error/validation_error';\nimport getType from '../util/get_type';\nimport { isFunction } from '../function';\nimport { unbundle, deepUnbundle } from '../util/unbundle_jsonlint';\nimport { supportsPropertyExpression } from '../util/properties';\n\nexport default function validateProperty(options, propertyType) {\n const key = options.key;\n const style = options.style;\n const styleSpec = options.styleSpec;\n const value = options.value;\n const propertyKey = options.objectKey;\n const layerSpec = styleSpec[`${propertyType}_${options.layerType}`];\n\n if (!layerSpec) return [];\n\n const transitionMatch = propertyKey.match(/^(.*)-transition$/);\n if (propertyType === 'paint' && transitionMatch && layerSpec[transitionMatch[1]] && layerSpec[transitionMatch[1]].transition) {\n return validate({\n key: key,\n value: value,\n valueSpec: styleSpec.transition,\n style: style,\n styleSpec: styleSpec\n });\n }\n\n const valueSpec = options.valueSpec || layerSpec[propertyKey];\n if (!valueSpec) {\n return [new ValidationError(key, value, `unknown property \"${propertyKey}\"`)];\n }\n\n let tokenMatch;\n if (getType(value) === 'string' && supportsPropertyExpression(valueSpec) && !valueSpec.tokens && (tokenMatch = /^{([^}]+)}$/.exec(value))) {\n return [new ValidationError(\n key, value,\n `\"${propertyKey}\" does not support interpolation syntax\\n` +\n `Use an identity property function instead: \\`{ \"type\": \"identity\", \"property\": ${JSON.stringify(tokenMatch[1])} }\\`.`)];\n }\n\n const errors = [];\n\n if (options.layerType === 'symbol') {\n if (propertyKey === 'text-field' && style && !style.glyphs) {\n errors.push(new ValidationError(key, value, 'use of \"text-field\" requires a style \"glyphs\" property'));\n }\n if (propertyKey === 'text-font' && isFunction(deepUnbundle(value)) && unbundle(value.type) === 'identity') {\n errors.push(new ValidationError(key, value, '\"text-font\" does not support identity functions'));\n }\n }\n\n return errors.concat(validate({\n key: options.key,\n value: value,\n valueSpec: valueSpec,\n style: style,\n styleSpec: styleSpec,\n expressionContext: 'property',\n propertyType: propertyType,\n propertyKey\n }));\n}\n","\nimport validateProperty from './validate_property';\n\nexport default function validatePaintProperty(options) {\n return validateProperty(options, 'paint');\n}\n","\nimport validateProperty from './validate_property';\n\nexport default function validateLayoutProperty(options) {\n return validateProperty(options, 'layout');\n}\n","\nimport ValidationError from '../error/validation_error';\nimport { unbundle } from '../util/unbundle_jsonlint';\nimport validateObject from './validate_object';\nimport validateFilter from './validate_filter';\nimport validatePaintProperty from './validate_paint_property';\nimport validateLayoutProperty from './validate_layout_property';\nimport validateSpec from './validate';\nimport extend from '../util/extend';\n\nexport default function validateLayer(options) {\n let errors = [];\n\n const layer = options.value;\n const key = options.key;\n const style = options.style;\n const styleSpec = options.styleSpec;\n\n if (!layer.type && !layer.ref) {\n errors.push(new ValidationError(key, layer, 'either \"type\" or \"ref\" is required'));\n }\n let type = unbundle(layer.type);\n const ref = unbundle(layer.ref);\n\n if (layer.id) {\n const layerId = unbundle(layer.id);\n for (let i = 0; i < options.arrayIndex; i++) {\n const otherLayer = style.layers[i];\n if (unbundle(otherLayer.id) === layerId) {\n errors.push(new ValidationError(key, layer.id, `duplicate layer id \"${layer.id}\", previously used at line ${otherLayer.id.__line__}`));\n }\n }\n }\n\n if ('ref' in layer) {\n ['type', 'source', 'source-layer', 'filter', 'layout'].forEach((p) => {\n if (p in layer) {\n errors.push(new ValidationError(key, layer[p], `\"${p}\" is prohibited for ref layers`));\n }\n });\n\n let parent;\n\n style.layers.forEach((layer) => {\n if (unbundle(layer.id) === ref) parent = layer;\n });\n\n if (!parent) {\n errors.push(new ValidationError(key, layer.ref, `ref layer \"${ref}\" not found`));\n } else if (parent.ref) {\n errors.push(new ValidationError(key, layer.ref, 'ref cannot reference another ref layer'));\n } else {\n type = unbundle(parent.type);\n }\n } else if (type !== 'background') {\n if (!layer.source) {\n errors.push(new ValidationError(key, layer, 'missing required property \"source\"'));\n } else {\n const source = style.sources && style.sources[layer.source];\n const sourceType = source && unbundle(source.type);\n if (!source) {\n errors.push(new ValidationError(key, layer.source, `source \"${layer.source}\" not found`));\n } else if (sourceType === 'vector' && type === 'raster') {\n errors.push(new ValidationError(key, layer.source, `layer \"${layer.id}\" requires a raster source`));\n } else if (sourceType === 'raster' && type !== 'raster') {\n errors.push(new ValidationError(key, layer.source, `layer \"${layer.id}\" requires a vector source`));\n } else if (sourceType === 'vector' && !layer['source-layer']) {\n errors.push(new ValidationError(key, layer, `layer \"${layer.id}\" must specify a \"source-layer\"`));\n } else if (sourceType === 'raster-dem' && type !== 'hillshade') {\n errors.push(new ValidationError(key, layer.source, 'raster-dem source can only be used with layer type \\'hillshade\\'.'));\n } else if (type === 'line' && layer.paint && layer.paint['line-gradient'] &&\n (sourceType !== 'geojson' || !source.lineMetrics)) {\n errors.push(new ValidationError(key, layer, `layer \"${layer.id}\" specifies a line-gradient, which requires a GeoJSON source with \\`lineMetrics\\` enabled.`));\n }\n }\n }\n\n errors = errors.concat(validateObject({\n key: key,\n value: layer,\n valueSpec: styleSpec.layer,\n style: options.style,\n styleSpec: options.styleSpec,\n objectElementValidators: {\n '*': function() {\n return [];\n },\n // We don't want to enforce the spec's `\"requires\": true` for backward compatibility with refs;\n // the actual requirement is validated above. See https://github.com/mapbox/mapbox-gl-js/issues/5772.\n type: function() {\n return validateSpec({\n key: `${key}.type`,\n value: layer.type,\n valueSpec: styleSpec.layer.type,\n style: options.style,\n styleSpec: options.styleSpec,\n object: layer,\n objectKey: 'type'\n });\n },\n filter: validateFilter,\n layout: function(options) {\n return validateObject({\n layer: layer,\n key: options.key,\n value: options.value,\n style: options.style,\n styleSpec: options.styleSpec,\n objectElementValidators: {\n '*': function(options) {\n return validateLayoutProperty(extend({layerType: type}, options));\n }\n }\n });\n },\n paint: function(options) {\n return validateObject({\n layer: layer,\n key: options.key,\n value: options.value,\n style: options.style,\n styleSpec: options.styleSpec,\n objectElementValidators: {\n '*': function(options) {\n return validatePaintProperty(extend({layerType: type}, options));\n }\n }\n });\n }\n }\n }));\n\n return errors;\n}\n","\nimport ValidationError from '../error/validation_error';\nimport { unbundle } from '../util/unbundle_jsonlint';\nimport validateObject from './validate_object';\nimport validateEnum from './validate_enum';\n\nexport default function validateSource(options) {\n const value = options.value;\n const key = options.key;\n const styleSpec = options.styleSpec;\n const style = options.style;\n\n if (!value.type) {\n return [new ValidationError(key, value, '\"type\" is required')];\n }\n\n const type = unbundle(value.type);\n let errors = [];\n\n switch (type) {\n case 'vector':\n case 'raster':\n case 'raster-dem':\n errors = errors.concat(validateObject({\n key: key,\n value: value,\n valueSpec: styleSpec[`source_${type.replace('-', '_')}`],\n style: options.style,\n styleSpec: styleSpec\n }));\n if ('url' in value) {\n for (const prop in value) {\n if (['type', 'url', 'tileSize'].indexOf(prop) < 0) {\n errors.push(new ValidationError(`${key}.${prop}`, value[prop], `a source with a \"url\" property may not include a \"${prop}\" property`));\n }\n }\n }\n return errors;\n\n case 'geojson':\n return validateObject({\n key: key,\n value: value,\n valueSpec: styleSpec.source_geojson,\n style: style,\n styleSpec: styleSpec\n });\n\n case 'video':\n return validateObject({\n key: key,\n value: value,\n valueSpec: styleSpec.source_video,\n style: style,\n styleSpec: styleSpec\n });\n\n case 'image':\n return validateObject({\n key: key,\n value: value,\n valueSpec: styleSpec.source_image,\n style: style,\n styleSpec: styleSpec\n });\n\n case 'canvas':\n errors.push(new ValidationError(key, null, `Please use runtime APIs to add canvas sources, rather than including them in stylesheets.`, 'source.canvas'));\n return errors;\n\n default:\n return validateEnum({\n key: `${key}.type`,\n value: value.type,\n valueSpec: {values: ['vector', 'raster', 'raster-dem', 'geojson', 'video', 'image']},\n style: style,\n styleSpec: styleSpec\n });\n }\n}\n","\nimport ValidationError from '../error/validation_error';\nimport getType from '../util/get_type';\nimport validate from './validate';\n\nexport default function validateLight(options) {\n const light = options.value;\n const styleSpec = options.styleSpec;\n const lightSpec = styleSpec.light;\n const style = options.style;\n\n let errors = [];\n\n const rootType = getType(light);\n if (light === undefined) {\n return errors;\n } else if (rootType !== 'object') {\n errors = errors.concat([new ValidationError('light', light, `object expected, ${rootType} found`)]);\n return errors;\n }\n\n for (const key in light) {\n const transitionMatch = key.match(/^(.*)-transition$/);\n\n if (transitionMatch && lightSpec[transitionMatch[1]] && lightSpec[transitionMatch[1]].transition) {\n errors = errors.concat(validate({\n key: key,\n value: light[key],\n valueSpec: styleSpec.transition,\n style: style,\n styleSpec: styleSpec\n }));\n } else if (lightSpec[key]) {\n errors = errors.concat(validate({\n key: key,\n value: light[key],\n valueSpec: lightSpec[key],\n style: style,\n styleSpec: styleSpec\n }));\n } else {\n errors = errors.concat([new ValidationError(key, light[key], `unknown property \"${key}\"`)]);\n }\n }\n\n return errors;\n}\n","\nimport getType from '../util/get_type';\nimport ValidationError from '../error/validation_error';\n\nexport default function validateString(options) {\n const value = options.value;\n const key = options.key;\n const type = getType(value);\n\n if (type !== 'string') {\n return [new ValidationError(key, value, `string expected, ${type} found`)];\n }\n\n return [];\n}\n","\nimport extend from '../util/extend';\nimport { unbundle, deepUnbundle } from '../util/unbundle_jsonlint';\nimport { isExpression } from '../expression';\nimport { isFunction } from '../function';\n\nimport validateFunction from './validate_function';\nimport validateExpression from './validate_expression';\nimport validateObject from './validate_object';\nimport validateArray from './validate_array';\nimport validateBoolean from './validate_boolean';\nimport validateNumber from './validate_number';\nimport validateColor from './validate_color';\nimport validateConstants from './validate_constants';\nimport validateEnum from './validate_enum';\nimport validateFilter from './validate_filter';\nimport validateLayer from './validate_layer';\nimport validateSource from './validate_source';\nimport validateLight from './validate_light';\nimport validateString from './validate_string';\nimport validateFormatted from './validate_formatted';\n\nconst VALIDATORS = {\n '*': function() {\n return [];\n },\n 'array': validateArray,\n 'boolean': validateBoolean,\n 'number': validateNumber,\n 'color': validateColor,\n 'constants': validateConstants,\n 'enum': validateEnum,\n 'filter': validateFilter,\n 'function': validateFunction,\n 'layer': validateLayer,\n 'object': validateObject,\n 'source': validateSource,\n 'light': validateLight,\n 'string': validateString,\n 'formatted': validateFormatted\n};\n\n\n// Main recursive validation function. Tracks:\n//\n// - key: string representing location of validation in style tree. Used only\n// for more informative error reporting.\n// - value: current value from style being evaluated. May be anything from a\n// high level object that needs to be descended into deeper or a simple\n// scalar value.\n// - valueSpec: current spec being evaluated. Tracks value.\n// - styleSpec: current full spec being evaluated.\n\nexport default function validate(options) {\n const value = options.value;\n const valueSpec = options.valueSpec;\n const styleSpec = options.styleSpec;\n\n if (valueSpec.expression && isFunction(unbundle(value))) {\n return validateFunction(options);\n\n } else if (valueSpec.expression && isExpression(deepUnbundle(value))) {\n return validateExpression(options);\n\n } else if (valueSpec.type && VALIDATORS[valueSpec.type]) {\n return VALIDATORS[valueSpec.type](options);\n\n } else {\n const valid = validateObject(extend({}, options, {\n valueSpec: valueSpec.type ? styleSpec[valueSpec.type] : valueSpec\n }));\n return valid;\n }\n}\n","\nimport getType from '../util/get_type';\nimport ValidationError from '../error/validation_error';\n\nexport default function validateBoolean(options) {\n const value = options.value;\n const key = options.key;\n const type = getType(value);\n\n if (type !== 'boolean') {\n return [new ValidationError(key, value, `boolean expected, ${type} found`)];\n }\n\n return [];\n}\n","\nimport ValidationError from '../error/validation_error';\nimport getType from '../util/get_type';\nimport { parseCSSColor } from 'csscolorparser';\n\nexport default function validateColor(options) {\n const key = options.key;\n const value = options.value;\n const type = getType(value);\n\n if (type !== 'string') {\n return [new ValidationError(key, value, `color expected, ${type} found`)];\n }\n\n if (parseCSSColor(value) === null) {\n return [new ValidationError(key, value, `color expected, \"${value}\" found`)];\n }\n\n return [];\n}\n","// @flow\nimport validateExpression from './validate_expression';\nimport validateString from './validate_string';\n\nexport default function validateFormatted(options: any) {\n if (validateString(options).length === 0) {\n return [];\n }\n\n return validateExpression(options);\n}\n","\nimport ValidationError from '../error/validation_error';\nimport validateString from './validate_string';\n\nexport default function(options) {\n const value = options.value;\n const key = options.key;\n\n const errors = validateString(options);\n if (errors.length) return errors;\n\n if (value.indexOf('{fontstack}') === -1) {\n errors.push(new ValidationError(key, value, '\"glyphs\" url must include a \"{fontstack}\" token'));\n }\n\n if (value.indexOf('{range}') === -1) {\n errors.push(new ValidationError(key, value, '\"glyphs\" url must include a \"{range}\" token'));\n }\n\n return errors;\n}\n","\nimport validateConstants from './validate/validate_constants';\nimport validate from './validate/validate';\nimport latestStyleSpec from './reference/latest';\nimport validateGlyphsURL from './validate/validate_glyphs_url';\n\nimport validateSource from './validate/validate_source';\nimport validateLight from './validate/validate_light';\nimport validateLayer from './validate/validate_layer';\nimport validateFilter from './validate/validate_filter';\nimport validatePaintProperty from './validate/validate_paint_property';\nimport validateLayoutProperty from './validate/validate_layout_property';\n\n/**\n * Validate a Mapbox GL style against the style specification. This entrypoint,\n * `mapbox-gl-style-spec/lib/validate_style.min`, is designed to produce as\n * small a browserify bundle as possible by omitting unnecessary functionality\n * and legacy style specifications.\n *\n * @private\n * @param {Object} style The style to be validated.\n * @param {Object} [styleSpec] The style specification to validate against.\n * If omitted, the latest style spec is used.\n * @returns {Array}\n * @example\n * var validate = require('mapbox-gl-style-spec/lib/validate_style.min');\n * var errors = validate(style);\n */\nfunction validateStyleMin(style, styleSpec) {\n styleSpec = styleSpec || latestStyleSpec;\n\n let errors = [];\n\n errors = errors.concat(validate({\n key: '',\n value: style,\n valueSpec: styleSpec.$root,\n styleSpec: styleSpec,\n style: style,\n objectElementValidators: {\n glyphs: validateGlyphsURL,\n '*': function() {\n return [];\n }\n }\n }));\n\n if (style.constants) {\n errors = errors.concat(validateConstants({\n key: 'constants',\n value: style.constants,\n style: style,\n styleSpec: styleSpec\n }));\n }\n\n return sortErrors(errors);\n}\n\nvalidateStyleMin.source = wrapCleanErrors(validateSource);\nvalidateStyleMin.light = wrapCleanErrors(validateLight);\nvalidateStyleMin.layer = wrapCleanErrors(validateLayer);\nvalidateStyleMin.filter = wrapCleanErrors(validateFilter);\nvalidateStyleMin.paintProperty = wrapCleanErrors(validatePaintProperty);\nvalidateStyleMin.layoutProperty = wrapCleanErrors(validateLayoutProperty);\n\nfunction sortErrors(errors) {\n return [].concat(errors).sort((a, b) => {\n return a.line - b.line;\n });\n}\n\nfunction wrapCleanErrors(inner) {\n return function() {\n return sortErrors(inner.apply(this, arguments));\n };\n}\n\nexport default validateStyleMin;\n","/* parser generated by jison 0.4.15 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,12],$V1=[1,13],$V2=[1,9],$V3=[1,10],$V4=[1,11],$V5=[1,14],$V6=[1,15],$V7=[14,18,22,24],$V8=[18,22],$V9=[22,24];\nvar parser = {trace: function trace() { },\nyy: {},\nsymbols_: {\"error\":2,\"JSONString\":3,\"STRING\":4,\"JSONNumber\":5,\"NUMBER\":6,\"JSONNullLiteral\":7,\"NULL\":8,\"JSONBooleanLiteral\":9,\"TRUE\":10,\"FALSE\":11,\"JSONText\":12,\"JSONValue\":13,\"EOF\":14,\"JSONObject\":15,\"JSONArray\":16,\"{\":17,\"}\":18,\"JSONMemberList\":19,\"JSONMember\":20,\":\":21,\",\":22,\"[\":23,\"]\":24,\"JSONElementList\":25,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"STRING\",6:\"NUMBER\",8:\"NULL\",10:\"TRUE\",11:\"FALSE\",14:\"EOF\",17:\"{\",18:\"}\",21:\":\",22:\",\",23:\"[\",24:\"]\"},\nproductions_: [0,[3,1],[5,1],[7,1],[9,1],[9,1],[12,2],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[15,2],[15,3],[20,3],[19,1],[19,3],[16,2],[16,3],[25,1],[25,3]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n // replace escaped characters with actual character\n this.$ = new String(yytext.replace(/\\\\(\\\\|\")/g, \"$\"+\"1\")\n .replace(/\\\\n/g,'\\n')\n .replace(/\\\\r/g,'\\r')\n .replace(/\\\\t/g,'\\t')\n .replace(/\\\\v/g,'\\v')\n .replace(/\\\\f/g,'\\f')\n .replace(/\\\\b/g,'\\b'));\n this.$.__line__ = this._$.first_line;\n \nbreak;\ncase 2:\n\n this.$ = new Number(yytext);\n this.$.__line__ = this._$.first_line;\n \nbreak;\ncase 3:\n\n this.$ = null;\n \nbreak;\ncase 4:\n\n this.$ = new Boolean(true);\n this.$.__line__ = this._$.first_line;\n \nbreak;\ncase 5:\n\n this.$ = new Boolean(false);\n this.$.__line__ = this._$.first_line;\n \nbreak;\ncase 6:\nreturn this.$ = $$[$0-1];\nbreak;\ncase 13:\nthis.$ = {}; Object.defineProperty(this.$, '__line__', {\n value: this._$.first_line,\n enumerable: false\n })\nbreak;\ncase 14: case 19:\nthis.$ = $$[$0-1]; Object.defineProperty(this.$, '__line__', {\n value: this._$.first_line,\n enumerable: false\n })\nbreak;\ncase 15:\nthis.$ = [$$[$0-2], $$[$0]];\nbreak;\ncase 16:\nthis.$ = {}; this.$[$$[$0][0]] = $$[$0][1];\nbreak;\ncase 17:\nthis.$ = $$[$0-2]; $$[$0-2][$$[$0][0]] = $$[$0][1];\nbreak;\ncase 18:\nthis.$ = []; Object.defineProperty(this.$, '__line__', {\n value: this._$.first_line,\n enumerable: false\n })\nbreak;\ncase 20:\nthis.$ = [$$[$0]];\nbreak;\ncase 21:\nthis.$ = $$[$0-2]; $$[$0-2].push($$[$0]);\nbreak;\n}\n},\ntable: [{3:5,4:$V0,5:6,6:$V1,7:3,8:$V2,9:4,10:$V3,11:$V4,12:1,13:2,15:7,16:8,17:$V5,23:$V6},{1:[3]},{14:[1,16]},o($V7,[2,7]),o($V7,[2,8]),o($V7,[2,9]),o($V7,[2,10]),o($V7,[2,11]),o($V7,[2,12]),o($V7,[2,3]),o($V7,[2,4]),o($V7,[2,5]),o([14,18,21,22,24],[2,1]),o($V7,[2,2]),{3:20,4:$V0,18:[1,17],19:18,20:19},{3:5,4:$V0,5:6,6:$V1,7:3,8:$V2,9:4,10:$V3,11:$V4,13:23,15:7,16:8,17:$V5,23:$V6,24:[1,21],25:22},{1:[2,6]},o($V7,[2,13]),{18:[1,24],22:[1,25]},o($V8,[2,16]),{21:[1,26]},o($V7,[2,18]),{22:[1,28],24:[1,27]},o($V9,[2,20]),o($V7,[2,14]),{3:20,4:$V0,20:29},{3:5,4:$V0,5:6,6:$V1,7:3,8:$V2,9:4,10:$V3,11:$V4,13:30,15:7,16:8,17:$V5,23:$V6},o($V7,[2,19]),{3:5,4:$V0,5:6,6:$V1,7:3,8:$V2,9:4,10:$V3,11:$V4,13:31,15:7,16:8,17:$V5,23:$V6},o($V8,[2,17]),o($V8,[2,15]),o($V9,[2,21])],\ndefaultActions: {16:[2,6]},\nparseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n throw new Error(str);\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n _token_stack:\n function lex() {\n var token;\n token = lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function (match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin(condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState(condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip whitespace */\nbreak;\ncase 1:return 6\nbreak;\ncase 2:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 4\nbreak;\ncase 3:return 17\nbreak;\ncase 4:return 18\nbreak;\ncase 5:return 23\nbreak;\ncase 6:return 24\nbreak;\ncase 7:return 22\nbreak;\ncase 8:return 21\nbreak;\ncase 9:return 10\nbreak;\ncase 10:return 11\nbreak;\ncase 11:return 8\nbreak;\ncase 12:return 14\nbreak;\ncase 13:return 'INVALID'\nbreak;\n}\n},\nrules: [/^(?:\\s+)/,/^(?:(-?([0-9]|[1-9][0-9]+))(\\.[0-9]+)?([eE][-+]?[0-9]+)?\\b)/,/^(?:\"(?:\\\\[\\\\\"bfnrt/]|\\\\u[a-fA-F0-9]{4}|[^\\\\\\0-\\x09\\x0a-\\x1f\"])*\")/,/^(?:\\{)/,/^(?:\\})/,/^(?:\\[)/,/^(?:\\])/,/^(?:,)/,/^(?::)/,/^(?:true\\b)/,/^(?:false\\b)/,/^(?:null\\b)/,/^(?:$)/,/^(?:.)/],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\n}\n","\nimport validateStyleMin from './validate_style.min';\nimport ParsingError from './error/parsing_error';\nimport jsonlint from '@mapbox/jsonlint-lines-primitives';\nimport {v8} from './style-spec';\n\n/**\n * Validate a Mapbox GL style against the style specification.\n *\n * @private\n * @alias validate\n * @param {Object|String|Buffer} style The style to be validated. If a `String`\n * or `Buffer` is provided, the returned errors will contain line numbers.\n * @param {Object} [styleSpec] The style specification to validate against.\n * If omitted, the spec version is inferred from the stylesheet.\n * @returns {Array}\n * @example\n * var validate = require('mapbox-gl-style-spec').validate;\n * var style = fs.readFileSync('./style.json', 'utf8');\n * var errors = validate(style);\n */\n\nexport default function validateStyle(style, styleSpec) {\n if (style instanceof String || typeof style === 'string' || style instanceof Buffer) {\n try {\n style = jsonlint.parse(style.toString());\n } catch (e) {\n return [new ParsingError(e)];\n }\n }\n\n styleSpec = styleSpec || v8;\n\n return validateStyleMin(style, styleSpec);\n}\n\nexport const source = validateStyleMin.source;\nexport const light = validateStyleMin.light;\nexport const layer = validateStyleMin.layer;\nexport const filter = validateStyleMin.filter;\nexport const paintProperty = validateStyleMin.paintProperty;\nexport const layoutProperty = validateStyleMin.layoutProperty;\n","// @flow\n\ntype ExpressionType = 'data-driven' | 'cross-faded' | 'cross-faded-data-driven' | 'color-ramp' | 'data-constant' | 'constant';\ntype ExpressionParameters = Array<'zoom' | 'feature' | 'feature-state' | 'heatmap-density' | 'line-progress'>;\n\ntype ExpressionSpecification = {\n interpolated: boolean,\n parameters: ExpressionParameters\n}\n\nexport type StylePropertySpecification = {\n type: 'number',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n transition: boolean,\n default?: number\n} | {\n type: 'string',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n transition: boolean,\n default?: string,\n tokens?: boolean\n} | {\n type: 'boolean',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n transition: boolean,\n default?: boolean\n} | {\n type: 'enum',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n values: {[string]: {}},\n transition: boolean,\n default?: string\n} | {\n type: 'color',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n transition: boolean,\n default?: string\n} | {\n type: 'array',\n value: 'number',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n length?: number,\n transition: boolean,\n default?: Array\n} | {\n type: 'array',\n value: 'string',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n length?: number,\n transition: boolean,\n default?: Array\n};\n\nimport v8 from './reference/v8.json';\nimport latest from './reference/latest';\nimport format from './format';\nimport migrate from './migrate';\nimport composite from './composite';\nimport diff from './diff';\nimport ValidationError from './error/validation_error';\nimport ParsingError from './error/parsing_error';\nimport { StyleExpression, isExpression, createExpression, createPropertyExpression, normalizePropertyExpression, ZoomConstantExpression, ZoomDependentExpression, StylePropertyFunction } from './expression';\nimport featureFilter from './feature_filter';\nimport Color from './util/color';\nimport { createFunction, isFunction } from './function';\nimport convertFunction from './function/convert';\nimport { eachSource, eachLayer, eachProperty } from './visit';\n\nimport validate from './validate_style';\n\nconst expression = {\n StyleExpression,\n isExpression,\n createExpression,\n createPropertyExpression,\n normalizePropertyExpression,\n ZoomConstantExpression,\n ZoomDependentExpression,\n StylePropertyFunction\n};\n\nconst styleFunction = {\n convertFunction,\n createFunction,\n isFunction\n};\n\nconst visit = { eachSource, eachLayer, eachProperty };\n\nexport {\n v8,\n latest,\n format,\n migrate,\n composite,\n diff,\n ValidationError,\n ParsingError,\n expression,\n featureFilter,\n Color,\n styleFunction as function,\n validate,\n visit\n};\n\nvalidate.parsed = validate;\nvalidate.latest = validate;\n","// @flow\n\nimport {\n eachLayer,\n eachProperty\n} from '../visit';\nimport { isExpression } from '../expression';\nimport convertFunction, {convertTokenString} from '../function/convert';\nimport convertFilter from '../feature_filter/convert';\n\nimport type { StyleSpecification } from '../types';\n\n/**\n * Migrate the given style object in place to use expressions. Specifically,\n * this will convert (a) \"stop\" functions, and (b) legacy filters to their\n * expression equivalents.\n */\nexport default function(style: StyleSpecification) {\n const converted = [];\n\n eachLayer(style, (layer) => {\n if (layer.filter) {\n layer.filter = (convertFilter(layer.filter): any);\n }\n });\n\n eachProperty(style, {paint: true, layout: true}, ({path, value, reference, set}) => {\n if (isExpression(value)) return;\n if (typeof value === 'object' && !Array.isArray(value)) {\n set(convertFunction(value, reference));\n converted.push(path.join('.'));\n } else if (reference.tokens && typeof value === 'string') {\n set(convertTokenString(value));\n }\n });\n\n return style;\n}\n\n","\nexport default function (style) {\n const styleIDs = [];\n const sourceIDs = [];\n const compositedSourceLayers = [];\n\n for (const id in style.sources) {\n const source = style.sources[id];\n\n if (source.type !== \"vector\")\n continue;\n\n const match = /^mapbox:\\/\\/(.*)/.exec(source.url);\n if (!match)\n continue;\n\n styleIDs.push(id);\n sourceIDs.push(match[1]);\n }\n\n if (styleIDs.length < 2)\n return style;\n\n styleIDs.forEach((id) => {\n delete style.sources[id];\n });\n\n const compositeID = sourceIDs.join(\",\");\n\n style.sources[compositeID] = {\n \"type\": \"vector\",\n \"url\": `mapbox://${compositeID}`\n };\n\n style.layers.forEach((layer) => {\n if (styleIDs.indexOf(layer.source) >= 0) {\n layer.source = compositeID;\n\n if ('source-layer' in layer) {\n if (compositedSourceLayers.indexOf(layer['source-layer']) >= 0) {\n throw new Error('Conflicting source layer names');\n } else {\n compositedSourceLayers.push(layer['source-layer']);\n }\n }\n }\n });\n\n return style;\n}\n","/**\n * @module ol/geom/Geometry\n */\nimport BaseObject from '../Object.js';\nimport {createEmpty, getHeight, returnOrUpdate} from '../extent.js';\nimport {FALSE} from '../functions.js';\nimport {transform2D} from '../geom/flat/transform.js';\nimport {get as getProjection, getTransform} from '../proj.js';\nimport Units from '../proj/Units.js';\nimport {create as createTransform, compose as composeTransform} from '../transform.js';\n\n\n/**\n * @type {module:ol/transform~Transform}\n */\nconst tmpTransform = createTransform();\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for vector geometries.\n *\n * To get notified of changes to the geometry, register a listener for the\n * generic `change` event on your geometry instance.\n *\n * @abstract\n * @api\n */\nclass Geometry extends BaseObject {\n constructor() {\n\n super();\n\n /**\n * @private\n * @type {module:ol/extent~Extent}\n */\n this.extent_ = createEmpty();\n\n /**\n * @private\n * @type {number}\n */\n this.extentRevision_ = -1;\n\n /**\n * @protected\n * @type {Object}\n */\n this.simplifiedGeometryCache = {};\n\n /**\n * @protected\n * @type {number}\n */\n this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n\n /**\n * @protected\n * @type {number}\n */\n this.simplifiedGeometryRevision = 0;\n\n }\n\n /**\n * Make a complete copy of the geometry.\n * @abstract\n * @return {!module:ol/geom/Geometry} Clone.\n */\n clone() {}\n\n /**\n * @abstract\n * @param {number} x X.\n * @param {number} y Y.\n * @param {module:ol/coordinate~Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {}\n\n /**\n * Return the closest point of the geometry to the passed point as\n * {@link module:ol/coordinate~Coordinate coordinate}.\n * @param {module:ol/coordinate~Coordinate} point Point.\n * @param {module:ol/coordinate~Coordinate=} opt_closestPoint Closest point.\n * @return {module:ol/coordinate~Coordinate} Closest point.\n * @api\n */\n getClosestPoint(point, opt_closestPoint) {\n const closestPoint = opt_closestPoint ? opt_closestPoint : [NaN, NaN];\n this.closestPointXY(point[0], point[1], closestPoint, Infinity);\n return closestPoint;\n }\n\n /**\n * Returns true if this geometry includes the specified coordinate. If the\n * coordinate is on the boundary of the geometry, returns false.\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n * @return {boolean} Contains coordinate.\n * @api\n */\n intersectsCoordinate(coordinate) {\n return this.containsXY(coordinate[0], coordinate[1]);\n }\n\n /**\n * @abstract\n * @param {module:ol/extent~Extent} extent Extent.\n * @protected\n * @return {module:ol/extent~Extent} extent Extent.\n */\n computeExtent(extent) {}\n\n /**\n * Get the extent of the geometry.\n * @param {module:ol/extent~Extent=} opt_extent Extent.\n * @return {module:ol/extent~Extent} extent Extent.\n * @api\n */\n getExtent(opt_extent) {\n if (this.extentRevision_ != this.getRevision()) {\n this.extent_ = this.computeExtent(this.extent_);\n this.extentRevision_ = this.getRevision();\n }\n return returnOrUpdate(this.extent_, opt_extent);\n }\n\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} angle Rotation angle in radians.\n * @param {module:ol/coordinate~Coordinate} anchor The rotation center.\n * @api\n */\n rotate(angle, anchor) {}\n\n /**\n * Scale the geometry (with an optional origin). This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number=} opt_sy The scaling factor in the y-direction (defaults to\n * sx).\n * @param {module:ol/coordinate~Coordinate=} opt_anchor The scale origin (defaults to the center\n * of the geometry extent).\n * @api\n */\n scale(sx, opt_sy, opt_anchor) {}\n\n /**\n * Create a simplified version of this geometry. For linestrings, this uses\n * the the {@link\n * https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm\n * Douglas Peucker} algorithm. For polygons, a quantization-based\n * simplification is used to preserve topology.\n * @function\n * @param {number} tolerance The tolerance distance for simplification.\n * @return {module:ol/geom/Geometry} A new, simplified version of the original\n * geometry.\n * @api\n */\n simplify(tolerance) {\n return this.getSimplifiedGeometry(tolerance * tolerance);\n }\n\n /**\n * Create a simplified version of this geometry using the Douglas Peucker\n * algorithm.\n * See https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm.\n * @abstract\n * @param {number} squaredTolerance Squared tolerance.\n * @return {module:ol/geom/Geometry} Simplified geometry.\n */\n getSimplifiedGeometry(squaredTolerance) {}\n\n /**\n * Get the type of this geometry.\n * @abstract\n * @return {module:ol/geom/GeometryType} Geometry type.\n */\n getType() {}\n\n /**\n * Apply a transform function to each coordinate of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @abstract\n * @param {module:ol/proj~TransformFunction} transformFn Transform.\n */\n applyTransform(transformFn) {}\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @abstract\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n */\n intersectsExtent(extent) {}\n\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @abstract\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n */\n translate(deltaX, deltaY) {}\n\n /**\n * Transform each coordinate of the geometry from one coordinate reference\n * system to another. The geometry is modified in place.\n * For example, a line will be transformed to a line and a circle to a circle.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n *\n * @param {module:ol/proj~ProjectionLike} source The current projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @param {module:ol/proj~ProjectionLike} destination The desired projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @return {module:ol/geom/Geometry} This geometry. Note that original geometry is\n * modified in place.\n * @api\n */\n transform(source, destination) {\n source = getProjection(source);\n const transformFn = source.getUnits() == Units.TILE_PIXELS ?\n function(inCoordinates, outCoordinates, stride) {\n const pixelExtent = source.getExtent();\n const projectedExtent = source.getWorldExtent();\n const scale = getHeight(projectedExtent) / getHeight(pixelExtent);\n composeTransform(tmpTransform,\n projectedExtent[0], projectedExtent[3],\n scale, -scale, 0,\n 0, 0);\n transform2D(inCoordinates, 0, inCoordinates.length, stride,\n tmpTransform, outCoordinates);\n return getTransform(source, destination)(inCoordinates, outCoordinates, stride);\n } :\n getTransform(source, destination);\n this.applyTransform(transformFn);\n return this;\n }\n}\n\n\n/**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nGeometry.prototype.containsXY = FALSE;\n\n\nexport default Geometry;\n","/**\n * @module ol/geom/flat/intersectsextent\n */\nimport {containsExtent, createEmpty, extendFlatCoordinates, intersects, intersectsSegment} from '../../extent.js';\nimport {linearRingContainsXY, linearRingContainsExtent} from '../flat/contains.js';\nimport {forEach as forEachSegment} from '../flat/segments.js';\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineString(flatCoordinates, offset, end, stride, extent) {\n const coordinatesExtent = extendFlatCoordinates(\n createEmpty(), flatCoordinates, offset, end, stride);\n if (!intersects(extent, coordinatesExtent)) {\n return false;\n }\n if (containsExtent(extent, coordinatesExtent)) {\n return true;\n }\n if (coordinatesExtent[0] >= extent[0] &&\n coordinatesExtent[2] <= extent[2]) {\n return true;\n }\n if (coordinatesExtent[1] >= extent[1] &&\n coordinatesExtent[3] <= extent[3]) {\n return true;\n }\n return forEachSegment(flatCoordinates, offset, end, stride,\n /**\n * @param {module:ol/coordinate~Coordinate} point1 Start point.\n * @param {module:ol/coordinate~Coordinate} point2 End point.\n * @return {boolean} `true` if the segment and the extent intersect,\n * `false` otherwise.\n */\n function(point1, point2) {\n return intersectsSegment(extent, point1, point2);\n });\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineStringArray(flatCoordinates, offset, ends, stride, extent) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n if (intersectsLineString(\n flatCoordinates, offset, ends[i], stride, extent)) {\n return true;\n }\n offset = ends[i];\n }\n return false;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRing(flatCoordinates, offset, end, stride, extent) {\n if (intersectsLineString(\n flatCoordinates, offset, end, stride, extent)) {\n return true;\n }\n if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[0], extent[1])) {\n return true;\n }\n if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[0], extent[3])) {\n return true;\n }\n if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[2], extent[1])) {\n return true;\n }\n if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[2], extent[3])) {\n return true;\n }\n return false;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingArray(flatCoordinates, offset, ends, stride, extent) {\n if (!intersectsLinearRing(\n flatCoordinates, offset, ends[0], stride, extent)) {\n return false;\n }\n if (ends.length === 1) {\n return true;\n }\n for (let i = 1, ii = ends.length; i < ii; ++i) {\n if (linearRingContainsExtent(flatCoordinates, ends[i - 1], ends[i], stride, extent)) {\n return false;\n }\n }\n return true;\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {module:ol/extent~Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingMultiArray(flatCoordinates, offset, endss, stride, extent) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (intersectsLinearRingArray(\n flatCoordinates, offset, ends, stride, extent)) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n","/**\n * @module ol/Observable\n */\nimport {listen, unlistenByKey, unlisten, listenOnce} from './events.js';\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * An event target providing convenient methods for listener registration\n * and unregistration. A generic `change` event is always available through\n * {@link module:ol/Observable~Observable#changed}.\n *\n * @fires module:ol/events/Event~Event\n * @api\n */\nclass Observable extends EventTarget {\n constructor() {\n\n super();\n\n /**\n * @private\n * @type {number}\n */\n this.revision_ = 0;\n\n }\n\n /**\n * Increases the revision counter and dispatches a 'change' event.\n * @api\n */\n changed() {\n ++this.revision_;\n this.dispatchEvent(EventType.CHANGE);\n }\n\n /**\n * Get the version number for this object. Each time the object is modified,\n * its version number will be incremented.\n * @return {number} Revision.\n * @api\n */\n getRevision() {\n return this.revision_;\n }\n\n /**\n * Listen for a certain type of event.\n * @param {string|Array} type The event type or array of event types.\n * @param {function(?): ?} listener The listener function.\n * @return {module:ol/events~EventsKey|Array} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\n on(type, listener) {\n if (Array.isArray(type)) {\n const len = type.length;\n const keys = new Array(len);\n for (let i = 0; i < len; ++i) {\n keys[i] = listen(this, type[i], listener);\n }\n return keys;\n } else {\n return listen(this, /** @type {string} */ (type), listener);\n }\n }\n\n /**\n * Listen once for a certain type of event.\n * @param {string|Array} type The event type or array of event types.\n * @param {function(?): ?} listener The listener function.\n * @return {module:ol/events~EventsKey|Array} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\n once(type, listener) {\n if (Array.isArray(type)) {\n const len = type.length;\n const keys = new Array(len);\n for (let i = 0; i < len; ++i) {\n keys[i] = listenOnce(this, type[i], listener);\n }\n return keys;\n } else {\n return listenOnce(this, /** @type {string} */ (type), listener);\n }\n }\n\n /**\n * Unlisten for a certain type of event.\n * @param {string|Array} type The event type or array of event types.\n * @param {function(?): ?} listener The listener function.\n * @api\n */\n un(type, listener) {\n if (Array.isArray(type)) {\n for (let i = 0, ii = type.length; i < ii; ++i) {\n unlisten(this, type[i], listener);\n }\n return;\n } else {\n unlisten(this, /** @type {string} */ (type), listener);\n }\n }\n}\n\n\n/**\n * Removes an event listener using the key returned by `on()` or `once()`.\n * @param {module:ol/events~EventsKey|Array} key The key returned by `on()`\n * or `once()` (or an array of keys).\n * @api\n */\nexport function unByKey(key) {\n if (Array.isArray(key)) {\n for (let i = 0, ii = key.length; i < ii; ++i) {\n unlistenByKey(key[i]);\n }\n } else {\n unlistenByKey(/** @type {module:ol/events~EventsKey} */ (key));\n }\n}\n\n\nexport default Observable;\n","/**\n * @module ol/format/Feature\n */\nimport Geometry from '../geom/Geometry.js';\nimport {assign} from '../obj.js';\nimport {get as getProjection, equivalent as equivalentProjection, transformExtent} from '../proj.js';\n\n\n/**\n * @typedef {Object} ReadOptions\n * @property {module:ol/proj~ProjectionLike} [dataProjection] Projection of the data we are reading.\n * If not provided, the projection will be derived from the data (where possible) or\n * the `dataProjection` of the format is assigned (where set). If the projection\n * can not be derived from the data and if no `dataProjection` is set for a format,\n * the features will not be reprojected.\n * @property {module:ol/extent~Extent} [extent] Tile extent of the tile being read. This is only used and\n * required for {@link module:ol/format/MVT}.\n * @property {module:ol/proj~ProjectionLike} [featureProjection] Projection of the feature geometries\n * created by the format reader. If not provided, features will be returned in the\n * `dataProjection`.\n */\n\n\n/**\n * @typedef {Object} WriteOptions\n * @property {module:ol/proj~ProjectionLike} [dataProjection] Projection of the data we are writing.\n * If not provided, the `dataProjection` of the format is assigned (where set).\n * If no `dataProjection` is set for a format, the features will be returned\n * in the `featureProjection`.\n * @property {module:ol/proj~ProjectionLike} [featureProjection] Projection of the feature geometries\n * that will be serialized by the format writer. If not provided, geometries are assumed\n * to be in the `dataProjection` if that is set; in other words, they are not transformed.\n * @property {boolean} [rightHanded] When writing geometries, follow the right-hand\n * rule for linear ring orientation. This means that polygons will have counter-clockwise\n * exterior rings and clockwise interior rings. By default, coordinates are serialized\n * as they are provided at construction. If `true`, the right-hand rule will\n * be applied. If `false`, the left-hand rule will be applied (clockwise for\n * exterior and counter-clockwise for interior rings). Note that not all\n * formats support this. The GeoJSON format does use this property when writing\n * geometries.\n * @property {number} [decimals] Maximum number of decimal places for coordinates.\n * Coordinates are stored internally as floats, but floating-point arithmetic can create\n * coordinates with a large number of decimal places, not generally wanted on output.\n * Set a number here to round coordinates. Can also be used to ensure that\n * coordinates read in can be written back out with the same number of decimals.\n * Default is no rounding.\n */\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for feature formats.\n * {module:ol/format/Feature~FeatureFormat} subclasses provide the ability to decode and encode\n * {@link module:ol/Feature~Feature} objects from a variety of commonly used geospatial\n * file formats. See the documentation for each format for more details.\n *\n * @abstract\n * @api\n */\nclass FeatureFormat {\n constructor() {\n\n /**\n * @protected\n * @type {module:ol/proj/Projection}\n */\n this.dataProjection = null;\n\n /**\n * @protected\n * @type {module:ol/proj/Projection}\n */\n this.defaultFeatureProjection = null;\n\n }\n\n /**\n * Adds the data projection to the read options.\n * @param {Document|Node|Object|string} source Source.\n * @param {module:ol/format/Feature~ReadOptions=} opt_options Options.\n * @return {module:ol/format/Feature~ReadOptions|undefined} Options.\n * @protected\n */\n getReadOptions(source, opt_options) {\n let options;\n if (opt_options) {\n options = {\n dataProjection: opt_options.dataProjection ?\n opt_options.dataProjection : this.readProjection(source),\n featureProjection: opt_options.featureProjection\n };\n }\n return this.adaptOptions(options);\n }\n\n /**\n * Sets the `dataProjection` on the options, if no `dataProjection`\n * is set.\n * @param {module:ol/format/Feature~WriteOptions|module:ol/format/Feature~ReadOptions|undefined} options\n * Options.\n * @protected\n * @return {module:ol/format/Feature~WriteOptions|module:ol/format/Feature~ReadOptions|undefined}\n * Updated options.\n */\n adaptOptions(options) {\n return assign({\n dataProjection: this.dataProjection,\n featureProjection: this.defaultFeatureProjection\n }, options);\n }\n\n /**\n * Get the extent from the source of the last {@link readFeatures} call.\n * @return {module:ol/extent~Extent} Tile extent.\n */\n getLastExtent() {\n return null;\n }\n\n /**\n * @abstract\n * @return {module:ol/format/FormatType} Format.\n */\n getType() {}\n\n /**\n * Read a single feature from a source.\n *\n * @abstract\n * @param {Document|Node|Object|string} source Source.\n * @param {module:ol/format/Feature~ReadOptions=} opt_options Read options.\n * @return {module:ol/Feature} Feature.\n */\n readFeature(source, opt_options) {}\n\n /**\n * Read all features from a source.\n *\n * @abstract\n * @param {Document|Node|ArrayBuffer|Object|string} source Source.\n * @param {module:ol/format/Feature~ReadOptions=} opt_options Read options.\n * @return {Array} Features.\n */\n readFeatures(source, opt_options) {}\n\n /**\n * Read a single geometry from a source.\n *\n * @abstract\n * @param {Document|Node|Object|string} source Source.\n * @param {module:ol/format/Feature~ReadOptions=} opt_options Read options.\n * @return {module:ol/geom/Geometry} Geometry.\n */\n readGeometry(source, opt_options) {}\n\n /**\n * Read the projection from a source.\n *\n * @abstract\n * @param {Document|Node|Object|string} source Source.\n * @return {module:ol/proj/Projection} Projection.\n */\n readProjection(source) {}\n\n /**\n * Encode a feature in this format.\n *\n * @abstract\n * @param {module:ol/Feature} feature Feature.\n * @param {module:ol/format/Feature~WriteOptions=} opt_options Write options.\n * @return {string} Result.\n */\n writeFeature(feature, opt_options) {}\n\n /**\n * Encode an array of features in this format.\n *\n * @abstract\n * @param {Array} features Features.\n * @param {module:ol/format/Feature~WriteOptions=} opt_options Write options.\n * @return {string} Result.\n */\n writeFeatures(features, opt_options) {}\n\n /**\n * Write a single geometry in this format.\n *\n * @abstract\n * @param {module:ol/geom/Geometry} geometry Geometry.\n * @param {module:ol/format/Feature~WriteOptions=} opt_options Write options.\n * @return {string} Result.\n */\n writeGeometry(geometry, opt_options) {}\n}\n\nexport default FeatureFormat;\n\n/**\n * @param {module:ol/geom/Geometry|module:ol/extent~Extent} geometry Geometry.\n * @param {boolean} write Set to true for writing, false for reading.\n * @param {module:ol/format/Feature~WriteOptions|module:ol/format/Feature~ReadOptions|undefined} opt_options\n * Options.\n * @return {module:ol/geom/Geometry|module:ol/extent~Extent} Transformed geometry.\n */\nexport function transformWithOptions(geometry, write, opt_options) {\n const featureProjection = opt_options ?\n getProjection(opt_options.featureProjection) : null;\n const dataProjection = opt_options ?\n getProjection(opt_options.dataProjection) : null;\n /**\n * @type {module:ol/geom/Geometry|module:ol/extent~Extent}\n */\n let transformed;\n if (featureProjection && dataProjection &&\n !equivalentProjection(featureProjection, dataProjection)) {\n if (geometry instanceof Geometry) {\n transformed = (write ? geometry.clone() : geometry).transform(\n write ? featureProjection : dataProjection,\n write ? dataProjection : featureProjection);\n } else {\n // FIXME this is necessary because GML treats extents\n // as geometries\n transformed = transformExtent(\n geometry,\n dataProjection,\n featureProjection);\n }\n } else {\n transformed = geometry;\n }\n if (write && opt_options && opt_options.decimals !== undefined) {\n const power = Math.pow(10, opt_options.decimals);\n // if decimals option on write, round each coordinate appropriately\n /**\n * @param {Array} coordinates Coordinates.\n * @return {Array} Transformed coordinates.\n */\n const transform = function(coordinates) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n coordinates[i] = Math.round(coordinates[i] * power) / power;\n }\n return coordinates;\n };\n if (transformed === geometry) {\n transformed = transformed.clone();\n }\n transformed.applyTransform(transform);\n }\n return transformed;\n}\n","/**\n * @module ol/layer/Vector\n */\nimport LayerType from '../LayerType.js';\nimport Layer from '../layer/Layer.js';\nimport VectorRenderType from '../layer/VectorRenderType.js';\nimport {assign} from '../obj.js';\nimport {createDefaultStyle, toFunction as toStyleFunction} from '../style/Style.js';\n\n\n/**\n * @typedef {Object} Options\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {module:ol/extent~Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex=0] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {module:ol/render~OrderFunction} [renderOrder] Render order. Function to be used when sorting\n * features before rendering. By default features are drawn in the order that they are created. Use\n * `null` to avoid the sort, but get an undefined draw order.\n * @property {number} [renderBuffer=100] The buffer in pixels around the viewport extent used by the\n * renderer when getting features from the vector source for the rendering or hit-detection.\n * Recommended value: the size of the largest symbol, line width or label.\n * @property {module:ol/layer/VectorRenderType|string} [renderMode='vector'] Render mode for vector layers:\n * * `'image'`: Vector layers are rendered as images. Great performance, but point symbols and\n * texts are always rotated with the view and pixels are scaled during zoom animations.\n * * `'vector'`: Vector layers are rendered as vectors. Most accurate rendering even during\n * animations, but slower performance.\n * @property {module:ol/source/Vector} [source] Source.\n * @property {module:ol/PluggableMap} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use {@link module:ol/Map#addLayer}.\n * @property {boolean} [declutter=false] Declutter images and text. Decluttering is applied to all\n * image and text styles, and the priority is defined by the z-index of the style. Lower z-index\n * means higher priority.\n * @property {module:ol/style/Style|Array|module:ol/style/Style~StyleFunction} [style] Layer style. See\n * {@link module:ol/style} for default style which will be used if this is not defined.\n * @property {boolean} [updateWhileAnimating=false] When set to `true` and `renderMode`\n * is `vector`, feature batches will be recreated during animations. This means that no\n * vectors will be shown clipped, but the setting will have a performance impact for large\n * amounts of vector data. When set to `false`, batches will be recreated when no animation\n * is active.\n * @property {boolean} [updateWhileInteracting=false] When set to `true` and `renderMode`\n * is `vector`, feature batches will be recreated during interactions. See also\n * `updateWhileAnimating`.\n */\n\n\n/**\n * @enum {string}\n * Render mode for vector layers:\n * * `'image'`: Vector layers are rendered as images. Great performance, but\n * point symbols and texts are always rotated with the view and pixels are\n * scaled during zoom animations.\n * * `'vector'`: Vector layers are rendered as vectors. Most accurate rendering\n * even during animations, but slower performance.\n * @api\n */\nexport const RenderType = {\n IMAGE: 'image',\n VECTOR: 'vector'\n};\n\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n RENDER_ORDER: 'renderOrder'\n};\n\n\n/**\n * @classdesc\n * Vector data that is rendered client-side.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @api\n */\nclass VectorLayer extends Layer {\n /**\n * @param {module:ol/layer/Vector~Options=} opt_options Options.\n */\n constructor(opt_options) {\n const options = opt_options ?\n opt_options : /** @type {module:ol/layer/Vector~Options} */ ({});\n\n const baseOptions = assign({}, options);\n\n delete baseOptions.style;\n delete baseOptions.renderBuffer;\n delete baseOptions.updateWhileAnimating;\n delete baseOptions.updateWhileInteracting;\n super(baseOptions);\n\n /**\n * @private\n * @type {boolean}\n */\n this.declutter_ = options.declutter !== undefined ? options.declutter : false;\n\n /**\n * @type {number}\n * @private\n */\n this.renderBuffer_ = options.renderBuffer !== undefined ?\n options.renderBuffer : 100;\n\n /**\n * User provided style.\n * @type {module:ol/style/Style|Array|module:ol/style/Style~StyleFunction}\n * @private\n */\n this.style_ = null;\n\n /**\n * Style function for use within the library.\n * @type {module:ol/style/Style~StyleFunction|undefined}\n * @private\n */\n this.styleFunction_ = undefined;\n\n this.setStyle(options.style);\n\n /**\n * @type {boolean}\n * @private\n */\n this.updateWhileAnimating_ = options.updateWhileAnimating !== undefined ?\n options.updateWhileAnimating : false;\n\n /**\n * @type {boolean}\n * @private\n */\n this.updateWhileInteracting_ = options.updateWhileInteracting !== undefined ?\n options.updateWhileInteracting : false;\n\n /**\n * @private\n * @type {module:ol/layer/VectorTileRenderType|string}\n */\n this.renderMode_ = options.renderMode || VectorRenderType.VECTOR;\n\n /**\n * The layer type.\n * @protected\n * @type {module:ol/LayerType}\n */\n this.type = LayerType.VECTOR;\n\n }\n\n /**\n * @return {boolean} Declutter.\n */\n getDeclutter() {\n return this.declutter_;\n }\n\n /**\n * @param {boolean} declutter Declutter.\n */\n setDeclutter(declutter) {\n this.declutter_ = declutter;\n }\n\n /**\n * @return {number|undefined} Render buffer.\n */\n getRenderBuffer() {\n return this.renderBuffer_;\n }\n\n /**\n * @return {function(module:ol/Feature, module:ol/Feature): number|null|undefined} Render\n * order.\n */\n getRenderOrder() {\n return (\n /** @type {module:ol/render~OrderFunction|null|undefined} */ (this.get(Property.RENDER_ORDER))\n );\n }\n\n /**\n * Get the style for features. This returns whatever was passed to the `style`\n * option at construction or to the `setStyle` method.\n * @return {module:ol/style/Style|Array|module:ol/style/Style~StyleFunction}\n * Layer style.\n * @api\n */\n getStyle() {\n return this.style_;\n }\n\n /**\n * Get the style function.\n * @return {module:ol/style/Style~StyleFunction|undefined} Layer style function.\n * @api\n */\n getStyleFunction() {\n return this.styleFunction_;\n }\n\n /**\n * @return {boolean} Whether the rendered layer should be updated while\n * animating.\n */\n getUpdateWhileAnimating() {\n return this.updateWhileAnimating_;\n }\n\n /**\n * @return {boolean} Whether the rendered layer should be updated while\n * interacting.\n */\n getUpdateWhileInteracting() {\n return this.updateWhileInteracting_;\n }\n\n /**\n * @param {module:ol/render~OrderFunction|null|undefined} renderOrder\n * Render order.\n */\n setRenderOrder(renderOrder) {\n this.set(Property.RENDER_ORDER, renderOrder);\n }\n\n /**\n * Set the style for features. This can be a single style object, an array\n * of styles, or a function that takes a feature and resolution and returns\n * an array of styles. If it is `undefined` the default style is used. If\n * it is `null` the layer has no style (a `null` style), so only features\n * that have their own styles will be rendered in the layer. See\n * {@link module:ol/style} for information on the default style.\n * @param {module:ol/style/Style|Array|module:ol/style/Style~StyleFunction|null|undefined} style Layer style.\n * @api\n */\n setStyle(style) {\n this.style_ = style !== undefined ? style : createDefaultStyle;\n this.styleFunction_ = style === null ?\n undefined : toStyleFunction(this.style_);\n this.changed();\n }\n\n /**\n * @return {module:ol/layer/VectorRenderType|string} The render mode.\n */\n getRenderMode() {\n return this.renderMode_;\n }\n}\n\n\n/**\n * Return the associated {@link module:ol/source/Vector vectorsource} of the layer.\n * @function\n * @return {module:ol/source/Vector} Source.\n * @api\n */\nVectorLayer.prototype.getSource;\n\n\nexport default VectorLayer;\n","/**\n * @module ol/tilegrid/common\n */\n\n/**\n * Default maximum zoom for default tile grids.\n * @type {number}\n */\nexport const DEFAULT_MAX_ZOOM = 42;\n\n/**\n * Default tile size.\n * @type {number}\n */\nexport const DEFAULT_TILE_SIZE = 256;\n","/**\n * @module ol/geom/flat/interiorpoint\n */\nimport {numberSafeCompareFunction} from '../../array.js';\nimport {linearRingsContainsXY} from '../flat/contains.js';\n\n\n/**\n * Calculates a point that is likely to lie in the interior of the linear rings.\n * Inspired by JTS's com.vividsolutions.jts.geom.Geometry#getInteriorPoint.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @param {number} flatCentersOffset Flat center offset.\n * @param {Array=} opt_dest Destination.\n * @return {Array} Destination point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointOfArray(flatCoordinates, offset,\n ends, stride, flatCenters, flatCentersOffset, opt_dest) {\n let i, ii, x, x1, x2, y1, y2;\n const y = flatCenters[flatCentersOffset + 1];\n /** @type {Array} */\n const intersections = [];\n // Calculate intersections with the horizontal line\n for (let r = 0, rr = ends.length; r < rr; ++r) {\n const end = ends[r];\n x1 = flatCoordinates[end - stride];\n y1 = flatCoordinates[end - stride + 1];\n for (i = offset; i < end; i += stride) {\n x2 = flatCoordinates[i];\n y2 = flatCoordinates[i + 1];\n if ((y <= y1 && y2 <= y) || (y1 <= y && y <= y2)) {\n x = (y - y1) / (y2 - y1) * (x2 - x1) + x1;\n intersections.push(x);\n }\n x1 = x2;\n y1 = y2;\n }\n }\n // Find the longest segment of the horizontal line that has its center point\n // inside the linear ring.\n let pointX = NaN;\n let maxSegmentLength = -Infinity;\n intersections.sort(numberSafeCompareFunction);\n x1 = intersections[0];\n for (i = 1, ii = intersections.length; i < ii; ++i) {\n x2 = intersections[i];\n const segmentLength = Math.abs(x2 - x1);\n if (segmentLength > maxSegmentLength) {\n x = (x1 + x2) / 2;\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n pointX = x;\n maxSegmentLength = segmentLength;\n }\n }\n x1 = x2;\n }\n if (isNaN(pointX)) {\n // There is no horizontal line that has its center point inside the linear\n // ring. Use the center of the the linear ring's extent.\n pointX = flatCenters[flatCentersOffset];\n }\n if (opt_dest) {\n opt_dest.push(pointX, y, maxSegmentLength);\n return opt_dest;\n } else {\n return [pointX, y, maxSegmentLength];\n }\n}\n\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @return {Array} Interior points as XYM coordinates, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointsOfMultiArray(flatCoordinates, offset, endss, stride, flatCenters) {\n let interiorPoints = [];\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n interiorPoints = getInteriorPointOfArray(flatCoordinates,\n offset, ends, stride, flatCenters, 2 * i, interiorPoints);\n offset = ends[ends.length - 1];\n }\n return interiorPoints;\n}\n","/**\n * @module ol/geom/LineString\n */\nimport {extend} from '../array.js';\nimport {closestSquaredDistanceXY} from '../extent.js';\nimport GeometryLayout from '../geom/GeometryLayout.js';\nimport GeometryType from '../geom/GeometryType.js';\nimport SimpleGeometry from '../geom/SimpleGeometry.js';\nimport {assignClosestPoint, maxSquaredDelta} from '../geom/flat/closest.js';\nimport {deflateCoordinates} from '../geom/flat/deflate.js';\nimport {inflateCoordinates} from '../geom/flat/inflate.js';\nimport {interpolatePoint, lineStringCoordinateAtM} from '../geom/flat/interpolate.js';\nimport {intersectsLineString} from '../geom/flat/intersectsextent.js';\nimport {lineStringLength} from '../geom/flat/length.js';\nimport {forEach as forEachSegment} from '../geom/flat/segments.js';\nimport {douglasPeucker} from '../geom/flat/simplify.js';\n\n/**\n * @classdesc\n * Linestring geometry.\n *\n * @api\n */\nclass LineString extends SimpleGeometry {\n\n /**\n * @param {Array|Array} coordinates Coordinates.\n * For internal use, flat coordinates in combination with `opt_layout` are also accepted.\n * @param {module:ol/geom/GeometryLayout=} opt_layout Layout.\n */\n constructor(coordinates, opt_layout) {\n\n super();\n\n /**\n * @private\n * @type {module:ol/coordinate~Coordinate}\n */\n this.flatMidpoint_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.flatMidpointRevision_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDeltaRevision_ = -1;\n\n if (opt_layout !== undefined && !Array.isArray(coordinates[0])) {\n this.setFlatCoordinates(opt_layout, coordinates);\n } else {\n this.setCoordinates(coordinates, opt_layout);\n }\n\n }\n\n /**\n * Append the passed coordinate to the coordinates of the linestring.\n * @param {module:ol/coordinate~Coordinate} coordinate Coordinate.\n * @api\n */\n appendCoordinate(coordinate) {\n if (!this.flatCoordinates) {\n this.flatCoordinates = coordinate.slice();\n } else {\n extend(this.flatCoordinates, coordinate);\n }\n this.changed();\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!module:ol/geom/LineString} Clone.\n * @override\n * @api\n */\n clone() {\n return new LineString(this.flatCoordinates.slice(), this.layout);\n }\n\n /**\n * @inheritDoc\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n if (this.maxDeltaRevision_ != this.getRevision()) {\n this.maxDelta_ = Math.sqrt(maxSquaredDelta(\n this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0));\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestPoint(\n this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,\n this.maxDelta_, false, x, y, closestPoint, minSquaredDistance);\n }\n\n /**\n * Iterate over each segment, calling the provided callback.\n * If the callback returns a truthy value the function returns that\n * value immediately. Otherwise the function returns `false`.\n *\n * @param {function(this: S, module:ol/coordinate~Coordinate, module:ol/coordinate~Coordinate): T} callback Function\n * called for each segment.\n * @return {T|boolean} Value.\n * @template T,S\n * @api\n */\n forEachSegment(callback) {\n return forEachSegment(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, callback);\n }\n\n /**\n * Returns the coordinate at `m` using linear interpolation, or `null` if no\n * such coordinate exists.\n *\n * `opt_extrapolate` controls extrapolation beyond the range of Ms in the\n * MultiLineString. If `opt_extrapolate` is `true` then Ms less than the first\n * M will return the first coordinate and Ms greater than the last M will\n * return the last coordinate.\n *\n * @param {number} m M.\n * @param {boolean=} opt_extrapolate Extrapolate. Default is `false`.\n * @return {module:ol/coordinate~Coordinate} Coordinate.\n * @api\n */\n getCoordinateAtM(m, opt_extrapolate) {\n if (this.layout != GeometryLayout.XYM &&\n this.layout != GeometryLayout.XYZM) {\n return null;\n }\n const extrapolate = opt_extrapolate !== undefined ? opt_extrapolate : false;\n return lineStringCoordinateAtM(this.flatCoordinates, 0,\n this.flatCoordinates.length, this.stride, m, extrapolate);\n }\n\n /**\n * Return the coordinates of the linestring.\n * @return {Array} Coordinates.\n * @override\n * @api\n */\n getCoordinates() {\n return inflateCoordinates(\n this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n }\n\n /**\n * Return the coordinate at the provided fraction along the linestring.\n * The `fraction` is a number between 0 and 1, where 0 is the start of the\n * linestring and 1 is the end.\n * @param {number} fraction Fraction.\n * @param {module:ol/coordinate~Coordinate=} opt_dest Optional coordinate whose values will\n * be modified. If not provided, a new coordinate will be returned.\n * @return {module:ol/coordinate~Coordinate} Coordinate of the interpolated point.\n * @api\n */\n getCoordinateAt(fraction, opt_dest) {\n return interpolatePoint(\n this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,\n fraction, opt_dest);\n }\n\n /**\n * Return the length of the linestring on projected plane.\n * @return {number} Length (on projected plane).\n * @api\n */\n getLength() {\n return lineStringLength(\n this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);\n }\n\n /**\n * @return {Array} Flat midpoint.\n */\n getFlatMidpoint() {\n if (this.flatMidpointRevision_ != this.getRevision()) {\n this.flatMidpoint_ = this.getCoordinateAt(0.5, this.flatMidpoint_);\n this.flatMidpointRevision_ = this.getRevision();\n }\n return this.flatMidpoint_;\n }\n\n /**\n * @inheritDoc\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n const simplifiedFlatCoordinates = [];\n simplifiedFlatCoordinates.length = douglasPeucker(\n this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,\n squaredTolerance, simplifiedFlatCoordinates, 0);\n return new LineString(simplifiedFlatCoordinates, GeometryLayout.XY);\n }\n\n /**\n * @inheritDoc\n * @api\n */\n getType() {\n return GeometryType.LINE_STRING;\n }\n\n /**\n * @inheritDoc\n * @api\n */\n intersectsExtent(extent) {\n return intersectsLineString(\n this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,\n extent);\n }\n\n /**\n * Set the coordinates of the linestring.\n * @param {!Array} coordinates Coordinates.\n * @param {module:ol/geom/GeometryLayout=} opt_layout Layout.\n * @override\n * @api\n */\n setCoordinates(coordinates, opt_layout) {\n this.setLayout(opt_layout, coordinates, 1);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinates(\n this.flatCoordinates, 0, coordinates, this.stride);\n this.changed();\n }\n}\n\n\nexport default LineString;\n","/**\n * @module ol/extent/Corner\n */\n\n/**\n * Extent corner.\n * @enum {string}\n */\nexport default {\n BOTTOM_LEFT: 'bottom-left',\n BOTTOM_RIGHT: 'bottom-right',\n TOP_LEFT: 'top-left',\n TOP_RIGHT: 'top-right'\n};\n","/**\n * @module ol/TileRange\n */\n\n/**\n * A representation of a contiguous block of tiles. A tile range is specified\n * by its min/max tile coordinates and is inclusive of coordinates.\n */\nclass TileRange {\n\n /**\n * @param {number} minX Minimum X.\n * @param {number} maxX Maximum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxY Maximum Y.\n */\n constructor(minX, maxX, minY, maxY) {\n\n /**\n * @type {number}\n */\n this.minX = minX;\n\n /**\n * @type {number}\n */\n this.maxX = maxX;\n\n /**\n * @type {number}\n */\n this.minY = minY;\n\n /**\n * @type {number}\n */\n this.maxY = maxY;\n\n }\n\n /**\n * @param {module:ol/tilecoord~TileCoord} tileCoord Tile coordinate.\n * @return {boolean} Contains tile coordinate.\n */\n contains(tileCoord) {\n return this.containsXY(tileCoord[1], tileCoord[2]);\n }\n\n /**\n * @param {module:ol/TileRange} tileRange Tile range.\n * @return {boolean} Contains.\n */\n containsTileRange(tileRange) {\n return this.minX <= tileRange.minX && tileRange.maxX <= this.maxX &&\n this.minY <= tileRange.minY && tileRange.maxY <= this.maxY;\n }\n\n /**\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @return {boolean} Contains coordinate.\n */\n containsXY(x, y) {\n return this.minX <= x && x <= this.maxX && this.minY <= y && y <= this.maxY;\n }\n\n /**\n * @param {module:ol/TileRange} tileRange Tile range.\n * @return {boolean} Equals.\n */\n equals(tileRange) {\n return this.minX == tileRange.minX && this.minY == tileRange.minY &&\n this.maxX == tileRange.maxX && this.maxY == tileRange.maxY;\n }\n\n /**\n * @param {module:ol/TileRange} tileRange Tile range.\n */\n extend(tileRange) {\n if (tileRange.minX < this.minX) {\n this.minX = tileRange.minX;\n }\n if (tileRange.maxX > this.maxX) {\n this.maxX = tileRange.maxX;\n }\n if (tileRange.minY < this.minY) {\n this.minY = tileRange.minY;\n }\n if (tileRange.maxY > this.maxY) {\n this.maxY = tileRange.maxY;\n }\n }\n\n /**\n * @return {number} Height.\n */\n getHeight() {\n return this.maxY - this.minY + 1;\n }\n\n /**\n * @return {module:ol/size~Size} Size.\n */\n getSize() {\n return [this.getWidth(), this.getHeight()];\n }\n\n /**\n * @return {number} Width.\n */\n getWidth() {\n return this.maxX - this.minX + 1;\n }\n\n /**\n * @param {module:ol/TileRange} tileRange Tile range.\n * @return {boolean} Intersects.\n */\n intersects(tileRange) {\n return this.minX <= tileRange.maxX &&\n this.maxX >= tileRange.minX &&\n this.minY <= tileRange.maxY &&\n this.maxY >= tileRange.minY;\n }\n}\n\n\n/**\n * @param {number} minX Minimum X.\n * @param {number} maxX Maximum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxY Maximum Y.\n * @param {module:ol/TileRange=} tileRange TileRange.\n * @return {module:ol/TileRange} Tile range.\n */\nexport function createOrUpdate(minX, maxX, minY, maxY, tileRange) {\n if (tileRange !== undefined) {\n tileRange.minX = minX;\n tileRange.maxX = maxX;\n tileRange.minY = minY;\n tileRange.maxY = maxY;\n return tileRange;\n } else {\n return new TileRange(minX, maxX, minY, maxY);\n }\n}\n\n\nexport default TileRange;\n","/**\n * @module ol/MapEvent\n */\nimport Event from './events/Event.js';\n\n/**\n * @classdesc\n * Events emitted as map events are instances of this type.\n * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map event.\n */\nclass MapEvent extends Event {\n\n /**\n * @param {string} type Event type.\n * @param {module:ol/PluggableMap} map Map.\n * @param {?module:ol/PluggableMap~FrameState=} opt_frameState Frame state.\n */\n constructor(type, map, opt_frameState) {\n\n super(type);\n\n /**\n * The map where the event occurred.\n * @type {module:ol/PluggableMap}\n * @api\n */\n this.map = map;\n\n /**\n * The frame state at the time of the event.\n * @type {?module:ol/PluggableMap~FrameState}\n * @api\n */\n this.frameState = opt_frameState !== undefined ? opt_frameState : null;\n\n }\n\n}\n\nexport default MapEvent;\n","/**\n * @module ol/MapBrowserEvent\n */\nimport MapEvent from './MapEvent.js';\n\n/**\n * @classdesc\n * Events emitted as map browser events are instances of this type.\n * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map browser event.\n */\nclass MapBrowserEvent extends MapEvent {\n\n /**\n * @param {string} type Event type.\n * @param {module:ol/PluggableMap} map Map.\n * @param {Event} browserEvent Browser event.\n * @param {boolean=} opt_dragging Is the map currently being dragged?\n * @param {?module:ol/PluggableMap~FrameState=} opt_frameState Frame state.\n */\n constructor(type, map, browserEvent, opt_dragging, opt_frameState) {\n\n super(type, map, opt_frameState);\n\n /**\n * The original browser event.\n * @const\n * @type {Event}\n * @api\n */\n this.originalEvent = browserEvent;\n\n /**\n * The map pixel relative to the viewport corresponding to the original browser event.\n * @type {module:ol/pixel~Pixel}\n * @api\n */\n this.pixel = map.getEventPixel(browserEvent);\n\n /**\n * The coordinate in view projection corresponding to the original browser event.\n * @type {module:ol/coordinate~Coordinate}\n * @api\n */\n this.coordinate = map.getCoordinateFromPixel(this.pixel);\n\n /**\n * Indicates if the map is currently being dragged. Only set for\n * `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.\n *\n * @type {boolean}\n * @api\n */\n this.dragging = opt_dragging !== undefined ? opt_dragging : false;\n\n }\n\n /**\n * Prevents the default browser action.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault.\n * @override\n * @api\n */\n preventDefault() {\n super.preventDefault();\n this.originalEvent.preventDefault();\n }\n\n /**\n * Prevents further propagation of the current event.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation.\n * @override\n * @api\n */\n stopPropagation() {\n super.stopPropagation();\n this.originalEvent.stopPropagation();\n }\n}\n\n\nexport default MapBrowserEvent;\n","/**\n * @module ol/MapBrowserEventType\n */\nimport EventType from './events/EventType.js';\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n\n /**\n * A true single click with no dragging and no double click. Note that this\n * event is delayed by 250 ms to ensure that it is not a double click.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick\n * @api\n */\n SINGLECLICK: 'singleclick',\n\n /**\n * A click with no dragging. A double click will fire two of this.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#click\n * @api\n */\n CLICK: EventType.CLICK,\n\n /**\n * A true double click, with no dragging.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick\n * @api\n */\n DBLCLICK: EventType.DBLCLICK,\n\n /**\n * Triggered when a pointer is dragged.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag\n * @api\n */\n POINTERDRAG: 'pointerdrag',\n\n /**\n * Triggered when a pointer is moved. Note that on touch devices this is\n * triggered when the map is panned, so is not the same as mousemove.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove\n * @api\n */\n POINTERMOVE: 'pointermove',\n\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel'\n};\n","/**\n * @module ol/MapBrowserPointerEvent\n */\nimport MapBrowserEvent from './MapBrowserEvent.js';\n\nclass MapBrowserPointerEvent extends MapBrowserEvent {\n\n /**\n * @param {string} type Event type.\n * @param {module:ol/PluggableMap} map Map.\n * @param {module:ol/pointer/PointerEvent} pointerEvent Pointer event.\n * @param {boolean=} opt_dragging Is the map currently being dragged?\n * @param {?module:ol/PluggableMap~FrameState=} opt_frameState Frame state.\n */\n constructor(type, map, pointerEvent, opt_dragging, opt_frameState) {\n\n super(type, map, pointerEvent.originalEvent, opt_dragging, opt_frameState);\n\n /**\n * @const\n * @type {module:ol/pointer/PointerEvent}\n */\n this.pointerEvent = pointerEvent;\n\n }\n\n}\n\nexport default MapBrowserPointerEvent;\n","/**\n * @module ol/pointer/EventType\n */\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n POINTERMOVE: 'pointermove',\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel'\n};\n","/**\n * @module ol/pointer/EventSource\n */\n\nclass EventSource {\n\n /**\n * @param {module:ol/pointer/PointerEventHandler} dispatcher Event handler.\n * @param {!Object} mapping Event mapping.\n */\n constructor(dispatcher, mapping) {\n\n /**\n * @type {module:ol/pointer/PointerEventHandler}\n */\n this.dispatcher = dispatcher;\n\n /**\n * @private\n * @const\n * @type {!Object}\n */\n this.mapping_ = mapping;\n }\n\n /**\n * List of events supported by this source.\n * @return {Array} Event names\n */\n getEvents() {\n return Object.keys(this.mapping_);\n }\n\n /**\n * Returns the handler that should handle a given event type.\n * @param {string} eventType The event type.\n * @return {function(Event)} Handler\n */\n getHandlerForEvent(eventType) {\n return this.mapping_[eventType];\n }\n\n}\n\nexport default EventSource;\n","/**\n * @module ol/pointer/MouseSource\n */\n\n// Based on https://github.com/Polymer/PointerEvents\n\n// Copyright (c) 2013 The Polymer Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nimport EventSource from '../pointer/EventSource.js';\n\n\n/**\n * @type {number}\n */\nexport const POINTER_ID = 1;\n\n\n/**\n * @type {string}\n */\nexport const POINTER_TYPE = 'mouse';\n\n\n/**\n * Radius around touchend that swallows mouse events.\n *\n * @type {number}\n */\nconst DEDUP_DIST = 25;\n\n/**\n * Handler for `mousedown`.\n *\n * @this {module:ol/pointer/MouseSource}\n * @param {MouseEvent} inEvent The in event.\n */\nfunction mousedown(inEvent) {\n if (!this.isEventSimulatedFromTouch_(inEvent)) {\n // TODO(dfreedman) workaround for some elements not sending mouseup\n // http://crbug/149091\n if (POINTER_ID.toString() in this.pointerMap) {\n this.cancel(inEvent);\n }\n const e = prepareEvent(inEvent, this.dispatcher);\n this.pointerMap[POINTER_ID.toString()] = inEvent;\n this.dispatcher.down(e, inEvent);\n }\n}\n\n/**\n * Handler for `mousemove`.\n *\n * @this {module:ol/pointer/MouseSource}\n * @param {MouseEvent} inEvent The in event.\n */\nfunction mousemove(inEvent) {\n if (!this.isEventSimulatedFromTouch_(inEvent)) {\n const e = prepareEvent(inEvent, this.dispatcher);\n this.dispatcher.move(e, inEvent);\n }\n}\n\n/**\n * Handler for `mouseup`.\n *\n * @this {module:ol/pointer/MouseSource}\n * @param {MouseEvent} inEvent The in event.\n */\nfunction mouseup(inEvent) {\n if (!this.isEventSimulatedFromTouch_(inEvent)) {\n const p = this.pointerMap[POINTER_ID.toString()];\n\n if (p && p.button === inEvent.button) {\n const e = prepareEvent(inEvent, this.dispatcher);\n this.dispatcher.up(e, inEvent);\n this.cleanupMouse();\n }\n }\n}\n\n/**\n * Handler for `mouseover`.\n *\n * @this {module:ol/pointer/MouseSource}\n * @param {MouseEvent} inEvent The in event.\n */\nfunction mouseover(inEvent) {\n if (!this.isEventSimulatedFromTouch_(inEvent)) {\n const e = prepareEvent(inEvent, this.dispatcher);\n this.dispatcher.enterOver(e, inEvent);\n }\n}\n\n/**\n * Handler for `mouseout`.\n *\n * @this {module:ol/pointer/MouseSource}\n * @param {MouseEvent} inEvent The in event.\n */\nfunction mouseout(inEvent) {\n if (!this.isEventSimulatedFromTouch_(inEvent)) {\n const e = prepareEvent(inEvent, this.dispatcher);\n this.dispatcher.leaveOut(e, inEvent);\n }\n}\n\n\nclass MouseSource extends EventSource {\n\n /**\n * @param {module:ol/pointer/PointerEventHandler} dispatcher Event handler.\n */\n constructor(dispatcher) {\n const mapping = {\n 'mousedown': mousedown,\n 'mousemove': mousemove,\n 'mouseup': mouseup,\n 'mouseover': mouseover,\n 'mouseout': mouseout\n };\n super(dispatcher, mapping);\n\n /**\n * @const\n * @type {!Object}\n */\n this.pointerMap = dispatcher.pointerMap;\n\n /**\n * @const\n * @type {Array}\n */\n this.lastTouches = [];\n }\n\n /**\n * Detect if a mouse event was simulated from a touch by\n * checking if previously there was a touch event at the\n * same position.\n *\n * FIXME - Known problem with the native Android browser on\n * Samsung GT-I9100 (Android 4.1.2):\n * In case the page is scrolled, this function does not work\n * correctly when a canvas is used (WebGL or canvas renderer).\n * Mouse listeners on canvas elements (for this browser), create\n * two mouse events: One 'good' and one 'bad' one (on other browsers or\n * when a div is used, there is only one event). For the 'bad' one,\n * clientX/clientY and also pageX/pageY are wrong when the page\n * is scrolled. Because of that, this function can not detect if\n * the events were simulated from a touch event. As result, a\n * pointer event at a wrong position is dispatched, which confuses\n * the map interactions.\n * It is unclear, how one can get the correct position for the event\n * or detect that the positions are invalid.\n *\n * @private\n * @param {MouseEvent} inEvent The in event.\n * @return {boolean} True, if the event was generated by a touch.\n */\n isEventSimulatedFromTouch_(inEvent) {\n const lts = this.lastTouches;\n const x = inEvent.clientX;\n const y = inEvent.clientY;\n for (let i = 0, l = lts.length, t; i < l && (t = lts[i]); i++) {\n // simulated mouse events will be swallowed near a primary touchend\n const dx = Math.abs(x - t[0]);\n const dy = Math.abs(y - t[1]);\n if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Dispatches a `pointercancel` event.\n *\n * @param {Event} inEvent The in event.\n */\n cancel(inEvent) {\n const e = prepareEvent(inEvent, this.dispatcher);\n this.dispatcher.cancel(e, inEvent);\n this.cleanupMouse();\n }\n\n /**\n * Remove the mouse from the list of active pointers.\n */\n cleanupMouse() {\n delete this.pointerMap[POINTER_ID.toString()];\n }\n}\n\n\n/**\n * Creates a copy of the original event that will be used\n * for the fake pointer event.\n *\n * @param {Event} inEvent The in event.\n * @param {module:ol/pointer/PointerEventHandler} dispatcher Event handler.\n * @return {Object} The copied event.\n */\nfunction prepareEvent(inEvent, dispatcher) {\n const e = dispatcher.cloneEvent(inEvent, inEvent);\n\n // forward mouse preventDefault\n const pd = e.preventDefault;\n e.preventDefault = function() {\n inEvent.preventDefault();\n pd();\n };\n\n e.pointerId = POINTER_ID;\n e.isPrimary = true;\n e.pointerType = POINTER_TYPE;\n\n return e;\n}\n\n\nexport default MouseSource;\n","/**\n * @module ol/pointer/MsSource\n */\n// Based on https://github.com/Polymer/PointerEvents\n\n// Copyright (c) 2013 The Polymer Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nimport EventSource from '../pointer/EventSource.js';\n\n\n/**\n * @const\n * @type {Array}\n */\nconst POINTER_TYPES = [\n '',\n 'unavailable',\n 'touch',\n 'pen',\n 'mouse'\n];\n\n/**\n * Handler for `msPointerDown`.\n *\n * @this {module:ol/pointer/MsSource}\n * @param {MSPointerEvent} inEvent The in event.\n */\nfunction msPointerDown(inEvent) {\n this.pointerMap[inEvent.pointerId.toString()] = inEvent;\n const e = this.prepareEvent_(inEvent);\n this.dispatcher.down(e, inEvent);\n}\n\n/**\n * Handler for `msPointerMove`.\n *\n * @this {module:ol/pointer/MsSource}\n * @param {MSPointerEvent} inEvent The in event.\n */\nfunction msPointerMove(inEvent) {\n const e = this.prepareEvent_(inEvent);\n this.dispatcher.move(e, inEvent);\n}\n\n/**\n * Handler for `msPointerUp`.\n *\n * @this {module:ol/pointer/MsSource}\n * @param {MSPointerEvent} inEvent The in event.\n */\nfunction msPointerUp(inEvent) {\n const e = this.prepareEvent_(inEvent);\n this.dispatcher.up(e, inEvent);\n this.cleanup(inEvent.pointerId);\n}\n\n/**\n * Handler for `msPointerOut`.\n *\n * @this {module:ol/pointer/MsSource}\n * @param {MSPointerEvent} inEvent The in event.\n */\nfunction msPointerOut(inEvent) {\n const e = this.prepareEvent_(inEvent);\n this.dispatcher.leaveOut(e, inEvent);\n}\n\n/**\n * Handler for `msPointerOver`.\n *\n * @this {module:ol/pointer/MsSource}\n * @param {MSPointerEvent} inEvent The in event.\n */\nfunction msPointerOver(inEvent) {\n const e = this.prepareEvent_(inEvent);\n this.dispatcher.enterOver(e, inEvent);\n}\n\n/**\n * Handler for `msPointerCancel`.\n *\n * @this {module:ol/pointer/MsSource}\n * @param {MSPointerEvent} inEvent The in event.\n */\nfunction msPointerCancel(inEvent) {\n const e = this.prepareEvent_(inEvent);\n this.dispatcher.cancel(e, inEvent);\n this.cleanup(inEvent.pointerId);\n}\n\n/**\n * Handler for `msLostPointerCapture`.\n *\n * @this {module:ol/pointer/MsSource}\n * @param {MSPointerEvent} inEvent The in event.\n */\nfunction msLostPointerCapture(inEvent) {\n const e = this.dispatcher.makeEvent('lostpointercapture', inEvent, inEvent);\n this.dispatcher.dispatchEvent(e);\n}\n\n/**\n * Handler for `msGotPointerCapture`.\n *\n * @this {module:ol/pointer/MsSource}\n * @param {MSPointerEvent} inEvent The in event.\n */\nfunction msGotPointerCapture(inEvent) {\n const e = this.dispatcher.makeEvent('gotpointercapture', inEvent, inEvent);\n this.dispatcher.dispatchEvent(e);\n}\n\nclass MsSource extends EventSource {\n\n /**\n * @param {module:ol/pointer/PointerEventHandler} dispatcher Event handler.\n */\n constructor(dispatcher) {\n const mapping = {\n 'MSPointerDown': msPointerDown,\n 'MSPointerMove': msPointerMove,\n 'MSPointerUp': msPointerUp,\n 'MSPointerOut': msPointerOut,\n 'MSPointerOver': msPointerOver,\n 'MSPointerCancel': msPointerCancel,\n 'MSGotPointerCapture': msGotPointerCapture,\n 'MSLostPointerCapture': msLostPointerCapture\n };\n super(dispatcher, mapping);\n\n /**\n * @const\n * @type {!Object}\n */\n this.pointerMap = dispatcher.pointerMap;\n }\n\n /**\n * Creates a copy of the original event that will be used\n * for the fake pointer event.\n *\n * @private\n * @param {MSPointerEvent} inEvent The in event.\n * @return {Object} The copied event.\n */\n prepareEvent_(inEvent) {\n let e = inEvent;\n if (typeof inEvent.pointerType === 'number') {\n e = this.dispatcher.cloneEvent(inEvent, inEvent);\n e.pointerType = POINTER_TYPES[inEvent.pointerType];\n }\n\n return e;\n }\n\n /**\n * Remove this pointer from the list of active pointers.\n * @param {number} pointerId Pointer identifier.\n */\n cleanup(pointerId) {\n delete this.pointerMap[pointerId.toString()];\n }\n\n}\n\nexport default MsSource;\n","/**\n * @module ol/pointer/NativeSource\n */\n\n// Based on https://github.com/Polymer/PointerEvents\n\n// Copyright (c) 2013 The Polymer Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nimport EventSource from '../pointer/EventSource.js';\n\n/**\n * Handler for `pointerdown`.\n *\n * @this {module:ol/pointer/NativeSource}\n * @param {Event} inEvent The in event.\n */\nfunction pointerDown(inEvent) {\n this.dispatcher.fireNativeEvent(inEvent);\n}\n\n/**\n * Handler for `pointermove`.\n *\n * @this {module:ol/pointer/NativeSource}\n * @param {Event} inEvent The in event.\n */\nfunction pointerMove(inEvent) {\n this.dispatcher.fireNativeEvent(inEvent);\n}\n\n/**\n * Handler for `pointerup`.\n *\n * @this {module:ol/pointer/NativeSource}\n * @param {Event} inEvent The in event.\n */\nfunction pointerUp(inEvent) {\n this.dispatcher.fireNativeEvent(inEvent);\n}\n\n/**\n * Handler for `pointerout`.\n *\n * @this {module:ol/pointer/NativeSource}\n * @param {Event} inEvent The in event.\n */\nfunction pointerOut(inEvent) {\n this.dispatcher.fireNativeEvent(inEvent);\n}\n\n/**\n * Handler for `pointerover`.\n *\n * @this {module:ol/pointer/NativeSource}\n * @param {Event} inEvent The in event.\n */\nfunction pointerOver(inEvent) {\n this.dispatcher.fireNativeEvent(inEvent);\n}\n\n/**\n * Handler for `pointercancel`.\n *\n * @this {module:ol/pointer/NativeSource}\n * @param {Event} inEvent The in event.\n */\nfunction pointerCancel(inEvent) {\n this.dispatcher.fireNativeEvent(inEvent);\n}\n\n/**\n * Handler for `lostpointercapture`.\n *\n * @this {module:ol/pointer/NativeSource}\n * @param {Event} inEvent The in event.\n */\nfunction lostPointerCapture(inEvent) {\n this.dispatcher.fireNativeEvent(inEvent);\n}\n\n/**\n * Handler for `gotpointercapture`.\n *\n * @this {module:ol/pointer/NativeSource}\n * @param {Event} inEvent The in event.\n */\nfunction gotPointerCapture(inEvent) {\n this.dispatcher.fireNativeEvent(inEvent);\n}\n\nclass NativeSource extends EventSource {\n\n /**\n * @param {module:ol/pointer/PointerEventHandler} dispatcher Event handler.\n */\n constructor(dispatcher) {\n const mapping = {\n 'pointerdown': pointerDown,\n 'pointermove': pointerMove,\n 'pointerup': pointerUp,\n 'pointerout': pointerOut,\n 'pointerover': pointerOver,\n 'pointercancel': pointerCancel,\n 'gotpointercapture': gotPointerCapture,\n 'lostpointercapture': lostPointerCapture\n };\n super(dispatcher, mapping);\n }\n\n}\n\nexport default NativeSource;\n","/**\n * @module ol/pointer/PointerEvent\n */\n\n// Based on https://github.com/Polymer/PointerEvents\n\n// Copyright (c) 2013 The Polymer Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nimport Event from '../events/Event.js';\n\n\n/**\n * Is the `buttons` property supported?\n * @type {boolean}\n */\nlet HAS_BUTTONS = false;\n\n\nclass PointerEvent extends Event {\n\n /**\n * A class for pointer events.\n *\n * This class is used as an abstraction for mouse events,\n * touch events and even native pointer events.\n *\n * @param {string} type The type of the event to create.\n * @param {Event} originalEvent The event.\n * @param {Object=} opt_eventDict An optional dictionary of\n * initial event properties.\n */\n constructor(type, originalEvent, opt_eventDict) {\n super(type);\n\n /**\n * @const\n * @type {Event}\n */\n this.originalEvent = originalEvent;\n\n const eventDict = opt_eventDict ? opt_eventDict : {};\n\n /**\n * @type {number}\n */\n this.buttons = this.getButtons_(eventDict);\n\n /**\n * @type {number}\n */\n this.pressure = this.getPressure_(eventDict, this.buttons);\n\n // MouseEvent related properties\n\n /**\n * @type {boolean}\n */\n this.bubbles = 'bubbles' in eventDict ? eventDict['bubbles'] : false;\n\n /**\n * @type {boolean}\n */\n this.cancelable = 'cancelable' in eventDict ? eventDict['cancelable'] : false;\n\n /**\n * @type {Object}\n */\n this.view = 'view' in eventDict ? eventDict['view'] : null;\n\n /**\n * @type {number}\n */\n this.detail = 'detail' in eventDict ? eventDict['detail'] : null;\n\n /**\n * @type {number}\n */\n this.screenX = 'screenX' in eventDict ? eventDict['screenX'] : 0;\n\n /**\n * @type {number}\n */\n this.screenY = 'screenY' in eventDict ? eventDict['screenY'] : 0;\n\n /**\n * @type {number}\n */\n this.clientX = 'clientX' in eventDict ? eventDict['clientX'] : 0;\n\n /**\n * @type {number}\n */\n this.clientY = 'clientY' in eventDict ? eventDict['clientY'] : 0;\n\n /**\n * @type {boolean}\n */\n this.ctrlKey = 'ctrlKey' in eventDict ? eventDict['ctrlKey'] : false;\n\n /**\n * @type {boolean}\n */\n this.altKey = 'altKey' in eventDict ? eventDict['altKey'] : false;\n\n /**\n * @type {boolean}\n */\n this.shiftKey = 'shiftKey' in eventDict ? eventDict['shiftKey'] : false;\n\n /**\n * @type {boolean}\n */\n this.metaKey = 'metaKey' in eventDict ? eventDict['metaKey'] : false;\n\n /**\n * @type {number}\n */\n this.button = 'button' in eventDict ? eventDict['button'] : 0;\n\n /**\n * @type {Node}\n */\n this.relatedTarget = 'relatedTarget' in eventDict ?\n eventDict['relatedTarget'] : null;\n\n // PointerEvent related properties\n\n /**\n * @const\n * @type {number}\n */\n this.pointerId = 'pointerId' in eventDict ? eventDict['pointerId'] : 0;\n\n /**\n * @type {number}\n */\n this.width = 'width' in eventDict ? eventDict['width'] : 0;\n\n /**\n * @type {number}\n */\n this.height = 'height' in eventDict ? eventDict['height'] : 0;\n\n /**\n * @type {number}\n */\n this.tiltX = 'tiltX' in eventDict ? eventDict['tiltX'] : 0;\n\n /**\n * @type {number}\n */\n this.tiltY = 'tiltY' in eventDict ? eventDict['tiltY'] : 0;\n\n /**\n * @type {string}\n */\n this.pointerType = 'pointerType' in eventDict ? eventDict['pointerType'] : '';\n\n /**\n * @type {number}\n */\n this.hwTimestamp = 'hwTimestamp' in eventDict ? eventDict['hwTimestamp'] : 0;\n\n /**\n * @type {boolean}\n */\n this.isPrimary = 'isPrimary' in eventDict ? eventDict['isPrimary'] : false;\n\n // keep the semantics of preventDefault\n if (originalEvent.preventDefault) {\n this.preventDefault = function() {\n originalEvent.preventDefault();\n };\n }\n }\n\n /**\n * @private\n * @param {Object} eventDict The event dictionary.\n * @return {number} Button indicator.\n */\n getButtons_(eventDict) {\n // According to the w3c spec,\n // http://www.w3.org/TR/DOM-Level-3-Events/#events-MouseEvent-button\n // MouseEvent.button == 0 can mean either no mouse button depressed, or the\n // left mouse button depressed.\n //\n // As of now, the only way to distinguish between the two states of\n // MouseEvent.button is by using the deprecated MouseEvent.which property, as\n // this maps mouse buttons to positive integers > 0, and uses 0 to mean that\n // no mouse button is held.\n //\n // MouseEvent.which is derived from MouseEvent.button at MouseEvent creation,\n // but initMouseEvent does not expose an argument with which to set\n // MouseEvent.which. Calling initMouseEvent with a buttonArg of 0 will set\n // MouseEvent.button == 0 and MouseEvent.which == 1, breaking the expectations\n // of app developers.\n //\n // The only way to propagate the correct state of MouseEvent.which and\n // MouseEvent.button to a new MouseEvent.button == 0 and MouseEvent.which == 0\n // is to call initMouseEvent with a buttonArg value of -1.\n //\n // This is fixed with DOM Level 4's use of buttons\n let buttons;\n if (eventDict.buttons || HAS_BUTTONS) {\n buttons = eventDict.buttons;\n } else {\n switch (eventDict.which) {\n case 1: buttons = 1; break;\n case 2: buttons = 4; break;\n case 3: buttons = 2; break;\n default: buttons = 0;\n }\n }\n return buttons;\n }\n\n /**\n * @private\n * @param {Object} eventDict The event dictionary.\n * @param {number} buttons Button indicator.\n * @return {number} The pressure.\n */\n getPressure_(eventDict, buttons) {\n // Spec requires that pointers without pressure specified use 0.5 for down\n // state and 0 for up state.\n let pressure = 0;\n if (eventDict.pressure) {\n pressure = eventDict.pressure;\n } else {\n pressure = buttons ? 0.5 : 0;\n }\n return pressure;\n }\n}\n\n\n/**\n * Checks if the `buttons` property is supported.\n */\n(function() {\n try {\n const ev = new MouseEvent('click', {buttons: 1});\n HAS_BUTTONS = ev.buttons === 1;\n } catch (e) {\n // pass\n }\n})();\n\nexport default PointerEvent;\n","/**\n * @module ol/pointer/TouchSource\n */\n\n// Based on https://github.com/Polymer/PointerEvents\n\n// Copyright (c) 2013 The Polymer Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nimport {remove} from '../array.js';\nimport EventSource from '../pointer/EventSource.js';\nimport {POINTER_ID} from '../pointer/MouseSource.js';\n\n\n/**\n * @type {number}\n */\nconst CLICK_COUNT_TIMEOUT = 200;\n\n/**\n * @type {string}\n */\nconst POINTER_TYPE = 'touch';\n\n/**\n * Handler for `touchstart`, triggers `pointerover`,\n * `pointerenter` and `pointerdown` events.\n *\n * @this {module:ol/pointer/TouchSource}\n * @param {TouchEvent} inEvent The in event.\n */\nfunction touchstart(inEvent) {\n this.vacuumTouches_(inEvent);\n this.setPrimaryTouch_(inEvent.changedTouches[0]);\n this.dedupSynthMouse_(inEvent);\n this.clickCount_++;\n this.processTouches_(inEvent, this.overDown_);\n}\n\n/**\n * Handler for `touchmove`.\n *\n * @this {module:ol/pointer/TouchSource}\n * @param {TouchEvent} inEvent The in event.\n */\nfunction touchmove(inEvent) {\n this.processTouches_(inEvent, this.moveOverOut_);\n}\n\n/**\n * Handler for `touchend`, triggers `pointerup`,\n * `pointerout` and `pointerleave` events.\n *\n * @this {module:ol/pointer/TouchSource}\n * @param {TouchEvent} inEvent The event.\n */\nfunction touchend(inEvent) {\n this.dedupSynthMouse_(inEvent);\n this.processTouches_(inEvent, this.upOut_);\n}\n\n/**\n * Handler for `touchcancel`, triggers `pointercancel`,\n * `pointerout` and `pointerleave` events.\n *\n * @this {module:ol/pointer/TouchSource}\n * @param {TouchEvent} inEvent The in event.\n */\nfunction touchcancel(inEvent) {\n this.processTouches_(inEvent, this.cancelOut_);\n}\n\n\nclass TouchSource extends EventSource {\n\n /**\n * @param {module:ol/pointer/PointerEventHandler} dispatcher The event handler.\n * @param {module:ol/pointer/MouseSource} mouseSource Mouse source.\n */\n constructor(dispatcher, mouseSource) {\n const mapping = {\n 'touchstart': touchstart,\n 'touchmove': touchmove,\n 'touchend': touchend,\n 'touchcancel': touchcancel\n };\n super(dispatcher, mapping);\n\n /**\n * @const\n * @type {!Object}\n */\n this.pointerMap = dispatcher.pointerMap;\n\n /**\n * @const\n * @type {module:ol/pointer/MouseSource}\n */\n this.mouseSource = mouseSource;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.firstTouchId_ = undefined;\n\n /**\n * @private\n * @type {number}\n */\n this.clickCount_ = 0;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.resetId_ = undefined;\n\n /**\n * Mouse event timeout: This should be long enough to\n * ignore compat mouse events made by touch.\n * @private\n * @type {number}\n */\n this.dedupTimeout_ = 2500;\n }\n\n /**\n * @private\n * @param {Touch} inTouch The in touch.\n * @return {boolean} True, if this is the primary touch.\n */\n isPrimaryTouch_(inTouch) {\n return this.firstTouchId_ === inTouch.identifier;\n }\n\n /**\n * Set primary touch if there are no pointers, or the only pointer is the mouse.\n * @param {Touch} inTouch The in touch.\n * @private\n */\n setPrimaryTouch_(inTouch) {\n const count = Object.keys(this.pointerMap).length;\n if (count === 0 || (count === 1 && POINTER_ID.toString() in this.pointerMap)) {\n this.firstTouchId_ = inTouch.identifier;\n this.cancelResetClickCount_();\n }\n }\n\n /**\n * @private\n * @param {PointerEvent} inPointer The in pointer object.\n */\n removePrimaryPointer_(inPointer) {\n if (inPointer.isPrimary) {\n this.firstTouchId_ = undefined;\n this.resetClickCount_();\n }\n }\n\n /**\n * @private\n */\n resetClickCount_() {\n this.resetId_ = setTimeout(\n this.resetClickCountHandler_.bind(this),\n CLICK_COUNT_TIMEOUT);\n }\n\n /**\n * @private\n */\n resetClickCountHandler_() {\n this.clickCount_ = 0;\n this.resetId_ = undefined;\n }\n\n /**\n * @private\n */\n cancelResetClickCount_() {\n if (this.resetId_ !== undefined) {\n clearTimeout(this.resetId_);\n }\n }\n\n /**\n * @private\n * @param {TouchEvent} browserEvent Browser event\n * @param {Touch} inTouch Touch event\n * @return {PointerEvent} A pointer object.\n */\n touchToPointer_(browserEvent, inTouch) {\n const e = this.dispatcher.cloneEvent(browserEvent, inTouch);\n // Spec specifies that pointerId 1 is reserved for Mouse.\n // Touch identifiers can start at 0.\n // Add 2 to the touch identifier for compatibility.\n e.pointerId = inTouch.identifier + 2;\n // TODO: check if this is necessary?\n //e.target = findTarget(e);\n e.bubbles = true;\n e.cancelable = true;\n e.detail = this.clickCount_;\n e.button = 0;\n e.buttons = 1;\n e.width = inTouch.webkitRadiusX || inTouch.radiusX || 0;\n e.height = inTouch.webkitRadiusY || inTouch.radiusY || 0;\n e.pressure = inTouch.webkitForce || inTouch.force || 0.5;\n e.isPrimary = this.isPrimaryTouch_(inTouch);\n e.pointerType = POINTER_TYPE;\n\n // make sure that the properties that are different for\n // each `Touch` object are not copied from the BrowserEvent object\n e.clientX = inTouch.clientX;\n e.clientY = inTouch.clientY;\n e.screenX = inTouch.screenX;\n e.screenY = inTouch.screenY;\n\n return e;\n }\n\n /**\n * @private\n * @param {TouchEvent} inEvent Touch event\n * @param {function(TouchEvent, PointerEvent)} inFunction In function.\n */\n processTouches_(inEvent, inFunction) {\n const touches = Array.prototype.slice.call(inEvent.changedTouches);\n const count = touches.length;\n function preventDefault() {\n inEvent.preventDefault();\n }\n for (let i = 0; i < count; ++i) {\n const pointer = this.touchToPointer_(inEvent, touches[i]);\n // forward touch preventDefaults\n pointer.preventDefault = preventDefault;\n inFunction.call(this, inEvent, pointer);\n }\n }\n\n /**\n * @private\n * @param {TouchList} touchList The touch list.\n * @param {number} searchId Search identifier.\n * @return {boolean} True, if the `Touch` with the given id is in the list.\n */\n findTouch_(touchList, searchId) {\n const l = touchList.length;\n for (let i = 0; i < l; i++) {\n const touch = touchList[i];\n if (touch.identifier === searchId) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * In some instances, a touchstart can happen without a touchend. This\n * leaves the pointermap in a broken state.\n * Therefore, on every touchstart, we remove the touches that did not fire a\n * touchend event.\n * To keep state globally consistent, we fire a pointercancel for\n * this \"abandoned\" touch\n *\n * @private\n * @param {TouchEvent} inEvent The in event.\n */\n vacuumTouches_(inEvent) {\n const touchList = inEvent.touches;\n // pointerMap.getCount() should be < touchList.length here,\n // as the touchstart has not been processed yet.\n const keys = Object.keys(this.pointerMap);\n const count = keys.length;\n if (count >= touchList.length) {\n const d = [];\n for (let i = 0; i < count; ++i) {\n const key = keys[i];\n const value = this.pointerMap[key];\n // Never remove pointerId == 1, which is mouse.\n // Touch identifiers are 2 smaller than their pointerId, which is the\n // index in pointermap.\n if (key != POINTER_ID && !this.findTouch_(touchList, key - 2)) {\n d.push(value.out);\n }\n }\n for (let i = 0; i < d.length; ++i) {\n this.cancelOut_(inEvent, d[i]);\n }\n }\n }\n\n /**\n * @private\n * @param {TouchEvent} browserEvent The event.\n * @param {PointerEvent} inPointer The in pointer object.\n */\n overDown_(browserEvent, inPointer) {\n this.pointerMap[inPointer.pointerId] = {\n target: inPointer.target,\n out: inPointer,\n outTarget: inPointer.target\n };\n this.dispatcher.over(inPointer, browserEvent);\n this.dispatcher.enter(inPointer, browserEvent);\n this.dispatcher.down(inPointer, browserEvent);\n }\n\n /**\n * @private\n * @param {TouchEvent} browserEvent The event.\n * @param {PointerEvent} inPointer The in pointer.\n */\n moveOverOut_(browserEvent, inPointer) {\n const event = inPointer;\n const pointer = this.pointerMap[event.pointerId];\n // a finger drifted off the screen, ignore it\n if (!pointer) {\n return;\n }\n const outEvent = pointer.out;\n const outTarget = pointer.outTarget;\n this.dispatcher.move(event, browserEvent);\n if (outEvent && outTarget !== event.target) {\n outEvent.relatedTarget = event.target;\n event.relatedTarget = outTarget;\n // recover from retargeting by shadow\n outEvent.target = outTarget;\n if (event.target) {\n this.dispatcher.leaveOut(outEvent, browserEvent);\n this.dispatcher.enterOver(event, browserEvent);\n } else {\n // clean up case when finger leaves the screen\n event.target = outTarget;\n event.relatedTarget = null;\n this.cancelOut_(browserEvent, event);\n }\n }\n pointer.out = event;\n pointer.outTarget = event.target;\n }\n\n /**\n * @private\n * @param {TouchEvent} browserEvent An event.\n * @param {PointerEvent} inPointer The inPointer object.\n */\n upOut_(browserEvent, inPointer) {\n this.dispatcher.up(inPointer, browserEvent);\n this.dispatcher.out(inPointer, browserEvent);\n this.dispatcher.leave(inPointer, browserEvent);\n this.cleanUpPointer_(inPointer);\n }\n\n /**\n * @private\n * @param {TouchEvent} browserEvent The event.\n * @param {PointerEvent} inPointer The in pointer.\n */\n cancelOut_(browserEvent, inPointer) {\n this.dispatcher.cancel(inPointer, browserEvent);\n this.dispatcher.out(inPointer, browserEvent);\n this.dispatcher.leave(inPointer, browserEvent);\n this.cleanUpPointer_(inPointer);\n }\n\n /**\n * @private\n * @param {PointerEvent} inPointer The inPointer object.\n */\n cleanUpPointer_(inPointer) {\n delete this.pointerMap[inPointer.pointerId];\n this.removePrimaryPointer_(inPointer);\n }\n\n /**\n * Prevent synth mouse events from creating pointer events.\n *\n * @private\n * @param {TouchEvent} inEvent The in event.\n */\n dedupSynthMouse_(inEvent) {\n const lts = this.mouseSource.lastTouches;\n const t = inEvent.changedTouches[0];\n // only the primary finger will synth mouse events\n if (this.isPrimaryTouch_(t)) {\n // remember x/y of last touch\n const lt = [t.clientX, t.clientY];\n lts.push(lt);\n\n setTimeout(function() {\n // remove touch after timeout\n remove(lts, lt);\n }, this.dedupTimeout_);\n }\n }\n}\n\nexport default TouchSource;\n","/**\n * @module ol/pointer/PointerEventHandler\n */\n\n// Based on https://github.com/Polymer/PointerEvents\n\n// Copyright (c) 2013 The Polymer Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nimport {listen, unlisten} from '../events.js';\nimport EventTarget from '../events/Target.js';\nimport {POINTER, MSPOINTER, TOUCH} from '../has.js';\nimport PointerEventType from '../pointer/EventType.js';\nimport MouseSource from '../pointer/MouseSource.js';\nimport MsSource from '../pointer/MsSource.js';\nimport NativeSource from '../pointer/NativeSource.js';\nimport PointerEvent from '../pointer/PointerEvent.js';\nimport TouchSource from '../pointer/TouchSource.js';\n\n\n/**\n * Properties to copy when cloning an event, with default values.\n * @type {Array}\n */\nconst CLONE_PROPS = [\n // MouseEvent\n ['bubbles', false],\n ['cancelable', false],\n ['view', null],\n ['detail', null],\n ['screenX', 0],\n ['screenY', 0],\n ['clientX', 0],\n ['clientY', 0],\n ['ctrlKey', false],\n ['altKey', false],\n ['shiftKey', false],\n ['metaKey', false],\n ['button', 0],\n ['relatedTarget', null],\n // DOM Level 3\n ['buttons', 0],\n // PointerEvent\n ['pointerId', 0],\n ['width', 0],\n ['height', 0],\n ['pressure', 0],\n ['tiltX', 0],\n ['tiltY', 0],\n ['pointerType', ''],\n ['hwTimestamp', 0],\n ['isPrimary', false],\n // event instance\n ['type', ''],\n ['target', null],\n ['currentTarget', null],\n ['which', 0]\n];\n\n\nclass PointerEventHandler extends EventTarget {\n\n /**\n * @param {Element|HTMLDocument} element Viewport element.\n */\n constructor(element) {\n super();\n\n /**\n * @const\n * @private\n * @type {Element|HTMLDocument}\n */\n this.element_ = element;\n\n /**\n * @const\n * @type {!Object}\n */\n this.pointerMap = {};\n\n /**\n * @type {Object}\n * @private\n */\n this.eventMap_ = {};\n\n /**\n * @type {Array}\n * @private\n */\n this.eventSourceList_ = [];\n\n this.registerSources();\n }\n\n /**\n * Set up the event sources (mouse, touch and native pointers)\n * that generate pointer events.\n */\n registerSources() {\n if (POINTER) {\n this.registerSource('native', new NativeSource(this));\n } else if (MSPOINTER) {\n this.registerSource('ms', new MsSource(this));\n } else {\n const mouseSource = new MouseSource(this);\n this.registerSource('mouse', mouseSource);\n\n if (TOUCH) {\n this.registerSource('touch', new TouchSource(this, mouseSource));\n }\n }\n\n // register events on the viewport element\n this.register_();\n }\n\n /**\n * Add a new event source that will generate pointer events.\n *\n * @param {string} name A name for the event source\n * @param {module:ol/pointer/EventSource} source The source event.\n */\n registerSource(name, source) {\n const s = source;\n const newEvents = s.getEvents();\n\n if (newEvents) {\n newEvents.forEach(function(e) {\n const handler = s.getHandlerForEvent(e);\n\n if (handler) {\n this.eventMap_[e] = handler.bind(s);\n }\n }.bind(this));\n this.eventSourceList_.push(s);\n }\n }\n\n /**\n * Set up the events for all registered event sources.\n * @private\n */\n register_() {\n const l = this.eventSourceList_.length;\n for (let i = 0; i < l; i++) {\n const eventSource = this.eventSourceList_[i];\n this.addEvents_(eventSource.getEvents());\n }\n }\n\n /**\n * Remove all registered events.\n * @private\n */\n unregister_() {\n const l = this.eventSourceList_.length;\n for (let i = 0; i < l; i++) {\n const eventSource = this.eventSourceList_[i];\n this.removeEvents_(eventSource.getEvents());\n }\n }\n\n /**\n * Calls the right handler for a new event.\n * @private\n * @param {Event} inEvent Browser event.\n */\n eventHandler_(inEvent) {\n const type = inEvent.type;\n const handler = this.eventMap_[type];\n if (handler) {\n handler(inEvent);\n }\n }\n\n /**\n * Setup listeners for the given events.\n * @private\n * @param {Array} events List of events.\n */\n addEvents_(events) {\n events.forEach(function(eventName) {\n listen(this.element_, eventName, this.eventHandler_, this);\n }.bind(this));\n }\n\n /**\n * Unregister listeners for the given events.\n * @private\n * @param {Array} events List of events.\n */\n removeEvents_(events) {\n events.forEach(function(e) {\n unlisten(this.element_, e, this.eventHandler_, this);\n }.bind(this));\n }\n\n /**\n * Returns a snapshot of inEvent, with writable properties.\n *\n * @param {Event} event Browser event.\n * @param {Event|Touch} inEvent An event that contains\n * properties to copy.\n * @return {Object} An object containing shallow copies of\n * `inEvent`'s properties.\n */\n cloneEvent(event, inEvent) {\n const eventCopy = {};\n for (let i = 0, ii = CLONE_PROPS.length; i < ii; i++) {\n const p = CLONE_PROPS[i][0];\n eventCopy[p] = event[p] || inEvent[p] || CLONE_PROPS[i][1];\n }\n\n return eventCopy;\n }\n\n // EVENTS\n\n\n /**\n * Triggers a 'pointerdown' event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\n down(data, event) {\n this.fireEvent(PointerEventType.POINTERDOWN, data, event);\n }\n\n /**\n * Triggers a 'pointermove' event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\n move(data, event) {\n this.fireEvent(PointerEventType.POINTERMOVE, data, event);\n }\n\n /**\n * Triggers a 'pointerup' event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\n up(data, event) {\n this.fireEvent(PointerEventType.POINTERUP, data, event);\n }\n\n /**\n * Triggers a 'pointerenter' event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\n enter(data, event) {\n data.bubbles = false;\n this.fireEvent(PointerEventType.POINTERENTER, data, event);\n }\n\n /**\n * Triggers a 'pointerleave' event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\n leave(data, event) {\n data.bubbles = false;\n this.fireEvent(PointerEventType.POINTERLEAVE, data, event);\n }\n\n /**\n * Triggers a 'pointerover' event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\n over(data, event) {\n data.bubbles = true;\n this.fireEvent(PointerEventType.POINTEROVER, data, event);\n }\n\n /**\n * Triggers a 'pointerout' event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\n out(data, event) {\n data.bubbles = true;\n this.fireEvent(PointerEventType.POINTEROUT, data, event);\n }\n\n /**\n * Triggers a 'pointercancel' event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\n cancel(data, event) {\n this.fireEvent(PointerEventType.POINTERCANCEL, data, event);\n }\n\n /**\n * Triggers a combination of 'pointerout' and 'pointerleave' events.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\n leaveOut(data, event) {\n this.out(data, event);\n if (!this.contains_(data.target, data.relatedTarget)) {\n this.leave(data, event);\n }\n }\n\n /**\n * Triggers a combination of 'pointerover' and 'pointerevents' events.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\n enterOver(data, event) {\n this.over(data, event);\n if (!this.contains_(data.target, data.relatedTarget)) {\n this.enter(data, event);\n }\n }\n\n /**\n * @private\n * @param {Element} container The container element.\n * @param {Element} contained The contained element.\n * @return {boolean} Returns true if the container element\n * contains the other element.\n */\n contains_(container, contained) {\n if (!container || !contained) {\n return false;\n }\n return container.contains(contained);\n }\n\n // EVENT CREATION AND TRACKING\n /**\n * Creates a new Event of type `inType`, based on the information in\n * `data`.\n *\n * @param {string} inType A string representing the type of event to create.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n * @return {module:ol/pointer/PointerEvent} A PointerEvent of type `inType`.\n */\n makeEvent(inType, data, event) {\n return new PointerEvent(inType, event, data);\n }\n\n /**\n * Make and dispatch an event in one call.\n * @param {string} inType A string representing the type of event.\n * @param {Object} data Pointer event data.\n * @param {Event} event The event.\n */\n fireEvent(inType, data, event) {\n const e = this.makeEvent(inType, data, event);\n this.dispatchEvent(e);\n }\n\n /**\n * Creates a pointer event from a native pointer event\n * and dispatches this event.\n * @param {Event} event A platform event with a target.\n */\n fireNativeEvent(event) {\n const e = this.makeEvent(event.type, event, event);\n this.dispatchEvent(e);\n }\n\n /**\n * Wrap a native mouse event into a pointer event.\n * This proxy method is required for the legacy IE support.\n * @param {string} eventType The pointer event type.\n * @param {Event} event The event.\n * @return {module:ol/pointer/PointerEvent} The wrapped event.\n */\n wrapMouseEvent(eventType, event) {\n const pointerEvent = this.makeEvent(\n eventType, MouseSource.prepareEvent(event, this), event);\n return pointerEvent;\n }\n\n /**\n * @inheritDoc\n */\n disposeInternal() {\n this.unregister_();\n super.disposeInternal();\n }\n}\n\nexport default PointerEventHandler;\n","/**\n * @module ol/MapBrowserEventHandler\n */\nimport {DEVICE_PIXEL_RATIO} from './has.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport MapBrowserPointerEvent from './MapBrowserPointerEvent.js';\nimport {listen, unlistenByKey} from './events.js';\nimport EventTarget from './events/Target.js';\nimport PointerEventType from './pointer/EventType.js';\nimport PointerEventHandler from './pointer/PointerEventHandler.js';\n\nclass MapBrowserEventHandler extends EventTarget {\n\n /**\n * @param {module:ol/PluggableMap} map The map with the viewport to listen to events on.\n * @param {number=} moveTolerance The minimal distance the pointer must travel to trigger a move.\n */\n constructor(map, moveTolerance) {\n\n super();\n\n /**\n * This is the element that we will listen to the real events on.\n * @type {module:ol/PluggableMap}\n * @private\n */\n this.map_ = map;\n\n /**\n * @type {number}\n * @private\n */\n this.clickTimeoutId_ = 0;\n\n /**\n * @type {boolean}\n * @private\n */\n this.dragging_ = false;\n\n /**\n * @type {!Array}\n * @private\n */\n this.dragListenerKeys_ = [];\n\n /**\n * @type {number}\n * @private\n */\n this.moveTolerance_ = moveTolerance ?\n moveTolerance * DEVICE_PIXEL_RATIO : DEVICE_PIXEL_RATIO;\n\n /**\n * The most recent \"down\" type event (or null if none have occurred).\n * Set on pointerdown.\n * @type {module:ol/pointer/PointerEvent}\n * @private\n */\n this.down_ = null;\n\n const element = this.map_.getViewport();\n\n /**\n * @type {number}\n * @private\n */\n this.activePointers_ = 0;\n\n /**\n * @type {!Object}\n * @private\n */\n this.trackedTouches_ = {};\n\n /**\n * Event handler which generates pointer events for\n * the viewport element.\n *\n * @type {module:ol/pointer/PointerEventHandler}\n * @private\n */\n this.pointerEventHandler_ = new PointerEventHandler(element);\n\n /**\n * Event handler which generates pointer events for\n * the document (used when dragging).\n *\n * @type {module:ol/pointer/PointerEventHandler}\n * @private\n */\n this.documentPointerEventHandler_ = null;\n\n /**\n * @type {?module:ol/events~EventsKey}\n * @private\n */\n this.pointerdownListenerKey_ = listen(this.pointerEventHandler_,\n PointerEventType.POINTERDOWN,\n this.handlePointerDown_, this);\n\n /**\n * @type {?module:ol/events~EventsKey}\n * @private\n */\n this.relayedListenerKey_ = listen(this.pointerEventHandler_,\n PointerEventType.POINTERMOVE,\n this.relayEvent_, this);\n\n }\n\n /**\n * @param {module:ol/pointer/PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n emulateClick_(pointerEvent) {\n let newEvent = new MapBrowserPointerEvent(\n MapBrowserEventType.CLICK, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n if (this.clickTimeoutId_ !== 0) {\n // double-click\n clearTimeout(this.clickTimeoutId_);\n this.clickTimeoutId_ = 0;\n newEvent = new MapBrowserPointerEvent(\n MapBrowserEventType.DBLCLICK, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n } else {\n // click\n this.clickTimeoutId_ = setTimeout(function() {\n this.clickTimeoutId_ = 0;\n const newEvent = new MapBrowserPointerEvent(\n MapBrowserEventType.SINGLECLICK, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n }.bind(this), 250);\n }\n }\n\n /**\n * Keeps track on how many pointers are currently active.\n *\n * @param {module:ol/pointer/PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n updateActivePointers_(pointerEvent) {\n const event = pointerEvent;\n\n if (event.type == MapBrowserEventType.POINTERUP ||\n event.type == MapBrowserEventType.POINTERCANCEL) {\n delete this.trackedTouches_[event.pointerId];\n } else if (event.type == MapBrowserEventType.POINTERDOWN) {\n this.trackedTouches_[event.pointerId] = true;\n }\n this.activePointers_ = Object.keys(this.trackedTouches_).length;\n }\n\n /**\n * @param {module:ol/pointer/PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerUp_(pointerEvent) {\n this.updateActivePointers_(pointerEvent);\n const newEvent = new MapBrowserPointerEvent(\n MapBrowserEventType.POINTERUP, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n\n // We emulate click events on left mouse button click, touch contact, and pen\n // contact. isMouseActionButton returns true in these cases (evt.button is set\n // to 0).\n // See http://www.w3.org/TR/pointerevents/#button-states\n // We only fire click, singleclick, and doubleclick if nobody has called\n // event.stopPropagation() or event.preventDefault().\n if (!newEvent.propagationStopped && !this.dragging_ && this.isMouseActionButton_(pointerEvent)) {\n this.emulateClick_(this.down_);\n }\n\n if (this.activePointers_ === 0) {\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n this.dragging_ = false;\n this.down_ = null;\n this.documentPointerEventHandler_.dispose();\n this.documentPointerEventHandler_ = null;\n }\n }\n\n /**\n * @param {module:ol/pointer/PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} If the left mouse button was pressed.\n * @private\n */\n isMouseActionButton_(pointerEvent) {\n return pointerEvent.button === 0;\n }\n\n /**\n * @param {module:ol/pointer/PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerDown_(pointerEvent) {\n this.updateActivePointers_(pointerEvent);\n const newEvent = new MapBrowserPointerEvent(\n MapBrowserEventType.POINTERDOWN, this.map_, pointerEvent);\n this.dispatchEvent(newEvent);\n\n this.down_ = pointerEvent;\n\n if (this.dragListenerKeys_.length === 0) {\n /* Set up a pointer event handler on the `document`,\n * which is required when the pointer is moved outside\n * the viewport when dragging.\n */\n this.documentPointerEventHandler_ =\n new PointerEventHandler(document);\n\n this.dragListenerKeys_.push(\n listen(this.documentPointerEventHandler_,\n MapBrowserEventType.POINTERMOVE,\n this.handlePointerMove_, this),\n listen(this.documentPointerEventHandler_,\n MapBrowserEventType.POINTERUP,\n this.handlePointerUp_, this),\n /* Note that the listener for `pointercancel is set up on\n * `pointerEventHandler_` and not `documentPointerEventHandler_` like\n * the `pointerup` and `pointermove` listeners.\n *\n * The reason for this is the following: `TouchSource.vacuumTouches_()`\n * issues `pointercancel` events, when there was no `touchend` for a\n * `touchstart`. Now, let's say a first `touchstart` is registered on\n * `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.\n * But `documentPointerEventHandler_` doesn't know about the first\n * `touchstart`. If there is no `touchend` for the `touchstart`, we can\n * only receive a `touchcancel` from `pointerEventHandler_`, because it is\n * only registered there.\n */\n listen(this.pointerEventHandler_,\n MapBrowserEventType.POINTERCANCEL,\n this.handlePointerUp_, this)\n );\n }\n }\n\n /**\n * @param {module:ol/pointer/PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerMove_(pointerEvent) {\n // Between pointerdown and pointerup, pointermove events are triggered.\n // To avoid a 'false' touchmove event to be dispatched, we test if the pointer\n // moved a significant distance.\n if (this.isMoving_(pointerEvent)) {\n this.dragging_ = true;\n const newEvent = new MapBrowserPointerEvent(\n MapBrowserEventType.POINTERDRAG, this.map_, pointerEvent,\n this.dragging_);\n this.dispatchEvent(newEvent);\n }\n\n // Some native android browser triggers mousemove events during small period\n // of time. See: https://code.google.com/p/android/issues/detail?id=5491 or\n // https://code.google.com/p/android/issues/detail?id=19827\n // ex: Galaxy Tab P3110 + Android 4.1.1\n pointerEvent.preventDefault();\n }\n\n /**\n * Wrap and relay a pointer event. Note that this requires that the type\n * string for the MapBrowserPointerEvent matches the PointerEvent type.\n * @param {module:ol/pointer/PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n relayEvent_(pointerEvent) {\n const dragging = !!(this.down_ && this.isMoving_(pointerEvent));\n this.dispatchEvent(new MapBrowserPointerEvent(\n pointerEvent.type, this.map_, pointerEvent, dragging));\n }\n\n /**\n * @param {module:ol/pointer/PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} Is moving.\n * @private\n */\n isMoving_(pointerEvent) {\n return this.dragging_ ||\n Math.abs(pointerEvent.clientX - this.down_.clientX) > this.moveTolerance_ ||\n Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_;\n }\n\n /**\n * @inheritDoc\n */\n disposeInternal() {\n if (this.relayedListenerKey_) {\n unlistenByKey(this.relayedListenerKey_);\n this.relayedListenerKey_ = null;\n }\n if (this.pointerdownListenerKey_) {\n unlistenByKey(this.pointerdownListenerKey_);\n this.pointerdownListenerKey_ = null;\n }\n\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n\n if (this.documentPointerEventHandler_) {\n this.documentPointerEventHandler_.dispose();\n this.documentPointerEventHandler_ = null;\n }\n if (this.pointerEventHandler_) {\n this.pointerEventHandler_.dispose();\n this.pointerEventHandler_ = null;\n }\n super.disposeInternal();\n }\n}\n\n\nexport default MapBrowserEventHandler;\n","/**\n * @module ol/MapEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n\n /**\n * Triggered after a map frame is rendered.\n * @event module:ol/MapEvent~MapEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n\n /**\n * Triggered when the map starts moving.\n * @event module:ol/MapEvent~MapEvent#movestart\n * @api\n */\n MOVESTART: 'movestart',\n\n /**\n * Triggered after the map is moved.\n * @event module:ol/MapEvent~MapEvent#moveend\n * @api\n */\n MOVEEND: 'moveend'\n\n};\n","/**\n * @module ol/MapProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n LAYERGROUP: 'layergroup',\n SIZE: 'size',\n TARGET: 'target',\n VIEW: 'view'\n};\n","/**\n * @module ol/structs/PriorityQueue\n */\nimport {assert} from '../asserts.js';\nimport {clear} from '../obj.js';\n\n\n/**\n * @type {number}\n */\nexport const DROP = Infinity;\n\n\n/**\n * @classdesc\n * Priority queue.\n *\n * The implementation is inspired from the Closure Library's Heap class and\n * Python's heapq module.\n *\n * See http://closure-library.googlecode.com/svn/docs/closure_goog_structs_heap.js.source.html\n * and http://hg.python.org/cpython/file/2.7/Lib/heapq.py.\n *\n * @template T\n */\nclass PriorityQueue {\n\n /**\n * @param {function(T): number} priorityFunction Priority function.\n * @param {function(T): string} keyFunction Key function.\n */\n constructor(priorityFunction, keyFunction) {\n\n /**\n * @type {function(T): number}\n * @private\n */\n this.priorityFunction_ = priorityFunction;\n\n /**\n * @type {function(T): string}\n * @private\n */\n this.keyFunction_ = keyFunction;\n\n /**\n * @type {Array}\n * @private\n */\n this.elements_ = [];\n\n /**\n * @type {Array}\n * @private\n */\n this.priorities_ = [];\n\n /**\n * @type {!Object}\n * @private\n */\n this.queuedElements_ = {};\n\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n clear() {\n this.elements_.length = 0;\n this.priorities_.length = 0;\n clear(this.queuedElements_);\n }\n\n\n /**\n * Remove and return the highest-priority element. O(log N).\n * @return {T} Element.\n */\n dequeue() {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const element = elements[0];\n if (elements.length == 1) {\n elements.length = 0;\n priorities.length = 0;\n } else {\n elements[0] = elements.pop();\n priorities[0] = priorities.pop();\n this.siftUp_(0);\n }\n const elementKey = this.keyFunction_(element);\n delete this.queuedElements_[elementKey];\n return element;\n }\n\n\n /**\n * Enqueue an element. O(log N).\n * @param {T} element Element.\n * @return {boolean} The element was added to the queue.\n */\n enqueue(element) {\n assert(!(this.keyFunction_(element) in this.queuedElements_),\n 31); // Tried to enqueue an `element` that was already added to the queue\n const priority = this.priorityFunction_(element);\n if (priority != DROP) {\n this.elements_.push(element);\n this.priorities_.push(priority);\n this.queuedElements_[this.keyFunction_(element)] = true;\n this.siftDown_(0, this.elements_.length - 1);\n return true;\n }\n return false;\n }\n\n\n /**\n * @return {number} Count.\n */\n getCount() {\n return this.elements_.length;\n }\n\n\n /**\n * Gets the index of the left child of the node at the given index.\n * @param {number} index The index of the node to get the left child for.\n * @return {number} The index of the left child.\n * @private\n */\n getLeftChildIndex_(index) {\n return index * 2 + 1;\n }\n\n\n /**\n * Gets the index of the right child of the node at the given index.\n * @param {number} index The index of the node to get the right child for.\n * @return {number} The index of the right child.\n * @private\n */\n getRightChildIndex_(index) {\n return index * 2 + 2;\n }\n\n\n /**\n * Gets the index of the parent of the node at the given index.\n * @param {number} index The index of the node to get the parent for.\n * @return {number} The index of the parent.\n * @private\n */\n getParentIndex_(index) {\n return (index - 1) >> 1;\n }\n\n\n /**\n * Make this a heap. O(N).\n * @private\n */\n heapify_() {\n let i;\n for (i = (this.elements_.length >> 1) - 1; i >= 0; i--) {\n this.siftUp_(i);\n }\n }\n\n\n /**\n * @return {boolean} Is empty.\n */\n isEmpty() {\n return this.elements_.length === 0;\n }\n\n\n /**\n * @param {string} key Key.\n * @return {boolean} Is key queued.\n */\n isKeyQueued(key) {\n return key in this.queuedElements_;\n }\n\n\n /**\n * @param {T} element Element.\n * @return {boolean} Is queued.\n */\n isQueued(element) {\n return this.isKeyQueued(this.keyFunction_(element));\n }\n\n\n /**\n * @param {number} index The index of the node to move down.\n * @private\n */\n siftUp_(index) {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const count = elements.length;\n const element = elements[index];\n const priority = priorities[index];\n const startIndex = index;\n\n while (index < (count >> 1)) {\n const lIndex = this.getLeftChildIndex_(index);\n const rIndex = this.getRightChildIndex_(index);\n\n const smallerChildIndex = rIndex < count &&\n priorities[rIndex] < priorities[lIndex] ?\n rIndex : lIndex;\n\n elements[index] = elements[smallerChildIndex];\n priorities[index] = priorities[smallerChildIndex];\n index = smallerChildIndex;\n }\n\n elements[index] = element;\n priorities[index] = priority;\n this.siftDown_(startIndex, index);\n }\n\n\n /**\n * @param {number} startIndex The index of the root.\n * @param {number} index The index of the node to move up.\n * @private\n */\n siftDown_(startIndex, index) {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const element = elements[index];\n const priority = priorities[index];\n\n while (index > startIndex) {\n const parentIndex = this.getParentIndex_(index);\n if (priorities[parentIndex] > priority) {\n elements[index] = elements[parentIndex];\n priorities[index] = priorities[parentIndex];\n index = parentIndex;\n } else {\n break;\n }\n }\n elements[index] = element;\n priorities[index] = priority;\n }\n\n\n /**\n * FIXME empty description for jsdoc\n */\n reprioritize() {\n const priorityFunction = this.priorityFunction_;\n const elements = this.elements_;\n const priorities = this.priorities_;\n let index = 0;\n const n = elements.length;\n let element, i, priority;\n for (i = 0; i < n; ++i) {\n element = elements[i];\n priority = priorityFunction(element);\n if (priority == DROP) {\n delete this.queuedElements_[this.keyFunction_(element)];\n } else {\n priorities[index] = priority;\n elements[index++] = element;\n }\n }\n elements.length = index;\n priorities.length = index;\n this.heapify_();\n }\n\n}\n\n\nexport default PriorityQueue;\n","/**\n * @module ol/TileQueue\n */\nimport TileState from './TileState.js';\nimport {listen, unlisten} from './events.js';\nimport EventType from './events/EventType.js';\nimport PriorityQueue from './structs/PriorityQueue.js';\n\n\n/**\n * @typedef {function(module:ol/Tile, string, module:ol/coordinate~Coordinate, number): number} PriorityFunction\n */\n\n\nclass TileQueue extends PriorityQueue {\n\n /**\n * @param {module:ol/TileQueue~PriorityFunction} tilePriorityFunction Tile priority function.\n * @param {function(): ?} tileChangeCallback Function called on each tile change event.\n */\n constructor(tilePriorityFunction, tileChangeCallback) {\n\n super(\n /**\n * @param {Array} element Element.\n * @return {number} Priority.\n */\n function(element) {\n return tilePriorityFunction.apply(null, element);\n },\n /**\n * @param {Array} element Element.\n * @return {string} Key.\n */\n function(element) {\n return (/** @type {module:ol/Tile} */ (element[0]).getKey());\n });\n\n /**\n * @private\n * @type {function(): ?}\n */\n this.tileChangeCallback_ = tileChangeCallback;\n\n /**\n * @private\n * @type {number}\n */\n this.tilesLoading_ = 0;\n\n /**\n * @private\n * @type {!Object}\n */\n this.tilesLoadingKeys_ = {};\n\n }\n\n /**\n * @inheritDoc\n */\n enqueue(element) {\n const added = super.enqueue(element);\n if (added) {\n const tile = element[0];\n listen(tile, EventType.CHANGE, this.handleTileChange, this);\n }\n return added;\n }\n\n /**\n * @return {number} Number of tiles loading.\n */\n getTilesLoading() {\n return this.tilesLoading_;\n }\n\n /**\n * @param {module:ol/events/Event} event Event.\n * @protected\n */\n handleTileChange(event) {\n const tile = /** @type {module:ol/Tile} */ (event.target);\n const state = tile.getState();\n if (state === TileState.LOADED || state === TileState.ERROR ||\n state === TileState.EMPTY || state === TileState.ABORT) {\n unlisten(tile, EventType.CHANGE, this.handleTileChange, this);\n const tileKey = tile.getKey();\n if (tileKey in this.tilesLoadingKeys_) {\n delete this.tilesLoadingKeys_[tileKey];\n --this.tilesLoading_;\n }\n this.tileChangeCallback_();\n }\n }\n\n /**\n * @param {number} maxTotalLoading Maximum number tiles to load simultaneously.\n * @param {number} maxNewLoads Maximum number of new tiles to load.\n */\n loadMoreTiles(maxTotalLoading, maxNewLoads) {\n let newLoads = 0;\n let abortedTiles = false;\n let state, tile, tileKey;\n while (this.tilesLoading_ < maxTotalLoading && newLoads < maxNewLoads &&\n this.getCount() > 0) {\n tile = /** @type {module:ol/Tile} */ (this.dequeue()[0]);\n tileKey = tile.getKey();\n state = tile.getState();\n if (state === TileState.ABORT) {\n abortedTiles = true;\n } else if (state === TileState.IDLE && !(tileKey in this.tilesLoadingKeys_)) {\n this.tilesLoadingKeys_[tileKey] = true;\n ++this.tilesLoading_;\n ++newLoads;\n tile.load();\n }\n }\n if (newLoads === 0 && abortedTiles) {\n // Do not stop the render loop when all wanted tiles were aborted due to\n // a small, saturated tile cache.\n this.tileChangeCallback_();\n }\n }\n}\n\n\nexport default TileQueue;\n","/**\n * @module ol/layer/Group\n */\nimport {getUid} from '../util.js';\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport {getChangeEventType} from '../Object.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport {assert} from '../asserts.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport EventType from '../events/EventType.js';\nimport {getIntersection} from '../extent.js';\nimport BaseLayer from '../layer/Base.js';\nimport {assign, clear} from '../obj.js';\nimport SourceState from '../source/State.js';\n\n\n/**\n * @typedef {Object} Options\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {module:ol/extent~Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex=0] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {Array|module:ol/Collection} [layers] Child layers.\n */\n\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n LAYERS: 'layers'\n};\n\n\n/**\n * @classdesc\n * A {@link module:ol/Collection~Collection} of layers that are handled together.\n *\n * A generic `change` event is triggered when the group/Collection changes.\n *\n * @api\n */\nclass LayerGroup extends BaseLayer {\n /**\n * @param {module:ol/layer/Group~Options=} opt_options Layer options.\n */\n constructor(opt_options) {\n\n const options = opt_options || {};\n const baseOptions = /** @type {module:ol/layer/Group~Options} */ (assign({}, options));\n delete baseOptions.layers;\n\n let layers = options.layers;\n\n super(baseOptions);\n\n /**\n * @private\n * @type {Array}\n */\n this.layersListenerKeys_ = [];\n\n /**\n * @private\n * @type {Object>}\n */\n this.listenerKeys_ = {};\n\n listen(this,\n getChangeEventType(Property.LAYERS),\n this.handleLayersChanged_, this);\n\n if (layers) {\n if (Array.isArray(layers)) {\n layers = new Collection(layers.slice(), {unique: true});\n } else {\n assert(layers instanceof Collection,\n 43); // Expected `layers` to be an array or a `Collection`\n layers = layers;\n }\n } else {\n layers = new Collection(undefined, {unique: true});\n }\n\n this.setLayers(layers);\n\n }\n\n /**\n * @private\n */\n handleLayerChange_() {\n this.changed();\n }\n\n /**\n * @param {module:ol/events/Event} event Event.\n * @private\n */\n handleLayersChanged_() {\n this.layersListenerKeys_.forEach(unlistenByKey);\n this.layersListenerKeys_.length = 0;\n\n const layers = this.getLayers();\n this.layersListenerKeys_.push(\n listen(layers, CollectionEventType.ADD, this.handleLayersAdd_, this),\n listen(layers, CollectionEventType.REMOVE, this.handleLayersRemove_, this)\n );\n\n for (const id in this.listenerKeys_) {\n this.listenerKeys_[id].forEach(unlistenByKey);\n }\n clear(this.listenerKeys_);\n\n const layersArray = layers.getArray();\n for (let i = 0, ii = layersArray.length; i < ii; i++) {\n const layer = layersArray[i];\n this.listenerKeys_[getUid(layer).toString()] = [\n listen(layer, ObjectEventType.PROPERTYCHANGE, this.handleLayerChange_, this),\n listen(layer, EventType.CHANGE, this.handleLayerChange_, this)\n ];\n }\n\n this.changed();\n }\n\n /**\n * @param {module:ol/Collection~CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n handleLayersAdd_(collectionEvent) {\n const layer = /** @type {module:ol/layer/Base} */ (collectionEvent.element);\n const key = getUid(layer).toString();\n this.listenerKeys_[key] = [\n listen(layer, ObjectEventType.PROPERTYCHANGE, this.handleLayerChange_, this),\n listen(layer, EventType.CHANGE, this.handleLayerChange_, this)\n ];\n this.changed();\n }\n\n /**\n * @param {module:ol/Collection~CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n handleLayersRemove_(collectionEvent) {\n const layer = /** @type {module:ol/layer/Base} */ (collectionEvent.element);\n const key = getUid(layer).toString();\n this.listenerKeys_[key].forEach(unlistenByKey);\n delete this.listenerKeys_[key];\n this.changed();\n }\n\n /**\n * Returns the {@link module:ol/Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @return {!module:ol/Collection} Collection of\n * {@link module:ol/layer/Base layers} that are part of this group.\n * @observable\n * @api\n */\n getLayers() {\n return (\n /** @type {!module:ol/Collection} */ (this.get(Property.LAYERS))\n );\n }\n\n /**\n * Set the {@link module:ol/Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @param {!module:ol/Collection} layers Collection of\n * {@link module:ol/layer/Base layers} that are part of this group.\n * @observable\n * @api\n */\n setLayers(layers) {\n this.set(Property.LAYERS, layers);\n }\n\n /**\n * @inheritDoc\n */\n getLayersArray(opt_array) {\n const array = opt_array !== undefined ? opt_array : [];\n this.getLayers().forEach(function(layer) {\n layer.getLayersArray(array);\n });\n return array;\n }\n\n /**\n * @inheritDoc\n */\n getLayerStatesArray(opt_states) {\n const states = opt_states !== undefined ? opt_states : [];\n\n const pos = states.length;\n\n this.getLayers().forEach(function(layer) {\n layer.getLayerStatesArray(states);\n });\n\n const ownLayerState = this.getLayerState();\n for (let i = pos, ii = states.length; i < ii; i++) {\n const layerState = states[i];\n layerState.opacity *= ownLayerState.opacity;\n layerState.visible = layerState.visible && ownLayerState.visible;\n layerState.maxResolution = Math.min(\n layerState.maxResolution, ownLayerState.maxResolution);\n layerState.minResolution = Math.max(\n layerState.minResolution, ownLayerState.minResolution);\n if (ownLayerState.extent !== undefined) {\n if (layerState.extent !== undefined) {\n layerState.extent = getIntersection(layerState.extent, ownLayerState.extent);\n } else {\n layerState.extent = ownLayerState.extent;\n }\n }\n }\n\n return states;\n }\n\n /**\n * @inheritDoc\n */\n getSourceState() {\n return SourceState.READY;\n }\n}\n\n\nexport default LayerGroup;\n","/**\n * @module ol/PluggableMap\n */\nimport {getUid} from './util.js';\nimport Collection from './Collection.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventHandler from './MapBrowserEventHandler.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport MapEvent from './MapEvent.js';\nimport MapEventType from './MapEventType.js';\nimport MapProperty from './MapProperty.js';\nimport RenderEventType from './render/EventType.js';\nimport BaseObject, {getChangeEventType} from './Object.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport TileQueue from './TileQueue.js';\nimport View from './View.js';\nimport ViewHint from './ViewHint.js';\nimport {assert} from './asserts.js';\nimport {removeNode} from './dom.js';\nimport {listen, unlistenByKey, unlisten} from './events.js';\nimport {stopPropagation} from './events/Event.js';\nimport EventType from './events/EventType.js';\nimport {createEmpty, clone, createOrUpdateEmpty, equals, getForViewAndSize, isEmpty} from './extent.js';\nimport {TRUE} from './functions.js';\nimport {DEVICE_PIXEL_RATIO, TOUCH} from './has.js';\nimport LayerGroup from './layer/Group.js';\nimport {hasArea} from './size.js';\nimport {DROP} from './structs/PriorityQueue.js';\nimport {create as createTransform, apply as applyTransform} from './transform.js';\n\n\n/**\n * State of the current frame. Only `pixelRatio`, `time` and `viewState` should\n * be used in applications.\n * @typedef {Object} FrameState\n * @property {number} pixelRatio The pixel ratio of the frame.\n * @property {number} time The time when rendering of the frame was requested.\n * @property {module:ol/View~State} viewState The state of the current view.\n * @property {boolean} animate\n * @property {module:ol/transform~Transform} coordinateToPixelTransform\n * @property {null|module:ol/extent~Extent} extent\n * @property {module:ol/coordinate~Coordinate} focus\n * @property {number} index\n * @property {Object} layerStates\n * @property {Array} layerStatesArray\n * @property {module:ol/transform~Transform} pixelToCoordinateTransform\n * @property {Array} postRenderFunctions\n * @property {module:ol/size~Size} size\n * @property {!Object} skippedFeatureUids\n * @property {module:ol/TileQueue} tileQueue\n * @property {Object>} usedTiles\n * @property {Array} viewHints\n * @property {!Object>} wantedTiles\n */\n\n\n/**\n * @typedef {function(module:ol/PluggableMap, ?module:ol/PluggableMap~FrameState): boolean} PostRenderFunction\n */\n\n\n/**\n * @typedef {Object} AtPixelOptions\n * @property {undefined|function(module:ol/layer/Layer): boolean} layerFilter Layer filter\n * function. The filter function will receive one argument, the\n * {@link module:ol/layer/Layer layer-candidate} and it should return a boolean value.\n * Only layers which are visible and for which this function returns `true`\n * will be tested for features. By default, all visible layers will be tested.\n * @property {number} [hitTolerance=0] Hit-detection tolerance in pixels. Pixels\n * inside the radius around the given position will be checked for features. This only\n * works for the canvas renderer and not for WebGL.\n */\n\n\n/**\n * @typedef {Object} MapOptionsInternal\n * @property {module:ol/Collection} [controls]\n * @property {module:ol/Collection} [interactions]\n * @property {HTMLElement|Document} keyboardEventTarget\n * @property {module:ol/Collection} overlays\n * @property {Object} values\n */\n\n\n/**\n * Object literal with config options for the map.\n * @typedef {Object} MapOptions\n * @property {module:ol/Collection|Array} [controls]\n * Controls initially added to the map. If not specified,\n * {@link module:ol/control/util~defaults} is used.\n * @property {number} [pixelRatio=window.devicePixelRatio] The ratio between\n * physical pixels and device-independent pixels (dips) on the device.\n * @property {module:ol/Collection|Array} [interactions]\n * Interactions that are initially added to the map. If not specified,\n * {@link module:ol/interaction~defaults} is used.\n * @property {HTMLElement|Document|string} [keyboardEventTarget] The element to\n * listen to keyboard events on. This determines when the `KeyboardPan` and\n * `KeyboardZoom` interactions trigger. For example, if this option is set to\n * `document` the keyboard interactions will always trigger. If this option is\n * not specified, the element the library listens to keyboard events on is the\n * map target (i.e. the user-provided div for the map). If this is not\n * `document`, the target element needs to be focused for key events to be\n * emitted, requiring that the target element has a `tabindex` attribute.\n * @property {Array|module:ol/Collection} [layers]\n * Layers. If this is not defined, a map with no layers will be rendered. Note\n * that layers are rendered in the order supplied, so if you want, for example,\n * a vector layer to appear on top of a tile layer, it must come after the tile\n * layer.\n * @property {number} [maxTilesLoading=16] Maximum number tiles to load\n * simultaneously.\n * @property {boolean} [loadTilesWhileAnimating=false] When set to `true`, tiles\n * will be loaded during animations. This may improve the user experience, but\n * can also make animations stutter on devices with slow memory.\n * @property {boolean} [loadTilesWhileInteracting=false] When set to `true`,\n * tiles will be loaded while interacting with the map. This may improve the\n * user experience, but can also make map panning and zooming choppy on devices\n * with slow memory.\n * @property {number} [moveTolerance=1] The minimum distance in pixels the\n * cursor must move to be detected as a map move event instead of a click.\n * Increasing this value can make it easier to click on the map.\n * @property {module:ol/Collection|Array} [overlays]\n * Overlays initially added to the map. By default, no overlays are added.\n * @property {HTMLElement|string} [target] The container for the map, either the\n * element itself or the `id` of the element. If not specified at construction\n * time, {@link module:ol/Map~Map#setTarget} must be called for the map to be\n * rendered.\n * @property {module:ol/View} [view] The map's view. No layer sources will be\n * fetched unless this is specified at construction time or through\n * {@link module:ol/Map~Map#setView}.\n */\n\n\n/**\n * @fires module:ol/MapBrowserEvent~MapBrowserEvent\n * @fires module:ol/MapEvent~MapEvent\n * @fires module:ol/render/Event~RenderEvent#postcompose\n * @fires module:ol/render/Event~RenderEvent#precompose\n * @fires module:ol/render/Event~RenderEvent#rendercomplete\n * @api\n */\nclass PluggableMap extends BaseObject {\n\n /**\n * @param {module:ol/PluggableMap~MapOptions} options Map options.\n */\n constructor(options) {\n\n super();\n\n const optionsInternal = createOptionsInternal(options);\n\n /**\n * @type {number}\n * @private\n */\n this.maxTilesLoading_ = options.maxTilesLoading !== undefined ? options.maxTilesLoading : 16;\n\n /**\n * @type {boolean}\n * @private\n */\n this.loadTilesWhileAnimating_ =\n options.loadTilesWhileAnimating !== undefined ?\n options.loadTilesWhileAnimating : false;\n\n /**\n * @type {boolean}\n * @private\n */\n this.loadTilesWhileInteracting_ =\n options.loadTilesWhileInteracting !== undefined ?\n options.loadTilesWhileInteracting : false;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ = options.pixelRatio !== undefined ?\n options.pixelRatio : DEVICE_PIXEL_RATIO;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.animationDelayKey_;\n\n /**\n * @private\n */\n this.animationDelay_ = function() {\n this.animationDelayKey_ = undefined;\n this.renderFrame_.call(this, Date.now());\n }.bind(this);\n\n /**\n * @private\n * @type {module:ol/transform~Transform}\n */\n this.coordinateToPixelTransform_ = createTransform();\n\n /**\n * @private\n * @type {module:ol/transform~Transform}\n */\n this.pixelToCoordinateTransform_ = createTransform();\n\n /**\n * @private\n * @type {number}\n */\n this.frameIndex_ = 0;\n\n /**\n * @private\n * @type {?module:ol/PluggableMap~FrameState}\n */\n this.frameState_ = null;\n\n /**\n * The extent at the previous 'moveend' event.\n * @private\n * @type {module:ol/extent~Extent}\n */\n this.previousExtent_ = null;\n\n /**\n * @private\n * @type {?module:ol/events~EventsKey}\n */\n this.viewPropertyListenerKey_ = null;\n\n /**\n * @private\n * @type {?module:ol/events~EventsKey}\n */\n this.viewChangeListenerKey_ = null;\n\n /**\n * @private\n * @type {Array}\n */\n this.layerGroupPropertyListenerKeys_ = null;\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.viewport_ = document.createElement('div');\n this.viewport_.className = 'ol-viewport' + (TOUCH ? ' ol-touch' : '');\n this.viewport_.style.position = 'relative';\n this.viewport_.style.overflow = 'hidden';\n this.viewport_.style.width = '100%';\n this.viewport_.style.height = '100%';\n // prevent page zoom on IE >= 10 browsers\n this.viewport_.style.msTouchAction = 'none';\n this.viewport_.style.touchAction = 'none';\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.overlayContainer_ = document.createElement('div');\n this.overlayContainer_.className = 'ol-overlaycontainer';\n this.viewport_.appendChild(this.overlayContainer_);\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.overlayContainerStopEvent_ = document.createElement('div');\n this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent';\n const overlayEvents = [\n EventType.CLICK,\n EventType.DBLCLICK,\n EventType.MOUSEDOWN,\n EventType.TOUCHSTART,\n EventType.MSPOINTERDOWN,\n MapBrowserEventType.POINTERDOWN,\n EventType.MOUSEWHEEL,\n EventType.WHEEL\n ];\n for (let i = 0, ii = overlayEvents.length; i < ii; ++i) {\n listen(this.overlayContainerStopEvent_, overlayEvents[i], stopPropagation);\n }\n this.viewport_.appendChild(this.overlayContainerStopEvent_);\n\n /**\n * @private\n * @type {module:ol/MapBrowserEventHandler}\n */\n this.mapBrowserEventHandler_ = new MapBrowserEventHandler(this, options.moveTolerance);\n for (const key in MapBrowserEventType) {\n listen(this.mapBrowserEventHandler_, MapBrowserEventType[key],\n this.handleMapBrowserEvent, this);\n }\n\n /**\n * @private\n * @type {HTMLElement|Document}\n */\n this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;\n\n /**\n * @private\n * @type {Array}\n */\n this.keyHandlerKeys_ = null;\n\n listen(this.viewport_, EventType.CONTEXTMENU, this.handleBrowserEvent, this);\n listen(this.viewport_, EventType.WHEEL, this.handleBrowserEvent, this);\n listen(this.viewport_, EventType.MOUSEWHEEL, this.handleBrowserEvent, this);\n\n /**\n * @type {module:ol/Collection}\n * @protected\n */\n this.controls = optionsInternal.controls || new Collection();\n\n /**\n * @type {module:ol/Collection}\n * @protected\n */\n this.interactions = optionsInternal.interactions || new Collection();\n\n /**\n * @type {module:ol/Collection}\n * @private\n */\n this.overlays_ = optionsInternal.overlays;\n\n /**\n * A lookup of overlays by id.\n * @private\n * @type {Object}\n */\n this.overlayIdIndex_ = {};\n\n /**\n * @type {module:ol/renderer/Map}\n * @private\n */\n this.renderer_ = this.createRenderer();\n\n /**\n * @type {function(Event)|undefined}\n * @private\n */\n this.handleResize_;\n\n /**\n * @private\n * @type {module:ol/coordinate~Coordinate}\n */\n this.focus_ = null;\n\n /**\n * @private\n * @type {!Array}\n */\n this.postRenderFunctions_ = [];\n\n /**\n * @private\n * @type {module:ol/TileQueue}\n */\n this.tileQueue_ = new TileQueue(\n this.getTilePriority.bind(this),\n this.handleTileChange_.bind(this));\n\n /**\n * Uids of features to skip at rendering time.\n * @type {Object}\n * @private\n */\n this.skippedFeatureUids_ = {};\n\n listen(\n this, getChangeEventType(MapProperty.LAYERGROUP),\n this.handleLayerGroupChanged_, this);\n listen(this, getChangeEventType(MapProperty.VIEW),\n this.handleViewChanged_, this);\n listen(this, getChangeEventType(MapProperty.SIZE),\n this.handleSizeChanged_, this);\n listen(this, getChangeEventType(MapProperty.TARGET),\n this.handleTargetChanged_, this);\n\n // setProperties will trigger the rendering of the map if the map\n // is \"defined\" already.\n this.setProperties(optionsInternal.values);\n\n this.controls.forEach(\n /**\n * @param {module:ol/control/Control} control Control.\n * @this {module:ol/PluggableMap}\n */\n (function(control) {\n control.setMap(this);\n }).bind(this));\n\n listen(this.controls, CollectionEventType.ADD,\n /**\n * @param {module:ol/Collection~CollectionEvent} event CollectionEvent.\n */\n function(event) {\n event.element.setMap(this);\n }, this);\n\n listen(this.controls, CollectionEventType.REMOVE,\n /**\n * @param {module:ol/Collection~CollectionEvent} event CollectionEvent.\n */\n function(event) {\n event.element.setMap(null);\n }, this);\n\n this.interactions.forEach(\n /**\n * @param {module:ol/interaction/Interaction} interaction Interaction.\n * @this {module:ol/PluggableMap}\n */\n (function(interaction) {\n interaction.setMap(this);\n }).bind(this));\n\n listen(this.interactions, CollectionEventType.ADD,\n /**\n * @param {module:ol/Collection~CollectionEvent} event CollectionEvent.\n */\n function(event) {\n event.element.setMap(this);\n }, this);\n\n listen(this.interactions, CollectionEventType.REMOVE,\n /**\n * @param {module:ol/Collection~CollectionEvent} event CollectionEvent.\n */\n function(event) {\n event.element.setMap(null);\n }, this);\n\n this.overlays_.forEach(this.addOverlayInternal_.bind(this));\n\n listen(this.overlays_, CollectionEventType.ADD,\n /**\n * @param {module:ol/Collection~CollectionEvent} event CollectionEvent.\n */\n function(event) {\n this.addOverlayInternal_(/** @type {module:ol/Overlay} */ (event.element));\n }, this);\n\n listen(this.overlays_, CollectionEventType.REMOVE,\n /**\n * @param {module:ol/Collection~CollectionEvent} event CollectionEvent.\n */\n function(event) {\n const overlay = /** @type {module:ol/Overlay} */ (event.element);\n const id = overlay.getId();\n if (id !== undefined) {\n delete this.overlayIdIndex_[id.toString()];\n }\n event.element.setMap(null);\n }, this);\n\n }\n\n createRenderer() {\n throw new Error('Use a map type that has a createRenderer method');\n }\n\n /**\n * Add the given control to the map.\n * @param {module:ol/control/Control} control Control.\n * @api\n */\n addControl(control) {\n this.getControls().push(control);\n }\n\n /**\n * Add the given interaction to the map.\n * @param {module:ol/interaction/Interaction} interaction Interaction to add.\n * @api\n */\n addInteraction(interaction) {\n this.getInteractions().push(interaction);\n }\n\n /**\n * Adds the given layer to the top of this map. If you want to add a layer\n * elsewhere in the stack, use `getLayers()` and the methods available on\n * {@link module:ol/Collection~Collection}.\n * @param {module:ol/layer/Base} layer Layer.\n * @api\n */\n addLayer(layer) {\n const layers = this.getLayerGroup().getLayers();\n layers.push(layer);\n }\n\n /**\n * Add the given overlay to the map.\n * @param {module:ol/Overlay} overlay Overlay.\n * @api\n */\n addOverlay(overlay) {\n this.getOverlays().push(overlay);\n }\n\n /**\n * This deals with map's overlay collection changes.\n * @param {module:ol/Overlay} overlay Overlay.\n * @private\n */\n addOverlayInternal_(overlay) {\n const id = overlay.getId();\n if (id !== undefined) {\n this.overlayIdIndex_[id.toString()] = overlay;\n }\n overlay.setMap(this);\n }\n\n /**\n *\n * @inheritDoc\n */\n disposeInternal() {\n this.mapBrowserEventHandler_.dispose();\n unlisten(this.viewport_, EventType.CONTEXTMENU, this.handleBrowserEvent, this);\n unlisten(this.viewport_, EventType.WHEEL, this.handleBrowserEvent, this);\n unlisten(this.viewport_, EventType.MOUSEWHEEL, this.handleBrowserEvent, this);\n if (this.handleResize_ !== undefined) {\n removeEventListener(EventType.RESIZE, this.handleResize_, false);\n this.handleResize_ = undefined;\n }\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n this.animationDelayKey_ = undefined;\n }\n this.setTarget(null);\n super.disposeInternal();\n }\n\n /**\n * Detect features that intersect a pixel on the viewport, and execute a\n * callback with each intersecting feature. Layers included in the detection can\n * be configured through the `layerFilter` option in `opt_options`.\n * @param {module:ol/pixel~Pixel} pixel Pixel.\n * @param {function(this: S, (module:ol/Feature|module:ol/render/Feature),\n * module:ol/layer/Layer): T} callback Feature callback. The callback will be\n * called with two arguments. The first argument is one\n * {@link module:ol/Feature feature} or\n * {@link module:ol/render/Feature render feature} at the pixel, the second is\n * the {@link module:ol/layer/Layer layer} of the feature and will be null for\n * unmanaged layers. To stop detection, callback functions can return a\n * truthy value.\n * @param {module:ol/PluggableMap~AtPixelOptions=} opt_options Optional options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template S,T\n * @api\n */\n forEachFeatureAtPixel(pixel, callback, opt_options) {\n if (!this.frameState_) {\n return;\n }\n const coordinate = this.getCoordinateFromPixel(pixel);\n opt_options = opt_options !== undefined ? opt_options : {};\n const hitTolerance = opt_options.hitTolerance !== undefined ?\n opt_options.hitTolerance * this.frameState_.pixelRatio : 0;\n const layerFilter = opt_options.layerFilter !== undefined ?\n opt_options.layerFilter : TRUE;\n return this.renderer_.forEachFeatureAtCoordinate(\n coordinate, this.frameState_, hitTolerance, callback, null,\n layerFilter, null);\n }\n\n /**\n * Get all features that intersect a pixel on the viewport.\n * @param {module:ol/pixel~Pixel} pixel Pixel.\n * @param {module:ol/PluggableMap~AtPixelOptions=} opt_options Optional options.\n * @return {Array} The detected features or\n * `null` if none were found.\n * @api\n */\n getFeaturesAtPixel(pixel, opt_options) {\n let features = null;\n this.forEachFeatureAtPixel(pixel, function(feature) {\n if (!features) {\n features = [];\n }\n features.push(feature);\n }, opt_options);\n return features;\n }\n\n /**\n * Detect layers that have a color value at a pixel on the viewport, and\n * execute a callback with each matching layer. Layers included in the\n * detection can be configured through `opt_layerFilter`.\n * @param {module:ol/pixel~Pixel} pixel Pixel.\n * @param {function(this: S, module:ol/layer/Layer, (Uint8ClampedArray|Uint8Array)): T} callback\n * Layer callback. This callback will receive two arguments: first is the\n * {@link module:ol/layer/Layer layer}, second argument is an array representing\n * [R, G, B, A] pixel values (0 - 255) and will be `null` for layer types\n * that do not currently support this argument. To stop detection, callback\n * functions can return a truthy value.\n * @param {module:ol/PluggableMap~AtPixelOptions=} opt_options Configuration options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template S,T\n * @api\n */\n forEachLayerAtPixel(pixel, callback, opt_options) {\n if (!this.frameState_) {\n return;\n }\n const options = opt_options || {};\n const hitTolerance = options.hitTolerance !== undefined ?\n opt_options.hitTolerance * this.frameState_.pixelRatio : 0;\n const layerFilter = options.layerFilter || TRUE;\n return this.renderer_.forEachLayerAtPixel(\n pixel, this.frameState_, hitTolerance, callback, null, layerFilter, null);\n }\n\n /**\n * Detect if features intersect a pixel on the viewport. Layers included in the\n * detection can be configured through `opt_layerFilter`.\n * @param {module:ol/pixel~Pixel} pixel Pixel.\n * @param {module:ol/PluggableMap~AtPixelOptions=} opt_options Optional options.\n * @return {boolean} Is there a feature at the given pixel?\n * @template U\n * @api\n */\n hasFeatureAtPixel(pixel, opt_options) {\n if (!this.frameState_) {\n return false;\n }\n const coordinate = this.getCoordinateFromPixel(pixel);\n opt_options = opt_options !== undefined ? opt_options : {};\n const layerFilter = opt_options.layerFilter !== undefined ? opt_options.layerFilter : TRUE;\n const hitTolerance = opt_options.hitTolerance !== undefined ?\n opt_options.hitTolerance * this.frameState_.pixelRatio : 0;\n return this.renderer_.hasFeatureAtCoordinate(\n coordinate, this.frameState_, hitTolerance, layerFilter, null);\n }\n\n /**\n * Returns the coordinate in view projection for a browser event.\n * @param {Event} event Event.\n * @return {module:ol/coordinate~Coordinate} Coordinate.\n * @api\n */\n getEventCoordinate(event) {\n return this.getCoordinateFromPixel(this.getEventPixel(event));\n }\n\n /**\n * Returns the map pixel position for a browser event relative to the viewport.\n * @param {Event} event Event.\n * @return {module:ol/pixel~Pixel} Pixel.\n * @api\n */\n getEventPixel(event) {\n const viewportPosition = this.viewport_.getBoundingClientRect();\n const eventPosition = event.changedTouches ? event.changedTouches[0] : event;\n return [\n eventPosition.clientX - viewportPosition.left,\n eventPosition.clientY - viewportPosition.top\n ];\n }\n\n /**\n * Get the target in which this map is rendered.\n * Note that this returns what is entered as an option or in setTarget:\n * if that was an element, it returns an element; if a string, it returns that.\n * @return {HTMLElement|string|undefined} The Element or id of the Element that the\n * map is rendered in.\n * @observable\n * @api\n */\n getTarget() {\n return /** @type {HTMLElement|string|undefined} */ (this.get(MapProperty.TARGET));\n }\n\n /**\n * Get the DOM element into which this map is rendered. In contrast to\n * `getTarget` this method always return an `Element`, or `null` if the\n * map has no target.\n * @return {HTMLElement} The element that the map is rendered in.\n * @api\n */\n getTargetElement() {\n const target = this.getTarget();\n if (target !== undefined) {\n return typeof target === 'string' ? document.getElementById(target) : target;\n } else {\n return null;\n }\n }\n\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * map view projection.\n * @param {module:ol/pixel~Pixel} pixel Pixel position in the map viewport.\n * @return {module:ol/coordinate~Coordinate} The coordinate for the pixel position.\n * @api\n */\n getCoordinateFromPixel(pixel) {\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n } else {\n return applyTransform(frameState.pixelToCoordinateTransform, pixel.slice());\n }\n }\n\n /**\n * Get the map controls. Modifying this collection changes the controls\n * associated with the map.\n * @return {module:ol/Collection} Controls.\n * @api\n */\n getControls() {\n return this.controls;\n }\n\n /**\n * Get the map overlays. Modifying this collection changes the overlays\n * associated with the map.\n * @return {module:ol/Collection} Overlays.\n * @api\n */\n getOverlays() {\n return this.overlays_;\n }\n\n /**\n * Get an overlay by its identifier (the value returned by overlay.getId()).\n * Note that the index treats string and numeric identifiers as the same. So\n * `map.getOverlayById(2)` will return an overlay with id `'2'` or `2`.\n * @param {string|number} id Overlay identifier.\n * @return {module:ol/Overlay} Overlay.\n * @api\n */\n getOverlayById(id) {\n const overlay = this.overlayIdIndex_[id.toString()];\n return overlay !== undefined ? overlay : null;\n }\n\n /**\n * Get the map interactions. Modifying this collection changes the interactions\n * associated with the map.\n *\n * Interactions are used for e.g. pan, zoom and rotate.\n * @return {module:ol/Collection} Interactions.\n * @api\n */\n getInteractions() {\n return this.interactions;\n }\n\n /**\n * Get the layergroup associated with this map.\n * @return {module:ol/layer/Group} A layer group containing the layers in this map.\n * @observable\n * @api\n */\n getLayerGroup() {\n return (\n /** @type {module:ol/layer/Group} */ (this.get(MapProperty.LAYERGROUP))\n );\n }\n\n /**\n * Get the collection of layers associated with this map.\n * @return {!module:ol/Collection} Layers.\n * @api\n */\n getLayers() {\n const layers = this.getLayerGroup().getLayers();\n return layers;\n }\n\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the map view\n * projection and returns the corresponding pixel.\n * @param {module:ol/coordinate~Coordinate} coordinate A map coordinate.\n * @return {module:ol/pixel~Pixel} A pixel position in the map viewport.\n * @api\n */\n getPixelFromCoordinate(coordinate) {\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n } else {\n return applyTransform(frameState.coordinateToPixelTransform, coordinate.slice(0, 2));\n }\n }\n\n /**\n * Get the map renderer.\n * @return {module:ol/renderer/Map} Renderer\n */\n getRenderer() {\n return this.renderer_;\n }\n\n /**\n * Get the size of this map.\n * @return {module:ol/size~Size|undefined} The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n getSize() {\n return (\n /** @type {module:ol/size~Size|undefined} */ (this.get(MapProperty.SIZE))\n );\n }\n\n /**\n * Get the view associated with this map. A view manages properties such as\n * center and resolution.\n * @return {module:ol/View} The view that controls this map.\n * @observable\n * @api\n */\n getView() {\n return (\n /** @type {module:ol/View} */ (this.get(MapProperty.VIEW))\n );\n }\n\n /**\n * Get the element that serves as the map viewport.\n * @return {HTMLElement} Viewport.\n * @api\n */\n getViewport() {\n return this.viewport_;\n }\n\n /**\n * Get the element that serves as the container for overlays. Elements added to\n * this container will let mousedown and touchstart events through to the map,\n * so clicks and gestures on an overlay will trigger {@link module:ol/MapBrowserEvent~MapBrowserEvent}\n * events.\n * @return {!HTMLElement} The map's overlay container.\n */\n getOverlayContainer() {\n return this.overlayContainer_;\n }\n\n /**\n * Get the element that serves as a container for overlays that don't allow\n * event propagation. Elements added to this container won't let mousedown and\n * touchstart events through to the map, so clicks and gestures on an overlay\n * don't trigger any {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n * @return {!HTMLElement} The map's overlay container that stops events.\n */\n getOverlayContainerStopEvent() {\n return this.overlayContainerStopEvent_;\n }\n\n /**\n * @param {module:ol/Tile} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {module:ol/coordinate~Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\n getTilePriority(tile, tileSourceKey, tileCenter, tileResolution) {\n // Filter out tiles at higher zoom levels than the current zoom level, or that\n // are outside the visible extent.\n const frameState = this.frameState_;\n if (!frameState || !(tileSourceKey in frameState.wantedTiles)) {\n return DROP;\n }\n if (!frameState.wantedTiles[tileSourceKey][tile.getKey()]) {\n return DROP;\n }\n // Prioritize the highest zoom level tiles closest to the focus.\n // Tiles at higher zoom levels are prioritized using Math.log(tileResolution).\n // Within a zoom level, tiles are prioritized by the distance in pixels\n // between the center of the tile and the focus. The factor of 65536 means\n // that the prioritization should behave as desired for tiles up to\n // 65536 * Math.log(2) = 45426 pixels from the focus.\n const deltaX = tileCenter[0] - frameState.focus[0];\n const deltaY = tileCenter[1] - frameState.focus[1];\n return 65536 * Math.log(tileResolution) +\n Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution;\n }\n\n /**\n * @param {Event} browserEvent Browser event.\n * @param {string=} opt_type Type.\n */\n handleBrowserEvent(browserEvent, opt_type) {\n const type = opt_type || browserEvent.type;\n const mapBrowserEvent = new MapBrowserEvent(type, this, browserEvent);\n this.handleMapBrowserEvent(mapBrowserEvent);\n }\n\n /**\n * @param {module:ol/MapBrowserEvent} mapBrowserEvent The event to handle.\n */\n handleMapBrowserEvent(mapBrowserEvent) {\n if (!this.frameState_) {\n // With no view defined, we cannot translate pixels into geographical\n // coordinates so interactions cannot be used.\n return;\n }\n this.focus_ = mapBrowserEvent.coordinate;\n mapBrowserEvent.frameState = this.frameState_;\n const interactionsArray = this.getInteractions().getArray();\n if (this.dispatchEvent(mapBrowserEvent) !== false) {\n for (let i = interactionsArray.length - 1; i >= 0; i--) {\n const interaction = interactionsArray[i];\n if (!interaction.getActive()) {\n continue;\n }\n const cont = interaction.handleEvent(mapBrowserEvent);\n if (!cont) {\n break;\n }\n }\n }\n }\n\n /**\n * @protected\n */\n handlePostRender() {\n\n const frameState = this.frameState_;\n\n // Manage the tile queue\n // Image loads are expensive and a limited resource, so try to use them\n // efficiently:\n // * When the view is static we allow a large number of parallel tile loads\n // to complete the frame as quickly as possible.\n // * When animating or interacting, image loads can cause janks, so we reduce\n // the maximum number of loads per frame and limit the number of parallel\n // tile loads to remain reactive to view changes and to reduce the chance of\n // loading tiles that will quickly disappear from view.\n const tileQueue = this.tileQueue_;\n if (!tileQueue.isEmpty()) {\n let maxTotalLoading = this.maxTilesLoading_;\n let maxNewLoads = maxTotalLoading;\n if (frameState) {\n const hints = frameState.viewHints;\n if (hints[ViewHint.ANIMATING]) {\n maxTotalLoading = this.loadTilesWhileAnimating_ ? 8 : 0;\n maxNewLoads = 2;\n }\n if (hints[ViewHint.INTERACTING]) {\n maxTotalLoading = this.loadTilesWhileInteracting_ ? 8 : 0;\n maxNewLoads = 2;\n }\n }\n if (tileQueue.getTilesLoading() < maxTotalLoading) {\n tileQueue.reprioritize(); // FIXME only call if view has changed\n tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads);\n }\n }\n if (frameState && this.hasListener(MapEventType.RENDERCOMPLETE) && !frameState.animate &&\n !this.tileQueue_.getTilesLoading() && !getLoading(this.getLayers().getArray())) {\n this.renderer_.dispatchRenderEvent(RenderEventType.RENDERCOMPLETE, frameState);\n }\n\n const postRenderFunctions = this.postRenderFunctions_;\n for (let i = 0, ii = postRenderFunctions.length; i < ii; ++i) {\n postRenderFunctions[i](this, frameState);\n }\n postRenderFunctions.length = 0;\n }\n\n /**\n * @private\n */\n handleSizeChanged_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleTargetChanged_() {\n // target may be undefined, null, a string or an Element.\n // If it's a string we convert it to an Element before proceeding.\n // If it's not now an Element we remove the viewport from the DOM.\n // If it's an Element we append the viewport element to it.\n\n let targetElement;\n if (this.getTarget()) {\n targetElement = this.getTargetElement();\n }\n\n if (this.keyHandlerKeys_) {\n for (let i = 0, ii = this.keyHandlerKeys_.length; i < ii; ++i) {\n unlistenByKey(this.keyHandlerKeys_[i]);\n }\n this.keyHandlerKeys_ = null;\n }\n\n if (!targetElement) {\n this.renderer_.removeLayerRenderers();\n removeNode(this.viewport_);\n if (this.handleResize_ !== undefined) {\n removeEventListener(EventType.RESIZE, this.handleResize_, false);\n this.handleResize_ = undefined;\n }\n } else {\n targetElement.appendChild(this.viewport_);\n\n const keyboardEventTarget = !this.keyboardEventTarget_ ?\n targetElement : this.keyboardEventTarget_;\n this.keyHandlerKeys_ = [\n listen(keyboardEventTarget, EventType.KEYDOWN, this.handleBrowserEvent, this),\n listen(keyboardEventTarget, EventType.KEYPRESS, this.handleBrowserEvent, this)\n ];\n\n if (!this.handleResize_) {\n this.handleResize_ = this.updateSize.bind(this);\n addEventListener(EventType.RESIZE, this.handleResize_, false);\n }\n }\n\n this.updateSize();\n // updateSize calls setSize, so no need to call this.render\n // ourselves here.\n }\n\n /**\n * @private\n */\n handleTileChange_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleViewPropertyChanged_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleViewChanged_() {\n if (this.viewPropertyListenerKey_) {\n unlistenByKey(this.viewPropertyListenerKey_);\n this.viewPropertyListenerKey_ = null;\n }\n if (this.viewChangeListenerKey_) {\n unlistenByKey(this.viewChangeListenerKey_);\n this.viewChangeListenerKey_ = null;\n }\n const view = this.getView();\n if (view) {\n this.viewport_.setAttribute('data-view', getUid(view));\n this.viewPropertyListenerKey_ = listen(\n view, ObjectEventType.PROPERTYCHANGE,\n this.handleViewPropertyChanged_, this);\n this.viewChangeListenerKey_ = listen(\n view, EventType.CHANGE,\n this.handleViewPropertyChanged_, this);\n }\n this.render();\n }\n\n /**\n * @private\n */\n handleLayerGroupChanged_() {\n if (this.layerGroupPropertyListenerKeys_) {\n this.layerGroupPropertyListenerKeys_.forEach(unlistenByKey);\n this.layerGroupPropertyListenerKeys_ = null;\n }\n const layerGroup = this.getLayerGroup();\n if (layerGroup) {\n this.layerGroupPropertyListenerKeys_ = [\n listen(\n layerGroup, ObjectEventType.PROPERTYCHANGE,\n this.render, this),\n listen(\n layerGroup, EventType.CHANGE,\n this.render, this)\n ];\n }\n this.render();\n }\n\n /**\n * @return {boolean} Is rendered.\n */\n isRendered() {\n return !!this.frameState_;\n }\n\n /**\n * Requests an immediate render in a synchronous manner.\n * @api\n */\n renderSync() {\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n }\n this.animationDelay_();\n }\n\n /**\n * Request a map rendering (at the next animation frame).\n * @api\n */\n render() {\n if (this.animationDelayKey_ === undefined) {\n this.animationDelayKey_ = requestAnimationFrame(this.animationDelay_);\n }\n }\n\n /**\n * Remove the given control from the map.\n * @param {module:ol/control/Control} control Control.\n * @return {module:ol/control/Control|undefined} The removed control (or undefined\n * if the control was not found).\n * @api\n */\n removeControl(control) {\n return this.getControls().remove(control);\n }\n\n /**\n * Remove the given interaction from the map.\n * @param {module:ol/interaction/Interaction} interaction Interaction to remove.\n * @return {module:ol/interaction/Interaction|undefined} The removed interaction (or\n * undefined if the interaction was not found).\n * @api\n */\n removeInteraction(interaction) {\n return this.getInteractions().remove(interaction);\n }\n\n /**\n * Removes the given layer from the map.\n * @param {module:ol/layer/Base} layer Layer.\n * @return {module:ol/layer/Base|undefined} The removed layer (or undefined if the\n * layer was not found).\n * @api\n */\n removeLayer(layer) {\n const layers = this.getLayerGroup().getLayers();\n return layers.remove(layer);\n }\n\n /**\n * Remove the given overlay from the map.\n * @param {module:ol/Overlay} overlay Overlay.\n * @return {module:ol/Overlay|undefined} The removed overlay (or undefined\n * if the overlay was not found).\n * @api\n */\n removeOverlay(overlay) {\n return this.getOverlays().remove(overlay);\n }\n\n /**\n * @param {number} time Time.\n * @private\n */\n renderFrame_(time) {\n let viewState;\n\n const size = this.getSize();\n const view = this.getView();\n const extent = createEmpty();\n const previousFrameState = this.frameState_;\n /** @type {?module:ol/PluggableMap~FrameState} */\n let frameState = null;\n if (size !== undefined && hasArea(size) && view && view.isDef()) {\n const viewHints = view.getHints(this.frameState_ ? this.frameState_.viewHints : undefined);\n const layerStatesArray = this.getLayerGroup().getLayerStatesArray();\n const layerStates = {};\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n layerStates[getUid(layerStatesArray[i].layer)] = layerStatesArray[i];\n }\n viewState = view.getState(this.pixelRatio_);\n frameState = /** @type {module:ol/PluggableMap~FrameState} */ ({\n animate: false,\n coordinateToPixelTransform: this.coordinateToPixelTransform_,\n extent: extent,\n focus: this.focus_ ? this.focus_ : viewState.center,\n index: this.frameIndex_++,\n layerStates: layerStates,\n layerStatesArray: layerStatesArray,\n pixelRatio: this.pixelRatio_,\n pixelToCoordinateTransform: this.pixelToCoordinateTransform_,\n postRenderFunctions: [],\n size: size,\n skippedFeatureUids: this.skippedFeatureUids_,\n tileQueue: this.tileQueue_,\n time: time,\n usedTiles: {},\n viewState: viewState,\n viewHints: viewHints,\n wantedTiles: {}\n });\n }\n\n if (frameState) {\n frameState.extent = getForViewAndSize(viewState.center,\n viewState.resolution, viewState.rotation, frameState.size, extent);\n }\n\n this.frameState_ = frameState;\n this.renderer_.renderFrame(frameState);\n\n if (frameState) {\n if (frameState.animate) {\n this.render();\n }\n Array.prototype.push.apply(this.postRenderFunctions_, frameState.postRenderFunctions);\n\n if (previousFrameState) {\n const moveStart = !this.previousExtent_ ||\n (!isEmpty(this.previousExtent_) &&\n !equals(frameState.extent, this.previousExtent_));\n if (moveStart) {\n this.dispatchEvent(\n new MapEvent(MapEventType.MOVESTART, this, previousFrameState));\n this.previousExtent_ = createOrUpdateEmpty(this.previousExtent_);\n }\n }\n\n const idle = this.previousExtent_ &&\n !frameState.viewHints[ViewHint.ANIMATING] &&\n !frameState.viewHints[ViewHint.INTERACTING] &&\n !equals(frameState.extent, this.previousExtent_);\n\n if (idle) {\n this.dispatchEvent(new MapEvent(MapEventType.MOVEEND, this, frameState));\n clone(frameState.extent, this.previousExtent_);\n }\n }\n\n this.dispatchEvent(new MapEvent(MapEventType.POSTRENDER, this, frameState));\n\n setTimeout(this.handlePostRender.bind(this), 0);\n\n }\n\n /**\n * Sets the layergroup of this map.\n * @param {module:ol/layer/Group} layerGroup A layer group containing the layers in this map.\n * @observable\n * @api\n */\n setLayerGroup(layerGroup) {\n this.set(MapProperty.LAYERGROUP, layerGroup);\n }\n\n /**\n * Set the size of this map.\n * @param {module:ol/size~Size|undefined} size The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n setSize(size) {\n this.set(MapProperty.SIZE, size);\n }\n\n /**\n * Set the target element to render this map into.\n * @param {HTMLElement|string|undefined} target The Element or id of the Element\n * that the map is rendered in.\n * @observable\n * @api\n */\n setTarget(target) {\n this.set(MapProperty.TARGET, target);\n }\n\n /**\n * Set the view for this map.\n * @param {module:ol/View} view The view that controls this map.\n * @observable\n * @api\n */\n setView(view) {\n this.set(MapProperty.VIEW, view);\n }\n\n /**\n * @param {module:ol/Feature} feature Feature.\n */\n skipFeature(feature) {\n const featureUid = getUid(feature).toString();\n this.skippedFeatureUids_[featureUid] = true;\n this.render();\n }\n\n /**\n * Force a recalculation of the map viewport size. This should be called when\n * third-party code changes the size of the map viewport.\n * @api\n */\n updateSize() {\n const targetElement = this.getTargetElement();\n\n if (!targetElement) {\n this.setSize(undefined);\n } else {\n const computedStyle = getComputedStyle(targetElement);\n this.setSize([\n targetElement.offsetWidth -\n parseFloat(computedStyle['borderLeftWidth']) -\n parseFloat(computedStyle['paddingLeft']) -\n parseFloat(computedStyle['paddingRight']) -\n parseFloat(computedStyle['borderRightWidth']),\n targetElement.offsetHeight -\n parseFloat(computedStyle['borderTopWidth']) -\n parseFloat(computedStyle['paddingTop']) -\n parseFloat(computedStyle['paddingBottom']) -\n parseFloat(computedStyle['borderBottomWidth'])\n ]);\n }\n }\n\n /**\n * @param {module:ol/Feature} feature Feature.\n */\n unskipFeature(feature) {\n const featureUid = getUid(feature).toString();\n delete this.skippedFeatureUids_[featureUid];\n this.render();\n }\n}\n\n\n/**\n * @param {MapOptions} options Map options.\n * @return {module:ol/PluggableMap~MapOptionsInternal} Internal map options.\n */\nfunction createOptionsInternal(options) {\n\n /**\n * @type {HTMLElement|Document}\n */\n let keyboardEventTarget = null;\n if (options.keyboardEventTarget !== undefined) {\n keyboardEventTarget = typeof options.keyboardEventTarget === 'string' ?\n document.getElementById(options.keyboardEventTarget) :\n options.keyboardEventTarget;\n }\n\n /**\n * @type {Object}\n */\n const values = {};\n\n const layerGroup = (options.layers instanceof LayerGroup) ?\n options.layers : new LayerGroup({layers: options.layers});\n values[MapProperty.LAYERGROUP] = layerGroup;\n\n values[MapProperty.TARGET] = options.target;\n\n values[MapProperty.VIEW] = options.view !== undefined ?\n options.view : new View();\n\n let controls;\n if (options.controls !== undefined) {\n if (Array.isArray(options.controls)) {\n controls = new Collection(options.controls.slice());\n } else {\n assert(options.controls instanceof Collection,\n 47); // Expected `controls` to be an array or an `module:ol/Collection~Collection`\n controls = options.controls;\n }\n }\n\n let interactions;\n if (options.interactions !== undefined) {\n if (Array.isArray(options.interactions)) {\n interactions = new Collection(options.interactions.slice());\n } else {\n assert(options.interactions instanceof Collection,\n 48); // Expected `interactions` to be an array or an `module:ol/Collection~Collection`\n interactions = options.interactions;\n }\n }\n\n let overlays;\n if (options.overlays !== undefined) {\n if (Array.isArray(options.overlays)) {\n overlays = new Collection(options.overlays.slice());\n } else {\n assert(options.overlays instanceof Collection,\n 49); // Expected `overlays` to be an array or an `module:ol/Collection~Collection`\n overlays = options.overlays;\n }\n } else {\n overlays = new Collection();\n }\n\n return {\n controls: controls,\n interactions: interactions,\n keyboardEventTarget: keyboardEventTarget,\n overlays: overlays,\n values: values\n };\n\n}\nexport default PluggableMap;\n\n/**\n * @param {Array} layers Layers.\n * @return {boolean} Layers have sources that are still loading.\n */\nfunction getLoading(layers) {\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n const layer = layers[i];\n if (layer instanceof LayerGroup) {\n return getLoading(layer.getLayers().getArray());\n }\n const source = layers[i].getSource();\n if (source && source.loading) {\n return true;\n }\n }\n return false;\n}\n","/**\n * @module ol/control/Control\n */\nimport {VOID} from '../functions.js';\nimport MapEventType from '../MapEventType.js';\nimport BaseObject from '../Object.js';\nimport {removeNode} from '../dom.js';\nimport {listen, unlistenByKey} from '../events.js';\n\n\n/**\n * @typedef {Object} Options\n * @property {HTMLElement} [element] The element is the control's\n * container element. This only needs to be specified if you're developing\n * a custom control.\n * @property {function(module:ol/MapEvent)} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {HTMLElement|string} [target] Specify a target if you want\n * the control to be rendered outside of the map's viewport.\n */\n\n\n/**\n * @classdesc\n * A control is a visible widget with a DOM element in a fixed position on the\n * screen. They can involve user input (buttons), or be informational only;\n * the position is determined using CSS. By default these are placed in the\n * container with CSS class name `ol-overlaycontainer-stopevent`, but can use\n * any outside DOM element.\n *\n * This is the base class for controls. You can use it for simple custom\n * controls by creating the element with listeners, creating an instance:\n * ```js\n * var myControl = new Control({element: myElement});\n * ```\n * and then adding this to the map.\n *\n * The main advantage of having this as a control rather than a simple separate\n * DOM element is that preventing propagation is handled for you. Controls\n * will also be objects in a {@link module:ol/Collection~Collection}, so you can use their methods.\n *\n * You can also extend this base for your own control class. See\n * examples/custom-controls for an example of how to do this.\n *\n * @api\n */\nclass Control extends BaseObject {\n\n /**\n * @param {module:ol/control/Control~Options} options Control options.\n */\n constructor(options) {\n\n super();\n\n /**\n * @protected\n * @type {HTMLElement}\n */\n this.element = options.element ? options.element : null;\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.target_ = null;\n\n /**\n * @private\n * @type {module:ol/PluggableMap}\n */\n this.map_ = null;\n\n /**\n * @protected\n * @type {!Array}\n */\n this.listenerKeys = [];\n\n /**\n * @type {function(module:ol/MapEvent)}\n */\n this.render = options.render ? options.render : VOID;\n\n if (options.target) {\n this.setTarget(options.target);\n }\n\n }\n\n /**\n * @inheritDoc\n */\n disposeInternal() {\n removeNode(this.element);\n super.disposeInternal();\n }\n\n /**\n * Get the map associated with this control.\n * @return {module:ol/PluggableMap} Map.\n * @api\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Remove the control from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {module:ol/PluggableMap} map Map.\n * @api\n */\n setMap(map) {\n if (this.map_) {\n removeNode(this.element);\n }\n for (let i = 0, ii = this.listenerKeys.length; i < ii; ++i) {\n unlistenByKey(this.listenerKeys[i]);\n }\n this.listenerKeys.length = 0;\n this.map_ = map;\n if (this.map_) {\n const target = this.target_ ?\n this.target_ : map.getOverlayContainerStopEvent();\n target.appendChild(this.element);\n if (this.render !== VOID) {\n this.listenerKeys.push(listen(map,\n MapEventType.POSTRENDER, this.render, this));\n }\n map.render();\n }\n }\n\n /**\n * This function is used to set a target element for the control. It has no\n * effect if it is called after the control has been added to the map (i.e.\n * after `setMap` is called on the control). If no `target` is set in the\n * options passed to the control constructor and if `setTarget` is not called\n * then the control is added to the map's overlay container.\n * @param {HTMLElement|string} target Target.\n * @api\n */\n setTarget(target) {\n this.target_ = typeof target === 'string' ?\n document.getElementById(target) :\n target;\n }\n}\n\n\nexport default Control;\n","/**\n * @module ol/control/Attribution\n */\nimport {equals} from '../array.js';\nimport Control from '../control/Control.js';\nimport {CLASS_CONTROL, CLASS_UNSELECTABLE, CLASS_COLLAPSED} from '../css.js';\nimport {removeChildren, replaceNode} from '../dom.js';\nimport {listen} from '../events.js';\nimport EventType from '../events/EventType.js';\nimport {visibleAtResolution} from '../layer/Layer.js';\n\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-attribution'] CSS class name.\n * @property {HTMLElement|string} [target] Specify a target if you\n * want the control to be rendered outside of the map's\n * viewport.\n * @property {boolean} [collapsible=true] Specify if attributions can\n * be collapsed. If you use an OSM source, should be set to `false` — see\n * {@link https://www.openstreetmap.org/copyright OSM Copyright} —\n * @property {boolean} [collapsed=true] Specify if attributions should\n * be collapsed at startup.\n * @property {string} [tipLabel='Attributions'] Text label to use for the button tip.\n * @property {string} [label='i'] Text label to use for the\n * collapsed attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string|HTMLElement} [collapseLabel='»'] Text label to use\n * for the expanded attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {function(module:ol/MapEvent)} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n */\n\n\n/**\n * @classdesc\n * Control to show all the attributions associated with the layer sources\n * in the map. This control is one of the default controls included in maps.\n * By default it will show in the bottom right portion of the map, but this can\n * be changed by using a css selector for `.ol-attribution`.\n *\n * @api\n */\nclass Attribution extends Control {\n\n /**\n * @param {module:ol/control/Attribution~Options=} opt_options Attribution options.\n */\n constructor(opt_options) {\n\n const options = opt_options ? opt_options : {};\n\n super({\n element: document.createElement('div'),\n render: options.render || render,\n target: options.target\n });\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.ulElement_ = document.createElement('ul');\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsed_ = options.collapsed !== undefined ? options.collapsed : true;\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsible_ = options.collapsible !== undefined ?\n options.collapsible : true;\n\n if (!this.collapsible_) {\n this.collapsed_ = false;\n }\n\n const className = options.className !== undefined ? options.className : 'ol-attribution';\n\n const tipLabel = options.tipLabel !== undefined ? options.tipLabel : 'Attributions';\n\n const collapseLabel = options.collapseLabel !== undefined ? options.collapseLabel : '\\u00BB';\n\n if (typeof collapseLabel === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.collapseLabel_ = document.createElement('span');\n this.collapseLabel_.textContent = collapseLabel;\n } else {\n this.collapseLabel_ = collapseLabel;\n }\n\n const label = options.label !== undefined ? options.label : 'i';\n\n if (typeof label === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.label_ = document.createElement('span');\n this.label_.textContent = label;\n } else {\n this.label_ = label;\n }\n\n\n const activeLabel = (this.collapsible_ && !this.collapsed_) ?\n this.collapseLabel_ : this.label_;\n const button = document.createElement('button');\n button.setAttribute('type', 'button');\n button.title = tipLabel;\n button.appendChild(activeLabel);\n\n listen(button, EventType.CLICK, this.handleClick_, this);\n\n const cssClasses = className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL +\n (this.collapsed_ && this.collapsible_ ? ' ' + CLASS_COLLAPSED : '') +\n (this.collapsible_ ? '' : ' ol-uncollapsible');\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(this.ulElement_);\n element.appendChild(button);\n\n /**\n * A list of currently rendered resolutions.\n * @type {Array}\n * @private\n */\n this.renderedAttributions_ = [];\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderedVisible_ = true;\n\n }\n\n /**\n * Get a list of visible attributions.\n * @param {module:ol/PluggableMap~FrameState} frameState Frame state.\n * @return {Array} Attributions.\n * @private\n */\n getSourceAttributions_(frameState) {\n /**\n * Used to determine if an attribution already exists.\n * @type {!Object}\n */\n const lookup = {};\n\n /**\n * A list of visible attributions.\n * @type {Array}\n */\n const visibleAttributions = [];\n\n const layerStatesArray = frameState.layerStatesArray;\n const resolution = frameState.viewState.resolution;\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const layerState = layerStatesArray[i];\n if (!visibleAtResolution(layerState, resolution)) {\n continue;\n }\n\n const source = layerState.layer.getSource();\n if (!source) {\n continue;\n }\n\n const attributionGetter = source.getAttributions();\n if (!attributionGetter) {\n continue;\n }\n\n const attributions = attributionGetter(frameState);\n if (!attributions) {\n continue;\n }\n\n if (Array.isArray(attributions)) {\n for (let j = 0, jj = attributions.length; j < jj; ++j) {\n if (!(attributions[j] in lookup)) {\n visibleAttributions.push(attributions[j]);\n lookup[attributions[j]] = true;\n }\n }\n } else {\n if (!(attributions in lookup)) {\n visibleAttributions.push(attributions);\n lookup[attributions] = true;\n }\n }\n }\n return visibleAttributions;\n }\n\n /**\n * @private\n * @param {?module:ol/PluggableMap~FrameState} frameState Frame state.\n */\n updateElement_(frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n\n const attributions = this.getSourceAttributions_(frameState);\n\n const visible = attributions.length > 0;\n if (this.renderedVisible_ != visible) {\n this.element.style.display = visible ? '' : 'none';\n this.renderedVisible_ = visible;\n }\n\n if (equals(attributions, this.renderedAttributions_)) {\n return;\n }\n\n removeChildren(this.ulElement_);\n\n // append the attributions\n for (let i = 0, ii = attributions.length; i < ii; ++i) {\n const element = document.createElement('li');\n element.innerHTML = attributions[i];\n this.ulElement_.appendChild(element);\n }\n\n this.renderedAttributions_ = attributions;\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n this.handleToggle_();\n }\n\n /**\n * @private\n */\n handleToggle_() {\n this.element.classList.toggle(CLASS_COLLAPSED);\n if (this.collapsed_) {\n replaceNode(this.collapseLabel_, this.label_);\n } else {\n replaceNode(this.label_, this.collapseLabel_);\n }\n this.collapsed_ = !this.collapsed_;\n }\n\n /**\n * Return `true` if the attribution is collapsible, `false` otherwise.\n * @return {boolean} True if the widget is collapsible.\n * @api\n */\n getCollapsible() {\n return this.collapsible_;\n }\n\n /**\n * Set whether the attribution should be collapsible.\n * @param {boolean} collapsible True if the widget is collapsible.\n * @api\n */\n setCollapsible(collapsible) {\n if (this.collapsible_ === collapsible) {\n return;\n }\n this.collapsible_ = collapsible;\n this.element.classList.toggle('ol-uncollapsible');\n if (!collapsible && this.collapsed_) {\n this.handleToggle_();\n }\n }\n\n /**\n * Collapse or expand the attribution according to the passed parameter. Will\n * not do anything if the attribution isn't collapsible or if the current\n * collapsed state is already the one requested.\n * @param {boolean} collapsed True if the widget is collapsed.\n * @api\n */\n setCollapsed(collapsed) {\n if (!this.collapsible_ || this.collapsed_ === collapsed) {\n return;\n }\n this.handleToggle_();\n }\n\n /**\n * Return `true` when the attribution is currently collapsed or `false`\n * otherwise.\n * @return {boolean} True if the widget is collapsed.\n * @api\n */\n getCollapsed() {\n return this.collapsed_;\n }\n}\n\n\n/**\n * Update the attribution element.\n * @param {module:ol/MapEvent} mapEvent Map event.\n * @this {module:ol/control/Attribution}\n * @api\n */\nexport function render(mapEvent) {\n this.updateElement_(mapEvent.frameState);\n}\n\n\nexport default Attribution;\n","/**\n * @module ol/control/Rotate\n */\nimport Control from '../control/Control.js';\nimport {CLASS_CONTROL, CLASS_HIDDEN, CLASS_UNSELECTABLE} from '../css.js';\nimport {easeOut} from '../easing.js';\nimport {listen} from '../events.js';\nimport EventType from '../events/EventType.js';\n\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-rotate'] CSS class name.\n * @property {string|HTMLElement} [label='⇧'] Text label to use for the rotate button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [tipLabel='Reset rotation'] Text label to use for the rotate tip.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {boolean} [autoHide=true] Hide the control when rotation is 0.\n * @property {function(module:ol/MapEvent)} [render] Function called when the control should\n * be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {function()} [resetNorth] Function called when the control is clicked.\n * This will override the default `resetNorth`.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n\n/**\n * @classdesc\n * A button control to reset rotation to 0.\n * To style this control use css selector `.ol-rotate`. A `.ol-hidden` css\n * selector is added to the button when the rotation is 0.\n *\n * @api\n */\nclass Rotate extends Control {\n\n /**\n * @param {module:ol/control/Rotate~Options=} opt_options Rotate options.\n */\n constructor(opt_options) {\n\n const options = opt_options ? opt_options : {};\n\n super({\n element: document.createElement('div'),\n render: options.render || render,\n target: options.target\n });\n\n const className = options.className !== undefined ? options.className : 'ol-rotate';\n\n const label = options.label !== undefined ? options.label : '\\u21E7';\n\n /**\n * @type {HTMLElement}\n * @private\n */\n this.label_ = null;\n\n if (typeof label === 'string') {\n this.label_ = document.createElement('span');\n this.label_.className = 'ol-compass';\n this.label_.textContent = label;\n } else {\n this.label_ = label;\n this.label_.classList.add('ol-compass');\n }\n\n const tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';\n\n const button = document.createElement('button');\n button.className = className + '-reset';\n button.setAttribute('type', 'button');\n button.title = tipLabel;\n button.appendChild(this.label_);\n\n listen(button, EventType.CLICK, this.handleClick_, this);\n\n const cssClasses = className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(button);\n\n this.callResetNorth_ = options.resetNorth ? options.resetNorth : undefined;\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n /**\n * @type {boolean}\n * @private\n */\n this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.rotation_ = undefined;\n\n if (this.autoHide_) {\n this.element.classList.add(CLASS_HIDDEN);\n }\n\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n if (this.callResetNorth_ !== undefined) {\n this.callResetNorth_();\n } else {\n this.resetNorth_();\n }\n }\n\n /**\n * @private\n */\n resetNorth_() {\n const map = this.getMap();\n const view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n if (view.getRotation() !== undefined) {\n if (this.duration_ > 0) {\n view.animate({\n rotation: 0,\n duration: this.duration_,\n easing: easeOut\n });\n } else {\n view.setRotation(0);\n }\n }\n }\n}\n\n\n/**\n * Update the rotate control element.\n * @param {module:ol/MapEvent} mapEvent Map event.\n * @this {module:ol/control/Rotate}\n * @api\n */\nexport function render(mapEvent) {\n const frameState = mapEvent.frameState;\n if (!frameState) {\n return;\n }\n const rotation = frameState.viewState.rotation;\n if (rotation != this.rotation_) {\n const transform = 'rotate(' + rotation + 'rad)';\n if (this.autoHide_) {\n const contains = this.element.classList.contains(CLASS_HIDDEN);\n if (!contains && rotation === 0) {\n this.element.classList.add(CLASS_HIDDEN);\n } else if (contains && rotation !== 0) {\n this.element.classList.remove(CLASS_HIDDEN);\n }\n }\n this.label_.style.msTransform = transform;\n this.label_.style.webkitTransform = transform;\n this.label_.style.transform = transform;\n }\n this.rotation_ = rotation;\n}\n\nexport default Rotate;\n","/**\n * @module ol/control/Zoom\n */\nimport {listen} from '../events.js';\nimport EventType from '../events/EventType.js';\nimport Control from '../control/Control.js';\nimport {CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {easeOut} from '../easing.js';\n\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {string} [className='ol-zoom'] CSS class name.\n * @property {string|HTMLElement} [zoomInLabel='+'] Text label to use for the zoom-in\n * button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string|HTMLElement} [zoomOutLabel='-'] Text label to use for the zoom-out button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [zoomInTipLabel='Zoom in'] Text label to use for the button tip.\n * @property {string} [zoomOutTipLabel='Zoom out'] Text label to use for the button tip.\n * @property {number} [delta=1] The zoom delta applied on each click.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n\n/**\n * @classdesc\n * A control with 2 buttons, one for zoom in and one for zoom out.\n * This control is one of the default controls of a map. To style this control\n * use css selectors `.ol-zoom-in` and `.ol-zoom-out`.\n *\n * @api\n */\nclass Zoom extends Control {\n\n /**\n * @param {module:ol/control/Zoom~Options=} opt_options Zoom options.\n */\n constructor(opt_options) {\n\n const options = opt_options ? opt_options : {};\n\n super({\n element: document.createElement('div'),\n target: options.target\n });\n\n const className = options.className !== undefined ? options.className : 'ol-zoom';\n\n const delta = options.delta !== undefined ? options.delta : 1;\n\n const zoomInLabel = options.zoomInLabel !== undefined ? options.zoomInLabel : '+';\n const zoomOutLabel = options.zoomOutLabel !== undefined ? options.zoomOutLabel : '\\u2212';\n\n const zoomInTipLabel = options.zoomInTipLabel !== undefined ?\n options.zoomInTipLabel : 'Zoom in';\n const zoomOutTipLabel = options.zoomOutTipLabel !== undefined ?\n options.zoomOutTipLabel : 'Zoom out';\n\n const inElement = document.createElement('button');\n inElement.className = className + '-in';\n inElement.setAttribute('type', 'button');\n inElement.title = zoomInTipLabel;\n inElement.appendChild(\n typeof zoomInLabel === 'string' ? document.createTextNode(zoomInLabel) : zoomInLabel\n );\n\n listen(inElement, EventType.CLICK, this.handleClick_.bind(this, delta));\n\n const outElement = document.createElement('button');\n outElement.className = className + '-out';\n outElement.setAttribute('type', 'button');\n outElement.title = zoomOutTipLabel;\n outElement.appendChild(\n typeof zoomOutLabel === 'string' ? document.createTextNode(zoomOutLabel) : zoomOutLabel\n );\n\n listen(outElement, EventType.CLICK, this.handleClick_.bind(this, -delta));\n\n const cssClasses = className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(inElement);\n element.appendChild(outElement);\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n }\n\n /**\n * @param {number} delta Zoom delta.\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(delta, event) {\n event.preventDefault();\n this.zoomByDelta_(delta);\n }\n\n /**\n * @param {number} delta Zoom delta.\n * @private\n */\n zoomByDelta_(delta) {\n const map = this.getMap();\n const view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n const currentResolution = view.getResolution();\n if (currentResolution) {\n const newResolution = view.constrainResolution(currentResolution, delta);\n if (this.duration_ > 0) {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n resolution: newResolution,\n duration: this.duration_,\n easing: easeOut\n });\n } else {\n view.setResolution(newResolution);\n }\n }\n }\n}\n\n\nexport default Zoom;\n","/**\n * @module ol/Kinetic\n */\n\n/**\n * @classdesc\n * Implementation of inertial deceleration for map movement.\n *\n * @api\n */\nclass Kinetic {\n\n /**\n * @param {number} decay Rate of decay (must be negative).\n * @param {number} minVelocity Minimum velocity (pixels/millisecond).\n * @param {number} delay Delay to consider to calculate the kinetic\n * initial values (milliseconds).\n */\n constructor(decay, minVelocity, delay) {\n\n /**\n * @private\n * @type {number}\n */\n this.decay_ = decay;\n\n /**\n * @private\n * @type {number}\n */\n this.minVelocity_ = minVelocity;\n\n /**\n * @private\n * @type {number}\n */\n this.delay_ = delay;\n\n /**\n * @private\n * @type {Array}\n */\n this.points_ = [];\n\n /**\n * @private\n * @type {number}\n */\n this.angle_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.initialVelocity_ = 0;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n begin() {\n this.points_.length = 0;\n this.angle_ = 0;\n this.initialVelocity_ = 0;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n */\n update(x, y) {\n this.points_.push(x, y, Date.now());\n }\n\n /**\n * @return {boolean} Whether we should do kinetic animation.\n */\n end() {\n if (this.points_.length < 6) {\n // at least 2 points are required (i.e. there must be at least 6 elements\n // in the array)\n return false;\n }\n const delay = Date.now() - this.delay_;\n const lastIndex = this.points_.length - 3;\n if (this.points_[lastIndex + 2] < delay) {\n // the last tracked point is too old, which means that the user stopped\n // panning before releasing the map\n return false;\n }\n\n // get the first point which still falls into the delay time\n let firstIndex = lastIndex - 3;\n while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) {\n firstIndex -= 3;\n }\n\n const duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];\n // we don't want a duration of 0 (divide by zero)\n // we also make sure the user panned for a duration of at least one frame\n // (1/60s) to compute sane displacement values\n if (duration < 1000 / 60) {\n return false;\n }\n\n const dx = this.points_[lastIndex] - this.points_[firstIndex];\n const dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];\n this.angle_ = Math.atan2(dy, dx);\n this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;\n return this.initialVelocity_ > this.minVelocity_;\n }\n\n /**\n * @return {number} Total distance travelled (pixels).\n */\n getDistance() {\n return (this.minVelocity_ - this.initialVelocity_) / this.decay_;\n }\n\n /**\n * @return {number} Angle of the kinetic panning animation (radians).\n */\n getAngle() {\n return this.angle_;\n }\n}\n\nexport default Kinetic;\n","/**\n * @module ol/interaction/Property\n */\n\n/**\n * @enum {string}\n */\nexport default {\n ACTIVE: 'active'\n};\n","/**\n * @module ol/interaction/Interaction\n */\nimport BaseObject from '../Object.js';\nimport {easeOut, linear} from '../easing.js';\nimport InteractionProperty from '../interaction/Property.js';\nimport {clamp} from '../math.js';\n\n\n/**\n * Object literal with config options for interactions.\n * @typedef {Object} InteractionOptions\n * @property {function(module:ol/MapBrowserEvent):boolean} handleEvent\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. If the function returns a falsy value, propagation of\n * the event to other interactions in the map's interactions chain will be\n * prevented (this includes functions with no explicit return).\n */\n\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * User actions that change the state of the map. Some are similar to controls,\n * but are not associated with a DOM element.\n * For example, {@link module:ol/interaction/KeyboardZoom~KeyboardZoom} is\n * functionally the same as {@link module:ol/control/Zoom~Zoom}, but triggered\n * by a keyboard event not a button element event.\n * Although interactions do not have a DOM element, some of them do render\n * vectors and so are visible on the screen.\n * @api\n */\nclass Interaction extends BaseObject {\n /**\n * @param {module:ol/interaction/Interaction~InteractionOptions} options Options.\n */\n constructor(options) {\n super();\n\n /**\n * @private\n * @type {module:ol/PluggableMap}\n */\n this.map_ = null;\n\n this.setActive(true);\n\n /**\n * @type {function(module:ol/MapBrowserEvent):boolean}\n */\n this.handleEvent = options.handleEvent;\n\n }\n\n /**\n * Return whether the interaction is currently active.\n * @return {boolean} `true` if the interaction is active, `false` otherwise.\n * @observable\n * @api\n */\n getActive() {\n return /** @type {boolean} */ (this.get(InteractionProperty.ACTIVE));\n }\n\n /**\n * Get the map associated with this interaction.\n * @return {module:ol/PluggableMap} Map.\n * @api\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Activate or deactivate the interaction.\n * @param {boolean} active Active.\n * @observable\n * @api\n */\n setActive(active) {\n this.set(InteractionProperty.ACTIVE, active);\n }\n\n /**\n * Remove the interaction from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {module:ol/PluggableMap} map Map.\n */\n setMap(map) {\n this.map_ = map;\n }\n}\n\n\n/**\n * @param {module:ol/View} view View.\n * @param {module:ol/coordinate~Coordinate} delta Delta.\n * @param {number=} opt_duration Duration.\n */\nexport function pan(view, delta, opt_duration) {\n const currentCenter = view.getCenter();\n if (currentCenter) {\n const center = view.constrainCenter(\n [currentCenter[0] + delta[0], currentCenter[1] + delta[1]]);\n if (opt_duration) {\n view.animate({\n duration: opt_duration,\n easing: linear,\n center: center\n });\n } else {\n view.setCenter(center);\n }\n }\n}\n\n\n/**\n * @param {module:ol/View} view View.\n * @param {number|undefined} rotation Rotation.\n * @param {module:ol/coordinate~Coordinate=} opt_anchor Anchor coordinate.\n * @param {number=} opt_duration Duration.\n */\nexport function rotate(view, rotation, opt_anchor, opt_duration) {\n rotation = view.constrainRotation(rotation, 0);\n rotateWithoutConstraints(view, rotation, opt_anchor, opt_duration);\n}\n\n\n/**\n * @param {module:ol/View} view View.\n * @param {number|undefined} rotation Rotation.\n * @param {module:ol/coordinate~Coordinate=} opt_anchor Anchor coordinate.\n * @param {number=} opt_duration Duration.\n */\nexport function rotateWithoutConstraints(view, rotation, opt_anchor, opt_duration) {\n if (rotation !== undefined) {\n const currentRotation = view.getRotation();\n const currentCenter = view.getCenter();\n if (currentRotation !== undefined && currentCenter && opt_duration > 0) {\n view.animate({\n rotation: rotation,\n anchor: opt_anchor,\n duration: opt_duration,\n easing: easeOut\n });\n } else {\n view.rotate(rotation, opt_anchor);\n }\n }\n}\n\n\n/**\n * @param {module:ol/View} view View.\n * @param {number|undefined} resolution Resolution to go to.\n * @param {module:ol/coordinate~Coordinate=} opt_anchor Anchor coordinate.\n * @param {number=} opt_duration Duration.\n * @param {number=} opt_direction Zooming direction; > 0 indicates\n * zooming out, in which case the constraints system will select\n * the largest nearest resolution; < 0 indicates zooming in, in\n * which case the constraints system will select the smallest\n * nearest resolution; == 0 indicates that the zooming direction\n * is unknown/not relevant, in which case the constraints system\n * will select the nearest resolution. If not defined 0 is\n * assumed.\n */\nexport function zoom(view, resolution, opt_anchor, opt_duration, opt_direction) {\n resolution = view.constrainResolution(resolution, 0, opt_direction);\n zoomWithoutConstraints(view, resolution, opt_anchor, opt_duration);\n}\n\n\n/**\n * @param {module:ol/View} view View.\n * @param {number} delta Delta from previous zoom level.\n * @param {module:ol/coordinate~Coordinate=} opt_anchor Anchor coordinate.\n * @param {number=} opt_duration Duration.\n */\nexport function zoomByDelta(view, delta, opt_anchor, opt_duration) {\n const currentResolution = view.getResolution();\n let resolution = view.constrainResolution(currentResolution, delta, 0);\n\n if (resolution !== undefined) {\n const resolutions = view.getResolutions();\n resolution = clamp(\n resolution,\n view.getMinResolution() || resolutions[resolutions.length - 1],\n view.getMaxResolution() || resolutions[0]);\n }\n\n // If we have a constraint on center, we need to change the anchor so that the\n // new center is within the extent. We first calculate the new center, apply\n // the constraint to it, and then calculate back the anchor\n if (opt_anchor && resolution !== undefined && resolution !== currentResolution) {\n const currentCenter = view.getCenter();\n let center = view.calculateCenterZoom(resolution, opt_anchor);\n center = view.constrainCenter(center);\n\n opt_anchor = [\n (resolution * currentCenter[0] - currentResolution * center[0]) /\n (resolution - currentResolution),\n (resolution * currentCenter[1] - currentResolution * center[1]) /\n (resolution - currentResolution)\n ];\n }\n\n zoomWithoutConstraints(view, resolution, opt_anchor, opt_duration);\n}\n\n\n/**\n * @param {module:ol/View} view View.\n * @param {number|undefined} resolution Resolution to go to.\n * @param {module:ol/coordinate~Coordinate=} opt_anchor Anchor coordinate.\n * @param {number=} opt_duration Duration.\n */\nexport function zoomWithoutConstraints(view, resolution, opt_anchor, opt_duration) {\n if (resolution) {\n const currentResolution = view.getResolution();\n const currentCenter = view.getCenter();\n if (currentResolution !== undefined && currentCenter &&\n resolution !== currentResolution && opt_duration) {\n view.animate({\n resolution: resolution,\n anchor: opt_anchor,\n duration: opt_duration,\n easing: easeOut\n });\n } else {\n if (opt_anchor) {\n const center = view.calculateCenterZoom(resolution, opt_anchor);\n view.setCenter(center);\n }\n view.setResolution(resolution);\n }\n }\n}\n\nexport default Interaction;\n","/**\n * @module ol/interaction/DoubleClickZoom\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport Interaction, {zoomByDelta} from '../interaction/Interaction.js';\n\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [delta=1] The zoom delta applied on each double click.\n */\n\n\n/**\n * @classdesc\n * Allows the user to zoom by double-clicking on the map.\n * @api\n */\nclass DoubleClickZoom extends Interaction {\n\n /**\n * @param {module:ol/interaction/DoubleClickZoom~Options=} opt_options Options.\n */\n constructor(opt_options) {\n super({\n handleEvent: handleEvent\n });\n\n const options = opt_options ? opt_options : {};\n\n /**\n * @private\n * @type {number}\n */\n this.delta_ = options.delta ? options.delta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n }\n\n}\n\n\n/**\n * Handles the {@link module:ol/MapBrowserEvent map browser event} (if it was a\n * doubleclick) and eventually zooms the map.\n * @param {module:ol/MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @this {module:ol/interaction/DoubleClickZoom}\n */\nfunction handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n const browserEvent = mapBrowserEvent.originalEvent;\n if (mapBrowserEvent.type == MapBrowserEventType.DBLCLICK) {\n const map = mapBrowserEvent.map;\n const anchor = mapBrowserEvent.coordinate;\n const delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;\n const view = map.getView();\n zoomByDelta(view, delta, anchor, this.duration_);\n mapBrowserEvent.preventDefault();\n stopEvent = true;\n }\n return !stopEvent;\n}\n\nexport default DoubleClickZoom;\n","/**\n * @module ol/events/condition\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport {assert} from '../asserts.js';\nimport {TRUE, FALSE} from '../functions.js';\nimport {WEBKIT, MAC} from '../has.js';\n\n\n/**\n * A function that takes an {@link module:ol/MapBrowserEvent} and returns a\n * `{boolean}`. If the condition is met, true should be returned.\n *\n * @typedef {function(this: ?, module:ol/MapBrowserEvent): boolean} Condition\n */\n\n\n/**\n * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when\n * additionally the shift-key is pressed).\n *\n * @param {module:ol/MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt key is pressed.\n * @api\n */\nexport const altKeyOnly = function(mapBrowserEvent) {\n const originalEvent = mapBrowserEvent.originalEvent;\n return (\n originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey);\n};\n\n\n/**\n * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise\n * (e.g. when additionally the platform-modifier-key is pressed).\n *\n * @param {module:ol/MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt and shift keys are pressed.\n * @api\n */\nexport const altShiftKeysOnly = function(mapBrowserEvent) {\n const originalEvent = mapBrowserEvent.originalEvent;\n return (\n originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey);\n};\n\n\n/**\n * Return `true` if the map has the focus. This condition requires a map target\n * element with a `tabindex` attribute, e.g. `
`.\n *\n * @param {module:ol/MapBrowserEvent} event Map browser event.\n * @return {boolean} The map has the focus.\n * @api\n */\nexport const focus = function(event) {\n return event.target.getTargetElement() === document.activeElement;\n};\n\n\n/**\n * Return always true.\n *\n * @param {module:ol/MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True.\n * @function\n * @api\n */\nexport const always = TRUE;\n\n\n/**\n * Return `true` if the event is a `click` event, `false` otherwise.\n *\n * @param {module:ol/MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `click` event.\n * @api\n */\nexport const click = function(mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.CLICK;\n};\n\n\n/**\n * Return `true` if the event has an \"action\"-producing mouse button.\n *\n * By definition, this includes left-click on windows/linux, and left-click\n * without the ctrl key on Macs.\n *\n * @param {module:ol/MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} The result.\n */\nexport const mouseActionButton = function(mapBrowserEvent) {\n const originalEvent = mapBrowserEvent.originalEvent;\n return originalEvent.button == 0 &&\n !(WEBKIT && MAC && originalEvent.ctrlKey);\n};\n\n\n/**\n * Return always false.\n *\n * @param {module:ol/MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} False.\n * @function\n * @api\n */\nexport const never = FALSE;\n\n\n/**\n * Return `true` if the browser event is a `pointermove` event, `false`\n * otherwise.\n *\n * @param {module:ol/MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if the browser event is a `pointermove` event.\n * @api\n */\nexport const pointerMove = function(mapBrowserEvent) {\n return mapBrowserEvent.type == 'pointermove';\n};\n\n\n/**\n * Return `true` if the event is a map `singleclick` event, `false` otherwise.\n *\n * @param {module:ol/MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `singleclick` event.\n * @api\n */\nexport const singleClick = function(mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.SINGLECLICK;\n};\n\n\n/**\n * Return `true` if the event is a map `dblclick` event, `false` otherwise.\n *\n * @param {module:ol/MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `dblclick` event.\n * @api\n */\nexport const doubleClick = function(mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.DBLCLICK;\n};\n\n\n/**\n * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is\n * pressed.\n *\n * @param {module:ol/MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True only if there no modifier keys are pressed.\n * @api\n */\nexport const noModifierKeys = function(mapBrowserEvent) {\n const originalEvent = mapBrowserEvent.originalEvent;\n return (\n !originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey);\n};\n\n\n/**\n * Return `true` if only the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally\n * the shift-key is pressed).\n *\n * @param {module:ol/MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the platform modifier key is pressed.\n * @api\n */\nexport const platformModifierKeyOnly = function(mapBrowserEvent) {\n const originalEvent = mapBrowserEvent.originalEvent;\n return !originalEvent.altKey &&\n (MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&\n !originalEvent.shiftKey;\n};\n\n\n/**\n * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when\n * additionally the alt-key is pressed).\n *\n * @param {module:ol/MapBrowserEvent} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the shift key is pressed.\n * @api\n */\nexport const shiftKeyOnly = function(mapBrowserEvent) {\n const originalEvent = mapBrowserEvent.originalEvent;\n return (\n !originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey);\n};\n\n\n/**\n * Return `true` if the target element is not editable, i.e. not a ``-,\n * `