maplibre-gl 2.1.0 → 2.1.4

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 (308) 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 +1537 -1011
  15. package/dist/maplibre-gl.js +3 -3
  16. package/dist/maplibre-gl.js.map +1 -1
  17. package/package.json +83 -107
  18. package/postinstall.js +5 -0
  19. package/src/css/maplibre-gl.css +28 -28
  20. package/src/data/{array_types.ts → array_types.g.ts} +0 -0
  21. package/src/data/bucket/circle_bucket.ts +1 -1
  22. package/src/data/bucket/fill_bucket.test.ts +1 -1
  23. package/src/data/bucket/fill_bucket.ts +4 -4
  24. package/src/data/bucket/fill_extrusion_bucket.ts +1 -1
  25. package/src/data/bucket/line_bucket.test.ts +1 -1
  26. package/src/data/bucket/line_bucket.ts +6 -6
  27. package/src/data/bucket/symbol_bucket.test.ts +16 -16
  28. package/src/data/bucket/symbol_bucket.ts +53 -53
  29. package/src/data/bucket.ts +43 -43
  30. package/src/data/dem_data.ts +12 -12
  31. package/src/data/evaluation_feature.ts +10 -10
  32. package/src/data/feature_index.ts +37 -37
  33. package/src/data/feature_position_map.ts +5 -5
  34. package/src/data/index_array_type.ts +1 -1
  35. package/src/data/load_geometry.test.ts +1 -1
  36. package/src/data/program_configuration.ts +46 -46
  37. package/src/data/segment.ts +14 -14
  38. package/src/geo/edge_insets.ts +2 -2
  39. package/src/geo/lng_lat.ts +4 -4
  40. package/src/geo/lng_lat_bounds.ts +35 -35
  41. package/src/geo/mercator_coordinate.ts +5 -5
  42. package/src/geo/transform.test.ts +1 -1
  43. package/src/geo/transform.ts +14 -14
  44. package/src/gl/context.ts +3 -3
  45. package/src/gl/types.ts +19 -19
  46. package/src/gl/value.ts +6 -6
  47. package/src/gl/vertex_buffer.test.ts +1 -1
  48. package/src/index.ts +24 -9
  49. package/src/render/draw_circle.ts +8 -8
  50. package/src/render/draw_collision_debug.ts +5 -5
  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 +33 -32
  56. package/src/render/image_manager.ts +4 -4
  57. package/src/render/painter.ts +11 -11
  58. package/src/render/program/background_program.ts +29 -29
  59. package/src/render/program/circle_program.ts +10 -10
  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 +38 -38
  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 +96 -96
  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_worker_source.ts +23 -23
  131. package/src/source/geojson_wrapper.ts +8 -8
  132. package/src/source/image_source.test.ts +2 -2
  133. package/src/source/image_source.ts +6 -6
  134. package/src/source/pixels_to_tile_units.ts +6 -6
  135. package/src/source/query_features.ts +20 -20
  136. package/src/source/raster_dem_tile_source.test.ts +2 -2
  137. package/src/source/raster_tile_source.test.ts +2 -2
  138. package/src/source/rtl_text_plugin.ts +10 -10
  139. package/src/source/source.ts +29 -29
  140. package/src/source/source_cache.test.ts +32 -0
  141. package/src/source/source_cache.ts +7 -5
  142. package/src/source/source_state.ts +1 -1
  143. package/src/source/tile.test.ts +3 -3
  144. package/src/source/tile.ts +15 -15
  145. package/src/source/tile_cache.test.ts +6 -4
  146. package/src/source/tile_cache.ts +6 -6
  147. package/src/source/tile_id.test.ts +0 -1
  148. package/src/source/vector_tile_source.test.ts +16 -5
  149. package/src/source/vector_tile_source.ts +2 -3
  150. package/src/source/vector_tile_worker_source.test.ts +4 -4
  151. package/src/source/vector_tile_worker_source.ts +5 -5
  152. package/src/source/worker.test.ts +1 -1
  153. package/src/source/worker.ts +22 -22
  154. package/src/source/worker_source.ts +56 -56
  155. package/src/source/worker_tile.ts +4 -4
  156. package/src/style/evaluation_parameters.ts +3 -3
  157. package/src/style/format_section_override.test.ts +1 -1
  158. package/src/style/light.ts +10 -10
  159. package/src/style/load_glyph_range.test.ts +3 -5
  160. package/src/style/load_glyph_range.ts +6 -6
  161. package/src/style/load_sprite.ts +4 -4
  162. package/src/style/pauseable_placement.ts +1 -1
  163. package/src/style/properties.ts +69 -69
  164. package/src/style/query_utils.ts +7 -7
  165. package/src/style/style.test.ts +22 -15
  166. package/src/style/style.ts +29 -29
  167. package/src/style/style_glyph.ts +8 -8
  168. package/src/style/style_image.ts +58 -58
  169. package/src/style/style_layer/background_style_layer.ts +2 -2
  170. package/src/style/style_layer/{background_style_layer_properties.ts → background_style_layer_properties.g.ts} +0 -0
  171. package/src/style/style_layer/circle_style_layer.ts +10 -10
  172. package/src/style/style_layer/{circle_style_layer_properties.ts → circle_style_layer_properties.g.ts} +0 -0
  173. package/src/style/style_layer/custom_style_layer.ts +17 -17
  174. package/src/style/style_layer/fill_extrusion_style_layer.ts +10 -10
  175. package/src/style/style_layer/{fill_extrusion_style_layer_properties.ts → fill_extrusion_style_layer_properties.g.ts} +0 -0
  176. package/src/style/style_layer/fill_style_layer.ts +9 -9
  177. package/src/style/style_layer/{fill_style_layer_properties.ts → fill_style_layer_properties.g.ts} +0 -0
  178. package/src/style/style_layer/heatmap_style_layer.ts +2 -2
  179. package/src/style/style_layer/{heatmap_style_layer_properties.ts → heatmap_style_layer_properties.g.ts} +0 -0
  180. package/src/style/style_layer/hillshade_style_layer.ts +2 -2
  181. package/src/style/style_layer/{hillshade_style_layer_properties.ts → hillshade_style_layer_properties.g.ts} +0 -0
  182. package/src/style/style_layer/line_style_layer.ts +9 -9
  183. package/src/style/style_layer/{line_style_layer_properties.ts → line_style_layer_properties.g.ts} +0 -0
  184. package/src/style/style_layer/raster_style_layer.ts +2 -2
  185. package/src/style/style_layer/{raster_style_layer_properties.ts → raster_style_layer_properties.g.ts} +0 -0
  186. package/src/style/style_layer/symbol_style_layer.ts +7 -7
  187. package/src/style/style_layer/{symbol_style_layer_properties.ts → symbol_style_layer_properties.g.ts} +0 -0
  188. package/src/style/style_layer.ts +10 -10
  189. package/src/style/style_layer_index.ts +3 -3
  190. package/src/style/validate_style.ts +15 -15
  191. package/src/style-spec/error/validation_error.ts +1 -1
  192. package/src/style-spec/expression/compound_expression.ts +3 -3
  193. package/src/style-spec/expression/definitions/format.ts +11 -11
  194. package/src/style-spec/expression/definitions/interpolate.ts +5 -5
  195. package/src/style-spec/expression/definitions/match.ts +2 -2
  196. package/src/style-spec/expression/definitions/number_format.ts +11 -11
  197. package/src/style-spec/expression/expression.ts +8 -8
  198. package/src/style-spec/expression/index.ts +97 -97
  199. package/src/style-spec/expression/parsing_context.ts +11 -11
  200. package/src/style-spec/expression/types/collator.ts +9 -9
  201. package/src/style-spec/expression/types/resolved_image.ts +2 -2
  202. package/src/style-spec/expression/types.ts +14 -14
  203. package/src/style-spec/expression/values.ts +1 -1
  204. package/src/style-spec/feature_filter/index.ts +66 -66
  205. package/src/style-spec/function/convert.ts +3 -3
  206. package/src/style-spec/style-spec.ts +44 -44
  207. package/src/style-spec/util/color_spaces.ts +8 -8
  208. package/src/style-spec/util/result.ts +4 -4
  209. package/src/style-spec/validate/validate_filter.ts +58 -58
  210. package/src/style-spec/validate/validate_source.ts +63 -63
  211. package/src/style-spec/visit.ts +11 -11
  212. package/src/symbol/collision_feature.test.ts +1 -1
  213. package/src/symbol/collision_feature.ts +10 -10
  214. package/src/symbol/collision_index.ts +26 -26
  215. package/src/symbol/cross_tile_symbol_index.ts +17 -17
  216. package/src/symbol/get_anchors.ts +16 -16
  217. package/src/symbol/grid_index.ts +7 -7
  218. package/src/symbol/placement.ts +72 -72
  219. package/src/symbol/projection.ts +30 -30
  220. package/src/symbol/quads.ts +30 -30
  221. package/src/symbol/shaping.ts +160 -160
  222. package/src/symbol/symbol_layout.ts +119 -119
  223. package/src/symbol/symbol_size.ts +29 -29
  224. package/src/symbol/symbol_style_layer.test.ts +1 -1
  225. package/src/types/cancelable.ts +1 -1
  226. package/src/types/tilejson.ts +13 -13
  227. package/src/ui/anchor.ts +1 -1
  228. package/src/ui/camera.test.ts +9 -9
  229. package/src/ui/camera.ts +18 -18
  230. package/src/ui/control/attribution_control.test.ts +51 -16
  231. package/src/ui/control/attribution_control.ts +35 -16
  232. package/src/ui/control/control.ts +40 -40
  233. package/src/ui/control/fullscreen_control.ts +1 -1
  234. package/src/ui/control/geolocate_control.test.ts +1 -1
  235. package/src/ui/control/geolocate_control.ts +102 -102
  236. package/src/ui/control/logo_control.test.ts +5 -4
  237. package/src/ui/control/navigation_control.ts +3 -3
  238. package/src/ui/control/scale_control.test.ts +2 -2
  239. package/src/ui/control/scale_control.ts +5 -5
  240. package/src/ui/events.ts +289 -200
  241. package/src/ui/handler/box_zoom.test.ts +1 -1
  242. package/src/ui/handler/box_zoom.ts +1 -1
  243. package/src/ui/handler/dblclick_zoom.test.ts +1 -1
  244. package/src/ui/handler/drag_pan.test.ts +1 -1
  245. package/src/ui/handler/drag_rotate.test.ts +1 -1
  246. package/src/ui/handler/keyboard.test.ts +1 -1
  247. package/src/ui/handler/keyboard.ts +51 -51
  248. package/src/ui/handler/map_event.test.ts +1 -1
  249. package/src/ui/handler/map_event.ts +1 -1
  250. package/src/ui/handler/mouse.ts +1 -1
  251. package/src/ui/handler/mouse_rotate.test.ts +1 -1
  252. package/src/ui/handler/scroll_zoom.test.ts +3 -2
  253. package/src/ui/handler/scroll_zoom.ts +9 -9
  254. package/src/ui/handler/shim/drag_pan.ts +4 -4
  255. package/src/ui/handler/shim/drag_rotate.ts +1 -1
  256. package/src/ui/handler/shim/touch_zoom_rotate.ts +1 -1
  257. package/src/ui/handler/tap_recognizer.ts +4 -4
  258. package/src/ui/handler/touch_pan.ts +2 -2
  259. package/src/ui/handler/touch_zoom_rotate.test.ts +1 -1
  260. package/src/ui/handler/touch_zoom_rotate.ts +1 -1
  261. package/src/ui/handler_inertia.ts +6 -6
  262. package/src/ui/handler_manager.ts +44 -44
  263. package/src/ui/map/isMoving.test.ts +1 -1
  264. package/src/ui/map/isRotating.test.ts +1 -1
  265. package/src/ui/map/isZooming.test.ts +1 -1
  266. package/src/ui/map.test.ts +26 -14
  267. package/src/ui/map.ts +107 -102
  268. package/src/ui/map_events.test.ts +1 -1
  269. package/src/ui/marker.test.ts +12 -12
  270. package/src/ui/marker.ts +37 -37
  271. package/src/ui/popup.test.ts +7 -7
  272. package/src/ui/popup.ts +9 -9
  273. package/src/util/actor.test.ts +41 -10
  274. package/src/util/actor.ts +8 -8
  275. package/src/util/ajax.test.ts +29 -21
  276. package/src/util/ajax.ts +51 -30
  277. package/src/util/browser.ts +1 -1
  278. package/src/util/classify_rings.test.ts +1 -1
  279. package/src/util/color_ramp.ts +5 -5
  280. package/src/util/config.ts +2 -2
  281. package/src/util/dispatcher.ts +1 -1
  282. package/src/util/dom.ts +2 -2
  283. package/src/util/evented.ts +1 -1
  284. package/src/util/find_pole_of_inaccessibility.ts +3 -3
  285. package/src/util/image.ts +5 -5
  286. package/src/util/performance.ts +7 -7
  287. package/src/util/request_manager.ts +4 -4
  288. package/src/util/resolve_tokens.ts +4 -4
  289. package/src/util/struct_array.test.ts +1 -1
  290. package/src/util/struct_array.ts +15 -15
  291. package/src/util/task_queue.ts +3 -3
  292. package/src/util/tile_request_cache.ts +3 -3
  293. package/src/util/transferable_grid_index.ts +4 -4
  294. package/src/util/util.ts +8 -8
  295. package/src/util/web_worker.ts +4 -68
  296. package/src/util/web_worker_transfer.test.ts +3 -0
  297. package/src/util/web_worker_transfer.ts +21 -17
  298. package/src/util/worker_pool.ts +1 -1
  299. package/build/.eslintrc +0 -21
  300. package/build/glsl_to_js.js +0 -12
  301. package/build/post-ts-build.js +0 -43
  302. package/build/release-notes.md.ejs +0 -8
  303. package/build/test/build-tape.js +0 -17
  304. package/build/web_worker_replacement.js +0 -5
  305. package/dist/package.json +0 -1
  306. package/src/style-spec/validate_spec.test.ts +0 -29
  307. package/src/symbol/shaping.test.ts +0 -392
  308. package/src/types/glsl.d.ts +0 -4
