@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
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
import Scope from './scope';
|
|
4
|
-
import {checkSubtype} from './types';
|
|
5
|
-
import ParsingError from './parsing_error';
|
|
6
|
-
import Literal from './definitions/literal';
|
|
7
|
-
import Assertion from './definitions/assertion';
|
|
8
|
-
import Coercion from './definitions/coercion';
|
|
9
|
-
import EvaluationContext from './evaluation_context';
|
|
10
|
-
import CompoundExpression from './compound_expression';
|
|
11
|
-
import CollatorExpression from './definitions/collator';
|
|
12
|
-
import Within from './definitions/within';
|
|
13
|
-
import {isGlobalPropertyConstant, isFeatureConstant} from './is_constant';
|
|
14
|
-
import Var from './definitions/var';
|
|
15
|
-
|
|
16
|
-
import type {Expression, ExpressionRegistry} from './expression';
|
|
17
|
-
import type {Type} from './types';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* State associated parsing at a given point in an expression tree.
|
|
21
|
-
* @private
|
|
22
|
-
*/
|
|
23
|
-
class ParsingContext {
|
|
24
|
-
registry: ExpressionRegistry;
|
|
25
|
-
path: Array<number>;
|
|
26
|
-
key: string;
|
|
27
|
-
scope: Scope;
|
|
28
|
-
errors: Array<ParsingError>;
|
|
29
|
-
|
|
30
|
-
// The expected type of this expression. Provided only to allow Expression
|
|
31
|
-
// implementations to infer argument types: Expression#parse() need not
|
|
32
|
-
// check that the output type of the parsed expression matches
|
|
33
|
-
// `expectedType`.
|
|
34
|
-
expectedType: ?Type;
|
|
35
|
-
|
|
36
|
-
constructor(
|
|
37
|
-
registry: ExpressionRegistry,
|
|
38
|
-
path: Array<number> = [],
|
|
39
|
-
expectedType: ?Type,
|
|
40
|
-
scope: Scope = new Scope(),
|
|
41
|
-
errors: Array<ParsingError> = []
|
|
42
|
-
) {
|
|
43
|
-
this.registry = registry;
|
|
44
|
-
this.path = path;
|
|
45
|
-
this.key = path.map(part => `[${part}]`).join('');
|
|
46
|
-
this.scope = scope;
|
|
47
|
-
this.errors = errors;
|
|
48
|
-
this.expectedType = expectedType;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* @param expr the JSON expression to parse
|
|
53
|
-
* @param index the optional argument index if this expression is an argument of a parent expression that's being parsed
|
|
54
|
-
* @param options
|
|
55
|
-
* @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.
|
|
56
|
-
* @private
|
|
57
|
-
*/
|
|
58
|
-
parse(
|
|
59
|
-
expr: mixed,
|
|
60
|
-
index?: number,
|
|
61
|
-
expectedType?: ?Type,
|
|
62
|
-
bindings?: Array<[string, Expression]>,
|
|
63
|
-
options: {typeAnnotation?: 'assert' | 'coerce' | 'omit'} = {}
|
|
64
|
-
): ?Expression {
|
|
65
|
-
if (index) {
|
|
66
|
-
return this.concat(index, expectedType, bindings)._parse(expr, options);
|
|
67
|
-
}
|
|
68
|
-
return this._parse(expr, options);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
_parse(expr: mixed, options: {typeAnnotation?: 'assert' | 'coerce' | 'omit'}): ?Expression {
|
|
72
|
-
if (expr === null || typeof expr === 'string' || typeof expr === 'boolean' || typeof expr === 'number') {
|
|
73
|
-
expr = ['literal', expr];
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function annotate(parsed, type, typeAnnotation: 'assert' | 'coerce' | 'omit') {
|
|
77
|
-
if (typeAnnotation === 'assert') {
|
|
78
|
-
return new Assertion(type, [parsed]);
|
|
79
|
-
} else if (typeAnnotation === 'coerce') {
|
|
80
|
-
return new Coercion(type, [parsed]);
|
|
81
|
-
} else {
|
|
82
|
-
return parsed;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
if (Array.isArray(expr)) {
|
|
87
|
-
if (expr.length === 0) {
|
|
88
|
-
return this.error(`Expected an array with at least one element. If you wanted a literal array, use ["literal", []].`);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
const op = expr[0];
|
|
92
|
-
if (typeof op !== 'string') {
|
|
93
|
-
this.error(`Expression name must be a string, but found ${typeof op} instead. If you wanted a literal array, use ["literal", [...]].`, 0);
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
const Expr = this.registry[op];
|
|
98
|
-
if (Expr) {
|
|
99
|
-
let parsed = Expr.parse(expr, this);
|
|
100
|
-
if (!parsed) return null;
|
|
101
|
-
|
|
102
|
-
if (this.expectedType) {
|
|
103
|
-
const expected = this.expectedType;
|
|
104
|
-
const actual = parsed.type;
|
|
105
|
-
|
|
106
|
-
// When we expect a number, string, boolean, or array but have a value, wrap it in an assertion.
|
|
107
|
-
// When we expect a color or formatted string, but have a string or value, wrap it in a coercion.
|
|
108
|
-
// Otherwise, we do static type-checking.
|
|
109
|
-
//
|
|
110
|
-
// These behaviors are overridable for:
|
|
111
|
-
// * The "coalesce" operator, which needs to omit type annotations.
|
|
112
|
-
// * String-valued properties (e.g. `text-field`), where coercion is more convenient than assertion.
|
|
113
|
-
//
|
|
114
|
-
if ((expected.kind === 'string' || expected.kind === 'number' || expected.kind === 'boolean' || expected.kind === 'object' || expected.kind === 'array') && actual.kind === 'value') {
|
|
115
|
-
parsed = annotate(parsed, expected, options.typeAnnotation || 'assert');
|
|
116
|
-
} else if ((expected.kind === 'color' || expected.kind === 'formatted' || expected.kind === 'resolvedImage') && (actual.kind === 'value' || actual.kind === 'string')) {
|
|
117
|
-
parsed = annotate(parsed, expected, options.typeAnnotation || 'coerce');
|
|
118
|
-
} else if (this.checkSubtype(expected, actual)) {
|
|
119
|
-
return null;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// If an expression's arguments are all literals, we can evaluate
|
|
124
|
-
// it immediately and replace it with a literal value in the
|
|
125
|
-
// parsed/compiled result. Expressions that expect an image should
|
|
126
|
-
// not be resolved here so we can later get the available images.
|
|
127
|
-
if (!(parsed instanceof Literal) && (parsed.type.kind !== 'resolvedImage') && isConstant(parsed)) {
|
|
128
|
-
const ec = new EvaluationContext();
|
|
129
|
-
try {
|
|
130
|
-
parsed = new Literal(parsed.type, parsed.evaluate(ec));
|
|
131
|
-
} catch (e) {
|
|
132
|
-
this.error(e.message);
|
|
133
|
-
return null;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return parsed;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
return this.error(`Unknown expression "${op}". If you wanted a literal array, use ["literal", [...]].`, 0);
|
|
141
|
-
} else if (typeof expr === 'undefined') {
|
|
142
|
-
return this.error(`'undefined' value invalid. Use null instead.`);
|
|
143
|
-
} else if (typeof expr === 'object') {
|
|
144
|
-
return this.error(`Bare objects invalid. Use ["literal", {...}] instead.`);
|
|
145
|
-
} else {
|
|
146
|
-
return this.error(`Expected an array, but found ${typeof expr} instead.`);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Returns a copy of this context suitable for parsing the subexpression at
|
|
152
|
-
* index `index`, optionally appending to 'let' binding map.
|
|
153
|
-
*
|
|
154
|
-
* Note that `errors` property, intended for collecting errors while
|
|
155
|
-
* parsing, is copied by reference rather than cloned.
|
|
156
|
-
* @private
|
|
157
|
-
*/
|
|
158
|
-
concat(index: number, expectedType?: ?Type, bindings?: Array<[string, Expression]>) {
|
|
159
|
-
const path = typeof index === 'number' ? this.path.concat(index) : this.path;
|
|
160
|
-
const scope = bindings ? this.scope.concat(bindings) : this.scope;
|
|
161
|
-
return new ParsingContext(
|
|
162
|
-
this.registry,
|
|
163
|
-
path,
|
|
164
|
-
expectedType || null,
|
|
165
|
-
scope,
|
|
166
|
-
this.errors
|
|
167
|
-
);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Push a parsing (or type checking) error into the `this.errors`
|
|
172
|
-
* @param error The message
|
|
173
|
-
* @param keys Optionally specify the source of the error at a child
|
|
174
|
-
* of the current expression at `this.key`.
|
|
175
|
-
* @private
|
|
176
|
-
*/
|
|
177
|
-
error(error: string, ...keys: Array<number>) {
|
|
178
|
-
const key = `${this.key}${keys.map(k => `[${k}]`).join('')}`;
|
|
179
|
-
this.errors.push(new ParsingError(key, error));
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* Returns null if `t` is a subtype of `expected`; otherwise returns an
|
|
184
|
-
* error message and also pushes it to `this.errors`.
|
|
185
|
-
*/
|
|
186
|
-
checkSubtype(expected: Type, t: Type): ?string {
|
|
187
|
-
const error = checkSubtype(expected, t);
|
|
188
|
-
if (error) this.error(error);
|
|
189
|
-
return error;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
export default ParsingContext;
|
|
194
|
-
|
|
195
|
-
function isConstant(expression: Expression) {
|
|
196
|
-
if (expression instanceof Var) {
|
|
197
|
-
return isConstant(expression.boundExpression);
|
|
198
|
-
} else if (expression instanceof CompoundExpression && expression.name === 'error') {
|
|
199
|
-
return false;
|
|
200
|
-
} else if (expression instanceof CollatorExpression) {
|
|
201
|
-
// Although the results of a Collator expression with fixed arguments
|
|
202
|
-
// generally shouldn't change between executions, we can't serialize them
|
|
203
|
-
// as constant expressions because results change based on environment.
|
|
204
|
-
return false;
|
|
205
|
-
} else if (expression instanceof Within) {
|
|
206
|
-
return false;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
const isTypeAnnotation = expression instanceof Coercion ||
|
|
210
|
-
expression instanceof Assertion;
|
|
211
|
-
|
|
212
|
-
let childrenConstant = true;
|
|
213
|
-
expression.eachChild(child => {
|
|
214
|
-
// We can _almost_ assume that if `expressions` children are constant,
|
|
215
|
-
// they would already have been evaluated to Literal values when they
|
|
216
|
-
// were parsed. Type annotations are the exception, because they might
|
|
217
|
-
// have been inferred and added after a child was parsed.
|
|
218
|
-
|
|
219
|
-
// So we recurse into isConstant() for the children of type annotations,
|
|
220
|
-
// but otherwise simply check whether they are Literals.
|
|
221
|
-
if (isTypeAnnotation) {
|
|
222
|
-
childrenConstant = childrenConstant && isConstant(child);
|
|
223
|
-
} else {
|
|
224
|
-
childrenConstant = childrenConstant && child instanceof Literal;
|
|
225
|
-
}
|
|
226
|
-
});
|
|
227
|
-
if (!childrenConstant) {
|
|
228
|
-
return false;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
return isFeatureConstant(expression) &&
|
|
232
|
-
isGlobalPropertyConstant(expression, ['zoom', 'heatmap-density', 'line-progress', 'accumulated', 'is-supported-script']);
|
|
233
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
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;
|
|
@@ -1,36 +0,0 @@
|
|
|
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;
|
|
@@ -1,39 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,106 +0,0 @@
|
|
|
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 const NullType = {kind: 'null'};
|
|
38
|
-
export const NumberType = {kind: 'number'};
|
|
39
|
-
export const StringType = {kind: 'string'};
|
|
40
|
-
export const BooleanType = {kind: 'boolean'};
|
|
41
|
-
export const ColorType = {kind: 'color'};
|
|
42
|
-
export const ObjectType = {kind: 'object'};
|
|
43
|
-
export const ValueType = {kind: 'value'};
|
|
44
|
-
export const ErrorType = {kind: 'error'};
|
|
45
|
-
export const CollatorType = {kind: 'collator'};
|
|
46
|
-
export const FormattedType = {kind: 'formatted'};
|
|
47
|
-
export const ResolvedImageType = {kind: 'resolvedImage'};
|
|
48
|
-
|
|
49
|
-
export function array(itemType: Type, N: ?number): ArrayType {
|
|
50
|
-
return {
|
|
51
|
-
kind: 'array',
|
|
52
|
-
itemType,
|
|
53
|
-
N
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export function toString(type: Type): string {
|
|
58
|
-
if (type.kind === 'array') {
|
|
59
|
-
const itemType = toString(type.itemType);
|
|
60
|
-
return typeof type.N === 'number' ?
|
|
61
|
-
`array<${itemType}, ${type.N}>` :
|
|
62
|
-
type.itemType.kind === 'value' ? 'array' : `array<${itemType}>`;
|
|
63
|
-
} else {
|
|
64
|
-
return type.kind;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const valueMemberTypes = [
|
|
69
|
-
NullType,
|
|
70
|
-
NumberType,
|
|
71
|
-
StringType,
|
|
72
|
-
BooleanType,
|
|
73
|
-
ColorType,
|
|
74
|
-
FormattedType,
|
|
75
|
-
ObjectType,
|
|
76
|
-
array(ValueType),
|
|
77
|
-
ResolvedImageType
|
|
78
|
-
];
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Returns null if `t` is a subtype of `expected`; otherwise returns an
|
|
82
|
-
* error message.
|
|
83
|
-
* @private
|
|
84
|
-
*/
|
|
85
|
-
export function checkSubtype(expected: Type, t: Type): ?string {
|
|
86
|
-
if (t.kind === 'error') {
|
|
87
|
-
// Error is a subtype of every type
|
|
88
|
-
return null;
|
|
89
|
-
} else if (expected.kind === 'array') {
|
|
90
|
-
if (t.kind === 'array' &&
|
|
91
|
-
((t.N === 0 && t.itemType.kind === 'value') || !checkSubtype(expected.itemType, t.itemType)) &&
|
|
92
|
-
(typeof expected.N !== 'number' || expected.N === t.N)) {
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
} else if (expected.kind === t.kind) {
|
|
96
|
-
return null;
|
|
97
|
-
} else if (expected.kind === 'value') {
|
|
98
|
-
for (const memberType of valueMemberTypes) {
|
|
99
|
-
if (!checkSubtype(memberType, t)) {
|
|
100
|
-
return null;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return `Expected ${toString(expected)} but found ${toString(t)} instead.`;
|
|
106
|
-
}
|