mapbox-gl 1.13.2
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/.flowconfig +61 -0
- package/CHANGELOG.md +2485 -0
- package/LICENSE.txt +84 -0
- package/README.md +34 -0
- package/build/banner.js +4 -0
- package/build/check-bundle-size.js +140 -0
- package/build/diff-tarball.js +18 -0
- package/build/generate-access-token-script.js +11 -0
- package/build/generate-flow-typed-style-spec.js +188 -0
- package/build/generate-release-list.js +21 -0
- package/build/generate-struct-arrays.js +243 -0
- package/build/generate-style-code.js +159 -0
- package/build/mapbox-gl.js.flow +3 -0
- package/build/print-release-url.js +6 -0
- package/build/rollup_plugin_minify_style_spec.js +24 -0
- package/build/rollup_plugins.js +80 -0
- package/build/run-node +3 -0
- package/build/run-tap +8 -0
- package/build/test/build-tape.js +19 -0
- package/dist/mapbox-gl-csp-worker.js +2 -0
- package/dist/mapbox-gl-csp-worker.js.map +1 -0
- package/dist/mapbox-gl-csp.js +2 -0
- package/dist/mapbox-gl-csp.js.map +1 -0
- package/dist/mapbox-gl-dev.js +65889 -0
- package/dist/mapbox-gl-dev.js.flow +3 -0
- package/dist/mapbox-gl-unminified.js +42889 -0
- package/dist/mapbox-gl-unminified.js.map +1 -0
- package/dist/mapbox-gl.css +1 -0
- package/dist/mapbox-gl.js +42 -0
- package/dist/mapbox-gl.js.flow +3 -0
- package/dist/mapbox-gl.js.map +1 -0
- package/dist/style-spec/index.es.js +15032 -0
- package/dist/style-spec/index.es.js.map +1 -0
- package/dist/style-spec/index.js +15058 -0
- package/dist/style-spec/index.js.map +1 -0
- package/flow-typed/gl.js +5 -0
- package/flow-typed/jsdom.js +18 -0
- package/flow-typed/mapbox-gl-supported.js +9 -0
- package/flow-typed/mapbox-unitbezier.js +14 -0
- package/flow-typed/offscreen-canvas.js +9 -0
- package/flow-typed/pbf.js +25 -0
- package/flow-typed/point-geometry.js +44 -0
- package/flow-typed/potpack.js +12 -0
- package/flow-typed/sinon.js +28 -0
- package/flow-typed/vector-tile.js +41 -0
- package/package.json +173 -0
- package/src/css/mapbox-gl.css +812 -0
- package/src/css/svg/mapboxgl-ctrl-attrib.svg +3 -0
- package/src/css/svg/mapboxgl-ctrl-compass.svg +4 -0
- package/src/css/svg/mapboxgl-ctrl-fullscreen.svg +3 -0
- package/src/css/svg/mapboxgl-ctrl-geolocate.svg +5 -0
- package/src/css/svg/mapboxgl-ctrl-logo.svg +20 -0
- package/src/css/svg/mapboxgl-ctrl-shrink.svg +3 -0
- package/src/css/svg/mapboxgl-ctrl-zoom-in.svg +3 -0
- package/src/css/svg/mapboxgl-ctrl-zoom-out.svg +3 -0
- package/src/data/array_types.js +1135 -0
- package/src/data/bucket/circle_attributes.js +9 -0
- package/src/data/bucket/circle_bucket.js +201 -0
- package/src/data/bucket/fill_attributes.js +9 -0
- package/src/data/bucket/fill_bucket.js +229 -0
- package/src/data/bucket/fill_extrusion_attributes.js +10 -0
- package/src/data/bucket/fill_extrusion_bucket.js +283 -0
- package/src/data/bucket/heatmap_bucket.js +17 -0
- package/src/data/bucket/line_attributes.js +10 -0
- package/src/data/bucket/line_attributes_ext.js +10 -0
- package/src/data/bucket/line_bucket.js +594 -0
- package/src/data/bucket/pattern_attributes.js +12 -0
- package/src/data/bucket/pattern_bucket_features.js +60 -0
- package/src/data/bucket/symbol_attributes.js +117 -0
- package/src/data/bucket/symbol_bucket.js +937 -0
- package/src/data/bucket.js +123 -0
- package/src/data/dem_data.js +125 -0
- package/src/data/evaluation_feature.js +25 -0
- package/src/data/extent.js +18 -0
- package/src/data/feature_index.js +322 -0
- package/src/data/feature_position_map.js +131 -0
- package/src/data/index_array_type.js +16 -0
- package/src/data/load_geometry.js +46 -0
- package/src/data/pos_attributes.js +6 -0
- package/src/data/program_configuration.js +708 -0
- package/src/data/raster_bounds_attributes.js +7 -0
- package/src/data/segment.js +76 -0
- package/src/geo/edge_insets.js +102 -0
- package/src/geo/lng_lat.js +168 -0
- package/src/geo/lng_lat_bounds.js +276 -0
- package/src/geo/mercator_coordinate.js +150 -0
- package/src/geo/transform.js +834 -0
- package/src/gl/color_mode.js +34 -0
- package/src/gl/context.js +302 -0
- package/src/gl/cull_face_mode.js +26 -0
- package/src/gl/depth_mode.js +29 -0
- package/src/gl/framebuffer.js +44 -0
- package/src/gl/index_buffer.js +55 -0
- package/src/gl/stencil_mode.js +30 -0
- package/src/gl/types.js +84 -0
- package/src/gl/value.js +520 -0
- package/src/gl/vertex_buffer.js +119 -0
- package/src/index.js +230 -0
- package/src/render/draw_background.js +57 -0
- package/src/render/draw_circle.js +113 -0
- package/src/render/draw_collision_debug.js +172 -0
- package/src/render/draw_custom.js +49 -0
- package/src/render/draw_debug.js +127 -0
- package/src/render/draw_fill.js +124 -0
- package/src/render/draw_fill_extrusion.js +95 -0
- package/src/render/draw_heatmap.js +133 -0
- package/src/render/draw_hillshade.js +107 -0
- package/src/render/draw_line.js +125 -0
- package/src/render/draw_raster.js +125 -0
- package/src/render/draw_symbol.js +392 -0
- package/src/render/glyph_atlas.js +71 -0
- package/src/render/glyph_manager.js +182 -0
- package/src/render/image_atlas.js +149 -0
- package/src/render/image_manager.js +306 -0
- package/src/render/line_atlas.js +210 -0
- package/src/render/painter.js +654 -0
- package/src/render/program/background_program.js +103 -0
- package/src/render/program/circle_program.js +69 -0
- package/src/render/program/clipping_mask_program.js +20 -0
- package/src/render/program/collision_program.js +76 -0
- package/src/render/program/debug_program.js +35 -0
- package/src/render/program/fill_extrusion_program.js +122 -0
- package/src/render/program/fill_program.js +126 -0
- package/src/render/program/heatmap_program.js +83 -0
- package/src/render/program/hillshade_program.js +119 -0
- package/src/render/program/line_program.js +211 -0
- package/src/render/program/pattern.js +102 -0
- package/src/render/program/program_uniforms.js +42 -0
- package/src/render/program/raster_program.js +92 -0
- package/src/render/program/symbol_program.js +224 -0
- package/src/render/program.js +188 -0
- package/src/render/texture.js +122 -0
- package/src/render/uniform_binding.js +147 -0
- package/src/render/vertex_array_object.js +163 -0
- package/src/shaders/README.md +42 -0
- package/src/shaders/_prelude.fragment.glsl +17 -0
- package/src/shaders/_prelude.vertex.glsl +73 -0
- package/src/shaders/background.fragment.glsl +10 -0
- package/src/shaders/background.vertex.glsl +7 -0
- package/src/shaders/background_pattern.fragment.glsl +28 -0
- package/src/shaders/background_pattern.vertex.glsl +20 -0
- package/src/shaders/circle.fragment.glsl +39 -0
- package/src/shaders/circle.vertex.glsl +64 -0
- package/src/shaders/clipping_mask.fragment.glsl +3 -0
- package/src/shaders/clipping_mask.vertex.glsl +7 -0
- package/src/shaders/collision_box.fragment.glsl +21 -0
- package/src/shaders/collision_box.vertex.glsl +27 -0
- package/src/shaders/collision_circle.fragment.glsl +17 -0
- package/src/shaders/collision_circle.vertex.glsl +59 -0
- package/src/shaders/debug.fragment.glsl +9 -0
- package/src/shaders/debug.vertex.glsl +12 -0
- package/src/shaders/encode_attribute.js +17 -0
- package/src/shaders/fill.fragment.glsl +13 -0
- package/src/shaders/fill.vertex.glsl +13 -0
- package/src/shaders/fill_extrusion.fragment.glsl +9 -0
- package/src/shaders/fill_extrusion.vertex.glsl +66 -0
- package/src/shaders/fill_extrusion_pattern.fragment.glsl +45 -0
- package/src/shaders/fill_extrusion_pattern.vertex.glsl +79 -0
- package/src/shaders/fill_outline.fragment.glsl +17 -0
- package/src/shaders/fill_outline.vertex.glsl +17 -0
- package/src/shaders/fill_outline_pattern.fragment.glsl +43 -0
- package/src/shaders/fill_outline_pattern.vertex.glsl +44 -0
- package/src/shaders/fill_pattern.fragment.glsl +36 -0
- package/src/shaders/fill_pattern.vertex.glsl +39 -0
- package/src/shaders/heatmap.fragment.glsl +22 -0
- package/src/shaders/heatmap.vertex.glsl +54 -0
- package/src/shaders/heatmap_texture.fragment.glsl +14 -0
- package/src/shaders/heatmap_texture.vertex.glsl +11 -0
- package/src/shaders/hillshade.fragment.glsl +52 -0
- package/src/shaders/hillshade.vertex.glsl +11 -0
- package/src/shaders/hillshade_prepare.fragment.glsl +75 -0
- package/src/shaders/hillshade_prepare.vertex.glsl +15 -0
- package/src/shaders/index.js +20 -0
- package/src/shaders/line.fragment.glsl +30 -0
- package/src/shaders/line.vertex.glsl +85 -0
- package/src/shaders/line_gradient.fragment.glsl +34 -0
- package/src/shaders/line_gradient.vertex.glsl +88 -0
- package/src/shaders/line_pattern.fragment.glsl +74 -0
- package/src/shaders/line_pattern.vertex.glsl +99 -0
- package/src/shaders/line_sdf.fragment.glsl +45 -0
- package/src/shaders/line_sdf.vertex.glsl +98 -0
- package/src/shaders/raster.fragment.glsl +52 -0
- package/src/shaders/raster.vertex.glsl +21 -0
- package/src/shaders/shaders.js +185 -0
- package/src/shaders/symbol_icon.fragment.glsl +17 -0
- package/src/shaders/symbol_icon.vertex.glsl +94 -0
- package/src/shaders/symbol_sdf.fragment.glsl +52 -0
- package/src/shaders/symbol_sdf.vertex.glsl +115 -0
- package/src/shaders/symbol_text_and_icon.fragment.glsl +68 -0
- package/src/shaders/symbol_text_and_icon.vertex.glsl +116 -0
- package/src/source/canvas_source.js +238 -0
- package/src/source/geojson_source.js +370 -0
- package/src/source/geojson_worker_source.js +366 -0
- package/src/source/geojson_wrapper.js +94 -0
- package/src/source/image_source.js +307 -0
- package/src/source/load_tilejson.js +39 -0
- package/src/source/pixels_to_tile_units.js +21 -0
- package/src/source/query_features.js +208 -0
- package/src/source/raster_dem_tile_source.js +138 -0
- package/src/source/raster_dem_tile_worker_source.js +62 -0
- package/src/source/raster_tile_source.js +169 -0
- package/src/source/rtl_text_plugin.js +143 -0
- package/src/source/source.js +137 -0
- package/src/source/source_cache.js +953 -0
- package/src/source/source_state.js +159 -0
- package/src/source/tile.js +458 -0
- package/src/source/tile_bounds.js +38 -0
- package/src/source/tile_cache.js +212 -0
- package/src/source/tile_id.js +199 -0
- package/src/source/vector_tile_source.js +259 -0
- package/src/source/vector_tile_worker_source.js +216 -0
- package/src/source/video_source.js +203 -0
- package/src/source/worker.js +240 -0
- package/src/source/worker_source.js +107 -0
- package/src/source/worker_tile.js +224 -0
- package/src/style/create_style_layer.js +36 -0
- package/src/style/evaluation_parameters.js +62 -0
- package/src/style/format_section_override.js +56 -0
- package/src/style/light.js +130 -0
- package/src/style/load_glyph_range.js +38 -0
- package/src/style/load_sprite.js +67 -0
- package/src/style/parse_glyph_pbf.js +44 -0
- package/src/style/pauseable_placement.js +132 -0
- package/src/style/properties.js +753 -0
- package/src/style/query_utils.js +43 -0
- package/src/style/style.js +1374 -0
- package/src/style/style_glyph.js +17 -0
- package/src/style/style_image.js +137 -0
- package/src/style/style_layer/background_style_layer.js +21 -0
- package/src/style/style_layer/background_style_layer_properties.js +40 -0
- package/src/style/style_layer/circle_style_layer.js +98 -0
- package/src/style/style_layer/circle_style_layer_properties.js +63 -0
- package/src/style/style_layer/custom_style_layer.js +223 -0
- package/src/style/style_layer/fill_extrusion_style_layer.js +224 -0
- package/src/style/style_layer/fill_extrusion_style_layer_properties.js +50 -0
- package/src/style/style_layer/fill_style_layer.js +67 -0
- package/src/style/style_layer/fill_style_layer_properties.js +55 -0
- package/src/style/style_layer/heatmap_style_layer.js +73 -0
- package/src/style/style_layer/heatmap_style_layer_properties.js +44 -0
- package/src/style/style_layer/hillshade_style_layer.js +25 -0
- package/src/style/style_layer/hillshade_style_layer_properties.js +46 -0
- package/src/style/style_layer/layer_properties.js.ejs +69 -0
- package/src/style/style_layer/line_style_layer.js +150 -0
- package/src/style/style_layer/line_style_layer_properties.js +71 -0
- package/src/style/style_layer/raster_style_layer.js +21 -0
- package/src/style/style_layer/raster_style_layer_properties.js +50 -0
- package/src/style/style_layer/symbol_style_layer.js +190 -0
- package/src/style/style_layer/symbol_style_layer_properties.js +153 -0
- package/src/style/style_layer/typed_style_layer.js +17 -0
- package/src/style/style_layer.js +283 -0
- package/src/style/style_layer_index.js +80 -0
- package/src/style/validate_style.js +42 -0
- package/src/style/zoom_history.js +44 -0
- package/src/style-spec/.eslintrc +5 -0
- package/src/style-spec/CHANGELOG.md +468 -0
- package/src/style-spec/README.md +59 -0
- package/src/style-spec/bin/gl-style-composite +9 -0
- package/src/style-spec/bin/gl-style-format +22 -0
- package/src/style-spec/bin/gl-style-migrate +9 -0
- package/src/style-spec/bin/gl-style-validate +50 -0
- package/src/style-spec/composite.js +50 -0
- package/src/style-spec/declass.js +42 -0
- package/src/style-spec/deref.js +52 -0
- package/src/style-spec/diff.js +393 -0
- package/src/style-spec/dist/.gitkeep +0 -0
- package/src/style-spec/dist/index.es.js +15032 -0
- package/src/style-spec/dist/index.es.js.map +1 -0
- package/src/style-spec/dist/index.js +15058 -0
- package/src/style-spec/dist/index.js.map +1 -0
- package/src/style-spec/empty.js +29 -0
- package/src/style-spec/error/parsing_error.js +16 -0
- package/src/style-spec/error/validation_error.js +18 -0
- package/src/style-spec/expression/compound_expression.js +162 -0
- package/src/style-spec/expression/definitions/assertion.js +130 -0
- package/src/style-spec/expression/definitions/at.js +70 -0
- package/src/style-spec/expression/definitions/case.js +85 -0
- package/src/style-spec/expression/definitions/coalesce.js +93 -0
- package/src/style-spec/expression/definitions/coercion.js +133 -0
- package/src/style-spec/expression/definitions/collator.js +78 -0
- package/src/style-spec/expression/definitions/comparison.js +184 -0
- package/src/style-spec/expression/definitions/format.js +144 -0
- package/src/style-spec/expression/definitions/image.js +52 -0
- package/src/style-spec/expression/definitions/in.js +72 -0
- package/src/style-spec/expression/definitions/index.js +565 -0
- package/src/style-spec/expression/definitions/index_of.js +89 -0
- package/src/style-spec/expression/definitions/interpolate.js +267 -0
- package/src/style-spec/expression/definitions/length.js +61 -0
- package/src/style-spec/expression/definitions/let.js +72 -0
- package/src/style-spec/expression/definitions/literal.js +77 -0
- package/src/style-spec/expression/definitions/match.js +158 -0
- package/src/style-spec/expression/definitions/number_format.js +142 -0
- package/src/style-spec/expression/definitions/slice.js +86 -0
- package/src/style-spec/expression/definitions/step.js +120 -0
- package/src/style-spec/expression/definitions/var.js +46 -0
- package/src/style-spec/expression/definitions/within.js +342 -0
- package/src/style-spec/expression/evaluation_context.js +59 -0
- package/src/style-spec/expression/expression.js +27 -0
- package/src/style-spec/expression/index.js +392 -0
- package/src/style-spec/expression/is_constant.js +59 -0
- package/src/style-spec/expression/parsing_context.js +233 -0
- package/src/style-spec/expression/parsing_error.js +13 -0
- package/src/style-spec/expression/runtime_error.js +17 -0
- package/src/style-spec/expression/scope.js +36 -0
- package/src/style-spec/expression/stops.js +39 -0
- package/src/style-spec/expression/types/collator.js +61 -0
- package/src/style-spec/expression/types/formatted.js +73 -0
- package/src/style-spec/expression/types/resolved_image.js +29 -0
- package/src/style-spec/expression/types.js +126 -0
- package/src/style-spec/expression/values.js +123 -0
- package/src/style-spec/feature_filter/README.md +55 -0
- package/src/style-spec/feature_filter/convert.js +208 -0
- package/src/style-spec/feature_filter/index.js +175 -0
- package/src/style-spec/format.js +51 -0
- package/src/style-spec/function/convert.js +270 -0
- package/src/style-spec/function/index.js +262 -0
- package/src/style-spec/group_by_layout.js +75 -0
- package/src/style-spec/migrate/expressions.js +39 -0
- package/src/style-spec/migrate/v8.js +203 -0
- package/src/style-spec/migrate/v9.js +26 -0
- package/src/style-spec/migrate.js +36 -0
- package/src/style-spec/package.json +41 -0
- package/src/style-spec/read_style.js +14 -0
- package/src/style-spec/reference/latest.js +3 -0
- package/src/style-spec/reference/v8.json +5914 -0
- package/src/style-spec/rollup.config.js +65 -0
- package/src/style-spec/style-spec.js +124 -0
- package/src/style-spec/types.js +432 -0
- package/src/style-spec/util/color.js +95 -0
- package/src/style-spec/util/color_spaces.js +139 -0
- package/src/style-spec/util/deep_equal.js +28 -0
- package/src/style-spec/util/extend.js +10 -0
- package/src/style-spec/util/get_type.js +17 -0
- package/src/style-spec/util/interpolate.js +22 -0
- package/src/style-spec/util/properties.js +15 -0
- package/src/style-spec/util/ref_properties.js +2 -0
- package/src/style-spec/util/result.js +19 -0
- package/src/style-spec/util/unbundle_jsonlint.js +24 -0
- package/src/style-spec/validate/latest.js +11 -0
- package/src/style-spec/validate/validate.js +75 -0
- package/src/style-spec/validate/validate_array.js +52 -0
- package/src/style-spec/validate/validate_boolean.js +15 -0
- package/src/style-spec/validate/validate_color.js +20 -0
- package/src/style-spec/validate/validate_constants.js +13 -0
- package/src/style-spec/validate/validate_enum.js +21 -0
- package/src/style-spec/validate/validate_expression.js +43 -0
- package/src/style-spec/validate/validate_filter.js +117 -0
- package/src/style-spec/validate/validate_formatted.js +11 -0
- package/src/style-spec/validate/validate_function.js +207 -0
- package/src/style-spec/validate/validate_glyphs_url.js +21 -0
- package/src/style-spec/validate/validate_image.js +11 -0
- package/src/style-spec/validate/validate_layer.js +134 -0
- package/src/style-spec/validate/validate_layout_property.js +6 -0
- package/src/style-spec/validate/validate_light.js +47 -0
- package/src/style-spec/validate/validate_number.js +29 -0
- package/src/style-spec/validate/validate_object.js +61 -0
- package/src/style-spec/validate/validate_paint_property.js +6 -0
- package/src/style-spec/validate/validate_property.js +64 -0
- package/src/style-spec/validate/validate_source.js +111 -0
- package/src/style-spec/validate/validate_string.js +15 -0
- package/src/style-spec/validate_mapbox_api_supported.js +171 -0
- package/src/style-spec/validate_style.js +39 -0
- package/src/style-spec/validate_style.min.js +78 -0
- package/src/style-spec/visit.js +77 -0
- package/src/symbol/anchor.js +26 -0
- package/src/symbol/check_max_angle.js +81 -0
- package/src/symbol/clip_line.js +71 -0
- package/src/symbol/collision_feature.js +109 -0
- package/src/symbol/collision_index.js +373 -0
- package/src/symbol/cross_tile_symbol_index.js +301 -0
- package/src/symbol/get_anchors.js +167 -0
- package/src/symbol/grid_index.js +335 -0
- package/src/symbol/mergelines.js +82 -0
- package/src/symbol/one_em.js +4 -0
- package/src/symbol/opacity_state.js +27 -0
- package/src/symbol/path_interpolator.js +61 -0
- package/src/symbol/placement.js +1124 -0
- package/src/symbol/projection.js +451 -0
- package/src/symbol/quads.js +334 -0
- package/src/symbol/shaping.js +816 -0
- package/src/symbol/symbol_layout.js +796 -0
- package/src/symbol/symbol_size.js +113 -0
- package/src/symbol/transform_text.js +29 -0
- package/src/types/callback.js +17 -0
- package/src/types/cancelable.js +3 -0
- package/src/types/tilejson.js +17 -0
- package/src/types/transferable.js +3 -0
- package/src/types/window.js +172 -0
- package/src/ui/anchor.js +32 -0
- package/src/ui/camera.js +1277 -0
- package/src/ui/control/attribution_control.js +212 -0
- package/src/ui/control/fullscreen_control.js +147 -0
- package/src/ui/control/geolocate_control.js +707 -0
- package/src/ui/control/logo_control.js +92 -0
- package/src/ui/control/navigation_control.js +257 -0
- package/src/ui/control/scale_control.js +142 -0
- package/src/ui/default_locale.js +22 -0
- package/src/ui/events.js +1301 -0
- package/src/ui/handler/box_zoom.js +170 -0
- package/src/ui/handler/click_zoom.js +52 -0
- package/src/ui/handler/handler_util.js +12 -0
- package/src/ui/handler/keyboard.js +208 -0
- package/src/ui/handler/map_event.js +156 -0
- package/src/ui/handler/mouse.js +171 -0
- package/src/ui/handler/scroll_zoom.js +350 -0
- package/src/ui/handler/shim/dblclick_zoom.js +62 -0
- package/src/ui/handler/shim/drag_pan.js +88 -0
- package/src/ui/handler/shim/drag_rotate.js +67 -0
- package/src/ui/handler/shim/touch_zoom_rotate.js +108 -0
- package/src/ui/handler/tap_drag_zoom.js +103 -0
- package/src/ui/handler/tap_recognizer.js +133 -0
- package/src/ui/handler/tap_zoom.js +93 -0
- package/src/ui/handler/touch_pan.js +101 -0
- package/src/ui/handler/touch_zoom_rotate.js +305 -0
- package/src/ui/handler_inertia.js +158 -0
- package/src/ui/handler_manager.js +531 -0
- package/src/ui/hash.js +148 -0
- package/src/ui/map.js +2874 -0
- package/src/ui/marker.js +672 -0
- package/src/ui/popup.js +640 -0
- package/src/util/actor.js +212 -0
- package/src/util/ajax.js +388 -0
- package/src/util/browser/web_worker.js +10 -0
- package/src/util/browser/window.js +6 -0
- package/src/util/browser.js +70 -0
- package/src/util/classify_rings.js +52 -0
- package/src/util/color_ramp.js +61 -0
- package/src/util/config.js +30 -0
- package/src/util/debug.js +28 -0
- package/src/util/dictionary_coder.js +30 -0
- package/src/util/dispatcher.js +70 -0
- package/src/util/dom.js +142 -0
- package/src/util/evented.js +174 -0
- package/src/util/find_pole_of_inaccessibility.js +129 -0
- package/src/util/global_worker_pool.js +35 -0
- package/src/util/image.js +142 -0
- package/src/util/intersection_tests.js +208 -0
- package/src/util/is_char_in_unicode_block.js +311 -0
- package/src/util/mapbox.js +491 -0
- package/src/util/offscreen_canvas_supported.js +14 -0
- package/src/util/performance.js +112 -0
- package/src/util/primitives.js +145 -0
- package/src/util/resolve_tokens.js +16 -0
- package/src/util/script_detection.js +328 -0
- package/src/util/sku_token.js +42 -0
- package/src/util/smart_wrap.js +55 -0
- package/src/util/struct_array.js +243 -0
- package/src/util/struct_array.js.ejs +112 -0
- package/src/util/struct_array_layout.js.ejs +98 -0
- package/src/util/task_queue.js +68 -0
- package/src/util/throttle.js +27 -0
- package/src/util/throttled_invoker.js +46 -0
- package/src/util/tile_request_cache.js +172 -0
- package/src/util/util.js +524 -0
- package/src/util/vectortile_to_geojson.js +50 -0
- package/src/util/verticalize_punctuation.js +114 -0
- package/src/util/web_worker.js +91 -0
- package/src/util/web_worker_transfer.js +266 -0
- package/src/util/webp_supported.js +69 -0
- package/src/util/window.js +102 -0
- package/src/util/worker_pool.js +57 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
class RuntimeError {
|
|
4
|
+
name: string;
|
|
5
|
+
message: string;
|
|
6
|
+
|
|
7
|
+
constructor(message: string) {
|
|
8
|
+
this.name = 'ExpressionEvaluationError';
|
|
9
|
+
this.message = message;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
toJSON() {
|
|
13
|
+
return this.message;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export default RuntimeError;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
import type {Expression} from './expression';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Tracks `let` bindings during expression parsing.
|
|
7
|
+
* @private
|
|
8
|
+
*/
|
|
9
|
+
class Scope {
|
|
10
|
+
parent: ?Scope;
|
|
11
|
+
bindings: {[_: string]: Expression};
|
|
12
|
+
constructor(parent?: Scope, bindings: Array<[string, Expression]> = []) {
|
|
13
|
+
this.parent = parent;
|
|
14
|
+
this.bindings = {};
|
|
15
|
+
for (const [name, expression] of bindings) {
|
|
16
|
+
this.bindings[name] = expression;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
concat(bindings: Array<[string, Expression]>) {
|
|
21
|
+
return new Scope(this, bindings);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
get(name: string): Expression {
|
|
25
|
+
if (this.bindings[name]) { return this.bindings[name]; }
|
|
26
|
+
if (this.parent) { return this.parent.get(name); }
|
|
27
|
+
throw new Error(`${name} not found in scope.`);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
has(name: string): boolean {
|
|
31
|
+
if (this.bindings[name]) return true;
|
|
32
|
+
return this.parent ? this.parent.has(name) : false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export default Scope;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
import RuntimeError from './runtime_error';
|
|
4
|
+
|
|
5
|
+
import type {Expression} from './expression';
|
|
6
|
+
|
|
7
|
+
export type Stops = Array<[number, Expression]>;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Returns the index of the last stop <= input, or 0 if it doesn't exist.
|
|
11
|
+
* @private
|
|
12
|
+
*/
|
|
13
|
+
export function findStopLessThanOrEqualTo(stops: Array<number>, input: number) {
|
|
14
|
+
const lastIndex = stops.length - 1;
|
|
15
|
+
let lowerIndex = 0;
|
|
16
|
+
let upperIndex = lastIndex;
|
|
17
|
+
let currentIndex = 0;
|
|
18
|
+
let currentValue, nextValue;
|
|
19
|
+
|
|
20
|
+
while (lowerIndex <= upperIndex) {
|
|
21
|
+
currentIndex = Math.floor((lowerIndex + upperIndex) / 2);
|
|
22
|
+
currentValue = stops[currentIndex];
|
|
23
|
+
nextValue = stops[currentIndex + 1];
|
|
24
|
+
|
|
25
|
+
if (currentValue <= input) {
|
|
26
|
+
if (currentIndex === lastIndex || input < nextValue) { // Search complete
|
|
27
|
+
return currentIndex;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
lowerIndex = currentIndex + 1;
|
|
31
|
+
} else if (currentValue > input) {
|
|
32
|
+
upperIndex = currentIndex - 1;
|
|
33
|
+
} else {
|
|
34
|
+
throw new RuntimeError('Input is not a number.');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return 0;
|
|
39
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
// Flow type declarations for Intl cribbed from
|
|
4
|
+
// https://github.com/facebook/flow/issues/1270
|
|
5
|
+
|
|
6
|
+
declare var Intl: {
|
|
7
|
+
Collator: Class<Intl$Collator>
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
declare class Intl$Collator {
|
|
11
|
+
constructor (
|
|
12
|
+
locales?: string | string[],
|
|
13
|
+
options?: CollatorOptions
|
|
14
|
+
): Intl$Collator;
|
|
15
|
+
|
|
16
|
+
static (
|
|
17
|
+
locales?: string | string[],
|
|
18
|
+
options?: CollatorOptions
|
|
19
|
+
): Intl$Collator;
|
|
20
|
+
|
|
21
|
+
compare (a: string, b: string): number;
|
|
22
|
+
|
|
23
|
+
resolvedOptions(): any;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
type CollatorOptions = {
|
|
27
|
+
localeMatcher?: 'lookup' | 'best fit',
|
|
28
|
+
usage?: 'sort' | 'search',
|
|
29
|
+
sensitivity?: 'base' | 'accent' | 'case' | 'variant',
|
|
30
|
+
ignorePunctuation?: boolean,
|
|
31
|
+
numeric?: boolean,
|
|
32
|
+
caseFirst?: 'upper' | 'lower' | 'false'
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export default class Collator {
|
|
36
|
+
locale: string | null;
|
|
37
|
+
sensitivity: 'base' | 'accent' | 'case' | 'variant';
|
|
38
|
+
collator: Intl$Collator;
|
|
39
|
+
|
|
40
|
+
constructor(caseSensitive: boolean, diacriticSensitive: boolean, locale: string | null) {
|
|
41
|
+
if (caseSensitive)
|
|
42
|
+
this.sensitivity = diacriticSensitive ? 'variant' : 'case';
|
|
43
|
+
else
|
|
44
|
+
this.sensitivity = diacriticSensitive ? 'accent' : 'base';
|
|
45
|
+
|
|
46
|
+
this.locale = locale;
|
|
47
|
+
this.collator = new Intl.Collator(this.locale ? this.locale : [],
|
|
48
|
+
{sensitivity: this.sensitivity, usage: 'search'});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
compare(lhs: string, rhs: string): number {
|
|
52
|
+
return this.collator.compare(lhs, rhs);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
resolvedLocale(): string {
|
|
56
|
+
// We create a Collator without "usage: search" because we don't want
|
|
57
|
+
// the search options encoded in our result (e.g. "en-u-co-search")
|
|
58
|
+
return new Intl.Collator(this.locale ? this.locale : [])
|
|
59
|
+
.resolvedOptions().locale;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import type Color from '../../util/color';
|
|
3
|
+
import type ResolvedImage from '../types/resolved_image';
|
|
4
|
+
|
|
5
|
+
export class FormattedSection {
|
|
6
|
+
text: string;
|
|
7
|
+
image: ResolvedImage | null;
|
|
8
|
+
scale: number | null;
|
|
9
|
+
fontStack: string | null;
|
|
10
|
+
textColor: Color | null;
|
|
11
|
+
|
|
12
|
+
constructor(text: string, image: ResolvedImage | null, scale: number | null, fontStack: string | null, textColor: Color | null) {
|
|
13
|
+
this.text = text;
|
|
14
|
+
this.image = image;
|
|
15
|
+
this.scale = scale;
|
|
16
|
+
this.fontStack = fontStack;
|
|
17
|
+
this.textColor = textColor;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export default class Formatted {
|
|
22
|
+
sections: Array<FormattedSection>;
|
|
23
|
+
|
|
24
|
+
constructor(sections: Array<FormattedSection>) {
|
|
25
|
+
this.sections = sections;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
static fromString(unformatted: string): Formatted {
|
|
29
|
+
return new Formatted([new FormattedSection(unformatted, null, null, null, null)]);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
isEmpty(): boolean {
|
|
33
|
+
if (this.sections.length === 0) return true;
|
|
34
|
+
return !this.sections.some(section => section.text.length !== 0 ||
|
|
35
|
+
(section.image && section.image.name.length !== 0));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
static factory(text: Formatted | string): Formatted {
|
|
39
|
+
if (text instanceof Formatted) {
|
|
40
|
+
return text;
|
|
41
|
+
} else {
|
|
42
|
+
return Formatted.fromString(text);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
toString(): string {
|
|
47
|
+
if (this.sections.length === 0) return '';
|
|
48
|
+
return this.sections.map(section => section.text).join('');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
serialize(): Array<mixed> {
|
|
52
|
+
const serialized: Array<mixed> = ["format"];
|
|
53
|
+
for (const section of this.sections) {
|
|
54
|
+
if (section.image) {
|
|
55
|
+
serialized.push(["image", section.image.name]);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
serialized.push(section.text);
|
|
59
|
+
const options: { [key: string]: mixed } = {};
|
|
60
|
+
if (section.fontStack) {
|
|
61
|
+
options["text-font"] = ["literal", section.fontStack.split(',')];
|
|
62
|
+
}
|
|
63
|
+
if (section.scale) {
|
|
64
|
+
options["font-scale"] = section.scale;
|
|
65
|
+
}
|
|
66
|
+
if (section.textColor) {
|
|
67
|
+
options["text-color"] = (["rgba"]: Array<mixed>).concat(section.textColor.toArray());
|
|
68
|
+
}
|
|
69
|
+
serialized.push(options);
|
|
70
|
+
}
|
|
71
|
+
return serialized;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
export type ResolvedImageOptions = {
|
|
4
|
+
name: string,
|
|
5
|
+
available: boolean
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export default class ResolvedImage {
|
|
9
|
+
name: string;
|
|
10
|
+
available: boolean;
|
|
11
|
+
|
|
12
|
+
constructor(options: ResolvedImageOptions) {
|
|
13
|
+
this.name = options.name;
|
|
14
|
+
this.available = options.available;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
toString(): string {
|
|
18
|
+
return this.name;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
static fromString(name: string): ResolvedImage | null {
|
|
22
|
+
if (!name) return null; // treat empty values as no image
|
|
23
|
+
return new ResolvedImage({name, available: false});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
serialize(): Array<string> {
|
|
27
|
+
return ["image", this.name];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
export type NullTypeT = { kind: 'null' };
|
|
4
|
+
export type NumberTypeT = { kind: 'number' };
|
|
5
|
+
export type StringTypeT = { kind: 'string' };
|
|
6
|
+
export type BooleanTypeT = { kind: 'boolean' };
|
|
7
|
+
export type ColorTypeT = { kind: 'color' };
|
|
8
|
+
export type ObjectTypeT = { kind: 'object' };
|
|
9
|
+
export type ValueTypeT = { kind: 'value' };
|
|
10
|
+
export type ErrorTypeT = { kind: 'error' };
|
|
11
|
+
export type CollatorTypeT = { kind: 'collator' };
|
|
12
|
+
export type FormattedTypeT = { kind: 'formatted' };
|
|
13
|
+
export type ResolvedImageTypeT = { kind: 'resolvedImage' };
|
|
14
|
+
|
|
15
|
+
export type EvaluationKind = 'constant' | 'source' | 'camera' | 'composite';
|
|
16
|
+
|
|
17
|
+
export type Type =
|
|
18
|
+
NullTypeT |
|
|
19
|
+
NumberTypeT |
|
|
20
|
+
StringTypeT |
|
|
21
|
+
BooleanTypeT |
|
|
22
|
+
ColorTypeT |
|
|
23
|
+
ObjectTypeT |
|
|
24
|
+
ValueTypeT |
|
|
25
|
+
ArrayType | // eslint-disable-line no-use-before-define
|
|
26
|
+
ErrorTypeT |
|
|
27
|
+
CollatorTypeT |
|
|
28
|
+
FormattedTypeT |
|
|
29
|
+
ResolvedImageTypeT
|
|
30
|
+
|
|
31
|
+
export type ArrayType = {
|
|
32
|
+
kind: 'array',
|
|
33
|
+
itemType: Type,
|
|
34
|
+
N: ?number
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export type NativeType = 'number' | 'string' | 'boolean' | 'null' | 'array' | 'object'
|
|
38
|
+
|
|
39
|
+
export const NullType = {kind: 'null'};
|
|
40
|
+
export const NumberType = {kind: 'number'};
|
|
41
|
+
export const StringType = {kind: 'string'};
|
|
42
|
+
export const BooleanType = {kind: 'boolean'};
|
|
43
|
+
export const ColorType = {kind: 'color'};
|
|
44
|
+
export const ObjectType = {kind: 'object'};
|
|
45
|
+
export const ValueType = {kind: 'value'};
|
|
46
|
+
export const ErrorType = {kind: 'error'};
|
|
47
|
+
export const CollatorType = {kind: 'collator'};
|
|
48
|
+
export const FormattedType = {kind: 'formatted'};
|
|
49
|
+
export const ResolvedImageType = {kind: 'resolvedImage'};
|
|
50
|
+
|
|
51
|
+
export function array(itemType: Type, N: ?number): ArrayType {
|
|
52
|
+
return {
|
|
53
|
+
kind: 'array',
|
|
54
|
+
itemType,
|
|
55
|
+
N
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function toString(type: Type): string {
|
|
60
|
+
if (type.kind === 'array') {
|
|
61
|
+
const itemType = toString(type.itemType);
|
|
62
|
+
return typeof type.N === 'number' ?
|
|
63
|
+
`array<${itemType}, ${type.N}>` :
|
|
64
|
+
type.itemType.kind === 'value' ? 'array' : `array<${itemType}>`;
|
|
65
|
+
} else {
|
|
66
|
+
return type.kind;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const valueMemberTypes = [
|
|
71
|
+
NullType,
|
|
72
|
+
NumberType,
|
|
73
|
+
StringType,
|
|
74
|
+
BooleanType,
|
|
75
|
+
ColorType,
|
|
76
|
+
FormattedType,
|
|
77
|
+
ObjectType,
|
|
78
|
+
array(ValueType),
|
|
79
|
+
ResolvedImageType
|
|
80
|
+
];
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Returns null if `t` is a subtype of `expected`; otherwise returns an
|
|
84
|
+
* error message.
|
|
85
|
+
* @private
|
|
86
|
+
*/
|
|
87
|
+
export function checkSubtype(expected: Type, t: Type): ?string {
|
|
88
|
+
if (t.kind === 'error') {
|
|
89
|
+
// Error is a subtype of every type
|
|
90
|
+
return null;
|
|
91
|
+
} else if (expected.kind === 'array') {
|
|
92
|
+
if (t.kind === 'array' &&
|
|
93
|
+
((t.N === 0 && t.itemType.kind === 'value') || !checkSubtype(expected.itemType, t.itemType)) &&
|
|
94
|
+
(typeof expected.N !== 'number' || expected.N === t.N)) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
} else if (expected.kind === t.kind) {
|
|
98
|
+
return null;
|
|
99
|
+
} else if (expected.kind === 'value') {
|
|
100
|
+
for (const memberType of valueMemberTypes) {
|
|
101
|
+
if (!checkSubtype(memberType, t)) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return `Expected ${toString(expected)} but found ${toString(t)} instead.`;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export function isValidType(provided: Type, allowedTypes: Array<Type>): boolean {
|
|
111
|
+
return allowedTypes.some(t => t.kind === provided.kind);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export function isValidNativeType(provided: any, allowedTypes: Array<NativeType>): boolean {
|
|
115
|
+
return allowedTypes.some(t => {
|
|
116
|
+
if (t === 'null') {
|
|
117
|
+
return provided === null;
|
|
118
|
+
} else if (t === 'array') {
|
|
119
|
+
return Array.isArray(provided);
|
|
120
|
+
} else if (t === 'object') {
|
|
121
|
+
return provided && !Array.isArray(provided) && typeof provided === 'object';
|
|
122
|
+
} else {
|
|
123
|
+
return t === typeof provided;
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
import assert from 'assert';
|
|
4
|
+
|
|
5
|
+
import Color from '../util/color';
|
|
6
|
+
import Collator from './types/collator';
|
|
7
|
+
import Formatted from './types/formatted';
|
|
8
|
+
import ResolvedImage from './types/resolved_image';
|
|
9
|
+
import {NullType, NumberType, StringType, BooleanType, ColorType, ObjectType, ValueType, CollatorType, FormattedType, ResolvedImageType, array} from './types';
|
|
10
|
+
|
|
11
|
+
import type {Type} from './types';
|
|
12
|
+
|
|
13
|
+
export function validateRGBA(r: mixed, g: mixed, b: mixed, a?: mixed): string | null {
|
|
14
|
+
if (!(
|
|
15
|
+
typeof r === 'number' && r >= 0 && r <= 255 &&
|
|
16
|
+
typeof g === 'number' && g >= 0 && g <= 255 &&
|
|
17
|
+
typeof b === 'number' && b >= 0 && b <= 255
|
|
18
|
+
)) {
|
|
19
|
+
const value = typeof a === 'number' ? [r, g, b, a] : [r, g, b];
|
|
20
|
+
return `Invalid rgba value [${value.join(', ')}]: 'r', 'g', and 'b' must be between 0 and 255.`;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (!(
|
|
24
|
+
typeof a === 'undefined' || (typeof a === 'number' && a >= 0 && a <= 1)
|
|
25
|
+
)) {
|
|
26
|
+
return `Invalid rgba value [${[r, g, b, a].join(', ')}]: 'a' must be between 0 and 1.`;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export type Value = null | string | boolean | number | Color | Collator | Formatted | ResolvedImage | $ReadOnlyArray<Value> | { +[string]: Value }
|
|
33
|
+
|
|
34
|
+
export function isValue(mixed: mixed): boolean {
|
|
35
|
+
if (mixed === null) {
|
|
36
|
+
return true;
|
|
37
|
+
} else if (typeof mixed === 'string') {
|
|
38
|
+
return true;
|
|
39
|
+
} else if (typeof mixed === 'boolean') {
|
|
40
|
+
return true;
|
|
41
|
+
} else if (typeof mixed === 'number') {
|
|
42
|
+
return true;
|
|
43
|
+
} else if (mixed instanceof Color) {
|
|
44
|
+
return true;
|
|
45
|
+
} else if (mixed instanceof Collator) {
|
|
46
|
+
return true;
|
|
47
|
+
} else if (mixed instanceof Formatted) {
|
|
48
|
+
return true;
|
|
49
|
+
} else if (mixed instanceof ResolvedImage) {
|
|
50
|
+
return true;
|
|
51
|
+
} else if (Array.isArray(mixed)) {
|
|
52
|
+
for (const item of mixed) {
|
|
53
|
+
if (!isValue(item)) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return true;
|
|
58
|
+
} else if (typeof mixed === 'object') {
|
|
59
|
+
for (const key in mixed) {
|
|
60
|
+
if (!isValue(mixed[key])) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return true;
|
|
65
|
+
} else {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function typeOf(value: Value): Type {
|
|
71
|
+
if (value === null) {
|
|
72
|
+
return NullType;
|
|
73
|
+
} else if (typeof value === 'string') {
|
|
74
|
+
return StringType;
|
|
75
|
+
} else if (typeof value === 'boolean') {
|
|
76
|
+
return BooleanType;
|
|
77
|
+
} else if (typeof value === 'number') {
|
|
78
|
+
return NumberType;
|
|
79
|
+
} else if (value instanceof Color) {
|
|
80
|
+
return ColorType;
|
|
81
|
+
} else if (value instanceof Collator) {
|
|
82
|
+
return CollatorType;
|
|
83
|
+
} else if (value instanceof Formatted) {
|
|
84
|
+
return FormattedType;
|
|
85
|
+
} else if (value instanceof ResolvedImage) {
|
|
86
|
+
return ResolvedImageType;
|
|
87
|
+
} else if (Array.isArray(value)) {
|
|
88
|
+
const length = value.length;
|
|
89
|
+
let itemType: Type | typeof undefined;
|
|
90
|
+
|
|
91
|
+
for (const item of value) {
|
|
92
|
+
const t = typeOf(item);
|
|
93
|
+
if (!itemType) {
|
|
94
|
+
itemType = t;
|
|
95
|
+
} else if (itemType === t) {
|
|
96
|
+
continue;
|
|
97
|
+
} else {
|
|
98
|
+
itemType = ValueType;
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return array(itemType || ValueType, length);
|
|
104
|
+
} else {
|
|
105
|
+
assert(typeof value === 'object');
|
|
106
|
+
return ObjectType;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export function toString(value: Value) {
|
|
111
|
+
const type = typeof value;
|
|
112
|
+
if (value === null) {
|
|
113
|
+
return '';
|
|
114
|
+
} else if (type === 'string' || type === 'number' || type === 'boolean') {
|
|
115
|
+
return String(value);
|
|
116
|
+
} else if (value instanceof Color || value instanceof Formatted || value instanceof ResolvedImage) {
|
|
117
|
+
return value.toString();
|
|
118
|
+
} else {
|
|
119
|
+
return JSON.stringify(value);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export {Color, Collator};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
## Filter
|
|
2
|
+
|
|
3
|
+
Filter expressions are used to target specific data in a layer. This library implements the semantics specified by the [Mapbox GL JS spec](https://www.mapbox.com/mapbox-gl-style-spec/#filter).
|
|
4
|
+
|
|
5
|
+
### API
|
|
6
|
+
|
|
7
|
+
`featureFilter(filter)`
|
|
8
|
+
|
|
9
|
+
Given a filter expressed as nested arrays, return a new function
|
|
10
|
+
that evaluates whether a given feature (with a .properties or .tags property)
|
|
11
|
+
passes its test.
|
|
12
|
+
|
|
13
|
+
#### Parameters
|
|
14
|
+
|
|
15
|
+
| parameter | type | description |
|
|
16
|
+
| --------- | ----- | ---------------- |
|
|
17
|
+
| `filter` | Array | mapbox gl filter |
|
|
18
|
+
|
|
19
|
+
**Returns** `Function`, filter-evaluating function
|
|
20
|
+
|
|
21
|
+
### Usage
|
|
22
|
+
|
|
23
|
+
``` javascript
|
|
24
|
+
var ff = require('@mapbox/mapbox-gl-style-spec').featureFilter;
|
|
25
|
+
|
|
26
|
+
// will match a feature with class of street_limited,
|
|
27
|
+
// AND an admin_level less than or equal to 3,
|
|
28
|
+
// that's NOT a polygon.
|
|
29
|
+
var filter = [
|
|
30
|
+
"all",
|
|
31
|
+
["==", "class", "street_limited"],
|
|
32
|
+
["<=", "admin_level", 3],
|
|
33
|
+
["!=", "$type", "Polygon"]
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
// will match a feature that has a class of
|
|
37
|
+
// wetland OR wetland_noveg.
|
|
38
|
+
// ["in", "class", "wetland", "wetland_noveg"]
|
|
39
|
+
|
|
40
|
+
// testFilter will be a function that returns a boolean
|
|
41
|
+
var testFilter = ff(filter);
|
|
42
|
+
|
|
43
|
+
// Layer feature that you're testing. Must have type
|
|
44
|
+
// and properties keys.
|
|
45
|
+
var feature = {
|
|
46
|
+
type: 2,
|
|
47
|
+
properties: {
|
|
48
|
+
class: "street_limited",
|
|
49
|
+
admin_level: 1
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
// will return a boolean based on whether the feature matched the filter
|
|
54
|
+
return testFilter({zoom: 0}, feature);
|
|
55
|
+
```
|