@@ -33,47 +33,47 @@ import {CanonicalTileID} from './tile_id';
33
33
  * if they are floor-ed to the nearest integer.
34
34
  */
35
35
  export interface Source {
36
- readonly type: string;
37
- id: string;
38
- minzoom: number;
39
- maxzoom: number;
40
- tileSize: number;
41
- attribution?: string;
42
- roundZoom?: boolean;
43
- isTileClipped?: boolean;
44
- maplibreLogo?: boolean;
45
- tileID?: CanonicalTileID;
46
- reparseOverscaled?: boolean;
47
- vectorLayerIds?: Array<string>;
48
- hasTransition(): boolean;
49
- loaded(): boolean;
50
- fire(event: Event): unknown;
51
- readonly onAdd?: (map: Map) => void;
52
- readonly onRemove?: (map: Map) => void;
53
- loadTile(tile: Tile, callback: Callback<void>): void;
54
- readonly hasTile?: (tileID: OverscaledTileID) => boolean;
55
- readonly abortTile?: (tile: Tile, callback: Callback<void>) => void;
56
- readonly unloadTile?: (tile: Tile, callback: Callback<void>) => void;
57
- /**
36
+ readonly type: string;
37
+ id: string;
38
+ minzoom: number;
39
+ maxzoom: number;
40
+ tileSize: number;
41
+ attribution?: string;
42
+ roundZoom?: boolean;
43
+ isTileClipped?: boolean;
44
+ maplibreLogo?: boolean;
45
+ tileID?: CanonicalTileID;
46
+ reparseOverscaled?: boolean;
47
+ vectorLayerIds?: Array<string>;
48
+ hasTransition(): boolean;
49
+ loaded(): boolean;
50
+ fire(event: Event): unknown;
51
+ readonly onAdd?: (map: Map) => void;
52
+ readonly onRemove?: (map: Map) => void;
53
+ loadTile(tile: Tile, callback: Callback<void>): void;
54
+ readonly hasTile?: (tileID: OverscaledTileID) => boolean;
55
+ readonly abortTile?: (tile: Tile, callback: Callback<void>) => void;
56
+ readonly unloadTile?: (tile: Tile, callback: Callback<void>) => void;
57
+ /**
58
58
  * @returns A plain (stringifiable) JS object representing the current state of the source.
59
59
  * Creating a source using the returned object as the `options` should result in a Source that is
60
60
  * equivalent to this one.
61
61
  * @private
62
62
  */
63
- serialize(): any;
64
- readonly prepare?: () => void;
63
+ serialize(): any;
64
+ readonly prepare?: () => void;
65
65
  }
