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,50 @@
1
+ // @flow
2
+ import type {GeoJSONGeometry} from '@mapbox/geojson-types';
3
+
4
+ class Feature {
5
+ type: 'Feature';
6
+ _geometry: ?GeoJSONGeometry;
7
+ properties: {};
8
+ id: number | string | void;
9
+
10
+ _vectorTileFeature: VectorTileFeature;
11
+
12
+ constructor(vectorTileFeature: VectorTileFeature, z: number, x: number, y: number, id: string | number | void) {
13
+ this.type = 'Feature';
14
+
15
+ this._vectorTileFeature = vectorTileFeature;
16
+ (vectorTileFeature: any)._z = z;
17
+ (vectorTileFeature: any)._x = x;
18
+ (vectorTileFeature: any)._y = y;
19
+
20
+ this.properties = vectorTileFeature.properties;
21
+ this.id = id;
22
+ }
23
+
24
+ get geometry(): ?GeoJSONGeometry {
25
+ if (this._geometry === undefined) {
26
+ this._geometry = this._vectorTileFeature.toGeoJSON(
27
+ (this._vectorTileFeature: any)._x,
28
+ (this._vectorTileFeature: any)._y,
29
+ (this._vectorTileFeature: any)._z).geometry;
30
+ }
31
+ return this._geometry;
32
+ }
33
+
34
+ set geometry(g: ?GeoJSONGeometry) {
35
+ this._geometry = g;
36
+ }
37
+
38
+ toJSON() {
39
+ const json = {
40
+ geometry: this.geometry
41
+ };
42
+ for (const i in this) {
43
+ if (i === '_geometry' || i === '_vectorTileFeature') continue;
44
+ json[i] = (this: any)[i];
45
+ }
46
+ return json;
47
+ }
48
+ }
49
+
50
+ export default Feature;
@@ -0,0 +1,114 @@
1
+ // @flow
2
+
3
+ import {
4
+ charHasRotatedVerticalOrientation,
5
+ } from './script_detection';
6
+
7
+ export const verticalizedCharacterMap = {
8
+ '!': '︕',
9
+ '#': '#',
10
+ '$': '$',
11
+ '%': '%',
12
+ '&': '&',
13
+ '(': '︵',
14
+ ')': '︶',
15
+ '*': '*',
16
+ '+': '+',
17
+ ',': '︐',
18
+ '-': '︲',
19
+ '.': '・',
20
+ '/': '/',
21
+ ':': '︓',
22
+ ';': '︔',
23
+ '<': '︿',
24
+ '=': '=',
25
+ '>': '﹀',
26
+ '?': '︖',
27
+ '@': '@',
28
+ '[': '﹇',
29
+ '\\': '\',
30
+ ']': '﹈',
31
+ '^': '^',
32
+ '_': '︳',
33
+ '`': '`',
34
+ '{': '︷',
35
+ '|': '―',
36
+ '}': '︸',
37
+ '~': '~',
38
+ '¢': '¢',
39
+ '£': '£',
40
+ '¥': '¥',
41
+ '¦': '¦',
42
+ '¬': '¬',
43
+ '¯': ' ̄',
44
+ '–': '︲',
45
+ '—': '︱',
46
+ '‘': '﹃',
47
+ '’': '﹄',
48
+ '“': '﹁',
49
+ '”': '﹂',
50
+ '…': '︙',
51
+ '‧': '・',
52
+ '₩': '₩',
53
+ '、': '︑',
54
+ '。': '︒',
55
+ '〈': '︿',
56
+ '〉': '﹀',
57
+ '《': '︽',
58
+ '》': '︾',
59
+ '「': '﹁',
60
+ '」': '﹂',
61
+ '『': '﹃',
62
+ '』': '﹄',
63
+ '【': '︻',
64
+ '】': '︼',
65
+ '〔': '︹',
66
+ '〕': '︺',
67
+ '〖': '︗',
68
+ '〗': '︘',
69
+ '!': '︕',
70
+ '(': '︵',
71
+ ')': '︶',
72
+ ',': '︐',
73
+ '-': '︲',
74
+ '.': '・',
75
+ ':': '︓',
76
+ ';': '︔',
77
+ '<': '︿',
78
+ '>': '﹀',
79
+ '?': '︖',
80
+ '[': '﹇',
81
+ ']': '﹈',
82
+ '_': '︳',
83
+ '{': '︷',
84
+ '|': '―',
85
+ '}': '︸',
86
+ '⦅': '︵',
87
+ '⦆': '︶',
88
+ '。': '︒',
89
+ '「': '﹁',
90
+ '」': '﹂'
91
+ };
92
+
93
+ export default function verticalizePunctuation(input: string) {
94
+ let output = '';
95
+
96
+ for (let i = 0; i < input.length; i++) {
97
+ const nextCharCode = input.charCodeAt(i + 1) || null;
98
+ const prevCharCode = input.charCodeAt(i - 1) || null;
99
+
100
+ const canReplacePunctuation = (
101
+ (!nextCharCode || !charHasRotatedVerticalOrientation(nextCharCode) || verticalizedCharacterMap[input[i + 1]]) &&
102
+ (!prevCharCode || !charHasRotatedVerticalOrientation(prevCharCode) || verticalizedCharacterMap[input[i - 1]])
103
+ );
104
+
105
+ if (canReplacePunctuation && verticalizedCharacterMap[input[i]]) {
106
+ output += verticalizedCharacterMap[input[i]];
107
+ } else {
108
+ output += input[i];
109
+ }
110
+ }
111
+
112
+ return output;
113
+ }
114
+
@@ -0,0 +1,91 @@
1
+ // @flow
2
+
3
+ // This file is intended for use in the GL-JS test suite
4
+ // It implements a MessageBus main thread interface for use in Node environments
5
+ // In a browser environment, this file is replaced with ./src/util/browser/web_worker.js
6
+ // when Rollup builds the main bundle.
7
+ // See package.json#browser
8
+
9
+ import Worker from '../source/worker';
10
+
11
+ import type {WorkerSource} from '../source/worker_source';
12
+
13
+ type MessageListener = ({data: Object}) => mixed;
14
+
15
+ // The main thread interface. Provided by Worker in a browser environment,
16
+ // and MessageBus below in a node environment.
17
+ export interface WorkerInterface {
18
+ addEventListener(type: 'message', listener: MessageListener): void;
19
+ removeEventListener(type: 'message', listener: MessageListener): void;
20
+ postMessage(message: any): void;
21
+ terminate(): void;
22
+ }
23
+
24
+ export interface WorkerGlobalScopeInterface {
25
+ importScripts(...urls: Array<string>): void;
26
+
27
+ registerWorkerSource: (string, Class<WorkerSource>) => void,
28
+ registerRTLTextPlugin: (_: any) => void
29
+ }
30
+
31
+ class MessageBus implements WorkerInterface, WorkerGlobalScopeInterface {
32
+ addListeners: Array<MessageListener>;
33
+ postListeners: Array<MessageListener>;
34
+ target: MessageBus;
35
+ registerWorkerSource: *;
36
+ registerRTLTextPlugin: *;
37
+
38
+ constructor(addListeners: Array<MessageListener>, postListeners: Array<MessageListener>) {
39
+ this.addListeners = addListeners;
40
+ this.postListeners = postListeners;
41
+ }
42
+
43
+ addEventListener(event: 'message', callback: MessageListener) {
44
+ if (event === 'message') {
45
+ this.addListeners.push(callback);
46
+ }
47
+ }
48
+
49
+ removeEventListener(event: 'message', callback: MessageListener) {
50
+ const i = this.addListeners.indexOf(callback);
51
+ if (i >= 0) {
52
+ this.addListeners.splice(i, 1);
53
+ }
54
+ }
55
+
56
+ postMessage(data: Object) {
57
+ setImmediate(() => {
58
+ try {
59
+ for (const listener of this.postListeners) {
60
+ listener({data, target: this.target});
61
+ }
62
+ } catch (e) {
63
+ console.error(e);
64
+ }
65
+ });
66
+ }
67
+
68
+ terminate() {
69
+ this.addListeners.splice(0, this.addListeners.length);
70
+ this.postListeners.splice(0, this.postListeners.length);
71
+ }
72
+
73
+ importScripts() {}
74
+ }
75
+
76
+ export default function WebWorker(): WorkerInterface {
77
+ const parentListeners = [],
78
+ workerListeners = [],
79
+ parentBus = new MessageBus(workerListeners, parentListeners),
80
+ workerBus = new MessageBus(parentListeners, workerListeners);
81
+
82
+ parentBus.target = workerBus;
83
+ workerBus.target = parentBus;
84
+
85
+ new WebWorker.Worker(workerBus);
86
+
87
+ return parentBus;
88
+ }
89
+
90
+ // expose to allow stubbing in unit tests
91
+ WebWorker.Worker = Worker;
@@ -0,0 +1,266 @@
1
+ // @flow
2
+
3
+ import assert from 'assert';
4
+
5
+ import Grid from 'grid-index';
6
+ import Color from '../style-spec/util/color';
7
+ import {StylePropertyFunction, StyleExpression, ZoomDependentExpression, ZoomConstantExpression} from '../style-spec/expression';
8
+ import CompoundExpression from '../style-spec/expression/compound_expression';
9
+ import expressions from '../style-spec/expression/definitions';
10
+ import ResolvedImage from '../style-spec/expression/types/resolved_image';
11
+ import window from './window';
12
+ const {ImageData, ImageBitmap} = window;
13
+
14
+ import type {Transferable} from '../types/transferable';
15
+
16
+ type SerializedObject = {[_: string]: Serialized }; // eslint-disable-line
17
+ export type Serialized =
18
+ | null
19
+ | void
20
+ | boolean
21
+ | number
22
+ | string
23
+ | Boolean
24
+ | Number
25
+ | String
26
+ | Date
27
+ | RegExp
28
+ | ArrayBuffer
29
+ | $ArrayBufferView
30
+ | ImageData
31
+ | Array<Serialized>
32
+ | SerializedObject;
33
+
34
+ type Registry = {
35
+ [_: string]: {
36
+ klass: Class<any>,
37
+ omit: $ReadOnlyArray<string>,
38
+ shallow: $ReadOnlyArray<string>
39
+ }
40
+ };
41
+
42
+ type RegisterOptions<T> = {
43
+ omit?: $ReadOnlyArray<$Keys<T>>,
44
+ shallow?: $ReadOnlyArray<$Keys<T>>
45
+ }
46
+
47
+ const registry: Registry = {};
48
+
49
+ /**
50
+ * Register the given class as serializable.
51
+ *
52
+ * @param options
53
+ * @param options.omit List of properties to omit from serialization (e.g., cached/computed properties)
54
+ * @param options.shallow List of properties that should be serialized by a simple shallow copy, rather than by a recursive call to serialize().
55
+ *
56
+ * @private
57
+ */
58
+ export function register<T: any>(name: string, klass: Class<T>, options: RegisterOptions<T> = {}) {
59
+ assert(!registry[name], `${name} is already registered.`);
60
+ (Object.defineProperty: any)(klass, '_classRegistryKey', {
61
+ value: name,
62
+ writeable: false
63
+ });
64
+ registry[name] = {
65
+ klass,
66
+ omit: options.omit || [],
67
+ shallow: options.shallow || []
68
+ };
69
+ }
70
+
71
+ register('Object', Object);
72
+
73
+ type SerializedGrid = { buffer: ArrayBuffer };
74
+
75
+ Grid.serialize = function serialize(grid: Grid, transferables?: Array<Transferable>): SerializedGrid {
76
+ const buffer = grid.toArrayBuffer();
77
+ if (transferables) {
78
+ transferables.push(buffer);
79
+ }
80
+ return {buffer};
81
+ };
82
+
83
+ Grid.deserialize = function deserialize(serialized: SerializedGrid): Grid {
84
+ return new Grid(serialized.buffer);
85
+ };
86
+ register('Grid', Grid);
87
+
88
+ register('Color', Color);
89
+ register('Error', Error);
90
+ register('ResolvedImage', ResolvedImage);
91
+
92
+ register('StylePropertyFunction', StylePropertyFunction);
93
+ register('StyleExpression', StyleExpression, {omit: ['_evaluator']});
94
+
95
+ register('ZoomDependentExpression', ZoomDependentExpression);
96
+ register('ZoomConstantExpression', ZoomConstantExpression);
97
+ register('CompoundExpression', CompoundExpression, {omit: ['_evaluate']});
98
+ for (const name in expressions) {
99
+ if ((expressions[name]: any)._classRegistryKey) continue;
100
+ register(`Expression_${name}`, expressions[name]);
101
+ }
102
+
103
+ function isArrayBuffer(val: any): boolean {
104
+ return val && typeof ArrayBuffer !== 'undefined' &&
105
+ (val instanceof ArrayBuffer || (val.constructor && val.constructor.name === 'ArrayBuffer'));
106
+ }
107
+
108
+ function isImageBitmap(val: any): boolean {
109
+ return ImageBitmap &&
110
+ val instanceof ImageBitmap;
111
+ }
112
+
113
+ /**
114
+ * Serialize the given object for transfer to or from a web worker.
115
+ *
116
+ * For non-builtin types, recursively serialize each property (possibly
117
+ * omitting certain properties - see register()), and package the result along
118
+ * with the constructor's `name` so that the appropriate constructor can be
119
+ * looked up in `deserialize()`.
120
+ *
121
+ * If a `transferables` array is provided, add any transferable objects (i.e.,
122
+ * any ArrayBuffers or ArrayBuffer views) to the list. (If a copy is needed,
123
+ * this should happen in the client code, before using serialize().)
124
+ *
125
+ * @private
126
+ */
127
+ export function serialize(input: mixed, transferables: ?Array<Transferable>): Serialized {
128
+ if (input === null ||
129
+ input === undefined ||
130
+ typeof input === 'boolean' ||
131
+ typeof input === 'number' ||
132
+ typeof input === 'string' ||
133
+ input instanceof Boolean ||
134
+ input instanceof Number ||
135
+ input instanceof String ||
136
+ input instanceof Date ||
137
+ input instanceof RegExp) {
138
+ return input;
139
+ }
140
+
141
+ if (isArrayBuffer(input) || isImageBitmap(input)) {
142
+ if (transferables) {
143
+ transferables.push(((input: any): ArrayBuffer));
144
+ }
145
+ return input;
146
+ }
147
+
148
+ if (ArrayBuffer.isView(input)) {
149
+ const view: $ArrayBufferView = (input: any);
150
+ if (transferables) {
151
+ transferables.push(view.buffer);
152
+ }
153
+ return view;
154
+ }
155
+
156
+ if (input instanceof ImageData) {
157
+ if (transferables) {
158
+ transferables.push(input.data.buffer);
159
+ }
160
+ return input;
161
+ }
162
+
163
+ if (Array.isArray(input)) {
164
+ const serialized: Array<Serialized> = [];
165
+ for (const item of input) {
166
+ serialized.push(serialize(item, transferables));
167
+ }
168
+ return serialized;
169
+ }
170
+
171
+ if (typeof input === 'object') {
172
+ const klass = (input.constructor: any);
173
+ const name = klass._classRegistryKey;
174
+ if (!name) {
175
+ throw new Error(`can't serialize object of unregistered class`);
176
+ }
177
+ assert(registry[name]);
178
+
179
+ const properties: SerializedObject = klass.serialize ?
180
+ // (Temporary workaround) allow a class to provide static
181
+ // `serialize()` and `deserialize()` methods to bypass the generic
182
+ // approach.
183
+ // This temporary workaround lets us use the generic serialization
184
+ // approach for objects whose members include instances of dynamic
185
+ // StructArray types. Once we refactor StructArray to be static,
186
+ // we can remove this complexity.
187
+ (klass.serialize(input, transferables): SerializedObject) : {};
188
+
189
+ if (!klass.serialize) {
190
+ for (const key in input) {
191
+ // any cast due to https://github.com/facebook/flow/issues/5393
192
+ if (!(input: any).hasOwnProperty(key)) continue;
193
+ if (registry[name].omit.indexOf(key) >= 0) continue;
194
+ const property = (input: any)[key];
195
+ properties[key] = registry[name].shallow.indexOf(key) >= 0 ?
196
+ property :
197
+ serialize(property, transferables);
198
+ }
199
+ if (input instanceof Error) {
200
+ properties.message = input.message;
201
+ }
202
+ } else {
203
+ // make sure statically serialized object survives transfer of $name property
204
+ assert(!transferables || properties !== transferables[transferables.length - 1]);
205
+ }
206
+
207
+ if (properties.$name) {
208
+ throw new Error('$name property is reserved for worker serialization logic.');
209
+ }
210
+ if (name !== 'Object') {
211
+ properties.$name = name;
212
+ }
213
+
214
+ return properties;
215
+ }
216
+
217
+ throw new Error(`can't serialize object of type ${typeof input}`);
218
+ }
219
+
220
+ export function deserialize(input: Serialized): mixed {
221
+ if (input === null ||
222
+ input === undefined ||
223
+ typeof input === 'boolean' ||
224
+ typeof input === 'number' ||
225
+ typeof input === 'string' ||
226
+ input instanceof Boolean ||
227
+ input instanceof Number ||
228
+ input instanceof String ||
229
+ input instanceof Date ||
230
+ input instanceof RegExp ||
231
+ isArrayBuffer(input) ||
232
+ isImageBitmap(input) ||
233
+ ArrayBuffer.isView(input) ||
234
+ input instanceof ImageData) {
235
+ return input;
236
+ }
237
+
238
+ if (Array.isArray(input)) {
239
+ return input.map(deserialize);
240
+ }
241
+
242
+ if (typeof input === 'object') {
243
+ const name = (input: any).$name || 'Object';
244
+
245
+ const {klass} = registry[name];
246
+ if (!klass) {
247
+ throw new Error(`can't deserialize unregistered class ${name}`);
248
+ }
249
+
250
+ if (klass.deserialize) {
251
+ return (klass.deserialize: typeof deserialize)(input);
252
+ }
253
+
254
+ const result = Object.create(klass.prototype);
255
+
256
+ for (const key of Object.keys(input)) {
257
+ if (key === '$name') continue;
258
+ const value = (input: SerializedObject)[key];
259
+ result[key] = registry[name].shallow.indexOf(key) >= 0 ? value : deserialize(value);
260
+ }
261
+
262
+ return result;
263
+ }
264
+
265
+ throw new Error(`can't deserialize object of type ${typeof input}`);
266
+ }
@@ -0,0 +1,69 @@
1
+ // @flow strict
2
+
3
+ import window from './window';
4
+
5
+ const exported = {
6
+ supported: false,
7
+ testSupport
8
+ };
9
+
10
+ export default exported;
11
+
12
+ let glForTesting;
13
+ let webpCheckComplete = false;
14
+ let webpImgTest;
15
+ let webpImgTestOnloadComplete = false;
16
+
17
+ if (window.document) {
18
+ webpImgTest = window.document.createElement('img');
19
+ webpImgTest.onload = function() {
20
+ if (glForTesting) testWebpTextureUpload(glForTesting);
21
+ glForTesting = null;
22
+ webpImgTestOnloadComplete = true;
23
+ };
24
+ webpImgTest.onerror = function() {
25
+ webpCheckComplete = true;
26
+ glForTesting = null;
27
+ };
28
+ webpImgTest.src = 'data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA=';
29
+ }
30
+
31
+ function testSupport(gl: WebGLRenderingContext) {
32
+ if (webpCheckComplete || !webpImgTest) return;
33
+
34
+ // HTMLImageElement.complete is set when an image is done loading it's source
35
+ // regardless of whether the load was successful or not.
36
+ // It's possible for an error to set HTMLImageElement.complete to true which would trigger
37
+ // testWebpTextureUpload and mistakenly set exported.supported to true in browsers which don't support webp
38
+ // To avoid this, we set a flag in the image's onload handler and only call testWebpTextureUpload
39
+ // after a successful image load event.
40
+ if (webpImgTestOnloadComplete) {
41
+ testWebpTextureUpload(gl);
42
+ } else {
43
+ glForTesting = gl;
44
+
45
+ }
46
+ }
47
+
48
+ function testWebpTextureUpload(gl: WebGLRenderingContext) {
49
+ // Edge 18 supports WebP but not uploading a WebP image to a gl texture
50
+ // Test support for this before allowing WebP images.
51
+ // https://github.com/mapbox/mapbox-gl-js/issues/7671
52
+ const texture = gl.createTexture();
53
+ gl.bindTexture(gl.TEXTURE_2D, texture);
54
+
55
+ try {
56
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, webpImgTest);
57
+
58
+ // The error does not get triggered in Edge if the context is lost
59
+ if (gl.isContextLost()) return;
60
+
61
+ exported.supported = true;
62
+ } catch (e) {
63
+ // Catch "Unspecified Error." in Edge 18.
64
+ }
65
+
66
+ gl.deleteTexture(texture);
67
+
68
+ webpCheckComplete = true;
69
+ }
@@ -0,0 +1,102 @@
1
+ // @flow strict
2
+
3
+ // This file is intended for use in the GL-JS test suite
4
+ // It implements a JSDOM window object for use in Node environments
5
+ // In a browser environment, this file is replaced with ./src/util/browser/window.js
6
+ // when Rollup builds the main bundle
7
+ // See package.json#browser
8
+
9
+ import jsdom from 'jsdom';
10
+
11
+ import gl from 'gl';
12
+ import sinon from 'sinon';
13
+
14
+ import type {Window} from '../types/window';
15
+
16
+ const {window: _window} = new jsdom.JSDOM('', {
17
+ virtualConsole: new jsdom.VirtualConsole().sendTo(console)
18
+ });
19
+
20
+ restore();
21
+
22
+ export default _window;
23
+
24
+ function restore(): Window {
25
+ // Remove previous window from exported object
26
+ const previousWindow = _window;
27
+ if (previousWindow.close) previousWindow.close();
28
+ for (const key in previousWindow) {
29
+ if (previousWindow.hasOwnProperty(key)) {
30
+ delete previousWindow[key];
31
+ }
32
+ }
33
+
34
+ // Create new window and inject into exported object
35
+ const {window} = new jsdom.JSDOM('', {
36
+ // Send jsdom console output to the node console object.
37
+ virtualConsole: new jsdom.VirtualConsole().sendTo(console)
38
+ });
39
+
40
+ // Delete local and session storage from JSDOM and stub them out with a warning log
41
+ // Accessing these properties during extend() produces an error in Node environments
42
+ // See https://github.com/mapbox/mapbox-gl-js/pull/7455 for discussion
43
+ delete window.localStorage;
44
+ delete window.sessionStorage;
45
+ window.localStorage = window.sessionStorage = () => console.log('Local and session storage not available in Node. Use a stub implementation if needed for testing.');
46
+
47
+ window.devicePixelRatio = 1;
48
+
49
+ window.requestAnimationFrame = function(callback) {
50
+ return setImmediate(callback, 0);
51
+ };
52
+ window.cancelAnimationFrame = clearImmediate;
53
+
54
+ // Add webgl context with the supplied GL
55
+ const originalGetContext = window.HTMLCanvasElement.prototype.getContext;
56
+ window.HTMLCanvasElement.prototype.getContext = function (type, attributes) {
57
+ if (type === 'webgl') {
58
+ if (!this._webGLContext) {
59
+ this._webGLContext = gl(this.width, this.height, attributes);
60
+ }
61
+ return this._webGLContext;
62
+ }
63
+ // Fallback to existing HTMLCanvasElement getContext behaviour
64
+ return originalGetContext.call(this, type, attributes);
65
+ };
66
+
67
+ window.useFakeHTMLCanvasGetContext = function() {
68
+ this.HTMLCanvasElement.prototype.getContext = function() { return '2d'; };
69
+ };
70
+
71
+ window.useFakeXMLHttpRequest = function() {
72
+ sinon.xhr.supportsCORS = true;
73
+ this.server = sinon.fakeServer.create();
74
+ this.XMLHttpRequest = this.server.xhr;
75
+ };
76
+
77
+ window.URL.revokeObjectURL = function () {};
78
+
79
+ window.fakeWorkerPresence = function() {
80
+ global.WorkerGlobalScope = function() {};
81
+ global.self = new global.WorkerGlobalScope();
82
+ };
83
+ window.clearFakeWorkerPresence = function() {
84
+ global.WorkerGlobalScope = undefined;
85
+ global.self = undefined;
86
+ };
87
+
88
+ window.restore = restore;
89
+
90
+ window.performance.getEntriesByName = function() {};
91
+ window.performance.mark = function() {};
92
+ window.performance.measure = function() {};
93
+ window.performance.clearMarks = function() {};
94
+ window.performance.clearMeasures = function() {};
95
+
96
+ window.ImageData = window.ImageData || function() { return false; };
97
+ window.ImageBitmap = window.ImageBitmap || function() { return false; };
98
+ window.WebGLFramebuffer = window.WebGLFramebuffer || Object;
99
+ Object.assign(_window, window); // eslint-disable-line no-restricted-properties
100
+
101
+ return window;
102
+ }