@mapwhit/tilerenderer 0.52.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/README.md +7 -0
  2. package/build/min/package.json +2 -1
  3. package/build/min/src/shaders/_prelude.fragment.glsl.js +2 -2
  4. package/build/min/src/shaders/_prelude.vertex.glsl.js +2 -2
  5. package/build/min/src/shaders/background.fragment.glsl.js +2 -2
  6. package/build/min/src/shaders/background.vertex.glsl.js +1 -1
  7. package/build/min/src/shaders/background_pattern.fragment.glsl.js +2 -2
  8. package/build/min/src/shaders/background_pattern.vertex.glsl.js +1 -1
  9. package/build/min/src/shaders/circle.fragment.glsl.js +2 -2
  10. package/build/min/src/shaders/circle.vertex.glsl.js +2 -2
  11. package/build/min/src/shaders/clipping_mask.fragment.glsl.js +1 -1
  12. package/build/min/src/shaders/clipping_mask.vertex.glsl.js +1 -1
  13. package/build/min/src/shaders/collision_box.fragment.glsl.js +1 -1
  14. package/build/min/src/shaders/collision_box.vertex.glsl.js +1 -1
  15. package/build/min/src/shaders/collision_circle.fragment.glsl.js +1 -1
  16. package/build/min/src/shaders/collision_circle.vertex.glsl.js +1 -1
  17. package/build/min/src/shaders/debug.fragment.glsl.js +1 -1
  18. package/build/min/src/shaders/debug.vertex.glsl.js +1 -1
  19. package/build/min/src/shaders/fill.fragment.glsl.js +2 -2
  20. package/build/min/src/shaders/fill.vertex.glsl.js +2 -2
  21. package/build/min/src/shaders/fill_extrusion.fragment.glsl.js +2 -2
  22. package/build/min/src/shaders/fill_extrusion.vertex.glsl.js +2 -2
  23. package/build/min/src/shaders/fill_extrusion_pattern.fragment.glsl.js +2 -2
  24. package/build/min/src/shaders/fill_extrusion_pattern.vertex.glsl.js +2 -2
  25. package/build/min/src/shaders/fill_outline.fragment.glsl.js +2 -2
  26. package/build/min/src/shaders/fill_outline.vertex.glsl.js +2 -2
  27. package/build/min/src/shaders/fill_outline_pattern.fragment.glsl.js +2 -2
  28. package/build/min/src/shaders/fill_outline_pattern.vertex.glsl.js +2 -2
  29. package/build/min/src/shaders/fill_pattern.fragment.glsl.js +2 -2
  30. package/build/min/src/shaders/fill_pattern.vertex.glsl.js +2 -2
  31. package/build/min/src/shaders/heatmap.fragment.glsl.js +2 -2
  32. package/build/min/src/shaders/heatmap.vertex.glsl.js +2 -2
  33. package/build/min/src/shaders/heatmap_texture.fragment.glsl.js +2 -2
  34. package/build/min/src/shaders/heatmap_texture.vertex.glsl.js +1 -1
  35. package/build/min/src/shaders/hillshade.fragment.glsl.js +2 -2
  36. package/build/min/src/shaders/hillshade.vertex.glsl.js +1 -1
  37. package/build/min/src/shaders/hillshade_prepare.fragment.glsl.js +2 -2
  38. package/build/min/src/shaders/hillshade_prepare.vertex.glsl.js +1 -1
  39. package/build/min/src/shaders/line.fragment.glsl.js +2 -2
  40. package/build/min/src/shaders/line.vertex.glsl.js +2 -2
  41. package/build/min/src/shaders/line_gradient.fragment.glsl.js +2 -2
  42. package/build/min/src/shaders/line_gradient.vertex.glsl.js +2 -2
  43. package/build/min/src/shaders/line_pattern.fragment.glsl.js +2 -2
  44. package/build/min/src/shaders/line_pattern.vertex.glsl.js +2 -2
  45. package/build/min/src/shaders/line_sdf.fragment.glsl.js +2 -2
  46. package/build/min/src/shaders/line_sdf.vertex.glsl.js +2 -2
  47. package/build/min/src/shaders/raster.fragment.glsl.js +2 -2
  48. package/build/min/src/shaders/raster.vertex.glsl.js +1 -1
  49. package/build/min/src/shaders/symbol_icon.fragment.glsl.js +2 -2
  50. package/build/min/src/shaders/symbol_icon.vertex.glsl.js +2 -2
  51. package/build/min/src/shaders/symbol_sdf.fragment.glsl.js +2 -2
  52. package/build/min/src/shaders/symbol_sdf.vertex.glsl.js +2 -2
  53. package/package.json +5 -4
  54. package/src/data/array_types.js +55 -117
  55. package/src/data/bucket/circle_attributes.js +2 -4
  56. package/src/data/bucket/circle_bucket.js +19 -16
  57. package/src/data/bucket/fill_attributes.js +2 -4
  58. package/src/data/bucket/fill_bucket.js +38 -27
  59. package/src/data/bucket/fill_extrusion_attributes.js +2 -4
  60. package/src/data/bucket/fill_extrusion_bucket.js +56 -37
  61. package/src/data/bucket/heatmap_bucket.js +2 -11
  62. package/src/data/bucket/line_attributes.js +2 -4
  63. package/src/data/bucket/line_bucket.js +208 -163
  64. package/src/data/bucket/pattern_attributes.js +2 -4
  65. package/src/data/bucket/pattern_bucket_features.js +7 -9
  66. package/src/data/bucket/symbol_attributes.js +12 -26
  67. package/src/data/bucket/symbol_bucket.js +174 -323
  68. package/src/data/bucket/symbol_buffers.js +62 -0
  69. package/src/data/bucket/symbol_collision_buffers.js +33 -0
  70. package/src/data/bucket.js +26 -25
  71. package/src/data/dem_data.js +11 -10
  72. package/src/data/extent.js +1 -1
  73. package/src/data/feature_index.js +38 -28
  74. package/src/data/index_array_type.js +1 -6
  75. package/src/data/load_geometry.js +6 -9
  76. package/src/data/pos_attributes.js +2 -3
  77. package/src/data/program_configuration.js +47 -38
  78. package/src/data/raster_bounds_attributes.js +2 -2
  79. package/src/data/segment.js +4 -7
  80. package/src/geo/coordinate.js +1 -1
  81. package/src/geo/lng_lat.js +3 -3
  82. package/src/geo/lng_lat_bounds.js +8 -4
  83. package/src/geo/transform.js +69 -30
  84. package/src/gl/color_mode.js +2 -2
  85. package/src/gl/context.js +28 -29
  86. package/src/gl/cull_face_mode.js +1 -1
  87. package/src/gl/depth_mode.js +1 -1
  88. package/src/gl/framebuffer.js +8 -4
  89. package/src/gl/index_buffer.js +2 -2
  90. package/src/gl/stencil_mode.js +1 -1
  91. package/src/gl/value.js +33 -68
  92. package/src/gl/vertex_buffer.js +2 -2
  93. package/src/index.js +49 -25
  94. package/src/render/draw_background.js +17 -12
  95. package/src/render/draw_circle.js +15 -12
  96. package/src/render/draw_collision_debug.js +11 -8
  97. package/src/render/draw_debug.js +16 -14
  98. package/src/render/draw_fill.js +27 -20
  99. package/src/render/draw_fill_extrusion.js +20 -17
  100. package/src/render/draw_heatmap.js +21 -16
  101. package/src/render/draw_hillshade.js +12 -9
  102. package/src/render/draw_line.js +36 -22
  103. package/src/render/draw_raster.js +22 -18
  104. package/src/render/draw_symbol.js +38 -33
  105. package/src/render/glyph_atlas.js +9 -8
  106. package/src/render/glyph_manager.js +2 -3
  107. package/src/render/image_atlas.js +4 -11
  108. package/src/render/image_manager.js +39 -28
  109. package/src/render/line_atlas.js +2 -2
  110. package/src/render/painter.js +78 -61
  111. package/src/render/program/background_program.js +6 -13
  112. package/src/render/program/circle_program.js +8 -10
  113. package/src/render/program/clipping_mask_program.js +3 -5
  114. package/src/render/program/collision_program.js +4 -6
  115. package/src/render/program/debug_program.js +3 -5
  116. package/src/render/program/fill_extrusion_program.js +9 -15
  117. package/src/render/program/fill_program.js +10 -21
  118. package/src/render/program/heatmap_program.js +9 -15
  119. package/src/render/program/hillshade_program.js +16 -22
  120. package/src/render/program/line_program.js +14 -25
  121. package/src/render/program/pattern.js +5 -7
  122. package/src/render/program/program_uniforms.js +13 -20
  123. package/src/render/program/raster_program.js +9 -11
  124. package/src/render/program/symbol_program.js +5 -7
  125. package/src/render/program.js +5 -6
  126. package/src/render/texture.js +1 -1
  127. package/src/render/tile_mask.js +6 -4
  128. package/src/render/uniform_binding.js +9 -20
  129. package/src/render/vertex_array_object.js +5 -3
  130. package/src/shaders/encode_attribute.js +2 -6
  131. package/src/shaders/index.js +103 -51
  132. package/src/source/geojson_source.js +25 -30
  133. package/src/source/geojson_worker_source.js +46 -74
  134. package/src/source/geojson_wrapper.js +13 -5
  135. package/src/source/image_source.js +17 -28
  136. package/src/source/load_tilejson.js +3 -3
  137. package/src/source/pixels_to_tile_units.js +3 -3
  138. package/src/source/query_features.js +17 -15
  139. package/src/source/raster_dem_tile_source.js +54 -71
  140. package/src/source/raster_tile_source.js +14 -15
  141. package/src/source/resources/glyphs.js +4 -5
  142. package/src/source/resources/index.js +4 -12
  143. package/src/source/rtl_text_plugin.js +62 -35
  144. package/src/source/source.js +14 -22
  145. package/src/source/source_cache.js +221 -179
  146. package/src/source/source_state.js +125 -13
  147. package/src/source/tile.js +67 -66
  148. package/src/source/tile_bounds.js +36 -29
  149. package/src/source/tile_cache.js +2 -2
  150. package/src/source/tile_id.js +30 -26
  151. package/src/source/vector_tile_source.js +23 -21
  152. package/src/source/vector_tile_worker_source.js +22 -26
  153. package/src/source/worker_tile.js +139 -134
  154. package/src/style/create_style_layer.js +11 -11
  155. package/src/style/evaluation_parameters.js +4 -6
  156. package/src/style/light.js +5 -5
  157. package/src/style/load_sprite.js +6 -6
  158. package/src/style/parse_glyph_pbf.js +21 -17
  159. package/src/style/pauseable_placement.js +7 -9
  160. package/src/style/properties.js +21 -51
  161. package/src/style/query_utils.js +7 -13
  162. package/src/style/style.js +314 -221
  163. package/src/style/style_layer/background_style_layer.js +3 -4
  164. package/src/style/style_layer/background_style_layer_properties.js +2 -2
  165. package/src/style/style_layer/circle_style_layer.js +25 -20
  166. package/src/style/style_layer/circle_style_layer_properties.js +2 -2
  167. package/src/style/style_layer/fill_extrusion_style_layer.js +55 -37
  168. package/src/style/style_layer/fill_extrusion_style_layer_properties.js +2 -2
  169. package/src/style/style_layer/fill_style_layer.js +11 -12
  170. package/src/style/style_layer/fill_style_layer_properties.js +2 -2
  171. package/src/style/style_layer/heatmap_style_layer.js +6 -7
  172. package/src/style/style_layer/heatmap_style_layer_properties.js +2 -2
  173. package/src/style/style_layer/hillshade_style_layer.js +4 -5
  174. package/src/style/style_layer/hillshade_style_layer_properties.js +2 -2
  175. package/src/style/style_layer/line_style_layer.js +33 -30
  176. package/src/style/style_layer/line_style_layer_properties.js +5 -5
  177. package/src/style/style_layer/raster_style_layer.js +3 -4
  178. package/src/style/style_layer/raster_style_layer_properties.js +2 -2
  179. package/src/style/style_layer/symbol_style_layer.js +20 -21
  180. package/src/style/style_layer/symbol_style_layer_properties.js +2 -2
  181. package/src/style/style_layer.js +66 -47
  182. package/src/style/style_layer_index.js +17 -42
  183. package/src/style/zoom_history.js +1 -1
  184. package/src/style-spec/error/parsing_error.js +1 -1
  185. package/src/style-spec/error/validation_error.js +5 -3
  186. package/src/style-spec/feature_filter/convert.js +17 -9
  187. package/src/style-spec/feature_filter/index.js +13 -9
  188. package/src/style-spec/util/eval_support.js +2 -2
  189. package/src/style-spec/util/ref_properties.js +1 -1
  190. package/src/symbol/anchor.js +2 -6
  191. package/src/symbol/check_max_angle.js +13 -5
  192. package/src/symbol/clip_line.js +2 -3
  193. package/src/symbol/collision_feature.js +8 -4
  194. package/src/symbol/collision_index.js +5 -7
  195. package/src/symbol/cross_tile_symbol_index.js +7 -10
  196. package/src/symbol/get_anchors.js +15 -8
  197. package/src/symbol/grid_index.js +5 -3
  198. package/src/symbol/mergelines.js +2 -2
  199. package/src/symbol/opacity_state.js +1 -5
  200. package/src/symbol/placement.js +28 -23
  201. package/src/symbol/projection.js +29 -28
  202. package/src/symbol/quads.js +14 -16
  203. package/src/symbol/shaping.js +27 -19
  204. package/src/symbol/symbol_layout.js +24 -28
  205. package/src/symbol/symbol_size.js +13 -12
  206. package/src/symbol/transform_text.js +4 -4
  207. package/src/ui/camera.js +34 -18
  208. package/src/ui/map.js +102 -44
  209. package/src/util/async.js +11 -5
  210. package/src/util/browser.js +1 -1
  211. package/src/util/callback.js +3 -9
  212. package/src/util/classify_rings.js +13 -8
  213. package/src/util/color_ramp.js +3 -3
  214. package/src/util/config.js +4 -4
  215. package/src/util/dictionary_coder.js +2 -3
  216. package/src/util/dom.js +7 -3
  217. package/src/util/find_pole_of_inaccessibility.js +29 -14
  218. package/src/util/group_layers.js +41 -0
  219. package/src/util/image.js +3 -13
  220. package/src/util/interpolate.js +1 -1
  221. package/src/util/intersection_tests.js +80 -42
  222. package/src/util/is_char_in_unicode_block.js +1 -1
  223. package/src/util/key.js +25 -0
  224. package/src/util/loader/image.js +1 -1
  225. package/src/util/object.js +33 -76
  226. package/src/util/script_detection.js +212 -91
  227. package/src/util/struct_array.js +8 -40
  228. package/src/util/task_queue.js +11 -7
  229. package/src/util/throttle.js +2 -2
  230. package/src/util/tile_cover.js +8 -5
  231. package/src/util/token.js +1 -1
  232. package/src/util/unique_id.js +2 -2
  233. package/src/util/util.js +21 -29
  234. package/src/util/vectortile_to_geojson.js +4 -2
  235. package/src/util/verticalize_punctuation.js +3 -7
  236. package/src/util/warn.js +4 -4
  237. package/src/util/web_worker.js +3 -3
  238. package/src/worker.js +1 -4
  239. package/src/source/resources/images.js +0 -68
  240. package/src/source/worker.js +0 -110
  241. package/src/source/worker_source.js +0 -14
  242. package/src/style-spec/deref.js +0 -51
  243. package/src/style-spec/group_by_layout.js +0 -46
  244. package/src/util/actor.js +0 -108
  245. package/src/util/dispatcher.js +0 -65
  246. package/src/util/global_worker_pool.js +0 -15
  247. package/src/util/transfer_registry.js +0 -168
  248. package/src/util/web_worker_transfer.js +0 -43
  249. package/src/util/worker_pool.js +0 -41
