@mapgis/mapbox-gl 16.0.1 → 16.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mapbox-gl.js +3 -3
- package/dist/mapbox-gl.js.map +1 -1
- package/package.json +1 -1
- package/.flowconfig +0 -61
- package/LICENSE.txt +0 -84
- package/README.md +0 -34
- package/build/banner.js +0 -4
- package/build/check-bundle-size.js +0 -140
- package/build/generate-access-token-script.js +0 -11
- package/build/generate-flow-typed-style-spec.js +0 -188
- package/build/generate-release-list.js +0 -21
- package/build/generate-struct-arrays.js +0 -237
- package/build/generate-style-code.js +0 -159
- package/build/mapbox-gl.js.flow +0 -3
- package/build/print-release-url.js +0 -6
- package/build/rollup_plugin_minify_style_spec.js +0 -20
- package/build/rollup_plugins.js +0 -80
- package/build/run-node +0 -3
- package/build/run-tap +0 -8
- package/build/test/build-tape.js +0 -19
- package/flow-typed/gl.js +0 -5
- package/flow-typed/jsdom.js +0 -18
- package/flow-typed/mapbox-gl-supported.js +0 -9
- package/flow-typed/mapbox-unitbezier.js +0 -14
- package/flow-typed/offscreen-canvas.js +0 -9
- package/flow-typed/pbf.js +0 -25
- package/flow-typed/point-geometry.js +0 -44
- package/flow-typed/potpack.js +0 -12
- package/flow-typed/sinon.js +0 -28
- package/flow-typed/vector-tile.js +0 -41
- package/src/css/mapbox-gl.css +0 -798
- package/src/css/svg/mapboxgl-ctrl-attrib.svg +0 -3
- package/src/css/svg/mapboxgl-ctrl-compass.svg +0 -4
- package/src/css/svg/mapboxgl-ctrl-fullscreen.svg +0 -3
- package/src/css/svg/mapboxgl-ctrl-geolocate.svg +0 -5
- package/src/css/svg/mapboxgl-ctrl-logo.svg +0 -20
- package/src/css/svg/mapboxgl-ctrl-shrink.svg +0 -3
- package/src/css/svg/mapboxgl-ctrl-zoom-in.svg +0 -3
- package/src/css/svg/mapboxgl-ctrl-zoom-out.svg +0 -3
- package/src/data/array_types.js +0 -1095
- package/src/data/bucket/circle_attributes.js +0 -9
- package/src/data/bucket/circle_bucket.js +0 -204
- package/src/data/bucket/fill_attributes.js +0 -9
- package/src/data/bucket/fill_bucket.js +0 -233
- package/src/data/bucket/fill_extrusion_attributes.js +0 -10
- package/src/data/bucket/fill_extrusion_bucket.js +0 -289
- package/src/data/bucket/heatmap_bucket.js +0 -17
- package/src/data/bucket/line_attributes.js +0 -10
- package/src/data/bucket/line_bucket.js +0 -556
- package/src/data/bucket/pattern_attributes.js +0 -10
- package/src/data/bucket/pattern_bucket_features.js +0 -60
- package/src/data/bucket/symbol_attributes.js +0 -117
- package/src/data/bucket/symbol_bucket.js +0 -972
- package/src/data/bucket.js +0 -123
- package/src/data/dem_data.js +0 -125
- package/src/data/extent.js +0 -18
- package/src/data/feature_index.js +0 -321
- package/src/data/feature_position_map.js +0 -125
- package/src/data/index_array_type.js +0 -16
- package/src/data/load_geometry.js +0 -48
- package/src/data/pos_attributes.js +0 -6
- package/src/data/program_configuration.js +0 -687
- package/src/data/raster_bounds_attributes.js +0 -7
- package/src/data/segment.js +0 -76
- package/src/geo/edge_insets.js +0 -102
- package/src/geo/lng_lat.js +0 -165
- package/src/geo/lng_lat_bounds.js +0 -267
- package/src/geo/mercator_coordinate.js +0 -153
- package/src/geo/transform.js +0 -864
- package/src/gl/color_mode.js +0 -34
- package/src/gl/context.js +0 -298
- package/src/gl/cull_face_mode.js +0 -26
- package/src/gl/depth_mode.js +0 -29
- package/src/gl/framebuffer.js +0 -44
- package/src/gl/index_buffer.js +0 -55
- package/src/gl/stencil_mode.js +0 -30
- package/src/gl/types.js +0 -84
- package/src/gl/value.js +0 -520
- package/src/gl/vertex_buffer.js +0 -119
- package/src/index.js +0 -201
- package/src/render/draw_background.js +0 -57
- package/src/render/draw_circle.js +0 -113
- package/src/render/draw_collision_debug.js +0 -49
- package/src/render/draw_custom.js +0 -49
- package/src/render/draw_debug.js +0 -127
- package/src/render/draw_fill.js +0 -126
- package/src/render/draw_fill_extrusion.js +0 -96
- package/src/render/draw_heatmap.js +0 -140
- package/src/render/draw_hillshade.js +0 -108
- package/src/render/draw_line.js +0 -98
- package/src/render/draw_raster.js +0 -125
- package/src/render/draw_symbol.js +0 -394
- package/src/render/glyph_atlas.js +0 -71
- package/src/render/glyph_manager.js +0 -182
- package/src/render/image_atlas.js +0 -149
- package/src/render/image_manager.js +0 -306
- package/src/render/line_atlas.js +0 -210
- package/src/render/painter.js +0 -653
- package/src/render/program/background_program.js +0 -103
- package/src/render/program/circle_program.js +0 -69
- package/src/render/program/clipping_mask_program.js +0 -20
- package/src/render/program/collision_program.js +0 -49
- package/src/render/program/debug_program.js +0 -35
- package/src/render/program/fill_extrusion_program.js +0 -122
- package/src/render/program/fill_program.js +0 -126
- package/src/render/program/heatmap_program.js +0 -83
- package/src/render/program/hillshade_program.js +0 -122
- package/src/render/program/line_program.js +0 -207
- package/src/render/program/pattern.js +0 -102
- package/src/render/program/program_uniforms.js +0 -42
- package/src/render/program/raster_program.js +0 -92
- package/src/render/program/symbol_program.js +0 -224
- package/src/render/program.js +0 -168
- package/src/render/texture.js +0 -122
- package/src/render/uniform_binding.js +0 -147
- package/src/render/vertex_array_object.js +0 -163
- package/src/shaders/README.md +0 -42
- package/src/shaders/_prelude.fragment.glsl +0 -17
- package/src/shaders/_prelude.vertex.glsl +0 -73
- package/src/shaders/background.fragment.glsl +0 -10
- package/src/shaders/background.vertex.glsl +0 -7
- package/src/shaders/background_pattern.fragment.glsl +0 -28
- package/src/shaders/background_pattern.vertex.glsl +0 -20
- package/src/shaders/circle.fragment.glsl +0 -39
- package/src/shaders/circle.vertex.glsl +0 -64
- package/src/shaders/clipping_mask.fragment.glsl +0 -3
- package/src/shaders/clipping_mask.vertex.glsl +0 -7
- package/src/shaders/collision_box.fragment.glsl +0 -21
- package/src/shaders/collision_box.vertex.glsl +0 -27
- package/src/shaders/collision_circle.fragment.glsl +0 -34
- package/src/shaders/collision_circle.vertex.glsl +0 -36
- package/src/shaders/debug.fragment.glsl +0 -9
- package/src/shaders/debug.vertex.glsl +0 -12
- package/src/shaders/encode_attribute.js +0 -17
- package/src/shaders/fill.fragment.glsl +0 -13
- package/src/shaders/fill.vertex.glsl +0 -13
- package/src/shaders/fill_extrusion.fragment.glsl +0 -9
- package/src/shaders/fill_extrusion.vertex.glsl +0 -66
- package/src/shaders/fill_extrusion_pattern.fragment.glsl +0 -45
- package/src/shaders/fill_extrusion_pattern.vertex.glsl +0 -79
- package/src/shaders/fill_outline.fragment.glsl +0 -17
- package/src/shaders/fill_outline.vertex.glsl +0 -17
- package/src/shaders/fill_outline_pattern.fragment.glsl +0 -43
- package/src/shaders/fill_outline_pattern.vertex.glsl +0 -44
- package/src/shaders/fill_pattern.fragment.glsl +0 -36
- package/src/shaders/fill_pattern.vertex.glsl +0 -39
- package/src/shaders/heatmap.fragment.glsl +0 -22
- package/src/shaders/heatmap.vertex.glsl +0 -54
- package/src/shaders/heatmap_texture.fragment.glsl +0 -14
- package/src/shaders/heatmap_texture.vertex.glsl +0 -11
- package/src/shaders/hillshade.fragment.glsl +0 -52
- package/src/shaders/hillshade.vertex.glsl +0 -11
- package/src/shaders/hillshade_prepare.fragment.glsl +0 -74
- package/src/shaders/hillshade_prepare.vertex.glsl +0 -15
- package/src/shaders/index.js +0 -20
- package/src/shaders/line.fragment.glsl +0 -30
- package/src/shaders/line.vertex.glsl +0 -85
- package/src/shaders/line_gradient.fragment.glsl +0 -34
- package/src/shaders/line_gradient.vertex.glsl +0 -87
- package/src/shaders/line_pattern.fragment.glsl +0 -74
- package/src/shaders/line_pattern.vertex.glsl +0 -99
- package/src/shaders/line_sdf.fragment.glsl +0 -45
- package/src/shaders/line_sdf.vertex.glsl +0 -98
- package/src/shaders/raster.fragment.glsl +0 -52
- package/src/shaders/raster.vertex.glsl +0 -21
- package/src/shaders/shaders.js +0 -180
- package/src/shaders/symbol_icon.fragment.glsl +0 -17
- package/src/shaders/symbol_icon.vertex.glsl +0 -94
- package/src/shaders/symbol_sdf.fragment.glsl +0 -52
- package/src/shaders/symbol_sdf.vertex.glsl +0 -115
- package/src/shaders/symbol_text_and_icon.fragment.glsl +0 -68
- package/src/shaders/symbol_text_and_icon.vertex.glsl +0 -116
- package/src/source/canvas_source.js +0 -238
- package/src/source/geojson_helper.js +0 -92
- package/src/source/geojson_source.js +0 -374
- package/src/source/geojson_worker_source.js +0 -357
- package/src/source/geojson_wrapper.js +0 -94
- package/src/source/image_source.js +0 -307
- package/src/source/load_tilejson.js +0 -39
- package/src/source/mbtiles_source.js +0 -115
- package/src/source/offline_database.js +0 -61
- package/src/source/offline_database_root.js +0 -62
- package/src/source/pixels_to_tile_units.js +0 -21
- package/src/source/query_features.js +0 -208
- package/src/source/raster_dem_tile_source.js +0 -138
- package/src/source/raster_dem_tile_worker_source.js +0 -62
- package/src/source/raster_tile_offline_source.js +0 -136
- package/src/source/raster_tile_source.js +0 -177
- package/src/source/rtl_text_plugin.js +0 -138
- package/src/source/source.js +0 -137
- package/src/source/source_cache.js +0 -957
- package/src/source/source_state.js +0 -159
- package/src/source/tile.js +0 -465
- package/src/source/tile_bounds.js +0 -38
- package/src/source/tile_cache.js +0 -212
- package/src/source/tile_id.js +0 -402
- package/src/source/vector_tile_source.js +0 -192
- package/src/source/vector_tile_worker_source.js +0 -216
- package/src/source/video_source.js +0 -203
- package/src/source/worker.js +0 -237
- package/src/source/worker_source.js +0 -106
- package/src/source/worker_tile.js +0 -224
- package/src/style/create_style_layer.js +0 -36
- package/src/style/evaluation_parameters.js +0 -62
- package/src/style/light.js +0 -130
- package/src/style/load_glyph_range.js +0 -38
- package/src/style/load_sprite.js +0 -67
- package/src/style/parse_glyph_pbf.js +0 -44
- package/src/style/pauseable_placement.js +0 -132
- package/src/style/properties.js +0 -753
- package/src/style/query_utils.js +0 -43
- package/src/style/style.js +0 -1361
- package/src/style/style_glyph.js +0 -17
- package/src/style/style_image.js +0 -137
- package/src/style/style_layer/background_style_layer.js +0 -21
- package/src/style/style_layer/background_style_layer_properties.js +0 -40
- package/src/style/style_layer/circle_style_layer.js +0 -98
- package/src/style/style_layer/circle_style_layer_properties.js +0 -63
- package/src/style/style_layer/custom_style_layer.js +0 -223
- package/src/style/style_layer/fill_extrusion_style_layer.js +0 -224
- package/src/style/style_layer/fill_extrusion_style_layer_properties.js +0 -50
- package/src/style/style_layer/fill_style_layer.js +0 -67
- package/src/style/style_layer/fill_style_layer_properties.js +0 -55
- package/src/style/style_layer/heatmap_style_layer.js +0 -69
- package/src/style/style_layer/heatmap_style_layer_properties.js +0 -44
- package/src/style/style_layer/hillshade_style_layer.js +0 -25
- package/src/style/style_layer/hillshade_style_layer_properties.js +0 -46
- package/src/style/style_layer/layer_properties.js.ejs +0 -69
- package/src/style/style_layer/line_style_layer.js +0 -151
- package/src/style/style_layer/line_style_layer_properties.js +0 -71
- package/src/style/style_layer/raster_style_layer.js +0 -21
- package/src/style/style_layer/raster_style_layer_properties.js +0 -50
- package/src/style/style_layer/symbol_style_layer.js +0 -190
- package/src/style/style_layer/symbol_style_layer_properties.js +0 -153
- package/src/style/style_layer/typed_style_layer.js +0 -17
- package/src/style/style_layer.js +0 -281
- package/src/style/style_layer_index.js +0 -80
- package/src/style/validate_style.js +0 -42
- package/src/style/zoom_history.js +0 -44
- package/src/style-spec/.eslintrc +0 -5
- package/src/style-spec/CHANGELOG.md +0 -438
- package/src/style-spec/README.md +0 -59
- package/src/style-spec/bin/gl-style-composite +0 -9
- package/src/style-spec/bin/gl-style-format +0 -22
- package/src/style-spec/bin/gl-style-migrate +0 -9
- package/src/style-spec/bin/gl-style-validate +0 -50
- package/src/style-spec/composite.js +0 -50
- package/src/style-spec/declass.js +0 -42
- package/src/style-spec/deref.js +0 -52
- package/src/style-spec/diff.js +0 -393
- package/src/style-spec/dist/.gitkeep +0 -0
- package/src/style-spec/empty.js +0 -29
- package/src/style-spec/error/parsing_error.js +0 -16
- package/src/style-spec/error/validation_error.js +0 -18
- package/src/style-spec/expression/compound_expression.js +0 -162
- package/src/style-spec/expression/definitions/assertion.js +0 -130
- package/src/style-spec/expression/definitions/at.js +0 -70
- package/src/style-spec/expression/definitions/case.js +0 -85
- package/src/style-spec/expression/definitions/coalesce.js +0 -93
- package/src/style-spec/expression/definitions/coercion.js +0 -133
- package/src/style-spec/expression/definitions/collator.js +0 -78
- package/src/style-spec/expression/definitions/comparison.js +0 -184
- package/src/style-spec/expression/definitions/format.js +0 -144
- package/src/style-spec/expression/definitions/format_section_override.js +0 -54
- package/src/style-spec/expression/definitions/image.js +0 -52
- package/src/style-spec/expression/definitions/in.js +0 -92
- package/src/style-spec/expression/definitions/index.js +0 -561
- package/src/style-spec/expression/definitions/interpolate.js +0 -267
- package/src/style-spec/expression/definitions/length.js +0 -61
- package/src/style-spec/expression/definitions/let.js +0 -72
- package/src/style-spec/expression/definitions/literal.js +0 -77
- package/src/style-spec/expression/definitions/match.js +0 -158
- package/src/style-spec/expression/definitions/number_format.js +0 -142
- package/src/style-spec/expression/definitions/step.js +0 -120
- package/src/style-spec/expression/definitions/var.js +0 -46
- package/src/style-spec/expression/definitions/within.js +0 -333
- package/src/style-spec/expression/evaluation_context.js +0 -59
- package/src/style-spec/expression/expression.js +0 -27
- package/src/style-spec/expression/index.js +0 -392
- package/src/style-spec/expression/is_constant.js +0 -59
- package/src/style-spec/expression/parsing_context.js +0 -233
- package/src/style-spec/expression/parsing_error.js +0 -13
- package/src/style-spec/expression/runtime_error.js +0 -17
- package/src/style-spec/expression/scope.js +0 -36
- package/src/style-spec/expression/stops.js +0 -39
- package/src/style-spec/expression/types/collator.js +0 -61
- package/src/style-spec/expression/types/formatted.js +0 -73
- package/src/style-spec/expression/types/resolved_image.js +0 -29
- package/src/style-spec/expression/types.js +0 -106
- package/src/style-spec/expression/values.js +0 -123
- package/src/style-spec/feature_filter/README.md +0 -55
- package/src/style-spec/feature_filter/convert.js +0 -208
- package/src/style-spec/feature_filter/index.js +0 -165
- package/src/style-spec/format.js +0 -51
- package/src/style-spec/function/convert.js +0 -254
- package/src/style-spec/function/index.js +0 -262
- package/src/style-spec/group_by_layout.js +0 -75
- package/src/style-spec/migrate/expressions.js +0 -39
- package/src/style-spec/migrate/v8.js +0 -203
- package/src/style-spec/migrate/v9.js +0 -26
- package/src/style-spec/migrate.js +0 -36
- package/src/style-spec/package.json +0 -41
- package/src/style-spec/read_style.js +0 -14
- package/src/style-spec/reference/latest.js +0 -3
- package/src/style-spec/reference/v8.json +0 -5808
- package/src/style-spec/rollup.config.js +0 -45
- package/src/style-spec/style-spec.js +0 -122
- package/src/style-spec/types.js +0 -438
- package/src/style-spec/util/color.js +0 -95
- package/src/style-spec/util/color_spaces.js +0 -139
- package/src/style-spec/util/deep_equal.js +0 -28
- package/src/style-spec/util/extend.js +0 -10
- package/src/style-spec/util/get_type.js +0 -17
- package/src/style-spec/util/interpolate.js +0 -22
- package/src/style-spec/util/properties.js +0 -15
- package/src/style-spec/util/ref_properties.js +0 -2
- package/src/style-spec/util/result.js +0 -19
- package/src/style-spec/util/unbundle_jsonlint.js +0 -24
- package/src/style-spec/validate/latest.js +0 -11
- package/src/style-spec/validate/validate.js +0 -75
- package/src/style-spec/validate/validate_array.js +0 -52
- package/src/style-spec/validate/validate_boolean.js +0 -15
- package/src/style-spec/validate/validate_color.js +0 -20
- package/src/style-spec/validate/validate_constants.js +0 -13
- package/src/style-spec/validate/validate_enum.js +0 -21
- package/src/style-spec/validate/validate_expression.js +0 -43
- package/src/style-spec/validate/validate_filter.js +0 -111
- package/src/style-spec/validate/validate_formatted.js +0 -11
- package/src/style-spec/validate/validate_function.js +0 -207
- package/src/style-spec/validate/validate_glyphs_url.js +0 -21
- package/src/style-spec/validate/validate_image.js +0 -11
- package/src/style-spec/validate/validate_layer.js +0 -134
- package/src/style-spec/validate/validate_layout_property.js +0 -6
- package/src/style-spec/validate/validate_light.js +0 -47
- package/src/style-spec/validate/validate_number.js +0 -29
- package/src/style-spec/validate/validate_object.js +0 -61
- package/src/style-spec/validate/validate_paint_property.js +0 -6
- package/src/style-spec/validate/validate_property.js +0 -64
- package/src/style-spec/validate/validate_source.js +0 -111
- package/src/style-spec/validate/validate_string.js +0 -15
- package/src/style-spec/validate_mapbox_api_supported.js +0 -171
- package/src/style-spec/validate_style.js +0 -39
- package/src/style-spec/validate_style.min.js +0 -78
- package/src/style-spec/visit.js +0 -77
- package/src/symbol/anchor.js +0 -26
- package/src/symbol/check_max_angle.js +0 -81
- package/src/symbol/clip_line.js +0 -71
- package/src/symbol/collision_feature.js +0 -217
- package/src/symbol/collision_index.js +0 -372
- package/src/symbol/cross_tile_symbol_index.js +0 -301
- package/src/symbol/get_anchors.js +0 -167
- package/src/symbol/grid_index.js +0 -335
- package/src/symbol/mergelines.js +0 -82
- package/src/symbol/one_em.js +0 -4
- package/src/symbol/opacity_state.js +0 -27
- package/src/symbol/placement.js +0 -1062
- package/src/symbol/projection.js +0 -450
- package/src/symbol/quads.js +0 -334
- package/src/symbol/shaping.js +0 -816
- package/src/symbol/symbol_layout.js +0 -772
- package/src/symbol/symbol_size.js +0 -113
- package/src/symbol/transform_text.js +0 -29
- package/src/types/callback.js +0 -17
- package/src/types/cancelable.js +0 -3
- package/src/types/tilejson.js +0 -17
- package/src/types/transferable.js +0 -3
- package/src/types/window.js +0 -172
- package/src/ui/anchor.js +0 -32
- package/src/ui/bind_handlers.js +0 -202
- package/src/ui/camera.js +0 -1152
- package/src/ui/control/attribution_control.js +0 -189
- package/src/ui/control/fps_control.js +0 -185
- package/src/ui/control/fullscreen_control.js +0 -147
- package/src/ui/control/geolocate_control.js +0 -594
- package/src/ui/control/logo_control.js +0 -92
- package/src/ui/control/navigation_control.js +0 -148
- package/src/ui/control/scale_control.js +0 -142
- package/src/ui/crs.js +0 -64
- package/src/ui/default_locale.js +0 -20
- package/src/ui/events.js +0 -806
- package/src/ui/handler/box_zoom.js +0 -175
- package/src/ui/handler/dblclick_zoom.js +0 -139
- package/src/ui/handler/drag_pan.js +0 -416
- package/src/ui/handler/drag_rotate.js +0 -378
- package/src/ui/handler/keyboard.js +0 -161
- package/src/ui/handler/scroll_zoom.js +0 -333
- package/src/ui/handler/touch_zoom_rotate.js +0 -293
- package/src/ui/hash.js +0 -147
- package/src/ui/map.js +0 -2883
- package/src/ui/marker.js +0 -607
- package/src/ui/offline_map.js +0 -91
- package/src/ui/popup.js +0 -530
- package/src/util/actor.js +0 -212
- package/src/util/ajax.js +0 -371
- package/src/util/browser/web_worker.js +0 -10
- package/src/util/browser/window.js +0 -5
- package/src/util/browser.js +0 -70
- package/src/util/classify_rings.js +0 -52
- package/src/util/color_ramp.js +0 -28
- package/src/util/config.js +0 -30
- package/src/util/debug.js +0 -12
- package/src/util/dictionary_coder.js +0 -30
- package/src/util/dispatcher.js +0 -70
- package/src/util/dom.js +0 -144
- package/src/util/evented.js +0 -174
- package/src/util/find_pole_of_inaccessibility.js +0 -129
- package/src/util/global_worker_pool.js +0 -17
- package/src/util/image.js +0 -142
- package/src/util/intersection_tests.js +0 -208
- package/src/util/is_char_in_unicode_block.js +0 -311
- package/src/util/mapbox.js +0 -486
- package/src/util/offscreen_canvas_supported.js +0 -14
- package/src/util/performance.js +0 -112
- package/src/util/primitives.js +0 -145
- package/src/util/resolve_tokens.js +0 -16
- package/src/util/script_detection.js +0 -328
- package/src/util/sku_token.js +0 -42
- package/src/util/smart_wrap.js +0 -55
- package/src/util/struct_array.js +0 -243
- package/src/util/struct_array.js.ejs +0 -112
- package/src/util/struct_array_layout.js.ejs +0 -98
- package/src/util/task_queue.js +0 -68
- package/src/util/throttle.js +0 -28
- package/src/util/throttled_invoker.js +0 -46
- package/src/util/tile_cover.js +0 -101
- package/src/util/tile_request_cache.js +0 -172
- package/src/util/util.js +0 -504
- package/src/util/vectortile_to_geojson.js +0 -54
- package/src/util/verticalize_punctuation.js +0 -114
- package/src/util/web_worker.js +0 -91
- package/src/util/web_worker_transfer.js +0 -266
- package/src/util/webp_supported.js +0 -69
- package/src/util/window.js +0 -102
- package/src/util/worker_pool.js +0 -47
package/src/util/mapbox.js
DELETED
|
@@ -1,486 +0,0 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
/***** START WARNING - IF YOU USE THIS CODE WITH MAPBOX MAPPING APIS, REMOVAL OR
|
|
4
|
-
* MODIFICATION OF THE FOLLOWING CODE VIOLATES THE MAPBOX TERMS OF SERVICE ******
|
|
5
|
-
* The following code is used to access Mapbox's Mapping APIs. Removal or modification
|
|
6
|
-
* of this code when used with Mapbox's Mapping APIs can result in higher fees and/or
|
|
7
|
-
* termination of your account with Mapbox.
|
|
8
|
-
*
|
|
9
|
-
* Under the Mapbox Terms of Service, you may not use this code to access Mapbox
|
|
10
|
-
* Mapping APIs other than through Mapbox SDKs.
|
|
11
|
-
*
|
|
12
|
-
* The Mapping APIs documentation is available at https://docs.mapbox.com/api/maps/#maps
|
|
13
|
-
* and the Mapbox Terms of Service are available at https://www.mapbox.com/tos/
|
|
14
|
-
******************************************************************************/
|
|
15
|
-
|
|
16
|
-
import config from './config';
|
|
17
|
-
|
|
18
|
-
import browser from './browser';
|
|
19
|
-
import window from './window';
|
|
20
|
-
import webpSupported from './webp_supported';
|
|
21
|
-
import {createSkuToken, SKU_ID} from './sku_token';
|
|
22
|
-
import {version as sdkVersion} from '../../package.json';
|
|
23
|
-
import {uuid, validateUuid, storageAvailable, b64DecodeUnicode, b64EncodeUnicode, warnOnce, extend} from './util';
|
|
24
|
-
import {postData, ResourceType} from './ajax';
|
|
25
|
-
|
|
26
|
-
import type {RequestParameters} from './ajax';
|
|
27
|
-
import type {Cancelable} from '../types/cancelable';
|
|
28
|
-
import type {TileJSON} from '../types/tilejson';
|
|
29
|
-
|
|
30
|
-
type ResourceTypeEnum = $Keys<typeof ResourceType>;
|
|
31
|
-
export type RequestTransformFunction = (url: string, resourceType?: ResourceTypeEnum) => RequestParameters;
|
|
32
|
-
|
|
33
|
-
type UrlObject = {|
|
|
34
|
-
protocol: string,
|
|
35
|
-
authority: string,
|
|
36
|
-
path: string,
|
|
37
|
-
params: Array<string>
|
|
38
|
-
|};
|
|
39
|
-
|
|
40
|
-
export class RequestManager {
|
|
41
|
-
_skuToken: string;
|
|
42
|
-
_skuTokenExpiresAt: number;
|
|
43
|
-
_transformRequestFn: ?RequestTransformFunction;
|
|
44
|
-
_customAccessToken: ?string;
|
|
45
|
-
|
|
46
|
-
constructor(transformRequestFn?: RequestTransformFunction, customAccessToken?: string) {
|
|
47
|
-
this._transformRequestFn = transformRequestFn;
|
|
48
|
-
this._customAccessToken = customAccessToken;
|
|
49
|
-
this._createSkuToken();
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
_createSkuToken() {
|
|
53
|
-
const skuToken = createSkuToken();
|
|
54
|
-
this._skuToken = skuToken.token;
|
|
55
|
-
this._skuTokenExpiresAt = skuToken.tokenExpiresAt;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
_isSkuTokenExpired(): boolean {
|
|
59
|
-
return Date.now() > this._skuTokenExpiresAt;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
transformRequest(url: string, type: ResourceTypeEnum) {
|
|
63
|
-
if (this._transformRequestFn) {
|
|
64
|
-
return this._transformRequestFn(url, type) || {url};
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return {url};
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
normalizeStyleURL(url: string, accessToken?: string): string {
|
|
71
|
-
if (!isMapboxURL(url)) return url;
|
|
72
|
-
const urlObject = parseUrl(url);
|
|
73
|
-
urlObject.path = `/styles/v1${urlObject.path}`;
|
|
74
|
-
return this._makeAPIURL(urlObject, this._customAccessToken || accessToken);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
normalizeGlyphsURL(url: string, accessToken?: string): string {
|
|
78
|
-
if (!isMapboxURL(url)) return url;
|
|
79
|
-
const urlObject = parseUrl(url);
|
|
80
|
-
urlObject.path = `/fonts/v1${urlObject.path}`;
|
|
81
|
-
return this._makeAPIURL(urlObject, this._customAccessToken || accessToken);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
normalizeSourceURL(url: string, accessToken?: string): string {
|
|
85
|
-
if (!isMapboxURL(url)) return url;
|
|
86
|
-
const urlObject = parseUrl(url);
|
|
87
|
-
urlObject.path = `/v4/${urlObject.authority}.json`;
|
|
88
|
-
// TileJSON requests need a secure flag appended to their URLs so
|
|
89
|
-
// that the server knows to send SSL-ified resource references.
|
|
90
|
-
urlObject.params.push('secure');
|
|
91
|
-
return this._makeAPIURL(urlObject, this._customAccessToken || accessToken);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
normalizeSpriteURL(url: string, format: string, extension: string, accessToken?: string): string {
|
|
95
|
-
const urlObject = parseUrl(url);
|
|
96
|
-
if (!isMapboxURL(url)) {
|
|
97
|
-
urlObject.path += `${format}${extension}`;
|
|
98
|
-
return formatUrl(urlObject);
|
|
99
|
-
}
|
|
100
|
-
urlObject.path = `/styles/v1${urlObject.path}/sprite${format}${extension}`;
|
|
101
|
-
return this._makeAPIURL(urlObject, this._customAccessToken || accessToken);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
normalizeTileURL(tileURL: string, tileSize?: ?number): string {
|
|
105
|
-
if (this._isSkuTokenExpired()) {
|
|
106
|
-
this._createSkuToken();
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
if (tileURL && !isMapboxURL(tileURL)) return tileURL;
|
|
110
|
-
|
|
111
|
-
const urlObject = parseUrl(tileURL);
|
|
112
|
-
const imageExtensionRe = /(\.(png|jpg)\d*)(?=$)/;
|
|
113
|
-
const tileURLAPIPrefixRe = /^.+\/v4\//;
|
|
114
|
-
|
|
115
|
-
// The v4 mapbox tile API supports 512x512 image tiles only when @2x
|
|
116
|
-
// is appended to the tile URL. If `tileSize: 512` is specified for
|
|
117
|
-
// a Mapbox raster source force the @2x suffix even if a non hidpi device.
|
|
118
|
-
const suffix = browser.devicePixelRatio >= 2 || tileSize === 512 ? '@2x' : '';
|
|
119
|
-
const extension = webpSupported.supported ? '.webp' : '$1';
|
|
120
|
-
urlObject.path = urlObject.path.replace(imageExtensionRe, `${suffix}${extension}`);
|
|
121
|
-
urlObject.path = urlObject.path.replace(tileURLAPIPrefixRe, '/');
|
|
122
|
-
urlObject.path = `/v4${urlObject.path}`;
|
|
123
|
-
|
|
124
|
-
const accessToken = this._customAccessToken || getAccessToken(urlObject.params) || config.ACCESS_TOKEN;
|
|
125
|
-
if (config.REQUIRE_ACCESS_TOKEN && accessToken && this._skuToken) {
|
|
126
|
-
urlObject.params.push(`sku=${this._skuToken}`);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
return this._makeAPIURL(urlObject, accessToken);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
canonicalizeTileURL(url: string, removeAccessToken: boolean) {
|
|
133
|
-
const version = "/v4/";
|
|
134
|
-
// matches any file extension specified by a dot and one or more alphanumeric characters
|
|
135
|
-
const extensionRe = /\.[\w]+$/;
|
|
136
|
-
|
|
137
|
-
const urlObject = parseUrl(url);
|
|
138
|
-
// Make sure that we are dealing with a valid Mapbox tile URL.
|
|
139
|
-
// Has to begin with /v4/, with a valid filename + extension
|
|
140
|
-
if (!urlObject.path.match(/(^\/v4\/)/) || !urlObject.path.match(extensionRe)) {
|
|
141
|
-
// Not a proper Mapbox tile URL.
|
|
142
|
-
return url;
|
|
143
|
-
}
|
|
144
|
-
// Reassemble the canonical URL from the parts we've parsed before.
|
|
145
|
-
let result = "mapbox://tiles/";
|
|
146
|
-
result += urlObject.path.replace(version, '');
|
|
147
|
-
|
|
148
|
-
// Append the query string, minus the access token parameter.
|
|
149
|
-
let params = urlObject.params;
|
|
150
|
-
if (removeAccessToken) {
|
|
151
|
-
params = params.filter(p => !p.match(/^access_token=/));
|
|
152
|
-
}
|
|
153
|
-
if (params.length) result += `?${params.join('&')}`;
|
|
154
|
-
return result;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
canonicalizeTileset(tileJSON: TileJSON, sourceURL?: string) {
|
|
158
|
-
const removeAccessToken = sourceURL ? isMapboxURL(sourceURL) : false;
|
|
159
|
-
const canonical = [];
|
|
160
|
-
for (const url of tileJSON.tiles || []) {
|
|
161
|
-
if (isMapboxHTTPURL(url)) {
|
|
162
|
-
canonical.push(this.canonicalizeTileURL(url, removeAccessToken));
|
|
163
|
-
} else {
|
|
164
|
-
canonical.push(url);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
return canonical;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
_makeAPIURL(urlObject: UrlObject, accessToken: string | null | void): string {
|
|
171
|
-
const help = 'See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes';
|
|
172
|
-
const apiUrlObject = parseUrl(config.API_URL);
|
|
173
|
-
urlObject.protocol = apiUrlObject.protocol;
|
|
174
|
-
urlObject.authority = apiUrlObject.authority;
|
|
175
|
-
|
|
176
|
-
if (apiUrlObject.path !== '/') {
|
|
177
|
-
urlObject.path = `${apiUrlObject.path}${urlObject.path}`;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
if (!config.REQUIRE_ACCESS_TOKEN) return formatUrl(urlObject);
|
|
181
|
-
|
|
182
|
-
accessToken = accessToken || config.ACCESS_TOKEN;
|
|
183
|
-
if (!accessToken)
|
|
184
|
-
throw new Error(`An API access token is required to use Mapbox GL. ${help}`);
|
|
185
|
-
if (accessToken[0] === 's')
|
|
186
|
-
throw new Error(`Use a public access token (pk.*) with Mapbox GL, not a secret access token (sk.*). ${help}`);
|
|
187
|
-
|
|
188
|
-
urlObject.params = urlObject.params.filter((d) => d.indexOf('access_token') === -1);
|
|
189
|
-
urlObject.params.push(`access_token=${accessToken}`);
|
|
190
|
-
return formatUrl(urlObject);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
function isMapboxURL(url: string) {
|
|
195
|
-
return url.indexOf('mapbox:') === 0;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
const mapboxHTTPURLRe = /^((https?:)?\/\/)?([^\/]+\.)?mapbox\.c(n|om)(\/|\?|$)/i;
|
|
199
|
-
function isMapboxHTTPURL(url: string): boolean {
|
|
200
|
-
return mapboxHTTPURLRe.test(url);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
function hasCacheDefeatingSku(url: string) {
|
|
204
|
-
return url.indexOf('sku=') > 0 && isMapboxHTTPURL(url);
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
function getAccessToken(params: Array<string>): string | null {
|
|
208
|
-
for (const param of params) {
|
|
209
|
-
const match = param.match(/^access_token=(.*)$/);
|
|
210
|
-
if (match) {
|
|
211
|
-
return match[1];
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
return null;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
const urlRe = /^(\w+):\/\/([^/?]*)(\/[^?]+)?\??(.+)?/;
|
|
218
|
-
|
|
219
|
-
function parseUrl(url: string): UrlObject {
|
|
220
|
-
const parts = url.match(urlRe);
|
|
221
|
-
if (!parts) {
|
|
222
|
-
throw new Error('Unable to parse URL object');
|
|
223
|
-
}
|
|
224
|
-
return {
|
|
225
|
-
protocol: parts[1],
|
|
226
|
-
authority: parts[2],
|
|
227
|
-
path: parts[3] || '/',
|
|
228
|
-
params: parts[4] ? parts[4].split('&') : []
|
|
229
|
-
};
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
function formatUrl(obj: UrlObject): string {
|
|
233
|
-
const params = obj.params.length ? `?${obj.params.join('&')}` : '';
|
|
234
|
-
return `${obj.protocol}://${obj.authority}${obj.path}${params}`;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
export {isMapboxURL, isMapboxHTTPURL, hasCacheDefeatingSku};
|
|
238
|
-
|
|
239
|
-
const telemEventKey = 'mapbox.eventData';
|
|
240
|
-
|
|
241
|
-
function parseAccessToken(accessToken: ?string) {
|
|
242
|
-
if (!accessToken) {
|
|
243
|
-
return null;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
const parts = accessToken.split('.');
|
|
247
|
-
if (!parts || parts.length !== 3) {
|
|
248
|
-
return null;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
try {
|
|
252
|
-
const jsonData = JSON.parse(b64DecodeUnicode(parts[1]));
|
|
253
|
-
return jsonData;
|
|
254
|
-
} catch (e) {
|
|
255
|
-
return null;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
type TelemetryEventType = 'appUserTurnstile' | 'map.load';
|
|
260
|
-
|
|
261
|
-
class TelemetryEvent {
|
|
262
|
-
eventData: any;
|
|
263
|
-
anonId: ?string;
|
|
264
|
-
queue: Array<any>;
|
|
265
|
-
type: TelemetryEventType;
|
|
266
|
-
pendingRequest: ?Cancelable;
|
|
267
|
-
_customAccessToken: ?string;
|
|
268
|
-
|
|
269
|
-
constructor(type: TelemetryEventType) {
|
|
270
|
-
this.type = type;
|
|
271
|
-
this.anonId = null;
|
|
272
|
-
this.eventData = {};
|
|
273
|
-
this.queue = [];
|
|
274
|
-
this.pendingRequest = null;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
getStorageKey(domain: ?string) {
|
|
278
|
-
const tokenData = parseAccessToken(config.ACCESS_TOKEN);
|
|
279
|
-
let u = '';
|
|
280
|
-
if (tokenData && tokenData['u']) {
|
|
281
|
-
u = b64EncodeUnicode(tokenData['u']);
|
|
282
|
-
} else {
|
|
283
|
-
u = config.ACCESS_TOKEN || '';
|
|
284
|
-
}
|
|
285
|
-
return domain ?
|
|
286
|
-
`${telemEventKey}.${domain}:${u}` :
|
|
287
|
-
`${telemEventKey}:${u}`;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
fetchEventData() {
|
|
291
|
-
const isLocalStorageAvailable = storageAvailable('localStorage');
|
|
292
|
-
const storageKey = this.getStorageKey();
|
|
293
|
-
const uuidKey = this.getStorageKey('uuid');
|
|
294
|
-
|
|
295
|
-
if (isLocalStorageAvailable) {
|
|
296
|
-
//Retrieve cached data
|
|
297
|
-
try {
|
|
298
|
-
const data = window.localStorage.getItem(storageKey);
|
|
299
|
-
if (data) {
|
|
300
|
-
this.eventData = JSON.parse(data);
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
const uuid = window.localStorage.getItem(uuidKey);
|
|
304
|
-
if (uuid) this.anonId = uuid;
|
|
305
|
-
} catch (e) {
|
|
306
|
-
warnOnce('Unable to read from LocalStorage');
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
saveEventData() {
|
|
312
|
-
const isLocalStorageAvailable = storageAvailable('localStorage');
|
|
313
|
-
const storageKey = this.getStorageKey();
|
|
314
|
-
const uuidKey = this.getStorageKey('uuid');
|
|
315
|
-
if (isLocalStorageAvailable) {
|
|
316
|
-
try {
|
|
317
|
-
window.localStorage.setItem(uuidKey, this.anonId);
|
|
318
|
-
if (Object.keys(this.eventData).length >= 1) {
|
|
319
|
-
window.localStorage.setItem(storageKey, JSON.stringify(this.eventData));
|
|
320
|
-
}
|
|
321
|
-
} catch (e) {
|
|
322
|
-
warnOnce('Unable to write to LocalStorage');
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
processRequests(_: ?string) {}
|
|
329
|
-
|
|
330
|
-
/*
|
|
331
|
-
* If any event data should be persisted after the POST request, the callback should modify eventData`
|
|
332
|
-
* to the values that should be saved. For this reason, the callback should be invoked prior to the call
|
|
333
|
-
* to TelemetryEvent#saveData
|
|
334
|
-
*/
|
|
335
|
-
postEvent(timestamp: number, additionalPayload: {[_: string]: any}, callback: (err: ?Error) => void, customAccessToken?: ?string) {
|
|
336
|
-
if (!config.EVENTS_URL) return;
|
|
337
|
-
const eventsUrlObject: UrlObject = parseUrl(config.EVENTS_URL);
|
|
338
|
-
eventsUrlObject.params.push(`access_token=${customAccessToken || config.ACCESS_TOKEN || ''}`);
|
|
339
|
-
|
|
340
|
-
const payload: Object = {
|
|
341
|
-
event: this.type,
|
|
342
|
-
created: new Date(timestamp).toISOString(),
|
|
343
|
-
sdkIdentifier: 'mapbox-gl-js',
|
|
344
|
-
sdkVersion,
|
|
345
|
-
skuId: SKU_ID,
|
|
346
|
-
userId: this.anonId
|
|
347
|
-
};
|
|
348
|
-
|
|
349
|
-
const finalPayload = additionalPayload ? extend(payload, additionalPayload) : payload;
|
|
350
|
-
const request: RequestParameters = {
|
|
351
|
-
url: formatUrl(eventsUrlObject),
|
|
352
|
-
headers: {
|
|
353
|
-
'Content-Type': 'text/plain' //Skip the pre-flight OPTIONS request
|
|
354
|
-
},
|
|
355
|
-
body: JSON.stringify([finalPayload])
|
|
356
|
-
};
|
|
357
|
-
|
|
358
|
-
this.pendingRequest = postData(request, (error) => {
|
|
359
|
-
this.pendingRequest = null;
|
|
360
|
-
callback(error);
|
|
361
|
-
this.saveEventData();
|
|
362
|
-
this.processRequests(customAccessToken);
|
|
363
|
-
});
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
queueRequest(event: number | {id: number, timestamp: number}, customAccessToken?: ?string) {
|
|
367
|
-
this.queue.push(event);
|
|
368
|
-
this.processRequests(customAccessToken);
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
export class MapLoadEvent extends TelemetryEvent {
|
|
373
|
-
+success: {[_: number]: boolean};
|
|
374
|
-
skuToken: string;
|
|
375
|
-
|
|
376
|
-
constructor() {
|
|
377
|
-
super('map.load');
|
|
378
|
-
this.success = {};
|
|
379
|
-
this.skuToken = '';
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
postMapLoadEvent(tileUrls: Array<string>, mapId: number, skuToken: string, customAccessToken: string) {
|
|
383
|
-
//Enabled only when Mapbox Access Token is set and a source uses
|
|
384
|
-
// mapbox tiles.
|
|
385
|
-
this.skuToken = skuToken;
|
|
386
|
-
|
|
387
|
-
if (config.EVENTS_URL &&
|
|
388
|
-
customAccessToken || config.ACCESS_TOKEN &&
|
|
389
|
-
Array.isArray(tileUrls) &&
|
|
390
|
-
tileUrls.some(url => isMapboxURL(url) || isMapboxHTTPURL(url))) {
|
|
391
|
-
this.queueRequest({id: mapId, timestamp: Date.now()}, customAccessToken);
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
processRequests(customAccessToken?: ?string) {
|
|
396
|
-
if (this.pendingRequest || this.queue.length === 0) return;
|
|
397
|
-
const {id, timestamp} = this.queue.shift();
|
|
398
|
-
|
|
399
|
-
// Only one load event should fire per map
|
|
400
|
-
if (id && this.success[id]) return;
|
|
401
|
-
|
|
402
|
-
if (!this.anonId) {
|
|
403
|
-
this.fetchEventData();
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
if (!validateUuid(this.anonId)) {
|
|
407
|
-
this.anonId = uuid();
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
this.postEvent(timestamp, {skuToken: this.skuToken}, (err) => {
|
|
411
|
-
if (!err) {
|
|
412
|
-
if (id) this.success[id] = true;
|
|
413
|
-
}
|
|
414
|
-
}, customAccessToken);
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
export class TurnstileEvent extends TelemetryEvent {
|
|
419
|
-
constructor(customAccessToken?: ?string) {
|
|
420
|
-
super('appUserTurnstile');
|
|
421
|
-
this._customAccessToken = customAccessToken;
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
postTurnstileEvent(tileUrls: Array<string>, customAccessToken?: ?string) {
|
|
425
|
-
//Enabled only when Mapbox Access Token is set and a source uses
|
|
426
|
-
// mapbox tiles.
|
|
427
|
-
if (config.EVENTS_URL &&
|
|
428
|
-
config.ACCESS_TOKEN &&
|
|
429
|
-
Array.isArray(tileUrls) &&
|
|
430
|
-
tileUrls.some(url => isMapboxURL(url) || isMapboxHTTPURL(url))) {
|
|
431
|
-
this.queueRequest(Date.now(), customAccessToken);
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
processRequests(customAccessToken?: ?string) {
|
|
436
|
-
if (this.pendingRequest || this.queue.length === 0) {
|
|
437
|
-
return;
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
if (!this.anonId || !this.eventData.lastSuccess || !this.eventData.tokenU) {
|
|
441
|
-
//Retrieve cached data
|
|
442
|
-
this.fetchEventData();
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
const tokenData = parseAccessToken(config.ACCESS_TOKEN);
|
|
446
|
-
const tokenU = tokenData ? tokenData['u'] : config.ACCESS_TOKEN;
|
|
447
|
-
//Reset event data cache if the access token owner changed.
|
|
448
|
-
let dueForEvent = tokenU !== this.eventData.tokenU;
|
|
449
|
-
|
|
450
|
-
if (!validateUuid(this.anonId)) {
|
|
451
|
-
this.anonId = uuid();
|
|
452
|
-
dueForEvent = true;
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
const nextUpdate = this.queue.shift();
|
|
456
|
-
// Record turnstile event once per calendar day.
|
|
457
|
-
if (this.eventData.lastSuccess) {
|
|
458
|
-
const lastUpdate = new Date(this.eventData.lastSuccess);
|
|
459
|
-
const nextDate = new Date(nextUpdate);
|
|
460
|
-
const daysElapsed = (nextUpdate - this.eventData.lastSuccess) / (24 * 60 * 60 * 1000);
|
|
461
|
-
dueForEvent = dueForEvent || daysElapsed >= 1 || daysElapsed < -1 || lastUpdate.getDate() !== nextDate.getDate();
|
|
462
|
-
} else {
|
|
463
|
-
dueForEvent = true;
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
if (!dueForEvent) {
|
|
467
|
-
return this.processRequests();
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
this.postEvent(nextUpdate, {"enabled.telemetry": false}, (err) => {
|
|
471
|
-
if (!err) {
|
|
472
|
-
this.eventData.lastSuccess = nextUpdate;
|
|
473
|
-
this.eventData.tokenU = tokenU;
|
|
474
|
-
}
|
|
475
|
-
}, customAccessToken);
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
const turnstileEvent_ = new TurnstileEvent();
|
|
480
|
-
export const postTurnstileEvent = turnstileEvent_.postTurnstileEvent.bind(turnstileEvent_);
|
|
481
|
-
|
|
482
|
-
const mapLoadEvent_ = new MapLoadEvent();
|
|
483
|
-
export const postMapLoadEvent = mapLoadEvent_.postMapLoadEvent.bind(mapLoadEvent_);
|
|
484
|
-
|
|
485
|
-
/***** END WARNING - REMOVAL OR MODIFICATION OF THE
|
|
486
|
-
PRECEDING CODE VIOLATES THE MAPBOX TERMS OF SERVICE ******/
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
import window from './window';
|
|
3
|
-
|
|
4
|
-
let supportsOffscreenCanvas: ?boolean;
|
|
5
|
-
|
|
6
|
-
export default function offscreenCanvasSupported(): boolean {
|
|
7
|
-
if (supportsOffscreenCanvas == null) {
|
|
8
|
-
supportsOffscreenCanvas = window.OffscreenCanvas &&
|
|
9
|
-
new window.OffscreenCanvas(1, 1).getContext('2d') &&
|
|
10
|
-
typeof window.createImageBitmap === 'function';
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
return supportsOffscreenCanvas;
|
|
14
|
-
}
|
package/src/util/performance.js
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
import window from '../util/window';
|
|
4
|
-
import type {RequestParameters} from '../util/ajax';
|
|
5
|
-
|
|
6
|
-
const performance = window.performance;
|
|
7
|
-
|
|
8
|
-
export type PerformanceMetrics = {
|
|
9
|
-
loadTime: number,
|
|
10
|
-
fullLoadTime: number,
|
|
11
|
-
fps: number,
|
|
12
|
-
percentDroppedFrames: number
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export const PerformanceMarkers = {
|
|
16
|
-
create: 'create',
|
|
17
|
-
load: 'load',
|
|
18
|
-
fullLoad: 'fullLoad'
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
let lastFrameTime = null;
|
|
22
|
-
let frameTimes = [];
|
|
23
|
-
|
|
24
|
-
const minFramerateTarget = 30;
|
|
25
|
-
const frameTimeTarget = 1000 / minFramerateTarget;
|
|
26
|
-
|
|
27
|
-
export const PerformanceUtils = {
|
|
28
|
-
mark(marker: $Keys<typeof PerformanceMarkers>) {
|
|
29
|
-
performance.mark(marker);
|
|
30
|
-
},
|
|
31
|
-
frame(timestamp: number) {
|
|
32
|
-
const currTimestamp = timestamp;
|
|
33
|
-
if (lastFrameTime != null) {
|
|
34
|
-
const frameTime = currTimestamp - lastFrameTime;
|
|
35
|
-
frameTimes.push(frameTime);
|
|
36
|
-
}
|
|
37
|
-
lastFrameTime = currTimestamp;
|
|
38
|
-
},
|
|
39
|
-
clearMetrics() {
|
|
40
|
-
lastFrameTime = null;
|
|
41
|
-
frameTimes = [];
|
|
42
|
-
performance.clearMeasures('loadTime');
|
|
43
|
-
performance.clearMeasures('fullLoadTime');
|
|
44
|
-
|
|
45
|
-
for (const marker in PerformanceMarkers) {
|
|
46
|
-
performance.clearMarks(PerformanceMarkers[marker]);
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
getPerformanceMetrics(): PerformanceMetrics {
|
|
50
|
-
const loadTime = performance.measure('loadTime', PerformanceMarkers.create, PerformanceMarkers.load).duration;
|
|
51
|
-
const fullLoadTime = performance.measure('fullLoadTime', PerformanceMarkers.create, PerformanceMarkers.fullLoad).duration;
|
|
52
|
-
const totalFrames = frameTimes.length;
|
|
53
|
-
|
|
54
|
-
const avgFrameTime = frameTimes.reduce((prev, curr) => prev + curr, 0) / totalFrames / 1000;
|
|
55
|
-
const fps = 1 / avgFrameTime;
|
|
56
|
-
|
|
57
|
-
// count frames that missed our framerate target
|
|
58
|
-
const droppedFrames = frameTimes
|
|
59
|
-
.filter((frameTime) => frameTime > frameTimeTarget)
|
|
60
|
-
.reduce((acc, curr) => {
|
|
61
|
-
return acc + (curr - frameTimeTarget) / frameTimeTarget;
|
|
62
|
-
}, 0);
|
|
63
|
-
const percentDroppedFrames = (droppedFrames / (totalFrames + droppedFrames)) * 100;
|
|
64
|
-
|
|
65
|
-
return {
|
|
66
|
-
loadTime,
|
|
67
|
-
fullLoadTime,
|
|
68
|
-
fps,
|
|
69
|
-
percentDroppedFrames
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Safe wrapper for the performance resource timing API in web workers with graceful degradation
|
|
76
|
-
*
|
|
77
|
-
* @param {RequestParameters} request
|
|
78
|
-
* @private
|
|
79
|
-
*/
|
|
80
|
-
export class RequestPerformance {
|
|
81
|
-
_marks: {start: string, end: string, measure: string};
|
|
82
|
-
|
|
83
|
-
constructor (request: RequestParameters) {
|
|
84
|
-
this._marks = {
|
|
85
|
-
start: [request.url, 'start'].join('#'),
|
|
86
|
-
end: [request.url, 'end'].join('#'),
|
|
87
|
-
measure: request.url.toString()
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
performance.mark(this._marks.start);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
finish() {
|
|
94
|
-
performance.mark(this._marks.end);
|
|
95
|
-
let resourceTimingData = performance.getEntriesByName(this._marks.measure);
|
|
96
|
-
|
|
97
|
-
// fallback if web worker implementation of perf.getEntriesByName returns empty
|
|
98
|
-
if (resourceTimingData.length === 0) {
|
|
99
|
-
performance.measure(this._marks.measure, this._marks.start, this._marks.end);
|
|
100
|
-
resourceTimingData = performance.getEntriesByName(this._marks.measure);
|
|
101
|
-
|
|
102
|
-
// cleanup
|
|
103
|
-
performance.clearMarks(this._marks.start);
|
|
104
|
-
performance.clearMarks(this._marks.end);
|
|
105
|
-
performance.clearMeasures(this._marks.measure);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
return resourceTimingData;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
export default performance;
|