maplibre-gl 2.0.4 → 2.1.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 (319) hide show
  1. package/build/{banner.js → banner.ts} +1 -1
  2. package/build/generate-query-test-fixtures.ts +123 -0
  3. package/build/generate-shaders.ts +35 -0
  4. package/build/generate-struct-arrays.ts +7 -7
  5. package/build/generate-style-code.ts +8 -8
  6. package/build/generate-style-spec.ts +5 -4
  7. package/build/generate-typings.ts +16 -0
  8. package/build/readme.md +8 -18
  9. package/build/release-notes.js +9 -13
  10. package/build/{rollup_plugin_minify_style_spec.js → rollup_plugin_minify_style_spec.ts} +4 -3
  11. package/build/{rollup_plugins.js → rollup_plugins.ts} +12 -26
  12. package/dist/maplibre-gl-dev.js +54885 -0
  13. package/dist/maplibre-gl.css +1 -1
  14. package/dist/maplibre-gl.d.ts +1583 -1023
  15. package/dist/maplibre-gl.js +3 -3
  16. package/dist/maplibre-gl.js.map +1 -1
  17. package/package.json +99 -141
  18. package/src/css/maplibre-gl.css +36 -36
  19. package/src/data/{array_types.ts → array_types.g.ts} +0 -0
  20. package/src/data/bucket/circle_bucket.ts +1 -1
  21. package/src/data/bucket/fill_bucket.test.ts +1 -1
  22. package/src/data/bucket/fill_bucket.ts +4 -4
  23. package/src/data/bucket/fill_extrusion_bucket.ts +1 -1
  24. package/src/data/bucket/line_bucket.test.ts +1 -1
  25. package/src/data/bucket/line_bucket.ts +6 -6
  26. package/src/data/bucket/symbol_bucket.test.ts +16 -16
  27. package/src/data/bucket/symbol_bucket.ts +56 -56
  28. package/src/data/bucket.ts +43 -43
  29. package/src/data/dem_data.ts +12 -12
  30. package/src/data/evaluation_feature.ts +10 -10
  31. package/src/data/feature_index.ts +37 -37
  32. package/src/data/feature_position_map.ts +5 -5
  33. package/src/data/index_array_type.ts +1 -1
  34. package/src/data/load_geometry.test.ts +1 -1
  35. package/src/data/program_configuration.ts +47 -47
  36. package/src/data/segment.ts +14 -14
  37. package/src/geo/edge_insets.ts +2 -2
  38. package/src/geo/lng_lat.ts +4 -4
  39. package/src/geo/lng_lat_bounds.ts +35 -35
  40. package/src/geo/mercator_coordinate.ts +5 -5
  41. package/src/geo/transform.test.ts +1 -1
  42. package/src/geo/transform.ts +14 -14
  43. package/src/gl/context.ts +3 -3
  44. package/src/gl/types.ts +19 -19
  45. package/src/gl/value.ts +6 -6
  46. package/src/gl/vertex_buffer.test.ts +1 -1
  47. package/src/index.ts +24 -9
  48. package/src/render/draw_circle.ts +8 -8
  49. package/src/render/draw_collision_debug.ts +5 -5
  50. package/src/render/draw_debug.ts +1 -1
  51. package/src/render/draw_line.ts +4 -4
  52. package/src/render/draw_symbol.ts +21 -21
  53. package/src/render/glyph_atlas.ts +12 -12
  54. package/src/render/glyph_manager.test.ts +10 -21
  55. package/src/render/glyph_manager.ts +34 -33
  56. package/src/render/image_manager.ts +4 -4
  57. package/src/render/painter.ts +16 -14
  58. package/src/render/program/background_program.ts +29 -29
  59. package/src/render/program/circle_program.ts +11 -11
  60. package/src/render/program/clipping_mask_program.ts +1 -1
  61. package/src/render/program/collision_program.ts +9 -9
  62. package/src/render/program/debug_program.ts +4 -4
  63. package/src/render/program/fill_extrusion_program.ts +31 -31
  64. package/src/render/program/fill_program.ts +29 -29
  65. package/src/render/program/heatmap_program.ts +12 -12
  66. package/src/render/program/hillshade_program.ts +12 -12
  67. package/src/render/program/line_program.ts +41 -41
  68. package/src/render/program/pattern.ts +28 -28
  69. package/src/render/program/raster_program.ts +21 -21
  70. package/src/render/program/symbol_program.ts +97 -97
  71. package/src/render/program.ts +25 -25
  72. package/src/render/texture.ts +9 -9
  73. package/src/render/uniform_binding.ts +1 -1
  74. package/src/render/vertex_array_object.ts +13 -13
  75. package/src/shaders/_prelude.fragment.glsl.g.ts +2 -0
  76. package/src/shaders/_prelude.vertex.glsl.g.ts +2 -0
  77. package/src/shaders/background.fragment.glsl.g.ts +2 -0
  78. package/src/shaders/background.vertex.glsl.g.ts +2 -0
  79. package/src/shaders/background_pattern.fragment.glsl.g.ts +2 -0
  80. package/src/shaders/background_pattern.vertex.glsl.g.ts +2 -0
  81. package/src/shaders/circle.fragment.glsl.g.ts +2 -0
  82. package/src/shaders/circle.vertex.glsl.g.ts +2 -0
  83. package/src/shaders/clipping_mask.fragment.glsl.g.ts +2 -0
  84. package/src/shaders/clipping_mask.vertex.glsl.g.ts +2 -0
  85. package/src/shaders/collision_box.fragment.glsl.g.ts +2 -0
  86. package/src/shaders/collision_box.vertex.glsl.g.ts +2 -0
  87. package/src/shaders/collision_circle.fragment.glsl.g.ts +2 -0
  88. package/src/shaders/collision_circle.vertex.glsl.g.ts +2 -0
  89. package/src/shaders/debug.fragment.glsl.g.ts +2 -0
  90. package/src/shaders/debug.vertex.glsl.g.ts +2 -0
  91. package/src/shaders/fill.fragment.glsl.g.ts +2 -0
  92. package/src/shaders/fill.vertex.glsl.g.ts +2 -0
  93. package/src/shaders/fill_extrusion.fragment.glsl.g.ts +2 -0
  94. package/src/shaders/fill_extrusion.vertex.glsl.g.ts +2 -0
  95. package/src/shaders/fill_extrusion_pattern.fragment.glsl.g.ts +2 -0
  96. package/src/shaders/fill_extrusion_pattern.vertex.glsl.g.ts +2 -0
  97. package/src/shaders/fill_outline.fragment.glsl.g.ts +2 -0
  98. package/src/shaders/fill_outline.vertex.glsl.g.ts +2 -0
  99. package/src/shaders/fill_outline_pattern.fragment.glsl.g.ts +2 -0
  100. package/src/shaders/fill_outline_pattern.vertex.glsl.g.ts +2 -0
  101. package/src/shaders/fill_pattern.fragment.glsl.g.ts +2 -0
  102. package/src/shaders/fill_pattern.vertex.glsl.g.ts +2 -0
  103. package/src/shaders/heatmap.fragment.glsl.g.ts +2 -0
  104. package/src/shaders/heatmap.vertex.glsl.g.ts +2 -0
  105. package/src/shaders/heatmap_texture.fragment.glsl.g.ts +2 -0
  106. package/src/shaders/heatmap_texture.vertex.glsl.g.ts +2 -0
  107. package/src/shaders/hillshade.fragment.glsl.g.ts +2 -0
  108. package/src/shaders/hillshade.vertex.glsl.g.ts +2 -0
  109. package/src/shaders/hillshade_prepare.fragment.glsl.g.ts +2 -0
  110. package/src/shaders/hillshade_prepare.vertex.glsl.g.ts +2 -0
  111. package/src/shaders/line.fragment.glsl.g.ts +2 -0
  112. package/src/shaders/line.vertex.glsl.g.ts +2 -0
  113. package/src/shaders/line_gradient.fragment.glsl.g.ts +2 -0
  114. package/src/shaders/line_gradient.vertex.glsl.g.ts +2 -0
  115. package/src/shaders/line_pattern.fragment.glsl.g.ts +2 -0
  116. package/src/shaders/line_pattern.vertex.glsl.g.ts +2 -0
  117. package/src/shaders/line_sdf.fragment.glsl.g.ts +2 -0
  118. package/src/shaders/line_sdf.vertex.glsl.g.ts +2 -0
  119. package/src/shaders/raster.fragment.glsl.g.ts +2 -0
  120. package/src/shaders/raster.vertex.glsl.g.ts +2 -0
  121. package/src/shaders/shaders.ts +52 -55
  122. package/src/shaders/symbol_icon.fragment.glsl.g.ts +2 -0
  123. package/src/shaders/symbol_icon.vertex.glsl.g.ts +2 -0
  124. package/src/shaders/symbol_sdf.fragment.glsl.g.ts +2 -0
  125. package/src/shaders/symbol_sdf.vertex.glsl.g.ts +2 -0
  126. package/src/shaders/symbol_text_and_icon.fragment.glsl.g.ts +2 -0
  127. package/src/shaders/symbol_text_and_icon.vertex.glsl.g.ts +2 -0
  128. package/src/source/canvas_source.test.ts +11 -12
  129. package/src/source/canvas_source.ts +4 -4
  130. package/src/source/geojson_source.test.ts +2 -1
  131. package/src/source/geojson_source.ts +1 -1
  132. package/src/source/geojson_worker_source.ts +23 -23
  133. package/src/source/geojson_wrapper.ts +8 -8
  134. package/src/source/image_source.test.ts +153 -0
  135. package/src/source/image_source.ts +6 -6
  136. package/src/source/pixels_to_tile_units.ts +6 -6
  137. package/src/source/query_features.ts +20 -20
  138. package/src/source/raster_dem_tile_source.test.ts +4 -3
  139. package/src/source/raster_dem_tile_source.ts +1 -1
  140. package/src/source/raster_tile_source.test.ts +4 -3
  141. package/src/source/raster_tile_source.ts +1 -1
  142. package/src/source/rtl_text_plugin.ts +10 -10
  143. package/src/source/source.ts +29 -29
  144. package/src/source/source_cache.test.ts +33 -1
  145. package/src/source/source_cache.ts +7 -5
  146. package/src/source/source_state.ts +1 -1
  147. package/src/source/tile.test.ts +3 -3
  148. package/src/source/tile.ts +15 -15
  149. package/src/source/tile_cache.test.ts +6 -4
  150. package/src/source/tile_cache.ts +6 -6
  151. package/src/source/tile_id.test.ts +10 -13
  152. package/src/source/tile_id.ts +2 -2
  153. package/src/source/vector_tile_source.test.ts +17 -5
  154. package/src/source/vector_tile_source.ts +4 -5
  155. package/src/source/vector_tile_worker_source.test.ts +4 -4
  156. package/src/source/vector_tile_worker_source.ts +5 -5
  157. package/src/source/worker.test.ts +1 -1
  158. package/src/source/worker.ts +22 -22
  159. package/src/source/worker_source.ts +56 -56
  160. package/src/source/worker_tile.ts +4 -4
  161. package/src/style/evaluation_parameters.ts +3 -3
  162. package/src/style/format_section_override.test.ts +1 -1
  163. package/src/style/light.ts +10 -10
  164. package/src/style/load_glyph_range.test.ts +3 -5
  165. package/src/style/load_glyph_range.ts +6 -6
  166. package/src/style/load_sprite.ts +5 -4
  167. package/src/style/pauseable_placement.ts +1 -1
  168. package/src/style/properties.ts +70 -70
  169. package/src/style/query_utils.ts +7 -7
  170. package/src/style/style.test.ts +26 -15
  171. package/src/style/style.ts +30 -30
  172. package/src/style/style_glyph.ts +8 -8
  173. package/src/style/style_image.ts +58 -58
  174. package/src/style/style_layer/background_style_layer.ts +2 -2
  175. package/src/style/style_layer/{background_style_layer_properties.ts → background_style_layer_properties.g.ts} +0 -0
  176. package/src/style/style_layer/circle_style_layer.ts +10 -10
  177. package/src/style/style_layer/{circle_style_layer_properties.ts → circle_style_layer_properties.g.ts} +0 -0
  178. package/src/style/style_layer/custom_style_layer.ts +19 -19
  179. package/src/style/style_layer/fill_extrusion_style_layer.ts +11 -11
  180. package/src/style/style_layer/{fill_extrusion_style_layer_properties.ts → fill_extrusion_style_layer_properties.g.ts} +0 -0
  181. package/src/style/style_layer/fill_style_layer.ts +9 -9
  182. package/src/style/style_layer/{fill_style_layer_properties.ts → fill_style_layer_properties.g.ts} +0 -0
  183. package/src/style/style_layer/heatmap_style_layer.ts +2 -2
  184. package/src/style/style_layer/{heatmap_style_layer_properties.ts → heatmap_style_layer_properties.g.ts} +0 -0
  185. package/src/style/style_layer/hillshade_style_layer.ts +2 -2
  186. package/src/style/style_layer/{hillshade_style_layer_properties.ts → hillshade_style_layer_properties.g.ts} +0 -0
  187. package/src/style/style_layer/line_style_layer.ts +9 -9
  188. package/src/style/style_layer/{line_style_layer_properties.ts → line_style_layer_properties.g.ts} +0 -0
  189. package/src/style/style_layer/raster_style_layer.ts +2 -2
  190. package/src/style/style_layer/{raster_style_layer_properties.ts → raster_style_layer_properties.g.ts} +0 -0
  191. package/src/style/style_layer/symbol_style_layer.ts +26 -7
  192. package/src/style/style_layer/{symbol_style_layer_properties.ts → symbol_style_layer_properties.g.ts} +6 -0
  193. package/src/style/style_layer.ts +10 -10
  194. package/src/style/style_layer_index.ts +3 -3
  195. package/src/style/validate_style.ts +15 -15
  196. package/src/style-spec/CHANGELOG.md +6 -0
  197. package/src/style-spec/error/validation_error.ts +1 -1
  198. package/src/style-spec/expression/compound_expression.ts +3 -3
  199. package/src/style-spec/expression/definitions/format.ts +11 -11
  200. package/src/style-spec/expression/definitions/interpolate.ts +5 -5
  201. package/src/style-spec/expression/definitions/match.ts +2 -2
  202. package/src/style-spec/expression/definitions/number_format.ts +11 -11
  203. package/src/style-spec/expression/expression.ts +8 -8
  204. package/src/style-spec/expression/index.ts +97 -97
  205. package/src/style-spec/expression/parsing_context.ts +11 -11
  206. package/src/style-spec/expression/types/collator.ts +9 -9
  207. package/src/style-spec/expression/types/resolved_image.ts +2 -2
  208. package/src/style-spec/expression/types.ts +14 -14
  209. package/src/style-spec/expression/values.ts +1 -1
  210. package/src/style-spec/feature_filter/index.ts +66 -66
  211. package/src/style-spec/function/convert.ts +3 -3
  212. package/src/style-spec/package.json +1 -1
  213. package/src/style-spec/reference/v8.json +68 -2
  214. package/src/style-spec/style-spec.ts +44 -44
  215. package/src/style-spec/types.ts +2 -0
  216. package/src/style-spec/util/color_spaces.ts +8 -8
  217. package/src/style-spec/util/result.ts +4 -4
  218. package/src/style-spec/validate/validate_filter.ts +58 -58
  219. package/src/style-spec/validate/validate_source.ts +63 -63
  220. package/src/style-spec/visit.ts +11 -11
  221. package/src/symbol/collision_feature.test.ts +1 -1
  222. package/src/symbol/collision_feature.ts +10 -10
  223. package/src/symbol/collision_index.ts +43 -43
  224. package/src/symbol/cross_tile_symbol_index.ts +17 -17
  225. package/src/symbol/get_anchors.ts +16 -16
  226. package/src/symbol/grid_index.test.ts +42 -19
  227. package/src/symbol/grid_index.ts +69 -40
  228. package/src/symbol/placement.ts +124 -95
  229. package/src/symbol/projection.ts +30 -30
  230. package/src/symbol/quads.ts +30 -30
  231. package/src/symbol/shaping.ts +160 -160
  232. package/src/symbol/symbol_layout.ts +119 -119
  233. package/src/symbol/symbol_size.ts +29 -29
  234. package/src/symbol/symbol_style_layer.test.ts +49 -2
  235. package/src/types/cancelable.ts +1 -1
  236. package/src/types/tilejson.ts +13 -13
  237. package/src/ui/anchor.ts +1 -1
  238. package/src/ui/camera.test.ts +9 -9
  239. package/src/ui/camera.ts +26 -18
  240. package/src/ui/control/attribution_control.test.ts +51 -16
  241. package/src/ui/control/attribution_control.ts +35 -16
  242. package/src/ui/control/control.ts +40 -40
  243. package/src/ui/control/fullscreen_control.ts +1 -1
  244. package/src/ui/control/geolocate_control.test.ts +1 -1
  245. package/src/ui/control/geolocate_control.ts +102 -102
  246. package/src/ui/control/logo_control.test.ts +5 -4
  247. package/src/ui/control/navigation_control.ts +3 -3
  248. package/src/ui/control/scale_control.test.ts +2 -2
  249. package/src/ui/control/scale_control.ts +5 -5
  250. package/src/ui/events.ts +289 -200
  251. package/src/ui/handler/box_zoom.test.ts +1 -1
  252. package/src/ui/handler/box_zoom.ts +1 -1
  253. package/src/ui/handler/dblclick_zoom.test.ts +1 -1
  254. package/src/ui/handler/drag_pan.test.ts +1 -1
  255. package/src/ui/handler/drag_rotate.test.ts +1 -1
  256. package/src/ui/handler/keyboard.test.ts +1 -1
  257. package/src/ui/handler/keyboard.ts +51 -51
  258. package/src/ui/handler/map_event.test.ts +1 -1
  259. package/src/ui/handler/map_event.ts +1 -1
  260. package/src/ui/handler/mouse.ts +1 -1
  261. package/src/ui/handler/mouse_rotate.test.ts +1 -1
  262. package/src/ui/handler/scroll_zoom.test.ts +3 -2
  263. package/src/ui/handler/scroll_zoom.ts +9 -9
  264. package/src/ui/handler/shim/drag_pan.ts +4 -4
  265. package/src/ui/handler/shim/drag_rotate.ts +1 -1
  266. package/src/ui/handler/shim/touch_zoom_rotate.ts +1 -1
  267. package/src/ui/handler/tap_recognizer.ts +4 -4
  268. package/src/ui/handler/touch_pan.ts +2 -2
  269. package/src/ui/handler/touch_zoom_rotate.test.ts +1 -1
  270. package/src/ui/handler/touch_zoom_rotate.ts +1 -1
  271. package/src/ui/handler_inertia.ts +6 -6
  272. package/src/ui/handler_manager.ts +44 -44
  273. package/src/ui/map/isMoving.test.ts +1 -1
  274. package/src/ui/map/isRotating.test.ts +1 -1
  275. package/src/ui/map/isZooming.test.ts +1 -1
  276. package/src/ui/map.test.ts +87 -14
  277. package/src/ui/map.ts +138 -108
  278. package/src/ui/map_events.test.ts +1 -1
  279. package/src/ui/marker.test.ts +12 -12
  280. package/src/ui/marker.ts +37 -37
  281. package/src/ui/popup.test.ts +7 -7
  282. package/src/ui/popup.ts +9 -9
  283. package/src/util/actor.test.ts +41 -10
  284. package/src/util/actor.ts +8 -8
  285. package/src/util/ajax.test.ts +214 -0
  286. package/src/util/ajax.ts +51 -30
  287. package/src/util/browser.ts +1 -1
  288. package/src/util/classify_rings.test.ts +1 -1
  289. package/src/util/color_ramp.ts +5 -5
  290. package/src/util/config.ts +2 -2
  291. package/src/util/dispatcher.ts +1 -1
  292. package/src/util/dom.ts +2 -2
  293. package/src/util/evented.ts +1 -1
  294. package/src/util/find_pole_of_inaccessibility.ts +3 -3
  295. package/src/util/image.ts +5 -5
  296. package/src/util/performance.ts +7 -7
  297. package/src/util/request_manager.ts +4 -4
  298. package/src/util/resolve_tokens.ts +4 -4
  299. package/src/util/struct_array.test.ts +1 -1
  300. package/src/util/struct_array.ts +15 -15
  301. package/src/util/task_queue.ts +3 -3
  302. package/src/util/test/util.ts +14 -0
  303. package/src/util/tile_request_cache.ts +3 -3
  304. package/src/util/transferable_grid_index.ts +4 -4
  305. package/src/util/util.ts +8 -8
  306. package/src/util/web_worker.ts +4 -68
  307. package/src/util/web_worker_transfer.test.ts +3 -0
  308. package/src/util/web_worker_transfer.ts +21 -17
  309. package/src/util/worker_pool.ts +1 -1
  310. package/build/.eslintrc +0 -21
  311. package/build/glsl_to_js.js +0 -12
  312. package/build/post-ts-build.js +0 -43
  313. package/build/release-notes.md.ejs +0 -8
  314. package/build/test/build-tape.js +0 -17
  315. package/build/web_worker_replacement.js +0 -5
  316. package/dist/package.json +0 -1
  317. package/src/style-spec/validate_spec.test.ts +0 -29
  318. package/src/symbol/shaping.test.ts +0 -392
  319. package/src/types/glsl.d.ts +0 -4