@@ -1,11 +1,7 @@
1
- const assert = require('assert');
2
- const { mat4 } = require('@mapbox/gl-matrix');
1
+ import glMatrix from '@mapbox/gl-matrix';
2
+ import assert from 'assert';
3
3
 
4
- module.exports = {
5
- queryRenderedFeatures,
6
- queryRenderedSymbols,
7
- querySourceFeatures
8
- };
4
+ const { mat4 } = glMatrix;
9
5
 
10
6
  /*
11
7
  * Returns a matrix that can be used to convert from tile coordinates to viewport pixel coordinates.
@@ -20,14 +16,13 @@ function getPixelPosMatrix(transform, tileID) {
20
16
  function queryIncludes3DLayer(layers, styleLayers, sourceID) {
21
17
  if (layers) {
22
18
  for (const layerID of layers) {
23
- const layer = styleLayers[layerID];
19
+ const layer = styleLayers.get(layerID);
24
20
  if (layer && layer.source === sourceID && layer.type === 'fill-extrusion') {
25
21
  return true;
26
22
  }
27
23
  }
28
- } else {
29
- for (const key in styleLayers) {
30
- const layer = styleLayers[key];
24
+ } else if (styleLayers) {
25
+ for (const layer of styleLayers.values()) {
31
26
  if (layer.source === sourceID && layer.type === 'fill-extrusion') {
32
27
  return true;
33
28
  }
@@ -36,7 +31,7 @@ function queryIncludes3DLayer(layers, styleLayers, sourceID) {
36
31
  return false;
37
32
  }
38
33
 
39
- function queryRenderedFeatures(sourceCache, styleLayers, queryGeometry, params, transform) {
34
+ export function queryRenderedFeatures(sourceCache, styleLayers, queryGeometry, params, transform) {
40
35
  const has3DLayer = queryIncludes3DLayer(params?.layers, styleLayers, sourceCache.id);
41
36
  const maxPitchScaleFactor = transform.maxPitchScaleFactor();
42
37
  const tilesIn = sourceCache.tilesIn(queryGeometry, maxPitchScaleFactor, has3DLayer);
@@ -78,7 +73,14 @@ function queryRenderedFeatures(sourceCache, styleLayers, queryGeometry, params,
78
73
  return result;
79
74
  }
80
75
 
81
- function queryRenderedSymbols(styleLayers, sourceCaches, queryGeometry, params, collisionIndex, retainedQueryData) {
76
+ export function queryRenderedSymbols(
77
+ styleLayers,
78
+ sourceCaches,
79
+ queryGeometry,
80
+ params,
81
+ collisionIndex,
82
+ retainedQueryData
83
+ ) {
82
84
  const result = {};
83
85
  const renderedSymbols = collisionIndex.queryRenderedSymbols(queryGeometry);
84
86
  const bucketQueryData = [];
@@ -129,7 +131,7 @@ function queryRenderedSymbols(styleLayers, sourceCaches, queryGeometry, params,
129
131
  for (const layerName in result) {
130
132
  result[layerName].forEach(featureWrapper => {
131
133
  const feature = featureWrapper.feature;
132
- const layer = styleLayers[layerName];
134
+ const layer = styleLayers.get(layerName);
133
135
  const sourceCache = sourceCaches[layer.source];
134
136
  const state = sourceCache.getFeatureState(feature.layer['source-layer'], feature.id);
135
137
  feature.source = feature.layer.source;
@@ -142,7 +144,7 @@ function queryRenderedSymbols(styleLayers, sourceCaches, queryGeometry, params,
142
144
  return result;
143
145
  }
144
146
 
145
- function querySourceFeatures(sourceCache, params) {
147
+ export function querySourceFeatures(sourceCache, params) {
146
148
  const tiles = sourceCache.getRenderableIds().map(id => {
147
149
  return sourceCache.getTileByID(id);
148
150
  });
@@ -1,35 +1,23 @@
1
- const browser = require('../util/browser');
2
- const loadImage = require('../util/loader/image');
3
- const { OverscaledTileID } = require('./tile_id');
4
- const RasterTileSource = require('./raster_tile_source');
5
- // ensure DEMData is registered for worker transfer on main thread:
6
- require('../data/dem_data');
1
+ import DEMData from '../data/dem_data.js';
2
+ import browser from '../util/browser.js';
3
+ import loadImage from '../util/loader/image.js';
4
+ import RasterTileSource from './raster_tile_source.js';
5
+ import { calculateKey } from './tile_id.js';
7
6
 
8
- class RasterDEMTileSource extends RasterTileSource {
9
- constructor(id, options, dispatcher, eventedParent) {
10
- super(id, options, dispatcher, eventedParent);
7
+ export default class RasterDEMTileSource extends RasterTileSource {
8
+ constructor(id, options, eventedParent) {
9
+ super(id, options, eventedParent);
11
10
  this.type = 'raster-dem';
12
11
  this.maxzoom = 22;
13
12
  this._options = Object.assign({}, options);
14
13
  this.encoding = options.encoding || 'mapbox';
15
14
  }
16
15
 
17
- serialize() {
18
- return {
19
- type: 'raster-dem',
20
- url: this.url,
21
- tileSize: this.tileSize,
22
- tiles: this.tiles,
23
- bounds: this.bounds,
24
- encoding: this.encoding
25
- };
26
- }
27
-
28
16
  async loadTile(tile) {
29
17
  try {
30
18
  tile.abortController = new window.AbortController();
31
19
  const data = await this.tiles(tile.tileID.canonical, tile.abortController).catch(() => {});
32
- tile.neighboringTiles = this._getNeighboringTiles(tile.tileID);
20
+ tile.neighboringTiles = getNeighboringTiles(tile.tileID);
33
21
  if (!data) {
34
22
  const err = new Error('Tile could not be loaded');
35
23
  err.status = 404; // will try to use the parent/child tile
@@ -48,7 +36,7 @@ class RasterDEMTileSource extends RasterTileSource {
48
36
  rawImageData,
49
37
  encoding: this.encoding
50
38
  };
51
- const dem = await this.dispatcher.send('loadDEMTile', params);
39
+ const dem = await loadDEMTile(params);
52
40
  if (dem) {
53
41
  tile.dem = dem;
54
42
  tile.needsHillshadePrepare = true;
@@ -65,63 +53,58 @@ class RasterDEMTileSource extends RasterTileSource {
65
53
  }
66
54
  }
67
55
 
68
- _getNeighboringTiles(tileID) {
69
- const canonical = tileID.canonical;
70
- const dim = 2 ** canonical.z;
71
-
72
- const px = (canonical.x - 1 + dim) % dim;
73
- const pxw = canonical.x === 0 ? tileID.wrap - 1 : tileID.wrap;
74
- const nx = (canonical.x + 1 + dim) % dim;
75
- const nxw = canonical.x + 1 === dim ? tileID.wrap + 1 : tileID.wrap;
76
-
77
- const neighboringTiles = {};
78
- // add adjacent tiles
79
- neighboringTiles[new OverscaledTileID(tileID.overscaledZ, pxw, canonical.z, px, canonical.y).key] = {
80
- backfilled: false
81
- };
82
- neighboringTiles[new OverscaledTileID(tileID.overscaledZ, nxw, canonical.z, nx, canonical.y).key] = {
83
- backfilled: false
84
- };
85
-
86
- // Add upper neighboringTiles
87
- if (canonical.y > 0) {
88
- neighboringTiles[new OverscaledTileID(tileID.overscaledZ, pxw, canonical.z, px, canonical.y - 1).key] = {
89
- backfilled: false
90
- };
91
- neighboringTiles[
92
- new OverscaledTileID(tileID.overscaledZ, tileID.wrap, canonical.z, canonical.x, canonical.y - 1).key
93
- ] = { backfilled: false };
94
- neighboringTiles[new OverscaledTileID(tileID.overscaledZ, nxw, canonical.z, nx, canonical.y - 1).key] = {
95
- backfilled: false
96
- };
97
- }
98
- // Add lower neighboringTiles
99
- if (canonical.y + 1 < dim) {
100
- neighboringTiles[new OverscaledTileID(tileID.overscaledZ, pxw, canonical.z, px, canonical.y + 1).key] = {
101
- backfilled: false
102
- };
103
- neighboringTiles[
104
- new OverscaledTileID(tileID.overscaledZ, tileID.wrap, canonical.z, canonical.x, canonical.y + 1).key
105
- ] = { backfilled: false };
106
- neighboringTiles[new OverscaledTileID(tileID.overscaledZ, nxw, canonical.z, nx, canonical.y + 1).key] = {
107
- backfilled: false
108
- };
109
- }
110
-
111
- return neighboringTiles;
112
- }
113
-
114
56
  unloadTile(tile) {
115
- if (tile.demTexture) this.map.painter.saveTileTexture(tile.demTexture);
57
+ if (tile.demTexture) {
58
+ this.map.painter.saveTileTexture(tile.demTexture);
59
+ }
116
60
  if (tile.fbo) {
117
61
  tile.fbo.destroy();
118
62
  delete tile.fbo;
119
63
  }
120
- if (tile.dem) delete tile.dem;
64
+ if (tile.dem) {
65
+ delete tile.dem;
66
+ }
121
67
  delete tile.neighboringTiles;
122
68
 
123
69
  tile.state = 'unloaded';
124
70
  }
125
71
  }
126
72
 
127
- module.exports = RasterDEMTileSource;
73
+ // biome-ignore lint/suspicious/useAwait: thread
74
+ async function loadDEMTile({ uid, rawImageData, encoding }) {
75
+ return new DEMData(uid, rawImageData, encoding);
76
+ }
77
+
78
+ function getNeighboringTiles(tileID) {
79
+ const {
80
+ canonical: { x, y, z },
81
+ wrap,
82
+ overscaledZ
83
+ } = tileID;
84
+ const dim = 2 ** z;
85
+ const px = (x - 1 + dim) % dim;
86
+ const pxw = x === 0 ? wrap - 1 : wrap;
87
+ const nx = (x + 1 + dim) % dim;
88
+ const nxw = x + 1 === dim ? wrap + 1 : wrap;
89
+
90
+ const neighboringTiles = {
91
+ // add adjacent tiles
92
+ [calculateKey(pxw, overscaledZ, px, y)]: { backfilled: false },
93
+ [calculateKey(nxw, overscaledZ, nx, y)]: { backfilled: false }
94
+ };
95
+
96
+ // Add upper neighboringTiles
97
+ if (y > 0) {
98
+ neighboringTiles[calculateKey(pxw, overscaledZ, px, y - 1)] = { backfilled: false };
99
+ neighboringTiles[calculateKey(wrap, overscaledZ, x, y - 1)] = { backfilled: false };
100
+ neighboringTiles[calculateKey(nxw, overscaledZ, nx, y - 1)] = { backfilled: false };
101
+ }
102
+ // Add lower neighboringTiles
103
+ if (y + 1 < dim) {
104
+ neighboringTiles[calculateKey(pxw, overscaledZ, px, y + 1)] = { backfilled: false };
105
+ neighboringTiles[calculateKey(wrap, overscaledZ, x, y + 1)] = { backfilled: false };
106
+ neighboringTiles[calculateKey(nxw, overscaledZ, nx, y + 1)] = { backfilled: false };
107
+ }
108
+
109
+ return neighboringTiles;
110
+ }
@@ -1,15 +1,14 @@
1
- const { pick } = require('../util/object');
2
- const loadImage = require('../util/loader/image');
3
- const { Event, ErrorEvent, Evented } = require('@mapwhit/events');
4
- const loadTileJSON = require('./load_tilejson');
5
- const TileBounds = require('./tile_bounds');
6
- const Texture = require('../render/texture');
1
+ import { ErrorEvent, Event, Evented } from '@mapwhit/events';
2
+ import Texture from '../render/texture.js';
3
+ import loadImage from '../util/loader/image.js';
4
+ import { pick } from '../util/object.js';
5
+ import loadTileJSON from './load_tilejson.js';
6
+ import TileBounds from './tile_bounds.js';
7
7
 
8
8
  class RasterTileSource extends Evented {
9
- constructor(id, options, dispatcher, eventedParent) {
9
+ constructor(id, options, eventedParent) {
10
10
  super();
11
11
  this.id = id;
12
- this.dispatcher = dispatcher;
13
12
  this.setEventedParent(eventedParent);
14
13
 
15
14
  this.type = 'raster';
@@ -29,7 +28,9 @@ class RasterTileSource extends Evented {
29
28
  try {
30
29
  const tileJSON = await loadTileJSON(this._options);
31
30
  Object.assign(this, tileJSON);
32
- if (tileJSON.bounds) this.tileBounds = new TileBounds(tileJSON.bounds, this.minzoom, this.maxzoom);
31
+ if (tileJSON.bounds) {
32
+ this.tileBounds = new TileBounds(tileJSON.bounds, this.minzoom, this.maxzoom);
33
+ }
33
34
 
34
35
  // `content` is included here to prevent a race condition where `Style#_updateSources` is called
35
36
  // before the TileJSON arrives. this makes sure the tiles needed are loaded once TileJSON arrives
@@ -46,10 +47,6 @@ class RasterTileSource extends Evented {
46
47
  this.load();
47
48
  }
48
49
 
49
- serialize() {
50
- return Object.assign({}, this._options);
51
- }
52
-
53
50
  hasTile(tileID) {
54
51
  return !this.tileBounds || this.tileBounds.contains(tileID.canonical);
55
52
  }
@@ -106,7 +103,9 @@ class RasterTileSource extends Evented {
106
103
  }
107
104
 
108
105
  unloadTile(tile) {
109
- if (tile.texture) this.map.painter.saveTileTexture(tile.texture);
106
+ if (tile.texture) {
107
+ this.map.painter.saveTileTexture(tile.texture);
108
+ }
110
109
  }
111
110
 
112
111
  hasTransition() {
@@ -114,4 +113,4 @@ class RasterTileSource extends Evented {
114
113
  }
115
114
  }
116
115
 
117
- module.exports = RasterTileSource;
116
+ export default RasterTileSource;
@@ -1,10 +1,9 @@
1
- const parseGlyphPBF = require('../../style/parse_glyph_pbf');
2
-
3
- module.exports = glyphCache;
1
+ import parseGlyphPBF from '../../style/parse_glyph_pbf.js';
2
+ export default glyphCache;
4
3
 
5
4
  const MAX_GLYPH_ID = 65535;
6
5
 
7
- function glyphCache({ actor, mapId, parseGlyphs = parseGlyphPBF }) {
6
+ function glyphCache({ loadGlyphRange: loadGlyphRangeFromStyle, parseGlyphs = parseGlyphPBF }) {
8
7
  const entries = {};
9
8
 
10
9
  return {
@@ -56,7 +55,7 @@ function glyphCache({ actor, mapId, parseGlyphs = parseGlyphPBF }) {
56
55
  }
57
56
 
58
57
  async function loadGlyphRange(entry, stack, range) {
59
- const promise = (entry.requests[range] ??= actor.send('loadGlyphRange', { stack, range }, mapId));
58
+ const promise = (entry.requests[range] ??= loadGlyphRangeFromStyle({ stack, range }));
60
59
  const data = await promise;
61
60
  delete entry.requests[range];
62
61
  entry.ranges[range] = true;
@@ -1,22 +1,14 @@
1
- const makeGlyphs = require('./glyphs');
2
- const makeImages = require('./images');
1
+ import makeGlyphs from './glyphs.js';
3
2
 
4
- module.exports = { resources };
5
-
6
- function resources(actor, mapId) {
7
- const glyphs = makeGlyphs({ actor, mapId });
8
- const images = makeImages({ actor, mapId });
3
+ export function resources(opts) {
4
+ const glyphs = makeGlyphs(opts);
9
5
 
10
6
  return {
11
7
  getGlyphs,
12
- getImages
8
+ getImages: opts.getImages
13
9
  };
14
10
 
15
11
  function getGlyphs(params) {
16
12
  return glyphs.getGlyphs(params);
17
13
  }
18
-
19
- function getImages(params) {
20
- return images.getImages(params);
21
- }
22
14
  }
@@ -1,29 +1,37 @@
1
- const { Event, Evented } = require('@mapwhit/events');
2
- const browser = require('../util/browser');
1
+ import dynload from 'dynload';
2
+ import browser from '../util/browser.js';
3
3
 
4
4
  let pluginRequested = false;
5
- let pluginURL = null;
6
- let foregroundLoadComplete = false;
7
-
8
- const evented = new Evented();
5
+ let pluginURL;
6
+ let loading = false;
9
7
 
10
8
  let _completionCallback;
9
+ const _loadedCallbacks = [];
11
10
 
12
- function registerForPluginAvailability(callback) {
13
- if (pluginURL) {
14
- callback({ pluginURL: pluginURL, completionCallback: _completionCallback });
15
- } else {
16
- evented.once('pluginAvailable', callback);
11
+ const rtlPlugin = {
12
+ clearRTLTextPlugin, // exported for testing
13
+ loadScript, // exported for testing
14
+ registerForPluginAvailability,
15
+ setRTLTextPlugin
16
+ };
17
+
18
+ export function registerForPluginAvailability(callback) {
19
+ if (plugin.isLoaded()) {
20
+ callback();
21
+ return;
17
22
  }
18
- return callback;
23
+ _loadedCallbacks.push(callback);
24
+ loadRTLTextPlugin();
25
+ return () => _loadedCallbacks.splice(_loadedCallbacks.indexOf(callback), 1);
19
26
  }
20
27
 
21
- function clearRTLTextPlugin() {
28
+ export function clearRTLTextPlugin() {
29
+ _loadedCallbacks.length = 0;
22
30
  pluginRequested = false;
23
- pluginURL = null;
31
+ pluginURL = undefined;
24
32
  }
25
33
 
26
- function setRTLTextPlugin(url, callback) {
34
+ export function setRTLTextPlugin(url, callback) {
27
35
  if (pluginRequested) {
28
36
  throw new Error('setRTLTextPlugin cannot be called multiple times.');
29
37
  }
@@ -31,35 +39,54 @@ function setRTLTextPlugin(url, callback) {
31
39
  pluginURL = browser.resolveURL(url);
32
40
  _completionCallback = error => {
33
41
  if (error) {
42
+ const msg = `RTL Text Plugin failed to load scripts from ${pluginURL}`;
34
43
  // Clear loaded state to allow retries
35
44
  clearRTLTextPlugin();
36
45
  if (callback) {
37
- callback(error);
46
+ callback(new Error(msg));
38
47
  }
39
- } else {
40
- // Called once for each worker
41
- foregroundLoadComplete = true;
42
48
  }
49
+ loading = false;
50
+ _completionCallback = undefined;
43
51
  };
44
- evented.fire(new Event('pluginAvailable', { pluginURL: pluginURL, completionCallback: _completionCallback }));
52
+ loadRTLTextPlugin();
53
+ }
54
+
55
+ function loadRTLTextPlugin() {
56
+ if (pluginURL && !plugin.isLoaded() && _loadedCallbacks.length > 0 && !loading) {
57
+ // needs to be called as exported method for mock testing
58
+ loading = rtlPlugin.loadScript(pluginURL).catch(_completionCallback);
59
+ }
60
+ }
61
+
62
+ function registerRTLTextPlugin(loadedPlugin) {
63
+ if (plugin.isLoaded()) {
64
+ throw new Error('RTL text plugin already registered.');
65
+ }
66
+ plugin['applyArabicShaping'] = loadedPlugin.applyArabicShaping;
67
+ plugin['processBidirectionalText'] = loadedPlugin.processBidirectionalText;
68
+ plugin['processStyledBidirectionalText'] = loadedPlugin.processStyledBidirectionalText;
69
+
70
+ _completionCallback();
71
+ _loadedCallbacks.forEach(callback => callback());
72
+ _loadedCallbacks.length = 0;
73
+ }
74
+
75
+ globalThis.registerRTLTextPlugin ??= registerRTLTextPlugin;
76
+
77
+ function loadScript(url) {
78
+ const { promise, resolve, reject } = Promise.withResolvers();
79
+ const s = dynload(url);
80
+ s.onload = () => resolve();
81
+ s.onerror = () => reject(true);
82
+ return promise;
45
83
  }
46
84
 
47
- const plugin = {
85
+ export const plugin = (rtlPlugin.plugin = {
48
86
  applyArabicShaping: null,
49
87
  processBidirectionalText: null,
50
88
  processStyledBidirectionalText: null,
51
- isLoaded: function () {
52
- return (
53
- foregroundLoadComplete || // Foreground: loaded if the completion callback returned successfully
54
- plugin.applyArabicShaping != null
55
- ); // Background: loaded if the plugin functions have been compiled
56
- }
57
- };
89
+ isLoaded: () => plugin.applyArabicShaping != null
90
+ });
58
91
 
59
- module.exports = {
60
- registerForPluginAvailability,
61
- clearRTLTextPlugin,
62
- setRTLTextPlugin,
63
- plugin,
64
- evented
65
- };
92
+ export default rtlPlugin;
@@ -1,4 +1,4 @@
1
- const { bindAll } = require('../util/object');
1
+ import { bindAll } from '../util/object.js';
2
2
 
3
3
  /**
4
4
  * The `Source` interface must be implemented by each source type, including "core" types (`vector`, `raster`,
@@ -10,7 +10,6 @@ const { bindAll } = require('../util/object');
10
10
  * @param {Object} options Source options, specific to the source type (except for `options.type`, which is always
11
11
  * required).
12
12
  * @param {string} options.type The source type, matching the value of `name` used in {@link Style#addSourceType}.
13
- * @param {Dispatcher} dispatcher A {@link Dispatcher} instance, which can be used to send messages to the workers.
14
13
  *
15
14
  * @fires data with `{dataType: 'source', sourceDataType: 'metadata'}` to indicate that any necessary metadata
16
15
  * has been loaded so that it's okay to call `loadTile`; and with `{dataType: 'source', sourceDataType: 'content'}`
@@ -25,11 +24,11 @@ const { bindAll } = require('../util/object');
25
24
  * if they are floor-ed to the nearest integer.
26
25
  */