66
66
 
67
67
  type SourceStatics = {
68
- /*
68
+ /*
69
69
  * An optional URL to a script which, when run by a Worker, registers a {@link WorkerSource}
70
70
  * implementation for this Source type by calling `self.registerWorkerSource(workerSource: WorkerSource)`.
71
71
  */
72
- workerSourceURL?: URL;
72
+ workerSourceURL?: URL;
73
73
  };
74
74
 
75
75
  export type SourceClass = {
76
- new (...args: any): Source;
76
+ new (...args: any): Source;
77
77
  } & SourceStatics;
78
78
 
79
79
  import vector from '../source/vector_tile_source';
@@ -122,11 +122,11 @@ export const getSourceType = function (name: string) {
122
122
  };
123
123
 
124
124
  export const setSourceType = function (name: string, type: {
125
- new (...args: any): Source;
125
+ new (...args: any): Source;
126
126
  }) {
127
127
  sourceTypes[name] = type;
128
128
  };
129
129
 
130
130
  export interface Actor {
131
- send(type: string, data: any, callback: Callback<any>): void;
131
+ send(type: string, data: any, callback: Callback<any>): void;
132
132
  }
@@ -336,6 +336,38 @@ describe('SourceCache#removeTile', () => {
336
336
  sourceCache._addTile(tileID);
337
337
  });