package/src/util/ajax.ts CHANGED
@@ -64,37 +64,57 @@ if (typeof Object.freeze == 'function') {
64
64
  *
65
65
  */
66
66
  export type RequestParameters = {
67
- url: string;
68
- headers?: any;
69
- method?: 'GET' | 'POST' | 'PUT';
70
- body?: string;
71
- type?: 'string' | 'json' | 'arrayBuffer';
72
- credentials?: 'same-origin' | 'include';
73
- collectResourceTiming?: boolean;
67
+ url: string;
68
+ headers?: any;
69
+ method?: 'GET' | 'POST' | 'PUT';
70
+ body?: string;
71
+ type?: 'string' | 'json' | 'arrayBuffer';
72
+ credentials?: 'same-origin' | 'include';
73
+ collectResourceTiming?: boolean;
74
74
  };
75
75
 
76
76
  export type ResponseCallback<T> = (
77
- error?: Error | null,
78
- data?: T | null,
79
- cacheControl?: string | null,
80
- expires?: string | null
77
+ error?: Error | null,
78
+ data?: T | null,
79
+ cacheControl?: string | null,
80
+ expires?: string | null
81
81
  ) => void;
82
82
 
83
- class AJAXError extends Error {
83
+ /**
84
+ * An error thrown when a HTTP request results in an error response.
85
+ * @extends Error
86
+ * @param {number} status The response's HTTP status code.
87
+ * @param {string} statusText The response's HTTP status text.
88
+ * @param {string} url The request's URL.
89
+ * @param {Blob} body The response's body.
90
+ */
91
+ export class AJAXError extends Error {
92
+ /**
93
+ * The response's HTTP status code.
94
+ */
84
95
  status: number;
96
+
97
+ /**
98
+ * The response's HTTP status text.
99
+ */
100
+ statusText: string;
101
+
102
+ /**
103
+ * The request's URL.
104
+ */
85
105
  url: string;
86
- constructor(message: string, status: number, url: string) {
87
- super(message);
88
- this.status = status;
89
- this.url = url;
90
106
 
91
- // work around for https://github.com/Rich-Harris/buble/issues/40
92
- this.name = this.constructor.name;
93
- this.message = message;
94
- }
107
+ /**
108
+ * The response's body.
109
+ */
110
+ body: Blob;
95
111
 
96
- toString() {
97
- return `${this.name}: ${this.message} (${this.status}): ${this.url}`;
112
+ constructor(status: number, statusText: string, url: string, body: Blob) {
113
+ super(`AJAXError: ${statusText} (${status}): ${url}`);
114
+ this.status = status;
115
+ this.statusText = statusText;
116
+ this.url = url;
117
+ this.body = body;
98
118
  }
99
119
  }
100
120
 
@@ -159,7 +179,7 @@ function makeFetchRequest(requestParameters: RequestParameters, callback: Respon
159
179
  return finishRequest(response, cacheableResponse, requestTime);
160
180
 
161
181
  } else {
162
- return callback(new AJAXError(response.statusText, response.status, requestParameters.url));
182
+ return response.blob().then(body => callback(new AJAXError(response.status, response.statusText, requestParameters.url, body)));
163
183
  }
164
184
  }).catch(error => {
165
185
  if (error.code === 20) {
@@ -173,8 +193,8 @@ function makeFetchRequest(requestParameters: RequestParameters, callback: Respon
173
193
  const finishRequest = (response, cacheableResponse?, requestTime?) => {
174
194
  (
175
195
  requestParameters.type === 'arrayBuffer' ? response.arrayBuffer() :
176
- requestParameters.type === 'json' ? response.json() :
177
- response.text()
196
+ requestParameters.type === 'json' ? response.json() :
197
+ response.text()
178
198
  ).then(result => {
179
199
  if (aborted) return;
180
200
  if (cacheableResponse && requestTime) {
@@ -235,7 +255,8 @@ function makeXMLHttpRequest(requestParameters: RequestParameters, callback: Resp
235
255
  }
236
256
  callback(null, data, xhr.getResponseHeader('Cache-Control'), xhr.getResponseHeader('Expires'));
237
257
  } else {
238
- callback(new AJAXError(xhr.statusText, xhr.status, requestParameters.url));
258
+ const body = new Blob([xhr.response], {type: xhr.getResponseHeader('Content-Type')});
259
+ callback(new AJAXError(xhr.status, xhr.statusText, requestParameters.url, body));
239
260
  }
240
261
  };
241
262
  xhr.send(requestParameters.body);
@@ -277,8 +298,8 @@ export const getJSON = function(requestParameters: RequestParameters, callback:
277
298
  };
278
299
 
279
300
  export const getArrayBuffer = function(
280
- requestParameters: RequestParameters,
281
- callback: ResponseCallback<ArrayBuffer>
301
+ requestParameters: RequestParameters,
302
+ callback: ResponseCallback<ArrayBuffer>
282
303
  ): Cancelable {
283
304
  return makeRequest(extend(requestParameters, {type: 'arrayBuffer'}), callback);
284
305
  };
@@ -339,8 +360,8 @@ export const resetImageRequestQueue = () => {
339
360
  resetImageRequestQueue();
340
361
 
341
362
  export const getImage = function(
342
- requestParameters: RequestParameters,
343
- callback: Callback<HTMLImageElement | ImageBitmap>
363
+ requestParameters: RequestParameters,
364
+ callback: Callback<HTMLImageElement | ImageBitmap>
344
365
  ): Cancelable {
345
366
  if (webpSupported.supported) {
346
367
  if (!requestParameters.headers) {
@@ -1,6 +1,6 @@
1
1
  import type {Cancelable} from '../types/cancelable';
2
2
 
3
- const now = performance && performance.now ?
3
+ const now = typeof performance !== 'undefined' && performance && performance.now ?
4
4
  performance.now.bind(performance) :
5
5
  Date.now.bind(Date);
6
6
 
@@ -6,7 +6,7 @@ import classifyRings from './classify_rings';
6
6
  import Point from '@mapbox/point-geometry';
7
7
 
8
8
  // Load a fill feature from fixture tile.
9
- const vt = new VectorTile(new Protobuf(fs.readFileSync(path.resolve(__dirname, '../../test/fixtures/mbsv5-6-18-23.vector.pbf'))));
9
+ const vt = new VectorTile(new Protobuf(fs.readFileSync(path.resolve(__dirname, '../../test/unit/assets/mbsv5-6-18-23.vector.pbf'))));
10
10
  const feature = vt.layers.water.feature(0);
11
11
 
12
12
  describe('classifyRings', () => {
@@ -5,11 +5,11 @@ import assert from 'assert';
5
5
  import type {StylePropertyExpression} from '../style-spec/expression/index';
6
6
 
7
7
  export type ColorRampParams = {
8
- expression: StylePropertyExpression;
9
- evaluationKey: string;
10
- resolution?: number;
11
- image?: RGBAImage;
12
- clips?: Array<any>;
8
+ expression: StylePropertyExpression;
9
+ evaluationKey: string;
10
+ resolution?: number;
11
+ image?: RGBAImage;
12
+ clips?: Array<any>;
13
13
  };
14
14
 
15
15
  /**
@@ -1,6 +1,6 @@
1
1
  type Config = {
2
- MAX_PARALLEL_IMAGE_REQUESTS: number;
3
- REGISTERED_PROTOCOLS: {[x: string]: any};
2
+ MAX_PARALLEL_IMAGE_REQUESTS: number;
3
+ REGISTERED_PROTOCOLS: {[x: string]: any};
4
4
  };
5
5
 
6
6
  const config: Config = {
@@ -18,7 +18,7 @@ class Dispatcher {
18
18
 
19
19
  // exposed to allow stubbing in unit tests
20
20
  static Actor: {
21
- new (...args: any): Actor;
21
+ new (...args: any): Actor;
22
22
  };
23
23
 
24
24
  constructor(workerPool: WorkerPool, parent: any) {
package/src/util/dom.ts CHANGED
@@ -53,7 +53,7 @@ export default class DOM {
53
53
  public static addEventListener(target: any, type: any, callback: any, options: {
54
54
  passive?: boolean;
55
55
  capture?: boolean;
56
- } = {}) {
56
+ } = {}) {
57
57
  if ('passive' in options) {
58
58
  target.addEventListener(type, callback, options);
59
59
  } else {
@@ -64,7 +64,7 @@ export default class DOM {
64
64
  public static removeEventListener(target: any, type: any, callback: any, options: {
65
65
  passive?: boolean;
66
66
  capture?: boolean;
67
- } = {}) {
67
+ } = {}) {
68
68
  if ('passive' in options) {
69
69
  target.removeEventListener(type, callback, options);
70
70
  } else {
@@ -31,7 +31,7 @@ export class Event {
31
31
  }
32
32
 
33
33
  interface ErrorLike {
34
- message: string;
34
+ message: string;
35
35
  }
36
36
 
37
37
  export class ErrorEvent extends Event {
@@ -14,9 +14,9 @@ import {distToSegmentSquared} from './intersection_tests';
14
14
  * @private
15
15
  */
16
16
  export default function(
17
- polygonRings: Array<Array<Point>>,
18
- precision: number = 1,
19
- debug: boolean = false
17
+ polygonRings: Array<Array<Point>>,
18
+ precision: number = 1,
19
+ debug: boolean = false
20
20
  ): Point {
21
21
  // find the bounding box of the outer ring
22
22
  let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
package/src/util/image.ts CHANGED
@@ -3,13 +3,13 @@ import assert from 'assert';
3
3
  import {register} from './web_worker_transfer';
4
4
 
5
5
  export type Size = {
6
- width: number;
7
- height: number;
6
+ width: number;
7
+ height: number;
8
8
  };
9
9
 
10
10
  type Point2D = {
11
- x: number;
12
- y: number;
11
+ x: number;
12
+ y: number;
13
13
  };
14
14
 
15
15
  function createImage(image: any, {
@@ -21,7 +21,7 @@ function createImage(image: any, {
21
21
  } else if (data instanceof Uint8ClampedArray) {
22
22
  data = new Uint8Array(data.buffer);
23
23
  } else if (data.length !== width * height * channels) {
24
- throw new RangeError('mismatched image size');
24
+ throw new RangeError(`mismatched image size. expected: ${data.length} but got: ${width * height * channels}`);
25
25
  }
26
26
  image.width = width;
27
27
  image.height = height;
@@ -1,10 +1,10 @@
1
1
  import type {RequestParameters} from '../util/ajax';
2
2
 
3
3
  export type PerformanceMetrics = {
4
- loadTime: number;
5
- fullLoadTime: number;
6
- fps: number;
7
- percentDroppedFrames: number;
4
+ loadTime: number;
5
+ fullLoadTime: number;
6
+ fps: number;
7
+ percentDroppedFrames: number;
8
8
  };
9
9
 
10
10
  export enum PerformanceMarkers {
@@ -76,9 +76,9 @@ export const PerformanceUtils = {
76
76
  */
77
77
  export class RequestPerformance {
78
78
  _marks: {
79
- start: string;
80
- end: string;
81
- measure: string;
79
+ start: string;
80
+ end: string;
81
+ measure: string;
82
82
  };
83
83
 
84
84
  constructor (request: RequestParameters) {
@@ -6,10 +6,10 @@ type ResourceTypeEnum = keyof IResourceType;
6
6
  export type RequestTransformFunction = (url: string, resourceType?: ResourceTypeEnum) => RequestParameters;
7
7
 
8
8
  type UrlObject = {
9
- protocol: string;
10
- authority: string;
11
- path: string;
12
- params: Array<string>;
9
+ protocol: string;
10
+ authority: string;
11
+ path: string;
12
+ params: Array<string>;
13
13
  };
14
14
 
15
15
  export class RequestManager {
@@ -9,10 +9,10 @@ export default resolveTokens;
9
9
  * @private
10
10
  */
11
11
  function resolveTokens(
12
- properties: {
13
- readonly [x: string]: unknown;
14
- },
15
- text: string
12
+ properties: {
13
+ readonly [x: string]: unknown;
14
+ },
15
+ text: string
16
16
  ): string {
17
17
  return text.replace(/{([^{}]+)}/g, (match, key: string) => {
18
18
  return key in properties ? String(properties[key]) : '';
@@ -1,4 +1,4 @@
1
- import {StructArrayLayout3i6, FeatureIndexArray} from '../data/array_types';
1
+ import {StructArrayLayout3i6, FeatureIndexArray} from '../data/array_types.g';
2
2
 
3
3
  describe('StructArray', () => {
4
4
  class TestArray extends StructArrayLayout3i6 {}
@@ -47,21 +47,21 @@ const DEFAULT_CAPACITY = 128;
47
47
  const RESIZE_MULTIPLIER = 5;
48
48
 
49
49
  export type StructArrayMember = {
50
- name: string;
51
- type: ViewType;
52
- components: number;
53
- offset: number;
50
+ name: string;
51
+ type: ViewType;
52
+ components: number;
53
+ offset: number;
54
54
  };
55
55
 
56
56
  export type StructArrayLayout = {
57
- members: Array<StructArrayMember>;
58
- size: number;
59
- alignment: number;
57
+ members: Array<StructArrayMember>;
58
+ size: number;
59
+ alignment: number;
60
60
  };
61
61
 
62
62
  export type SerializedStructArray = {
63
- length: number;
64
- arrayBuffer: ArrayBuffer;
63
+ length: number;
64
+ arrayBuffer: ArrayBuffer;
65
65
  };
66
66
 
67
67
  /**
@@ -198,12 +198,12 @@ abstract class StructArray {
198
198
  * @private
199
199
  */
200
200
  function createLayout(
201
- members: Array<{
202
- name: string;
203
- type: ViewType;
204
- readonly components?: number;
205
- }>,
206
- alignment: number = 1
201
+ members: Array<{
202
+ name: string;
203
+ type: ViewType;
204
+ readonly components?: number;
205
+ }>,
206
+ alignment: number = 1
207
207
  ): StructArrayLayout {
208
208
 
209
209
  let offset = 0;
@@ -3,9 +3,9 @@ import assert from 'assert';
3
3
  export type TaskID = number; // can't mark opaque due to https://github.com/flowtype/flow-remove-types/pull/61
4
4
 
5
5
  type Task = {
6
- callback: (timeStamp: number) => void;
7
- id: TaskID;
8
- cancelled: boolean;
6
+ callback: (timeStamp: number) => void;
7
+ id: TaskID;
8
+ cancelled: boolean;
9
9
  };
10
10
 
11
11
  class TaskQueue {
@@ -99,3 +99,17 @@ export function getMockDispatcher() {
99
99
 
100
100
  return mockDispatcher;
101
101
  }
102
+
103
+ export function stubAjaxGetImage(createImageBitmap) {
104
+ global.createImageBitmap = createImageBitmap;
105
+
106
+ global.URL.revokeObjectURL = () => {};
107
+ global.URL.createObjectURL = (_) => { return null; };
108
+
109
+ // eslint-disable-next-line accessor-pairs
110
+ Object.defineProperty(global.Image.prototype, 'src', {
111
+ set(_) {
112
+ this.onload();
113
+ }
114
+ });
115
+ }
@@ -9,9 +9,9 @@ let cacheCheckThreshold = 50;
9
9
  const MIN_TIME_UNTIL_EXPIRY = 1000 * 60 * 7; // 7 minutes. Skip caching tiles with a short enough max age.
10
10
 
11
11
  export type ResponseOptions = {
12
- status: number;
13
- statusText: string;
14
- headers: Headers;
12
+ status: number;
13
+ statusText: string;
14
+ headers: Headers;
15
15
  };
16
16
 
17
17
  // We're using a global shared cache object. Normally, requesting ad-hoc Cache objects is fine, but
@@ -148,10 +148,10 @@ class TransferableGridIndex {
148
148
  for (let y = cy1; y <= cy2; y++) {
149
149
  const cellIndex = this.d * y + x;
150
150
  if (intersectionTest && !intersectionTest(
151
- this._convertFromCellCoord(x),
152
- this._convertFromCellCoord(y),
153
- this._convertFromCellCoord(x + 1),
154
- this._convertFromCellCoord(y + 1))) continue;
151
+ this._convertFromCellCoord(x),
152
+ this._convertFromCellCoord(y),
153
+ this._convertFromCellCoord(x + 1),
154
+ this._convertFromCellCoord(y + 1))) continue;
155
155
  if (fn.call(this, x1, y1, x2, y2, cellIndex, arg1, arg2, intersectionTest)) return;
156
156
  }
157
157
  }
package/src/util/util.ts CHANGED
@@ -88,9 +88,9 @@ export function wrap(n: number, min: number, max: number): number {
88
88
  * @private
89
89
  */
90
90
  export function asyncAll<Item, Result>(
91
- array: Array<Item>,
92
- fn: (item: Item, fnCallback: Callback<Result>) => void,
93
- callback: Callback<Array<Result>>
91
+ array: Array<Item>,
92
+ fn: (item: Item, fnCallback: Callback<Result>) => void,
93
+ callback: Callback<Array<Result>>
94
94
  ) {
95
95
  if (!array.length) { return callback(null, []); }
96
96
  let remaining = array.length;
@@ -113,8 +113,8 @@ export function asyncAll<Item, Result>(
113
113
  * @private
114
114
  */
115
115
  export function keysDifference<S, T>(
116
- obj: {[key: string]: S},
117
- other: {[key: string]: T}
116
+ obj: {[key: string]: S},
117
+ other: {[key: string]: T}
118
118
  ): Array<string> {
119
119
  const difference = [];
120
120
  for (const i in obj) {
@@ -365,9 +365,9 @@ export function isClosedPolygon(points: Array<Point>): boolean {
365
365
  */
366
366
 
367
367
  export function sphericalToCartesian([r, azimuthal, polar]: [number, number, number]): {
368
- x: number;
369
- y: number;
370
- z: number;
368
+ x: number;
369
+ y: number;
370
+ z: number;
371
371
  } {
372
372
  // We abstract "north"/"up" (compass-wise) to be 0° when really this is 90° (π/2):
373
373
  // correct for that here
@@ -1,13 +1,8 @@
1
- // When Rollup builds the main bundle this file is replaced with ./build/web_worker_replacement.js
2
- // See package.json 'browser' field and rollup documentation.
3
- // This file is intended for use in the GL-JS test suite when they run on node since node doesn't support workers.
4
- // It implements a MessageBus main thread interface
5
-
6
- import MaplibreWorker from '../source/worker';
1
+ import maplibregl from '../index';
7
2
 
8
3
  import type {WorkerSource} from '../source/worker_source';
9
4
 
10
- type MessageListener = (
5
+ export type MessageListener = (
11
6
  a: {
12
7
  data: any;
13
8
  target: any;
@@ -15,7 +10,6 @@ type MessageListener = (
15
10
  ) => unknown;
16
11
 
17
12
  // The main thread interface. Provided by Worker in a browser environment,
18
- // and MessageBus below in a node environment.
19
13
  export interface WorkerInterface {
20
14
  addEventListener(type: 'message', listener: MessageListener): void;
21
15
  removeEventListener(type: 'message', listener: MessageListener): void;
@@ -34,64 +28,6 @@ export interface WorkerGlobalScopeInterface {
34
28
  registerRTLTextPlugin: (_: any) => void;
35
29
  }
36
30
 
37
- class MessageBus implements WorkerInterface, WorkerGlobalScopeInterface {
38
- addListeners: Array<MessageListener>;
39
- postListeners: Array<MessageListener>;
40
- target: MessageBus;
41
- registerWorkerSource: any;
42
- registerRTLTextPlugin: any;
43
-
44
- constructor(addListeners: Array<MessageListener>, postListeners: Array<MessageListener>) {
45
- this.addListeners = addListeners;
46
- this.postListeners = postListeners;
47
- }
48
-
49
- addEventListener(event: 'message', callback: MessageListener) {
50
- if (event === 'message') {
51
- this.addListeners.push(callback);
52
- }
53
- }
54
-
55
- removeEventListener(event: 'message', callback: MessageListener) {
56
- const i = this.addListeners.indexOf(callback);
57
- if (i >= 0) {
58
- this.addListeners.splice(i, 1);
59
- }
60
- }
61
-
62
- postMessage(data: any) {
63
- setTimeout(() => {
64
- try {
65
- for (const listener of this.postListeners) {
66
- listener({data, target: this.target});
67
- }
68
- } catch (e) {
69
- console.error(e);
70
- }
71
- }, 0);
72
- }
73
-
74
- terminate() {
75
- this.addListeners.splice(0, this.addListeners.length);
76
- this.postListeners.splice(0, this.postListeners.length);
77
- }
78
-
79
- importScripts() { }
80
- }
81
-
82
- export default function workerFactory(): WorkerInterface {
83
- const parentListeners = [],
84
- workerListeners = [],
85
- parentBus = new MessageBus(workerListeners, parentListeners),
86
- workerBus = new MessageBus(parentListeners, workerListeners);
87
-
88
- parentBus.target = workerBus;
89
- workerBus.target = parentBus;
90
-
91
- new workerFactory.Worker(workerBus);
92
-
93
- return parentBus;
31
+ export default function workerFactory() {
32
+ return new Worker(maplibregl.workerUrl);
94
33
  }
95
-
96
- // expose to allow stubbing in unit tests
97
- workerFactory.Worker = MaplibreWorker;
@@ -5,11 +5,13 @@ describe('web worker transfer', () => {
5
5
  class SerializableMock {
6
6
  n;
7
7
  buffer;
8
+ blob;
8
9
  _cached;
9
10
 
10
11
  constructor(n) {
11
12
  this.n = n;
12
13
  this.buffer = new ArrayBuffer(100);
14
+ this.blob = new Blob();
13
15
  this.squared();
14
16
  }
15
17
 
@@ -33,6 +35,7 @@ describe('web worker transfer', () => {
33
35
  expect(deserialized.constructor === SerializableMock).toBeTruthy();
34
36
  expect(deserialized.n === 10).toBeTruthy();
35
37
  expect(deserialized.buffer === serializableMock.buffer).toBeTruthy();
38
+ expect(deserialized.blob === serializableMock.blob).toBeTruthy();
36
39
  expect(transferables[0] === serializableMock.buffer).toBeTruthy();
37
40
  expect(deserialized._cached === undefined).toBeTruthy();
38
41
  expect(deserialized.squared() === 100).toBeTruthy();