27
26
 
28
- const vector = require('../source/vector_tile_source');
29
- const raster = require('../source/raster_tile_source');
30
- const rasterDem = require('../source/raster_dem_tile_source');
31
- const geojson = require('../source/geojson_source');
32
- const image = require('../source/image_source');
27
+ import geojson from './geojson_source.js';
28
+ import image from './image_source.js';
29
+ import rasterDem from './raster_dem_tile_source.js';
30
+ import raster from './raster_tile_source.js';
31
+ import vector from './vector_tile_source.js';
33
32
 
34
33
  const sourceTypes = {
35
34
  vector,
@@ -46,30 +45,23 @@ const sourceTypes = {
46
45
  * @param {Object} source A source definition object compliant with
47
46
  * [`mapbox-gl-style-spec`](https://www.mapbox.com/mapbox-gl-style-spec/#sources) or, for a third-party source type,
48
47
  * with that type's requirements.
49
- * @param {Dispatcher} dispatcher
50
48
  * @returns {Source}
51
49
  */
52
- function create(id, specification, dispatcher, eventedParent) {
53
- const source = new sourceTypes[specification.type](id, specification, dispatcher, eventedParent);
54
-
55
- if (source.id !== id) {
56
- throw new Error(`Expected Source id to be ${id} instead of ${source.id}`);
57
- }
50
+ export function create(id, specification, eventedParent, { resources, layerIndex, showTileBoundaries }) {
51
+ const source = new sourceTypes[specification.type](id, specification, eventedParent, {
52
+ resources,
53
+ layerIndex,
54
+ showTileBoundaries
55
+ });
58
56
 
59
57
  bindAll(['load', 'abort', 'unload', 'serialize', 'prepare'], source);
60
58
  return source;
61
59
  }
62
60
 
63
- function getType(name) {
61
+ export function getType(name) {
64
62
  return sourceTypes[name];
65
63
  }
66
64
 
67
- function setType(name, type) {
65
+ export function setType(name, type) {
68
66
  sourceTypes[name] = type;
69
67
  }
70
-
71
- module.exports = {
72
- create,
73
- getType,
74
- setType
75
- };