338
338
 
339
+ test('fires dataabort event', done => {
340
+ const sourceCache = createSourceCache({
341
+ loadTile() {
342
+ // Do not call back in order to make sure the tile is removed before it is loaded.
343
+ }
344
+ });
345
+ const tileID = new OverscaledTileID(0, 0, 0, 0, 0);
346
+ const tile = sourceCache._addTile(tileID);
347
+ sourceCache.once('dataabort', event => {
348
+ expect(event.dataType).toBe('source');
349
+ expect(event.tile).toBe(tile);
350
+ expect(event.coord).toBe(tileID);
351
+ done();
352
+ });
353
+ sourceCache._removeTile(tileID.key);
354
+ });
355
+
356
+ test('does not fire dataabort event when the tile has already been loaded', () => {
357
+ const sourceCache = createSourceCache({
358
+ loadTile(tile, callback) {
359
+ tile.state = 'loaded';
360
+ callback();
361
+ }
362
+ });
363
+ const tileID = new OverscaledTileID(0, 0, 0, 0, 0);
364
+ sourceCache._addTile(tileID);
365
+ const onAbort = jest.fn();
366
+ sourceCache.once('dataabort', onAbort);
367
+ sourceCache._removeTile(tileID.key);
368
+ expect(onAbort).toHaveBeenCalledTimes(0);
369
+ });
370
+
339
371
  });
340
372
 
