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.
Files changed (460) hide show
  1. package/.flowconfig +61 -0
  2. package/CHANGELOG.md +2485 -0
  3. package/LICENSE.txt +84 -0
  4. package/README.md +34 -0
  5. package/build/banner.js +4 -0
  6. package/build/check-bundle-size.js +140 -0
  7. package/build/diff-tarball.js +18 -0
  8. package/build/generate-access-token-script.js +11 -0
  9. package/build/generate-flow-typed-style-spec.js +188 -0
  10. package/build/generate-release-list.js +21 -0
  11. package/build/generate-struct-arrays.js +243 -0
  12. package/build/generate-style-code.js +159 -0
  13. package/build/mapbox-gl.js.flow +3 -0
  14. package/build/print-release-url.js +6 -0
  15. package/build/rollup_plugin_minify_style_spec.js +24 -0
  16. package/build/rollup_plugins.js +80 -0
  17. package/build/run-node +3 -0
  18. package/build/run-tap +8 -0
  19. package/build/test/build-tape.js +19 -0
  20. package/dist/mapbox-gl-csp-worker.js +2 -0
  21. package/dist/mapbox-gl-csp-worker.js.map +1 -0
  22. package/dist/mapbox-gl-csp.js +2 -0
  23. package/dist/mapbox-gl-csp.js.map +1 -0
  24. package/dist/mapbox-gl-dev.js +65889 -0
  25. package/dist/mapbox-gl-dev.js.flow +3 -0
  26. package/dist/mapbox-gl-unminified.js +42889 -0
  27. package/dist/mapbox-gl-unminified.js.map +1 -0
  28. package/dist/mapbox-gl.css +1 -0
  29. package/dist/mapbox-gl.js +42 -0
  30. package/dist/mapbox-gl.js.flow +3 -0
  31. package/dist/mapbox-gl.js.map +1 -0
  32. package/dist/style-spec/index.es.js +15032 -0
  33. package/dist/style-spec/index.es.js.map +1 -0
  34. package/dist/style-spec/index.js +15058 -0
  35. package/dist/style-spec/index.js.map +1 -0
  36. package/flow-typed/gl.js +5 -0
  37. package/flow-typed/jsdom.js +18 -0
  38. package/flow-typed/mapbox-gl-supported.js +9 -0
  39. package/flow-typed/mapbox-unitbezier.js +14 -0
  40. package/flow-typed/offscreen-canvas.js +9 -0
  41. package/flow-typed/pbf.js +25 -0
  42. package/flow-typed/point-geometry.js +44 -0
  43. package/flow-typed/potpack.js +12 -0
  44. package/flow-typed/sinon.js +28 -0
  45. package/flow-typed/vector-tile.js +41 -0
  46. package/package.json +173 -0
  47. package/src/css/mapbox-gl.css +812 -0
  48. package/src/css/svg/mapboxgl-ctrl-attrib.svg +3 -0
  49. package/src/css/svg/mapboxgl-ctrl-compass.svg +4 -0
  50. package/src/css/svg/mapboxgl-ctrl-fullscreen.svg +3 -0
  51. package/src/css/svg/mapboxgl-ctrl-geolocate.svg +5 -0
  52. package/src/css/svg/mapboxgl-ctrl-logo.svg +20 -0
  53. package/src/css/svg/mapboxgl-ctrl-shrink.svg +3 -0
  54. package/src/css/svg/mapboxgl-ctrl-zoom-in.svg +3 -0
  55. package/src/css/svg/mapboxgl-ctrl-zoom-out.svg +3 -0
  56. package/src/data/array_types.js +1135 -0
  57. package/src/data/bucket/circle_attributes.js +9 -0
  58. package/src/data/bucket/circle_bucket.js +201 -0
  59. package/src/data/bucket/fill_attributes.js +9 -0
  60. package/src/data/bucket/fill_bucket.js +229 -0
  61. package/src/data/bucket/fill_extrusion_attributes.js +10 -0
  62. package/src/data/bucket/fill_extrusion_bucket.js +283 -0
  63. package/src/data/bucket/heatmap_bucket.js +17 -0
  64. package/src/data/bucket/line_attributes.js +10 -0
  65. package/src/data/bucket/line_attributes_ext.js +10 -0
  66. package/src/data/bucket/line_bucket.js +594 -0
  67. package/src/data/bucket/pattern_attributes.js +12 -0
  68. package/src/data/bucket/pattern_bucket_features.js +60 -0
  69. package/src/data/bucket/symbol_attributes.js +117 -0
  70. package/src/data/bucket/symbol_bucket.js +937 -0
  71. package/src/data/bucket.js +123 -0
  72. package/src/data/dem_data.js +125 -0
  73. package/src/data/evaluation_feature.js +25 -0
  74. package/src/data/extent.js +18 -0
  75. package/src/data/feature_index.js +322 -0
  76. package/src/data/feature_position_map.js +131 -0
  77. package/src/data/index_array_type.js +16 -0
  78. package/src/data/load_geometry.js +46 -0
  79. package/src/data/pos_attributes.js +6 -0
  80. package/src/data/program_configuration.js +708 -0
  81. package/src/data/raster_bounds_attributes.js +7 -0
  82. package/src/data/segment.js +76 -0
  83. package/src/geo/edge_insets.js +102 -0
  84. package/src/geo/lng_lat.js +168 -0
  85. package/src/geo/lng_lat_bounds.js +276 -0
  86. package/src/geo/mercator_coordinate.js +150 -0
  87. package/src/geo/transform.js +834 -0
  88. package/src/gl/color_mode.js +34 -0
  89. package/src/gl/context.js +302 -0
  90. package/src/gl/cull_face_mode.js +26 -0
  91. package/src/gl/depth_mode.js +29 -0
  92. package/src/gl/framebuffer.js +44 -0
  93. package/src/gl/index_buffer.js +55 -0
  94. package/src/gl/stencil_mode.js +30 -0
  95. package/src/gl/types.js +84 -0
  96. package/src/gl/value.js +520 -0
  97. package/src/gl/vertex_buffer.js +119 -0
  98. package/src/index.js +230 -0
  99. package/src/render/draw_background.js +57 -0
  100. package/src/render/draw_circle.js +113 -0
  101. package/src/render/draw_collision_debug.js +172 -0
  102. package/src/render/draw_custom.js +49 -0
  103. package/src/render/draw_debug.js +127 -0
  104. package/src/render/draw_fill.js +124 -0
  105. package/src/render/draw_fill_extrusion.js +95 -0
  106. package/src/render/draw_heatmap.js +133 -0
  107. package/src/render/draw_hillshade.js +107 -0
  108. package/src/render/draw_line.js +125 -0
  109. package/src/render/draw_raster.js +125 -0
  110. package/src/render/draw_symbol.js +392 -0
  111. package/src/render/glyph_atlas.js +71 -0
  112. package/src/render/glyph_manager.js +182 -0
  113. package/src/render/image_atlas.js +149 -0
  114. package/src/render/image_manager.js +306 -0
  115. package/src/render/line_atlas.js +210 -0
  116. package/src/render/painter.js +654 -0
  117. package/src/render/program/background_program.js +103 -0
  118. package/src/render/program/circle_program.js +69 -0
  119. package/src/render/program/clipping_mask_program.js +20 -0
  120. package/src/render/program/collision_program.js +76 -0
  121. package/src/render/program/debug_program.js +35 -0
  122. package/src/render/program/fill_extrusion_program.js +122 -0
  123. package/src/render/program/fill_program.js +126 -0
  124. package/src/render/program/heatmap_program.js +83 -0
  125. package/src/render/program/hillshade_program.js +119 -0
  126. package/src/render/program/line_program.js +211 -0
  127. package/src/render/program/pattern.js +102 -0
  128. package/src/render/program/program_uniforms.js +42 -0
  129. package/src/render/program/raster_program.js +92 -0
  130. package/src/render/program/symbol_program.js +224 -0
  131. package/src/render/program.js +188 -0
  132. package/src/render/texture.js +122 -0
  133. package/src/render/uniform_binding.js +147 -0
  134. package/src/render/vertex_array_object.js +163 -0
  135. package/src/shaders/README.md +42 -0
  136. package/src/shaders/_prelude.fragment.glsl +17 -0
  137. package/src/shaders/_prelude.vertex.glsl +73 -0
  138. package/src/shaders/background.fragment.glsl +10 -0
  139. package/src/shaders/background.vertex.glsl +7 -0
  140. package/src/shaders/background_pattern.fragment.glsl +28 -0
  141. package/src/shaders/background_pattern.vertex.glsl +20 -0
  142. package/src/shaders/circle.fragment.glsl +39 -0
  143. package/src/shaders/circle.vertex.glsl +64 -0
  144. package/src/shaders/clipping_mask.fragment.glsl +3 -0
  145. package/src/shaders/clipping_mask.vertex.glsl +7 -0
  146. package/src/shaders/collision_box.fragment.glsl +21 -0
  147. package/src/shaders/collision_box.vertex.glsl +27 -0
  148. package/src/shaders/collision_circle.fragment.glsl +17 -0
  149. package/src/shaders/collision_circle.vertex.glsl +59 -0
  150. package/src/shaders/debug.fragment.glsl +9 -0
  151. package/src/shaders/debug.vertex.glsl +12 -0
  152. package/src/shaders/encode_attribute.js +17 -0
  153. package/src/shaders/fill.fragment.glsl +13 -0
  154. package/src/shaders/fill.vertex.glsl +13 -0
  155. package/src/shaders/fill_extrusion.fragment.glsl +9 -0
  156. package/src/shaders/fill_extrusion.vertex.glsl +66 -0
  157. package/src/shaders/fill_extrusion_pattern.fragment.glsl +45 -0
  158. package/src/shaders/fill_extrusion_pattern.vertex.glsl +79 -0
  159. package/src/shaders/fill_outline.fragment.glsl +17 -0
  160. package/src/shaders/fill_outline.vertex.glsl +17 -0
  161. package/src/shaders/fill_outline_pattern.fragment.glsl +43 -0
  162. package/src/shaders/fill_outline_pattern.vertex.glsl +44 -0
  163. package/src/shaders/fill_pattern.fragment.glsl +36 -0
  164. package/src/shaders/fill_pattern.vertex.glsl +39 -0
  165. package/src/shaders/heatmap.fragment.glsl +22 -0
  166. package/src/shaders/heatmap.vertex.glsl +54 -0
  167. package/src/shaders/heatmap_texture.fragment.glsl +14 -0
  168. package/src/shaders/heatmap_texture.vertex.glsl +11 -0
  169. package/src/shaders/hillshade.fragment.glsl +52 -0
  170. package/src/shaders/hillshade.vertex.glsl +11 -0
  171. package/src/shaders/hillshade_prepare.fragment.glsl +75 -0
  172. package/src/shaders/hillshade_prepare.vertex.glsl +15 -0
  173. package/src/shaders/index.js +20 -0
  174. package/src/shaders/line.fragment.glsl +30 -0
  175. package/src/shaders/line.vertex.glsl +85 -0
  176. package/src/shaders/line_gradient.fragment.glsl +34 -0
  177. package/src/shaders/line_gradient.vertex.glsl +88 -0
  178. package/src/shaders/line_pattern.fragment.glsl +74 -0
  179. package/src/shaders/line_pattern.vertex.glsl +99 -0
  180. package/src/shaders/line_sdf.fragment.glsl +45 -0
  181. package/src/shaders/line_sdf.vertex.glsl +98 -0
  182. package/src/shaders/raster.fragment.glsl +52 -0
  183. package/src/shaders/raster.vertex.glsl +21 -0
  184. package/src/shaders/shaders.js +185 -0
  185. package/src/shaders/symbol_icon.fragment.glsl +17 -0
  186. package/src/shaders/symbol_icon.vertex.glsl +94 -0
  187. package/src/shaders/symbol_sdf.fragment.glsl +52 -0
  188. package/src/shaders/symbol_sdf.vertex.glsl +115 -0
  189. package/src/shaders/symbol_text_and_icon.fragment.glsl +68 -0
  190. package/src/shaders/symbol_text_and_icon.vertex.glsl +116 -0
  191. package/src/source/canvas_source.js +238 -0
  192. package/src/source/geojson_source.js +370 -0
  193. package/src/source/geojson_worker_source.js +366 -0
  194. package/src/source/geojson_wrapper.js +94 -0
  195. package/src/source/image_source.js +307 -0
  196. package/src/source/load_tilejson.js +39 -0
  197. package/src/source/pixels_to_tile_units.js +21 -0
  198. package/src/source/query_features.js +208 -0
  199. package/src/source/raster_dem_tile_source.js +138 -0
  200. package/src/source/raster_dem_tile_worker_source.js +62 -0
  201. package/src/source/raster_tile_source.js +169 -0
  202. package/src/source/rtl_text_plugin.js +143 -0
  203. package/src/source/source.js +137 -0
  204. package/src/source/source_cache.js +953 -0
  205. package/src/source/source_state.js +159 -0
  206. package/src/source/tile.js +458 -0
  207. package/src/source/tile_bounds.js +38 -0
  208. package/src/source/tile_cache.js +212 -0
  209. package/src/source/tile_id.js +199 -0
  210. package/src/source/vector_tile_source.js +259 -0
  211. package/src/source/vector_tile_worker_source.js +216 -0
  212. package/src/source/video_source.js +203 -0
  213. package/src/source/worker.js +240 -0
  214. package/src/source/worker_source.js +107 -0
  215. package/src/source/worker_tile.js +224 -0
  216. package/src/style/create_style_layer.js +36 -0
  217. package/src/style/evaluation_parameters.js +62 -0
  218. package/src/style/format_section_override.js +56 -0
  219. package/src/style/light.js +130 -0
  220. package/src/style/load_glyph_range.js +38 -0
  221. package/src/style/load_sprite.js +67 -0
  222. package/src/style/parse_glyph_pbf.js +44 -0
  223. package/src/style/pauseable_placement.js +132 -0
  224. package/src/style/properties.js +753 -0
  225. package/src/style/query_utils.js +43 -0
  226. package/src/style/style.js +1374 -0
  227. package/src/style/style_glyph.js +17 -0
  228. package/src/style/style_image.js +137 -0
  229. package/src/style/style_layer/background_style_layer.js +21 -0
  230. package/src/style/style_layer/background_style_layer_properties.js +40 -0
  231. package/src/style/style_layer/circle_style_layer.js +98 -0
  232. package/src/style/style_layer/circle_style_layer_properties.js +63 -0
  233. package/src/style/style_layer/custom_style_layer.js +223 -0
  234. package/src/style/style_layer/fill_extrusion_style_layer.js +224 -0
  235. package/src/style/style_layer/fill_extrusion_style_layer_properties.js +50 -0
  236. package/src/style/style_layer/fill_style_layer.js +67 -0
  237. package/src/style/style_layer/fill_style_layer_properties.js +55 -0
  238. package/src/style/style_layer/heatmap_style_layer.js +73 -0
  239. package/src/style/style_layer/heatmap_style_layer_properties.js +44 -0
  240. package/src/style/style_layer/hillshade_style_layer.js +25 -0
  241. package/src/style/style_layer/hillshade_style_layer_properties.js +46 -0
  242. package/src/style/style_layer/layer_properties.js.ejs +69 -0
  243. package/src/style/style_layer/line_style_layer.js +150 -0
  244. package/src/style/style_layer/line_style_layer_properties.js +71 -0
  245. package/src/style/style_layer/raster_style_layer.js +21 -0
  246. package/src/style/style_layer/raster_style_layer_properties.js +50 -0
  247. package/src/style/style_layer/symbol_style_layer.js +190 -0
  248. package/src/style/style_layer/symbol_style_layer_properties.js +153 -0
  249. package/src/style/style_layer/typed_style_layer.js +17 -0
  250. package/src/style/style_layer.js +283 -0
  251. package/src/style/style_layer_index.js +80 -0
  252. package/src/style/validate_style.js +42 -0
  253. package/src/style/zoom_history.js +44 -0
  254. package/src/style-spec/.eslintrc +5 -0
  255. package/src/style-spec/CHANGELOG.md +468 -0
  256. package/src/style-spec/README.md +59 -0
  257. package/src/style-spec/bin/gl-style-composite +9 -0
  258. package/src/style-spec/bin/gl-style-format +22 -0
  259. package/src/style-spec/bin/gl-style-migrate +9 -0
  260. package/src/style-spec/bin/gl-style-validate +50 -0
  261. package/src/style-spec/composite.js +50 -0
  262. package/src/style-spec/declass.js +42 -0
  263. package/src/style-spec/deref.js +52 -0
  264. package/src/style-spec/diff.js +393 -0
  265. package/src/style-spec/dist/.gitkeep +0 -0
  266. package/src/style-spec/dist/index.es.js +15032 -0
  267. package/src/style-spec/dist/index.es.js.map +1 -0
  268. package/src/style-spec/dist/index.js +15058 -0
  269. package/src/style-spec/dist/index.js.map +1 -0
  270. package/src/style-spec/empty.js +29 -0
  271. package/src/style-spec/error/parsing_error.js +16 -0
  272. package/src/style-spec/error/validation_error.js +18 -0
  273. package/src/style-spec/expression/compound_expression.js +162 -0
  274. package/src/style-spec/expression/definitions/assertion.js +130 -0
  275. package/src/style-spec/expression/definitions/at.js +70 -0
  276. package/src/style-spec/expression/definitions/case.js +85 -0
  277. package/src/style-spec/expression/definitions/coalesce.js +93 -0
  278. package/src/style-spec/expression/definitions/coercion.js +133 -0
  279. package/src/style-spec/expression/definitions/collator.js +78 -0
  280. package/src/style-spec/expression/definitions/comparison.js +184 -0
  281. package/src/style-spec/expression/definitions/format.js +144 -0
  282. package/src/style-spec/expression/definitions/image.js +52 -0
  283. package/src/style-spec/expression/definitions/in.js +72 -0
  284. package/src/style-spec/expression/definitions/index.js +565 -0
  285. package/src/style-spec/expression/definitions/index_of.js +89 -0
  286. package/src/style-spec/expression/definitions/interpolate.js +267 -0
  287. package/src/style-spec/expression/definitions/length.js +61 -0
  288. package/src/style-spec/expression/definitions/let.js +72 -0
  289. package/src/style-spec/expression/definitions/literal.js +77 -0
  290. package/src/style-spec/expression/definitions/match.js +158 -0
  291. package/src/style-spec/expression/definitions/number_format.js +142 -0
  292. package/src/style-spec/expression/definitions/slice.js +86 -0
  293. package/src/style-spec/expression/definitions/step.js +120 -0
  294. package/src/style-spec/expression/definitions/var.js +46 -0
  295. package/src/style-spec/expression/definitions/within.js +342 -0
  296. package/src/style-spec/expression/evaluation_context.js +59 -0
  297. package/src/style-spec/expression/expression.js +27 -0
  298. package/src/style-spec/expression/index.js +392 -0
  299. package/src/style-spec/expression/is_constant.js +59 -0
  300. package/src/style-spec/expression/parsing_context.js +233 -0
  301. package/src/style-spec/expression/parsing_error.js +13 -0
  302. package/src/style-spec/expression/runtime_error.js +17 -0
  303. package/src/style-spec/expression/scope.js +36 -0
  304. package/src/style-spec/expression/stops.js +39 -0
  305. package/src/style-spec/expression/types/collator.js +61 -0
  306. package/src/style-spec/expression/types/formatted.js +73 -0
  307. package/src/style-spec/expression/types/resolved_image.js +29 -0
  308. package/src/style-spec/expression/types.js +126 -0
  309. package/src/style-spec/expression/values.js +123 -0
  310. package/src/style-spec/feature_filter/README.md +55 -0
  311. package/src/style-spec/feature_filter/convert.js +208 -0
  312. package/src/style-spec/feature_filter/index.js +175 -0
  313. package/src/style-spec/format.js +51 -0
  314. package/src/style-spec/function/convert.js +270 -0
  315. package/src/style-spec/function/index.js +262 -0
  316. package/src/style-spec/group_by_layout.js +75 -0
  317. package/src/style-spec/migrate/expressions.js +39 -0
  318. package/src/style-spec/migrate/v8.js +203 -0
  319. package/src/style-spec/migrate/v9.js +26 -0
  320. package/src/style-spec/migrate.js +36 -0
  321. package/src/style-spec/package.json +41 -0
  322. package/src/style-spec/read_style.js +14 -0
  323. package/src/style-spec/reference/latest.js +3 -0
  324. package/src/style-spec/reference/v8.json +5914 -0
  325. package/src/style-spec/rollup.config.js +65 -0
  326. package/src/style-spec/style-spec.js +124 -0
  327. package/src/style-spec/types.js +432 -0
  328. package/src/style-spec/util/color.js +95 -0
  329. package/src/style-spec/util/color_spaces.js +139 -0
  330. package/src/style-spec/util/deep_equal.js +28 -0
  331. package/src/style-spec/util/extend.js +10 -0
  332. package/src/style-spec/util/get_type.js +17 -0
  333. package/src/style-spec/util/interpolate.js +22 -0
  334. package/src/style-spec/util/properties.js +15 -0
  335. package/src/style-spec/util/ref_properties.js +2 -0
  336. package/src/style-spec/util/result.js +19 -0
  337. package/src/style-spec/util/unbundle_jsonlint.js +24 -0
  338. package/src/style-spec/validate/latest.js +11 -0
  339. package/src/style-spec/validate/validate.js +75 -0
  340. package/src/style-spec/validate/validate_array.js +52 -0
  341. package/src/style-spec/validate/validate_boolean.js +15 -0
  342. package/src/style-spec/validate/validate_color.js +20 -0
  343. package/src/style-spec/validate/validate_constants.js +13 -0
  344. package/src/style-spec/validate/validate_enum.js +21 -0
  345. package/src/style-spec/validate/validate_expression.js +43 -0
  346. package/src/style-spec/validate/validate_filter.js +117 -0
  347. package/src/style-spec/validate/validate_formatted.js +11 -0
  348. package/src/style-spec/validate/validate_function.js +207 -0
  349. package/src/style-spec/validate/validate_glyphs_url.js +21 -0
  350. package/src/style-spec/validate/validate_image.js +11 -0
  351. package/src/style-spec/validate/validate_layer.js +134 -0
  352. package/src/style-spec/validate/validate_layout_property.js +6 -0
  353. package/src/style-spec/validate/validate_light.js +47 -0
  354. package/src/style-spec/validate/validate_number.js +29 -0
  355. package/src/style-spec/validate/validate_object.js +61 -0
  356. package/src/style-spec/validate/validate_paint_property.js +6 -0
  357. package/src/style-spec/validate/validate_property.js +64 -0
  358. package/src/style-spec/validate/validate_source.js +111 -0
  359. package/src/style-spec/validate/validate_string.js +15 -0
  360. package/src/style-spec/validate_mapbox_api_supported.js +171 -0
  361. package/src/style-spec/validate_style.js +39 -0
  362. package/src/style-spec/validate_style.min.js +78 -0
  363. package/src/style-spec/visit.js +77 -0
  364. package/src/symbol/anchor.js +26 -0
  365. package/src/symbol/check_max_angle.js +81 -0
  366. package/src/symbol/clip_line.js +71 -0
  367. package/src/symbol/collision_feature.js +109 -0
  368. package/src/symbol/collision_index.js +373 -0
  369. package/src/symbol/cross_tile_symbol_index.js +301 -0
  370. package/src/symbol/get_anchors.js +167 -0
  371. package/src/symbol/grid_index.js +335 -0
  372. package/src/symbol/mergelines.js +82 -0
  373. package/src/symbol/one_em.js +4 -0
  374. package/src/symbol/opacity_state.js +27 -0
  375. package/src/symbol/path_interpolator.js +61 -0
  376. package/src/symbol/placement.js +1124 -0
  377. package/src/symbol/projection.js +451 -0
  378. package/src/symbol/quads.js +334 -0
  379. package/src/symbol/shaping.js +816 -0
  380. package/src/symbol/symbol_layout.js +796 -0
  381. package/src/symbol/symbol_size.js +113 -0
  382. package/src/symbol/transform_text.js +29 -0
  383. package/src/types/callback.js +17 -0
  384. package/src/types/cancelable.js +3 -0
  385. package/src/types/tilejson.js +17 -0
  386. package/src/types/transferable.js +3 -0
  387. package/src/types/window.js +172 -0
  388. package/src/ui/anchor.js +32 -0
  389. package/src/ui/camera.js +1277 -0
  390. package/src/ui/control/attribution_control.js +212 -0
  391. package/src/ui/control/fullscreen_control.js +147 -0
  392. package/src/ui/control/geolocate_control.js +707 -0
  393. package/src/ui/control/logo_control.js +92 -0
  394. package/src/ui/control/navigation_control.js +257 -0
  395. package/src/ui/control/scale_control.js +142 -0
  396. package/src/ui/default_locale.js +22 -0
  397. package/src/ui/events.js +1301 -0
  398. package/src/ui/handler/box_zoom.js +170 -0
  399. package/src/ui/handler/click_zoom.js +52 -0
  400. package/src/ui/handler/handler_util.js +12 -0
  401. package/src/ui/handler/keyboard.js +208 -0
  402. package/src/ui/handler/map_event.js +156 -0
  403. package/src/ui/handler/mouse.js +171 -0
  404. package/src/ui/handler/scroll_zoom.js +350 -0
  405. package/src/ui/handler/shim/dblclick_zoom.js +62 -0
  406. package/src/ui/handler/shim/drag_pan.js +88 -0
  407. package/src/ui/handler/shim/drag_rotate.js +67 -0
  408. package/src/ui/handler/shim/touch_zoom_rotate.js +108 -0
  409. package/src/ui/handler/tap_drag_zoom.js +103 -0
  410. package/src/ui/handler/tap_recognizer.js +133 -0
  411. package/src/ui/handler/tap_zoom.js +93 -0
  412. package/src/ui/handler/touch_pan.js +101 -0
  413. package/src/ui/handler/touch_zoom_rotate.js +305 -0
  414. package/src/ui/handler_inertia.js +158 -0
  415. package/src/ui/handler_manager.js +531 -0
  416. package/src/ui/hash.js +148 -0
  417. package/src/ui/map.js +2874 -0
  418. package/src/ui/marker.js +672 -0
  419. package/src/ui/popup.js +640 -0
  420. package/src/util/actor.js +212 -0
  421. package/src/util/ajax.js +388 -0
  422. package/src/util/browser/web_worker.js +10 -0
  423. package/src/util/browser/window.js +6 -0
  424. package/src/util/browser.js +70 -0
  425. package/src/util/classify_rings.js +52 -0
  426. package/src/util/color_ramp.js +61 -0
  427. package/src/util/config.js +30 -0
  428. package/src/util/debug.js +28 -0
  429. package/src/util/dictionary_coder.js +30 -0
  430. package/src/util/dispatcher.js +70 -0
  431. package/src/util/dom.js +142 -0
  432. package/src/util/evented.js +174 -0
  433. package/src/util/find_pole_of_inaccessibility.js +129 -0
  434. package/src/util/global_worker_pool.js +35 -0
  435. package/src/util/image.js +142 -0
  436. package/src/util/intersection_tests.js +208 -0
  437. package/src/util/is_char_in_unicode_block.js +311 -0
  438. package/src/util/mapbox.js +491 -0
  439. package/src/util/offscreen_canvas_supported.js +14 -0
  440. package/src/util/performance.js +112 -0
  441. package/src/util/primitives.js +145 -0
  442. package/src/util/resolve_tokens.js +16 -0
  443. package/src/util/script_detection.js +328 -0
  444. package/src/util/sku_token.js +42 -0
  445. package/src/util/smart_wrap.js +55 -0
  446. package/src/util/struct_array.js +243 -0
  447. package/src/util/struct_array.js.ejs +112 -0
  448. package/src/util/struct_array_layout.js.ejs +98 -0
  449. package/src/util/task_queue.js +68 -0
  450. package/src/util/throttle.js +27 -0
  451. package/src/util/throttled_invoker.js +46 -0
  452. package/src/util/tile_request_cache.js +172 -0
  453. package/src/util/util.js +524 -0
  454. package/src/util/vectortile_to_geojson.js +50 -0
  455. package/src/util/verticalize_punctuation.js +114 -0
  456. package/src/util/web_worker.js +91 -0
  457. package/src/util/web_worker_transfer.js +266 -0
  458. package/src/util/webp_supported.js +69 -0
  459. package/src/util/window.js +102 -0
  460. package/src/util/worker_pool.js +57 -0