341
373
  describe('SourceCache / Source lifecycle', () => {
@@ -46,10 +46,10 @@ class SourceCache extends Evented {
46
46
  _prevLng: number;
47
47
  _cache: TileCache;
48
48
  _timers: {
49
- [_ in any]: ReturnType<typeof setTimeout>;
49
+ [_ in any]: ReturnType<typeof setTimeout>;
50
50
  };
51
51
  _cacheTimers: {
52
- [_ in any]: ReturnType<typeof setTimeout>;
52
+ [_ in any]: ReturnType<typeof setTimeout>;
53
53
  };
54
54
  _maxTileCacheSize: number;
55
55
  _paused: boolean;
@@ -160,7 +160,9 @@ class SourceCache extends Evented {
160
160
 
161
161
  _abortTile(tile: Tile) {
162
162
  if (this._source.abortTile)
163
- return this._source.abortTile(tile, () => {});
163
+ this._source.abortTile(tile, () => {});
164
+
165
+ this._source.fire(new Event('dataabort', {tile, coord: tile.tileID, dataType: 'source'}));
164
166
  }
165
167
 
166
168
  serialize() {
@@ -331,12 +333,12 @@ class SourceCache extends Evented {
331
333
  */
332
334
  _retainLoadedChildren(
333
335
  idealTiles: {
334
- [_ in any]: OverscaledTileID;
336
+ [_ in any]: OverscaledTileID;
335
337
  },
336
338
  zoom: number,
337
339
  maxCoveringZoom: number,
338
340
  retain: {
339
- [_ in any]: OverscaledTileID;
341
+ [_ in any]: OverscaledTileID;
340
342
  }
341
343
  ) {
342
344
  for (const id in this._tiles) {
@@ -102,7 +102,7 @@ class SourceFeatureState {
102
102
  }
103
103
 
104
104
  coalesceChanges(tiles: {
105
- [_ in any]: Tile;
105
+ [_ in any]: Tile;
106
106
  }, painter: any) {
107
107
  //track changes with full state objects, but only for features that got modified
108
108
  const featuresChanged: LayerFeatureStates = {};
@@ -1,4 +1,4 @@
1
- import {createSymbolBucket} from '../../test/util/create_symbol_layer';
1
+ import {createSymbolBucket} from '../../test/unit/lib/create_symbol_layer';
2
2
  import Tile from '../source/tile';
3
3
  import GeoJSONWrapper, {Feature} from '../source/geojson_wrapper';
4
4
  import {OverscaledTileID} from '../source/tile_id';
@@ -6,7 +6,7 @@ import fs from 'fs';
6
6
  import path from 'path';
7
7
  import vtpbf from 'vt-pbf';
8
8
  import FeatureIndex from '../data/feature_index';
9
- import {CollisionBoxArray} from '../data/array_types';
9
+ import {CollisionBoxArray} from '../data/array_types.g';
10
10
  import {extend} from '../util/util';
11
11
  import {serialize, deserialize} from '../util/web_worker_transfer';
12
12
 
@@ -273,7 +273,7 @@ describe('rtl text detection', () => {
273
273
  });
274
274
 
275
275
  function createRawTileData() {
276
- return fs.readFileSync(path.join(__dirname, '../../test/fixtures/mbsv5-6-18-23.vector.pbf'));
276
+ return fs.readFileSync(path.join(__dirname, '../../test/unit/assets/mbsv5-6-18-23.vector.pbf'));
277
277
  }
278
278
 
279
279
  function createVectorData(options?) {
@@ -5,7 +5,7 @@ import type FeatureIndex from '../data/feature_index';
5
5
  import GeoJSONFeature from '../util/vectortile_to_geojson';
6
6
  import featureFilter from '../style-spec/feature_filter';
7
7
  import SymbolBucket from '../data/bucket/symbol_bucket';
8
- import {CollisionBoxArray} from '../data/array_types';
8
+ import {CollisionBoxArray} from '../data/array_types.g';
9
9
  import Texture from '../render/texture';
10
10
  import browser from '../util/browser';
11
11
  import toEvaluationFeature from '../data/evaluation_feature';
@@ -268,20 +268,20 @@ class Tile {
268
268
  // Queries non-symbol features rendered for this tile.
269
269
  // Symbol features are queried globally
270
270
  queryRenderedFeatures(
271
- layers: {[_: string]: StyleLayer},
272
- serializedLayers: {[_: string]: any},
273
- sourceFeatureState: SourceFeatureState,
274
- queryGeometry: Array<Point>,
275
- cameraQueryGeometry: Array<Point>,
276
- scale: number,
277
- params: {
278
- filter: FilterSpecification;
279
- layers: Array<string>;
280
- availableImages: Array<string>;
281
- },
282
- transform: Transform,
283
- maxPitchScaleFactor: number,
284
- pixelPosMatrix: mat4
271
+ layers: {[_: string]: StyleLayer},
272
+ serializedLayers: {[_: string]: any},
273
+ sourceFeatureState: SourceFeatureState,
274
+ queryGeometry: Array<Point>,
275
+ cameraQueryGeometry: Array<Point>,
276
+ scale: number,
277
+ params: {
278
+ filter: FilterSpecification;
279
+ layers: Array<string>;
280
+ availableImages: Array<string>;
281
+ },
282
+ transform: Transform,
283
+ maxPitchScaleFactor: number,
284
+ pixelPosMatrix: mat4
285
285
  ): {[_: string]: Array<{featureIndex: number; feature: GeoJSONFeature}>} {
286
286
  if (!this.latestFeatureIndex || !this.latestFeatureIndex.rawTileData)
287
287
  return {};
@@ -30,19 +30,20 @@ describe('TileCache', () => {
30
30
  keysExpected(cache, []);
31
31
  });
32
32
 
33
- test('get without removing', () => {
33
+ test('get without removing', done => {
34
34
  const cache = new TileCache(10, () => {
35
- fail();
35
+ done('test "get without removing" failed');
36
36
  });
37
37
  expect(cache.add(idA, tileA)).toBe(cache);
38
38
  expect(cache.get(idA)).toBe(tileA);
39
39
  keysExpected(cache, [idA]);
40
40
  expect(cache.get(idA)).toBe(tileA);
41
+ done();
41
42
  });
42
43
 
43
- test('duplicate add', () => {
44
+ test('duplicate add', done => {
44
45
  const cache = new TileCache(10, () => {
45
- fail();
46
+ done('test "duplicate add" failed');
46
47
  });
47
48
 
48
49
  cache.add(idA, tileA);
@@ -53,6 +54,7 @@ describe('TileCache', () => {
53
54
  expect(cache.getAndRemove(idA)).toBe(tileA);
54
55
  expect(cache.has(idA)).toBeTruthy();
55
56
  expect(cache.getAndRemove(idA)).toBe(tileA2);
57
+ done();
56
58
  });
57
59
 
58
60
  test('expiry', () => {
@@ -11,10 +11,10 @@ import type Tile from './tile';
11
11
  class TileCache {
12
12
  max: number;
13
13
  data: {
14
- [key: string]: Array<{
15
- value: Tile;
16
- timeout: ReturnType<typeof setTimeout>;
17
- }>;
14
+ [key: string]: Array<{
15
+ value: Tile;
16
+ timeout: ReturnType<typeof setTimeout>;
17
+ }>;
18
18
  };
19
19
  order: Array<string>;
20
20
  onRemove: (element: Tile) => void;
@@ -157,8 +157,8 @@ class TileCache {
157
157
  * @private
158
158
  */
159
159
  remove(tileID: OverscaledTileID, value?: {
160
- value: Tile;
161
- timeout: ReturnType<typeof setTimeout>;
160
+ value: Tile;
161
+ timeout: ReturnType<typeof setTimeout>;
162
162
  }) {
163
163
  if (!this.has(tileID)) { return this; }
164
164
  const key = tileID.wrapped().key;
@@ -43,7 +43,6 @@ describe('CanonicalTileID', () => {
43
43
  expect(new CanonicalTileID(17, 22914, 52870).url(['quadkey={quadkey}'], 1)).toBe('quadkey=02301322130000230');
44
44
 
45
45
  // Test case confirmed by quadkeytools package
46
- // https://bitbucket.org/steele/quadkeytools/rollup/build/tsc/src/master/test/quadkey.js?fileviewer=file-view-default#quadkey.js-57
47
46
  expect(new CanonicalTileID(6, 29, 3).url(['quadkey={quadkey}'], 1)).toBe('quadkey=011123');
48
47
 
49
48
  });
@@ -1,21 +1,21 @@
1
- import {fakeServer, SinonFakeServer} from 'sinon';
1
+ import {fakeServer, FakeServer} from 'nise';
2
2
  import {Source} from './source';
3
3
  import VectorTileSource from './vector_tile_source';
4
4
  import Tile from './tile';
5
5
  import {OverscaledTileID} from './tile_id';
6
6
  import {Evented} from '../util/evented';
7
7
  import {RequestManager} from '../util/request_manager';
8
- import fixturesSource from '../../test/fixtures/source.json';
8
+ import fixturesSource from '../../test/unit/assets/source.json';
9
9
  import {getMockDispatcher, getWrapDispatcher} from '../util/test/util';
10
10
  import Map from '../ui/map';
11
11
 
12
- function createSource(options, transformCallback?) {
12
+ function createSource(options, transformCallback?, clearTiles = () => {}) {
13
13
  const source = new VectorTileSource('id', options, getMockDispatcher(), options.eventedParent);
14
14
  source.onAdd({
15
15
  transform: {showCollisionBoxes: false},
16
16
  _getMapId: () => 1,
17
17
  _requestManager: new RequestManager(transformCallback),
18
- style: {sourceCaches: {id: {clearTiles: () => {}}}},
18
+ style: {sourceCaches: {id: {clearTiles}}},
19
19
  getPixelRatio() { return 1; }
20
20
  } as any as Map);
21
21
 
@@ -27,7 +27,7 @@ function createSource(options, transformCallback?) {
27
27
  }
28
28
 
29
29
  describe('VectorTileSource', () => {
30
- let server: SinonFakeServer;
30
+ let server: FakeServer;
31
31
  beforeEach(() => {
32
32
  global.fetch = null;
33
33
  server = fakeServer.create();
@@ -343,4 +343,15 @@ describe('VectorTileSource', () => {
343
343
  tiles: ['http://example2.com/{z}/{x}/{y}.png']
344
344
  });
345
345
  });
346
+
347
+ test('setTiles only clears the cache once the TileJSON has reloaded', done => {
348
+ const clearTiles = jest.fn();
349
+ const source = createSource({tiles: ['http://example.com/{z}/{x}/{y}.pbf']}, undefined, clearTiles);
350
+ source.setTiles(['http://example2.com/{z}/{x}/{y}.pbf']);
351
+ expect(clearTiles.mock.calls).toHaveLength(0);
352
+ source.once('data', () => {
353
+ expect(clearTiles.mock.calls).toHaveLength(1);
354
+ done();
355
+ });
356
+ });
346
357
  });
@@ -64,7 +64,7 @@ class VectorTileSource extends Evented implements Source {
64
64
  _loaded: boolean;
65
65
 
66
66
  constructor(id: string, options: VectorSourceSpecification & {
67
- collectResourceTiming: boolean;
67
+ collectResourceTiming: boolean;
68
68
  }, dispatcher: Dispatcher, eventedParent: Evented) {
69
69
  super();
70
70
  this.id = id;
@@ -97,6 +97,7 @@ class VectorTileSource extends Evented implements Source {
97
97
  this._tileJSONRequest = loadTileJSON(this._options, this.map._requestManager, (err, tileJSON) => {
98
98
  this._tileJSONRequest = null;
99
99
  this._loaded = true;
100
+ this.map.style.sourceCaches[this.id].clearTiles();
100
101
  if (err) {
101
102
  this.fire(new ErrorEvent(err));
102
103
  } else if (tileJSON) {
@@ -132,8 +133,6 @@ class VectorTileSource extends Evented implements Source {
132
133
 
133
134
  callback();
134
135
 
135
- const sourceCache = this.map.style.sourceCaches[this.id];
136
- sourceCache.clearTiles();
137
136
  this.load();
138
137
  }
139
138
 
@@ -4,7 +4,7 @@ import vt from '@mapbox/vector-tile';
4
4
  import Protobuf from 'pbf';
5
5
  import VectorTileWorkerSource from '../source/vector_tile_worker_source';
6
6
  import StyleLayerIndex from '../style/style_layer_index';
7
- import {fakeServer, SinonFakeServer} from 'sinon';
7
+ import {fakeServer, FakeServer} from 'nise';
8
8
  import Actor from '../util/actor';
9
9
  import {TileParameters, WorkerTileParameters} from './worker_source';
10
10
  import WorkerTile from './worker_tile';
@@ -12,7 +12,7 @@ import {setPerformance} from '../util/test/util';
12
12
 
13
13
  describe('vector tile worker source', () => {
14
14
  const actor = {send: () => {}} as any as Actor;
15
- let server: SinonFakeServer;
15
+ let server: FakeServer;
16
16
  let originalGetEntriesByName;
17
17
  let originalMeasure;
18
18
  let originalMark;
@@ -195,7 +195,7 @@ describe('vector tile worker source', () => {
195
195
  });
196
196
 
197
197
  test('VectorTileWorkerSource provides resource timing information', done => {
198
- const rawTileData = fs.readFileSync(path.join(__dirname, '/../../test/fixtures/mbsv5-6-18-23.vector.pbf'));
198
+ const rawTileData = fs.readFileSync(path.join(__dirname, '/../../test/unit/assets/mbsv5-6-18-23.vector.pbf'));
199
199
 
200
200
  function loadVectorData(params, callback) {
201
201
  return callback(null, {
@@ -251,7 +251,7 @@ describe('vector tile worker source', () => {
251
251
  });
252
252
 
253
253
  test('VectorTileWorkerSource provides resource timing information (fallback method)', done => {
254
- const rawTileData = fs.readFileSync(path.join(__dirname, '/../../test/fixtures/mbsv5-6-18-23.vector.pbf'));
254
+ const rawTileData = fs.readFileSync(path.join(__dirname, '/../../test/unit/assets/mbsv5-6-18-23.vector.pbf'));
255
255
 
256
256
  function loadVectorData(params, callback) {
257
257
  return callback(null, {
@@ -19,11 +19,11 @@ import type {Callback} from '../types/callback';
19
19
  import type {VectorTile} from '@mapbox/vector-tile';
20
20
 
21
21
  export type LoadVectorTileResult = {
22
- vectorTile: VectorTile;
23
- rawData: ArrayBuffer;
24
- expires?: any;
25
- cacheControl?: any;
26
- resourceTiming?: Array<PerformanceResourceTiming>;
22
+ vectorTile: VectorTile;
23
+ rawData: ArrayBuffer;
24
+ expires?: any;
25
+ cacheControl?: any;
26
+ resourceTiming?: Array<PerformanceResourceTiming>;
27
27
  };
28
28
 
29
29
  /**
@@ -1,4 +1,4 @@
1
- import {fakeServer} from 'sinon';
1
+ import {fakeServer} from 'nise';
2
2
  import Worker from './worker';
3
3
  import {LayerSpecification} from '../style-spec/types';
4
4
  import {Cancelable} from '../types/cancelable';
@@ -31,21 +31,21 @@ export default class Worker {
31
31
  layerIndexes: {[_: string]: StyleLayerIndex};
32
32
  availableImages: {[_: string]: Array<string>};
33
33
  workerSourceTypes: {
34
- [_: string]: {
35
- new (...args: any): WorkerSource;
36
- };
34
+ [_: string]: {
35
+ new (...args: any): WorkerSource;
36
+ };
37
37
  };
38
38
  workerSources: {
39
- [_: string]: {
40
39
  [_: string]: {
41
- [_: string]: WorkerSource;
40
+ [_: string]: {
41
+ [_: string]: WorkerSource;
42
+ };
42
43
  };
43
- };
44
44
  };
45
45
  demWorkerSources: {
46
- [_: string]: {
47
- [_: string]: RasterDEMTileWorkerSource;
48
- };
46
+ [_: string]: {
47
+ [_: string]: RasterDEMTileWorkerSource;
48
+ };
49
49
  };
50
50
  referrer: string;
51
51
 
@@ -66,7 +66,7 @@ export default class Worker {
66
66
  this.demWorkerSources = {};
67
67
 
68
68
  this.self.registerWorkerSource = (name: string, WorkerSource: {
69
- new (...args: any): WorkerSource;
69
+ new (...args: any): WorkerSource;
70
70
  }) => {
71
71
  if (this.workerSourceTypes[name]) {
72
72
  throw new Error(`Worker source with name "${name}" already registered.`);
@@ -76,9 +76,9 @@ export default class Worker {
76
76
 
77
77
  // This is invoked by the RTL text plugin when the download via the `importScripts` call has finished, and the code has been parsed.
78
78
  this.self.registerRTLTextPlugin = (rtlTextPlugin: {
79
- applyArabicShaping: Function;
80
- processBidirectionalText: ((b: string, a: Array<number>) => Array<string>);
81
- processStyledBidirectionalText?: ((c: string, b: Array<number>, a: Array<number>) => Array<[string, Array<number>]>);
79
+ applyArabicShaping: Function;
80
+ processBidirectionalText: ((b: string, a: Array<number>) => Array<string>);
81
+ processStyledBidirectionalText?: ((c: string, b: Array<number>, a: Array<number>) => Array<[string, Array<number>]>);
82
82
  }) => {
83
83
  if (globalRTLTextPlugin.isParsed()) {
84
84
  throw new Error('RTL text plugin already registered.');
@@ -110,15 +110,15 @@ export default class Worker {
110
110
  }
111
111
 
112
112
  updateLayers(mapId: string, params: {
113
- layers: Array<LayerSpecification>;
114
- removedIds: Array<string>;
113
+ layers: Array<LayerSpecification>;
114
+ removedIds: Array<string>;
115
115
  }, callback: WorkerTileCallback) {
116
116
  this.getLayerIndex(mapId).update(params.layers, params.removedIds);
117
117
  callback();
118
118
  }
119
119
 
120
120
  loadTile(mapId: string, params: WorkerTileParameters & {
121
- type: string;
121
+ type: string;
122
122
  }, callback: WorkerTileCallback) {
123
123
  assert(params.type);
124
124
  this.getWorkerSource(mapId, params.type, params.source).loadTile(params, callback);
@@ -129,21 +129,21 @@ export default class Worker {
129
129
  }
130
130
 
131
131
  reloadTile(mapId: string, params: WorkerTileParameters & {
132
- type: string;
132
+ type: string;
133
133
  }, callback: WorkerTileCallback) {
134
134
  assert(params.type);
135
135
  this.getWorkerSource(mapId, params.type, params.source).reloadTile(params, callback);
136
136
  }
137
137
 
138
138
  abortTile(mapId: string, params: TileParameters & {
139
- type: string;
139
+ type: string;
140
140
  }, callback: WorkerTileCallback) {
141
141
  assert(params.type);
142
142
  this.getWorkerSource(mapId, params.type, params.source).abortTile(params, callback);
143
143
  }
144
144
 
145
145
  removeTile(mapId: string, params: TileParameters & {
146
- type: string;
146
+ type: string;
147
147
  }, callback: WorkerTileCallback) {
148
148
  assert(params.type);
149
149
  this.getWorkerSource(mapId, params.type, params.source).removeTile(params, callback);
@@ -154,9 +154,9 @@ export default class Worker {
154
154
  }
155
155
 
156
156
  removeSource(mapId: string, params: {
157
- source: string;
157
+ source: string;
158
158
  } & {
159
- type: string;
159
+ type: string;
160
160
  }, callback: WorkerTileCallback) {
161
161
  assert(params.type);
162
162
  assert(params.source);
@@ -184,7 +184,7 @@ export default class Worker {
184
184
  * @private
185
185
  */
186
186
  loadWorkerSource(map: string, params: {
187
- url: string;
187
+ url: string;
188
188
  }, callback: Callback<void>) {
189
189
  try {
190
190
  this.self.importScripts(params.url);