@@ -0,0 +1,138 @@
1
+ // @flow
2
+
3
+ import {getImage, ResourceType} from '../util/ajax';
4
+ import {extend} from '../util/util';
5
+ import {Evented} from '../util/evented';
6
+ import browser from '../util/browser';
7
+ import window from '../util/window';
8
+ import offscreenCanvasSupported from '../util/offscreen_canvas_supported';
9
+ import {OverscaledTileID} from './tile_id';
10
+ import RasterTileSource from './raster_tile_source';
11
+ // ensure DEMData is registered for worker transfer on main thread:
12
+ import '../data/dem_data';
13
+
14
+ import type {Source} from './source';
15
+ import type Dispatcher from '../util/dispatcher';
16
+ import type Tile from './tile';
17
+ import type {Callback} from '../types/callback';
18
+ import type {RasterDEMSourceSpecification} from '../style-spec/types';
19
+
20
+ class RasterDEMTileSource extends RasterTileSource implements Source {
21
+ encoding: "mapbox" | "terrarium";
22
+
23
+ constructor(id: string, options: RasterDEMSourceSpecification, dispatcher: Dispatcher, eventedParent: Evented) {
24
+ super(id, options, dispatcher, eventedParent);
25
+ this.type = 'raster-dem';
26
+ this.maxzoom = 22;
27
+ this._options = extend({type: 'raster-dem'}, options);
28
+ this.encoding = options.encoding || "mapbox";
29
+ }
30
+
31
+ serialize() {
32
+ return {
33
+ type: 'raster-dem',
34
+ url: this.url,
35
+ tileSize: this.tileSize,
36
+ tiles: this.tiles,
37
+ bounds: this.bounds,
38
+ encoding: this.encoding
39
+ };
40
+ }
41
+
42
+ loadTile(tile: Tile, callback: Callback<void>) {
43
+ const url = this.map._requestManager.normalizeTileURL(tile.tileID.canonical.url(this.tiles, this.scheme), this.tileSize);
44
+ tile.request = getImage(this.map._requestManager.transformRequest(url, ResourceType.Tile), imageLoaded.bind(this));
45
+
46
+ tile.neighboringTiles = this._getNeighboringTiles(tile.tileID);
47
+ function imageLoaded(err, img) {
48
+ delete tile.request;
49
+ if (tile.aborted) {
50
+ tile.state = 'unloaded';
51
+ callback(null);
52
+ } else if (err) {
53
+ tile.state = 'errored';
54
+ callback(err);
55
+ } else if (img) {
56
+ if (this.map._refreshExpiredTiles) tile.setExpiryData(img);
57
+ delete (img: any).cacheControl;
58
+ delete (img: any).expires;
59
+ const transfer = window.ImageBitmap && img instanceof window.ImageBitmap && offscreenCanvasSupported();
60
+ const rawImageData = transfer ? img : browser.getImageData(img, 1);
61
+ const params = {
62
+ uid: tile.uid,
63
+ coord: tile.tileID,
64
+ source: this.id,
65
+ rawImageData,
66
+ encoding: this.encoding
67
+ };
68
+
69
+ if (!tile.actor || tile.state === 'expired') {
70
+ tile.actor = this.dispatcher.getActor();
71
+ tile.actor.send('loadDEMTile', params, done.bind(this));
72
+ }
73
+ }
74
+ }
75
+
76
+ function done(err, dem) {
77
+ if (err) {
78
+ tile.state = 'errored';
79
+ callback(err);
80
+ }
81
+
82
+ if (dem) {
83
+ tile.dem = dem;
84
+ tile.needsHillshadePrepare = true;
85
+ tile.state = 'loaded';
86
+ callback(null);
87
+ }
88
+ }
89
+ }
90
+
91
+ _getNeighboringTiles(tileID: OverscaledTileID) {
92
+ const canonical = tileID.canonical;
93
+ const dim = Math.pow(2, canonical.z);
94
+
95
+ const px = (canonical.x - 1 + dim) % dim;
96
+ const pxw = canonical.x === 0 ? tileID.wrap - 1 : tileID.wrap;
97
+ const nx = (canonical.x + 1 + dim) % dim;
98
+ const nxw = canonical.x + 1 === dim ? tileID.wrap + 1 : tileID.wrap;
99
+
100
+ const neighboringTiles = {};
101
+ // add adjacent tiles
102
+ neighboringTiles[new OverscaledTileID(tileID.overscaledZ, pxw, canonical.z, px, canonical.y).key] = {backfilled: false};
103
+ neighboringTiles[new OverscaledTileID(tileID.overscaledZ, nxw, canonical.z, nx, canonical.y).key] = {backfilled: false};
104
+
105
+ // Add upper neighboringTiles
106
+ if (canonical.y > 0) {
107
+ neighboringTiles[new OverscaledTileID(tileID.overscaledZ, pxw, canonical.z, px, canonical.y - 1).key] = {backfilled: false};
108
+ neighboringTiles[new OverscaledTileID(tileID.overscaledZ, tileID.wrap, canonical.z, canonical.x, canonical.y - 1).key] = {backfilled: false};
109
+ neighboringTiles[new OverscaledTileID(tileID.overscaledZ, nxw, canonical.z, nx, canonical.y - 1).key] = {backfilled: false};
110
+ }
111
+ // Add lower neighboringTiles
112
+ if (canonical.y + 1 < dim) {
113
+ neighboringTiles[new OverscaledTileID(tileID.overscaledZ, pxw, canonical.z, px, canonical.y + 1).key] = {backfilled: false};
114
+ neighboringTiles[new OverscaledTileID(tileID.overscaledZ, tileID.wrap, canonical.z, canonical.x, canonical.y + 1).key] = {backfilled: false};
115
+ neighboringTiles[new OverscaledTileID(tileID.overscaledZ, nxw, canonical.z, nx, canonical.y + 1).key] = {backfilled: false};
116
+ }
117
+
118
+ return neighboringTiles;
119
+ }
120
+
121
+ unloadTile(tile: Tile) {
122
+ if (tile.demTexture) this.map.painter.saveTileTexture(tile.demTexture);
123
+ if (tile.fbo) {
124
+ tile.fbo.destroy();
125
+ delete tile.fbo;
126
+ }
127
+ if (tile.dem) delete tile.dem;
128
+ delete tile.neighboringTiles;
129
+
130
+ tile.state = 'unloaded';
131
+ if (tile.actor) {
132
+ tile.actor.send('removeDEMTile', {uid: tile.uid, source: this.id});
133
+ }
134
+ }
135
+
136
+ }
137
+
138
+ export default RasterDEMTileSource;
@@ -0,0 +1,62 @@
1
+ // @flow
2
+
3
+ import DEMData from '../data/dem_data';
4
+ import {RGBAImage} from '../util/image';
5
+ import window from '../util/window';
6
+
7
+ import type Actor from '../util/actor';
8
+ import type {
9
+ WorkerDEMTileParameters,
10
+ WorkerDEMTileCallback,
11
+ TileParameters
12
+ } from './worker_source';
13
+ const {ImageBitmap} = window;
14
+
15
+ class RasterDEMTileWorkerSource {
16
+ actor: Actor;
17
+ loaded: {[_: string]: DEMData};
18
+ offscreenCanvas: OffscreenCanvas;
19
+ offscreenCanvasContext: CanvasRenderingContext2D;
20
+
21
+ constructor() {
22
+ this.loaded = {};
23
+ }
24
+
25
+ loadTile(params: WorkerDEMTileParameters, callback: WorkerDEMTileCallback) {
26
+ const {uid, encoding, rawImageData} = params;
27
+ // Main thread will transfer ImageBitmap if offscreen decode with OffscreenCanvas is supported, else it will transfer an already decoded image.
28
+ const imagePixels = (ImageBitmap && rawImageData instanceof ImageBitmap) ? this.getImageData(rawImageData) : rawImageData;
29
+ const dem = new DEMData(uid, imagePixels, encoding);
30
+ this.loaded = this.loaded || {};
31
+ this.loaded[uid] = dem;
32
+ callback(null, dem);
33
+ }
34
+
35
+ getImageData(imgBitmap: ImageBitmap): RGBAImage {
36
+ // Lazily initialize OffscreenCanvas
37
+ if (!this.offscreenCanvas || !this.offscreenCanvasContext) {
38
+ // Dem tiles are typically 256x256
39
+ this.offscreenCanvas = new OffscreenCanvas(imgBitmap.width, imgBitmap.height);
40
+ this.offscreenCanvasContext = this.offscreenCanvas.getContext('2d');
41
+ }
42
+
43
+ this.offscreenCanvas.width = imgBitmap.width;
44
+ this.offscreenCanvas.height = imgBitmap.height;
45
+
46
+ this.offscreenCanvasContext.drawImage(imgBitmap, 0, 0, imgBitmap.width, imgBitmap.height);
47
+ // Insert an additional 1px padding around the image to allow backfilling for neighboring data.
48
+ const imgData = this.offscreenCanvasContext.getImageData(-1, -1, imgBitmap.width + 2, imgBitmap.height + 2);
49
+ this.offscreenCanvasContext.clearRect(0, 0, this.offscreenCanvas.width, this.offscreenCanvas.height);
50
+ return new RGBAImage({width: imgData.width, height: imgData.height}, imgData.data);
51
+ }
52
+
53
+ removeTile(params: TileParameters) {
54
+ const loaded = this.loaded,
55
+ uid = params.uid;
56
+ if (loaded && loaded[uid]) {
57
+ delete loaded[uid];
58
+ }
59
+ }
60
+ }
61
+
62
+ export default RasterDEMTileWorkerSource;
@@ -0,0 +1,169 @@
1
+ // @flow
2
+
3
+ import {extend, pick} from '../util/util';
4
+
5
+ import {getImage, ResourceType} from '../util/ajax';
6
+ import {Event, ErrorEvent, Evented} from '../util/evented';
7
+ import loadTileJSON from './load_tilejson';
8
+ import {postTurnstileEvent, postMapLoadEvent} from '../util/mapbox';
9
+ import TileBounds from './tile_bounds';
10
+ import Texture from '../render/texture';
11
+
12
+ import {cacheEntryPossiblyAdded} from '../util/tile_request_cache';
13
+
14
+ import type {Source} from './source';
15
+ import type {OverscaledTileID} from './tile_id';
16
+ import type Map from '../ui/map';
17
+ import type Dispatcher from '../util/dispatcher';
18
+ import type Tile from './tile';
19
+ import type {Callback} from '../types/callback';
20
+ import type {Cancelable} from '../types/cancelable';
21
+ import type {
22
+ RasterSourceSpecification,
23
+ RasterDEMSourceSpecification
24
+ } from '../style-spec/types';
25
+
26
+ class RasterTileSource extends Evented implements Source {
27
+ type: 'raster' | 'raster-dem';
28
+ id: string;
29
+ minzoom: number;
30
+ maxzoom: number;
31
+ url: string;
32
+ scheme: string;
33
+ tileSize: number;
34
+
35
+ bounds: ?[number, number, number, number];
36
+ tileBounds: TileBounds;
37
+ roundZoom: boolean;
38
+ dispatcher: Dispatcher;
39
+ map: Map;
40
+ tiles: Array<string>;
41
+
42
+ _loaded: boolean;
43
+ _options: RasterSourceSpecification | RasterDEMSourceSpecification;
44
+ _tileJSONRequest: ?Cancelable;
45
+
46
+ constructor(id: string, options: RasterSourceSpecification | RasterDEMSourceSpecification, dispatcher: Dispatcher, eventedParent: Evented) {
47
+ super();
48
+ this.id = id;
49
+ this.dispatcher = dispatcher;
50
+ this.setEventedParent(eventedParent);
51
+
52
+ this.type = 'raster';
53
+ this.minzoom = 0;
54
+ this.maxzoom = 22;
55
+ this.roundZoom = true;
56
+ this.scheme = 'xyz';
57
+ this.tileSize = 512;
58
+ this._loaded = false;
59
+
60
+ this._options = extend({type: 'raster'}, options);
61
+ extend(this, pick(options, ['url', 'scheme', 'tileSize']));
62
+ }
63
+
64
+ load() {
65
+ this._loaded = false;
66
+ this.fire(new Event('dataloading', {dataType: 'source'}));
67
+ this._tileJSONRequest = loadTileJSON(this._options, this.map._requestManager, (err, tileJSON) => {
68
+ this._tileJSONRequest = null;
69
+ this._loaded = true;
70
+ if (err) {
71
+ this.fire(new ErrorEvent(err));
72
+ } else if (tileJSON) {
73
+ extend(this, tileJSON);
74
+ if (tileJSON.bounds) this.tileBounds = new TileBounds(tileJSON.bounds, this.minzoom, this.maxzoom);
75
+
76
+ postTurnstileEvent(tileJSON.tiles);
77
+ postMapLoadEvent(tileJSON.tiles, this.map._getMapId(), this.map._requestManager._skuToken);
78
+
79
+ // `content` is included here to prevent a race condition where `Style#_updateSources` is called
80
+ // before the TileJSON arrives. this makes sure the tiles needed are loaded once TileJSON arrives
81
+ // ref: https://github.com/mapbox/mapbox-gl-js/pull/4347#discussion_r104418088
82
+ this.fire(new Event('data', {dataType: 'source', sourceDataType: 'metadata'}));
83
+ this.fire(new Event('data', {dataType: 'source', sourceDataType: 'content'}));
84
+ }
85
+ });
86
+ }
87
+
88
+ loaded(): boolean {
89
+ return this._loaded;
90
+ }
91
+
92
+ onAdd(map: Map) {
93
+ this.map = map;
94
+ this.load();
95
+ }
96
+
97
+ onRemove() {
98
+ if (this._tileJSONRequest) {
99
+ this._tileJSONRequest.cancel();
100
+ this._tileJSONRequest = null;
101
+ }
102
+ }
103
+
104
+ serialize() {
105
+ return extend({}, this._options);
106
+ }
107
+
108
+ hasTile(tileID: OverscaledTileID) {
109
+ return !this.tileBounds || this.tileBounds.contains(tileID.canonical);
110
+ }
111
+
112
+ loadTile(tile: Tile, callback: Callback<void>) {
113
+ const url = this.map._requestManager.normalizeTileURL(tile.tileID.canonical.url(this.tiles, this.scheme), this.tileSize);
114
+ tile.request = getImage(this.map._requestManager.transformRequest(url, ResourceType.Tile), (err, img) => {
115
+ delete tile.request;
116
+
117
+ if (tile.aborted) {
118
+ tile.state = 'unloaded';
119
+ callback(null);
120
+ } else if (err) {
121
+ tile.state = 'errored';
122
+ callback(err);
123
+ } else if (img) {
124
+ if (this.map._refreshExpiredTiles) tile.setExpiryData(img);
125
+ delete (img: any).cacheControl;
126
+ delete (img: any).expires;
127
+
128
+ const context = this.map.painter.context;
129
+ const gl = context.gl;
130
+ tile.texture = this.map.painter.getTileTexture(img.width);
131
+ if (tile.texture) {
132
+ tile.texture.update(img, {useMipmap: true});
133
+ } else {
134
+ tile.texture = new Texture(context, img, gl.RGBA, {useMipmap: true});
135
+ tile.texture.bind(gl.LINEAR, gl.CLAMP_TO_EDGE, gl.LINEAR_MIPMAP_NEAREST);
136
+
137
+ if (context.extTextureFilterAnisotropic) {
138
+ gl.texParameterf(gl.TEXTURE_2D, context.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT, context.extTextureFilterAnisotropicMax);
139
+ }
140
+ }
141
+
142
+ tile.state = 'loaded';
143
+
144
+ cacheEntryPossiblyAdded(this.dispatcher);
145
+
146
+ callback(null);
147
+ }
148
+ });
149
+ }
150
+
151
+ abortTile(tile: Tile, callback: Callback<void>) {
152
+ if (tile.request) {
153
+ tile.request.cancel();
154
+ delete tile.request;
155
+ }
156
+ callback();
157
+ }
158
+
159
+ unloadTile(tile: Tile, callback: Callback<void>) {
160
+ if (tile.texture) this.map.painter.saveTileTexture(tile.texture);
161
+ callback();
162
+ }
163
+
164
+ hasTransition() {
165
+ return false;
166
+ }
167
+ }
168
+
169
+ export default RasterTileSource;
@@ -0,0 +1,143 @@
1
+ // @flow
2
+
3
+ import {Event, Evented} from '../util/evented';
4
+ import {getArrayBuffer} from '../util/ajax';
5
+ import browser from '../util/browser';
6
+ import assert from 'assert';
7
+ import {isWorker} from '../util/util';
8
+
9
+ const status = {
10
+ unavailable: 'unavailable', // Not loaded
11
+ deferred: 'deferred', // The plugin URL has been specified, but loading has been deferred
12
+ loading: 'loading', // request in-flight
13
+ loaded: 'loaded',
14
+ error: 'error'
15
+ };
16
+
17
+ export type PluginState = {
18
+ pluginStatus: $Values<typeof status>;
19
+ pluginURL: ?string
20
+ };
21
+
22
+ type ErrorCallback = (error: ?Error) => void;
23
+ type PluginStateSyncCallback = (state: PluginState) => void;
24
+ let _completionCallback = null;
25
+
26
+ //Variables defining the current state of the plugin
27
+ let pluginStatus = status.unavailable;
28
+ let pluginURL = null;
29
+
30
+ export const triggerPluginCompletionEvent = function(error: ?Error) {
31
+ // NetworkError's are not correctly reflected by the plugin status which prevents reloading plugin
32
+ if (error && typeof error === 'string' && error.indexOf('NetworkError') > -1) {
33
+ pluginStatus = status.error;
34
+ }
35
+
36
+ if (_completionCallback) {
37
+ _completionCallback(error);
38
+ }
39
+ };
40
+
41
+ function sendPluginStateToWorker() {
42
+ evented.fire(new Event('pluginStateChange', {pluginStatus, pluginURL}));
43
+ }
44
+
45
+ export const evented = new Evented();
46
+
47
+ export const getRTLTextPluginStatus = function () {
48
+ return pluginStatus;
49
+ };
50
+
51
+ export const registerForPluginStateChange = function(callback: PluginStateSyncCallback) {
52
+ // Do an initial sync of the state
53
+ callback({pluginStatus, pluginURL});
54
+ // Listen for all future state changes
55
+ evented.on('pluginStateChange', callback);
56
+ return callback;
57
+ };
58
+
59
+ export const clearRTLTextPlugin = function() {
60
+ pluginStatus = status.unavailable;
61
+ pluginURL = null;
62
+ };
63
+
64
+ export const setRTLTextPlugin = function(url: string, callback: ?ErrorCallback, deferred: boolean = false) {
65
+ if (pluginStatus === status.deferred || pluginStatus === status.loading || pluginStatus === status.loaded) {
66
+ throw new Error('setRTLTextPlugin cannot be called multiple times.');
67
+ }
68
+ pluginURL = browser.resolveURL(url);
69
+ pluginStatus = status.deferred;
70
+ _completionCallback = callback;
71
+ sendPluginStateToWorker();
72
+
73
+ //Start downloading the plugin immediately if not intending to lazy-load
74
+ if (!deferred) {
75
+ downloadRTLTextPlugin();
76
+ }
77
+ };
78
+
79
+ export const downloadRTLTextPlugin = function() {
80
+ if (pluginStatus !== status.deferred || !pluginURL) {
81
+ throw new Error('rtl-text-plugin cannot be downloaded unless a pluginURL is specified');
82
+ }
83
+ pluginStatus = status.loading;
84
+ sendPluginStateToWorker();
85
+ if (pluginURL) {
86
+ getArrayBuffer({url: pluginURL}, (error) => {
87
+ if (error) {
88
+ triggerPluginCompletionEvent(error);
89
+ } else {
90
+ pluginStatus = status.loaded;
91
+ sendPluginStateToWorker();
92
+ }
93
+ });
94
+ }
95
+ };
96
+
97
+ export const plugin: {
98
+ applyArabicShaping: ?Function,
99
+ processBidirectionalText: ?(string, Array<number>) => Array<string>,
100
+ processStyledBidirectionalText: ?(string, Array<number>, Array<number>) => Array<[string, Array<number>]>,
101
+ isLoaded: () => boolean,
102
+ isLoading: () => boolean,
103
+ setState: (state: PluginState) => void,
104
+ isParsed: () => boolean,
105
+ getPluginURL: () => ?string
106
+ } = {
107
+ applyArabicShaping: null,
108
+ processBidirectionalText: null,
109
+ processStyledBidirectionalText: null,
110
+ isLoaded() {
111
+ return pluginStatus === status.loaded || // Main Thread: loaded if the completion callback returned successfully
112
+ plugin.applyArabicShaping != null; // Web-worker: loaded if the plugin functions have been compiled
113
+ },
114
+ isLoading() { // Main Thread Only: query the loading status, this function does not return the correct value in the worker context.
115
+ return pluginStatus === status.loading;
116
+ },
117
+ setState(state: PluginState) { // Worker thread only: this tells the worker threads that the plugin is available on the Main thread
118
+ assert(isWorker(), 'Cannot set the state of the rtl-text-plugin when not in the web-worker context');
119
+
120
+ pluginStatus = state.pluginStatus;
121
+ pluginURL = state.pluginURL;
122
+ },
123
+ isParsed(): boolean {
124
+ assert(isWorker(), 'rtl-text-plugin is only parsed on the worker-threads');
125
+
126
+ return plugin.applyArabicShaping != null &&
127
+ plugin.processBidirectionalText != null &&
128
+ plugin.processStyledBidirectionalText != null;
129
+ },
130
+ getPluginURL(): ?string {
131
+ assert(isWorker(), 'rtl-text-plugin url can only be queried from the worker threads');
132
+ return pluginURL;
133
+ }
134
+ };
135
+
136
+ export const lazyLoadRTLTextPlugin = function() {
137
+ if (!plugin.isLoading() &&
138
+ !plugin.isLoaded() &&
139
+ getRTLTextPluginStatus() === 'deferred'
140
+ ) {
141
+ downloadRTLTextPlugin();
142
+ }
143
+ };
@@ -0,0 +1,137 @@
1
+ // @flow
2
+
3
+ import {bindAll} from '../util/util';
4
+
5
+ import type Dispatcher from '../util/dispatcher';
6
+ import type {Event, Evented} from '../util/evented';
7
+ import type Map from '../ui/map';
8
+ import type Tile from './tile';
9
+ import type {OverscaledTileID} from './tile_id';
10
+ import type {Callback} from '../types/callback';
11
+ import {CanonicalTileID} from './tile_id';
12
+
13
+ /**
14
+ * The `Source` interface must be implemented by each source type, including "core" types (`vector`, `raster`,
15
+ * `video`, etc.) and all custom, third-party types.
16
+ *
17
+ * @private
18
+ *
19
+ * @param {string} id The id for the source. Must not be used by any existing source.
20
+ * @param {Object} options Source options, specific to the source type (except for `options.type`, which is always
21
+ * required).
22
+ * @param {string} options.type The source type, matching the value of `name` used in {@link Style#addSourceType}.
23
+ * @param {Dispatcher} dispatcher A {@link Dispatcher} instance, which can be used to send messages to the workers.
24
+ *
25
+ * @fires data with `{dataType: 'source', sourceDataType: 'metadata'}` to indicate that any necessary metadata
26
+ * has been loaded so that it's okay to call `loadTile`; and with `{dataType: 'source', sourceDataType: 'content'}`
27
+ * to indicate that the source data has changed, so that any current caches should be flushed.
28
+ * @property {string} id The id for the source. Must match the id passed to the constructor.
29
+ * @property {number} minzoom
30
+ * @property {number} maxzoom
31
+ * @property {boolean} isTileClipped `false` if tiles can be drawn outside their boundaries, `true` if they cannot.
32
+ * @property {boolean} reparseOverscaled `true` if tiles should be sent back to the worker for each overzoomed zoom
33
+ * level, `false` if not.
34
+ * @property {boolean} roundZoom `true` if zoom levels are rounded to the nearest integer in the source data, `false`
35
+ * if they are floor-ed to the nearest integer.
36
+ */
37
+ export interface Source {
38
+ +type: string;
39
+ id: string;
40
+ minzoom: number,
41
+ maxzoom: number,
42
+ tileSize: number,
43
+ attribution?: string,
44
+
45
+ roundZoom?: boolean,
46
+ isTileClipped?: boolean,
47
+ mapbox_logo?: boolean,
48
+ tileID?: CanonicalTileID;
49
+ reparseOverscaled?: boolean,
50
+ vectorLayerIds?: Array<string>,
51
+
52
+ hasTransition(): boolean;
53
+ loaded(): boolean;
54
+
55
+ fire(event: Event): mixed;
56
+
57
+ +onAdd?: (map: Map) => void;
58
+ +onRemove?: (map: Map) => void;
59
+
60
+ loadTile(tile: Tile, callback: Callback<void>): void;
61
+ +hasTile?: (tileID: OverscaledTileID) => boolean;
62
+ +abortTile?: (tile: Tile, callback: Callback<void>) => void;
63
+ +unloadTile?: (tile: Tile, callback: Callback<void>) => void;
64
+
65
+ /**
66
+ * @returns A plain (stringifiable) JS object representing the current state of the source.
67
+ * Creating a source using the returned object as the `options` should result in a Source that is
68
+ * equivalent to this one.
69
+ * @private
70
+ */
71
+ serialize(): Object;
72
+
73
+ +prepare?: () => void;
74
+ }
75
+
76
+ type SourceStatics = {
77
+ /*
78
+ * An optional URL to a script which, when run by a Worker, registers a {@link WorkerSource}
79
+ * implementation for this Source type by calling `self.registerWorkerSource(workerSource: WorkerSource)`.
80
+ */
81
+ workerSourceURL?: URL;
82
+ };
83
+
84
+ export type SourceClass = Class<Source> & SourceStatics;
85
+
86
+ import vector from '../source/vector_tile_source';
87
+ import raster from '../source/raster_tile_source';
88
+ import rasterDem from '../source/raster_dem_tile_source';
89
+ import geojson from '../source/geojson_source';
90
+ import video from '../source/video_source';
91
+ import image from '../source/image_source';
92
+ import canvas from '../source/canvas_source';
93
+
94
+ import type {SourceSpecification} from '../style-spec/types';
95
+
96
+ const sourceTypes = {
97
+ vector,
98
+ raster,
99
+ 'raster-dem': rasterDem,
100
+ geojson,
101
+ video,
102
+ image,
103
+ canvas
104
+ };
105
+
106
+ /*
107
+ * Creates a tiled data source instance given an options object.
108
+ *
109
+ * @param id
110
+ * @param {Object} source A source definition object compliant with
111
+ * [`mapbox-gl-style-spec`](https://www.mapbox.com/mapbox-gl-style-spec/#sources) or, for a third-party source type,
112
+ * with that type's requirements.
113
+ * @param {Dispatcher} dispatcher
114
+ * @returns {Source}
115
+ */
116
+ export const create = function(id: string, specification: SourceSpecification, dispatcher: Dispatcher, eventedParent: Evented) {
117
+ const source = new sourceTypes[specification.type](id, (specification: any), dispatcher, eventedParent);
118
+
119
+ if (source.id !== id) {
120
+ throw new Error(`Expected Source id to be ${id} instead of ${source.id}`);
121
+ }
122
+
123
+ bindAll(['load', 'abort', 'unload', 'serialize', 'prepare'], source);
124
+ return source;
125
+ };
126
+
127
+ export const getType = function (name: string) {
128
+ return sourceTypes[name];
129
+ };
130
+
131
+ export const setType = function (name: string, type: Class<Source>) {
132
+ sourceTypes[name] = type;
133
+ };
134
+
135
+ export interface Actor {
136
+ send(type: string, data: Object, callback: Callback<any>): void;
137
+ }