@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,10 +1,9 @@
1
- const StyleLayer = require('../style_layer');
2
-
3
- const SymbolBucket = require('../../data/bucket/symbol_bucket');
4
- const resolveTokens = require('../../util/token');
5
- const { isExpression } = require('@mapwhit/style-expressions');
6
- const assert = require('assert');
7
- const properties = require('./symbol_style_layer_properties');
1
+ import { isExpression } from '@mapwhit/style-expressions';
2
+ import assert from 'assert';
3
+ import SymbolBucket from '../../data/bucket/symbol_bucket.js';
4
+ import resolveTokens from '../../util/token.js';
5
+ import StyleLayer from '../style_layer.js';
6
+ import properties from './symbol_style_layer_properties.js';
8
7
 
9
8
  class SymbolStyleLayer extends StyleLayer {
10
9
  constructor(layer) {
@@ -14,33 +13,33 @@ class SymbolStyleLayer extends StyleLayer {
14
13
  recalculate(parameters) {
15
14
  super.recalculate(parameters);
16
15
 
17
- if (this.layout.get('icon-rotation-alignment') === 'auto') {
18
- if (this.layout.get('symbol-placement') !== 'point') {
19
- this.layout._values['icon-rotation-alignment'] = 'map';
16
+ if (this._layout.get('icon-rotation-alignment') === 'auto') {
17
+ if (this._layout.get('symbol-placement') !== 'point') {
18
+ this._layout._values['icon-rotation-alignment'] = 'map';
20
19
  } else {
21
- this.layout._values['icon-rotation-alignment'] = 'viewport';
20
+ this._layout._values['icon-rotation-alignment'] = 'viewport';
22
21
  }
23
22
  }
24
23
 
25
- if (this.layout.get('text-rotation-alignment') === 'auto') {
26
- if (this.layout.get('symbol-placement') !== 'point') {
27
- this.layout._values['text-rotation-alignment'] = 'map';
24
+ if (this._layout.get('text-rotation-alignment') === 'auto') {
25
+ if (this._layout.get('symbol-placement') !== 'point') {
26
+ this._layout._values['text-rotation-alignment'] = 'map';
28
27
  } else {
29
- this.layout._values['text-rotation-alignment'] = 'viewport';
28
+ this._layout._values['text-rotation-alignment'] = 'viewport';
30
29
  }
31
30
  }
32
31
 
33
32
  // If unspecified, `*-pitch-alignment` inherits `*-rotation-alignment`
34
- if (this.layout.get('text-pitch-alignment') === 'auto') {
35
- this.layout._values['text-pitch-alignment'] = this.layout.get('text-rotation-alignment');
33
+ if (this._layout.get('text-pitch-alignment') === 'auto') {
34
+ this._layout._values['text-pitch-alignment'] = this._layout.get('text-rotation-alignment');
36
35
  }
37
- if (this.layout.get('icon-pitch-alignment') === 'auto') {
38
- this.layout._values['icon-pitch-alignment'] = this.layout.get('icon-rotation-alignment');
36
+ if (this._layout.get('icon-pitch-alignment') === 'auto') {
37
+ this._layout._values['icon-pitch-alignment'] = this._layout.get('icon-rotation-alignment');
39
38
  }
40
39
  }
41
40
 
42
41
  getValueAndResolveTokens(name, feature) {
43
- const value = this.layout.get(name).evaluate(feature, {});
42
+ const value = this._layout.get(name).evaluate(feature, {});
44
43
  const unevaluated = this._unevaluatedLayout._values[name];
45
44
  if (!unevaluated.isDataDriven() && !isExpression(unevaluated.value)) {
46
45
  return resolveTokens(feature.properties, value);
@@ -63,4 +62,4 @@ class SymbolStyleLayer extends StyleLayer {
63
62
  }
64
63
  }
65
64
 
66
- module.exports = SymbolStyleLayer;
65
+ export default SymbolStyleLayer;
@@ -1,6 +1,6 @@
1
1
  // This file is generated. Edit layer-properties.js.ejs, then run `make generate-style-code`.
2
2
 
3
- const { Properties, DataConstantProperty, DataDrivenProperty } = require('../properties');
3
+ import { DataConstantProperty, DataDrivenProperty, Properties } from '../properties.js';
4
4
 
5
5
  const layout = new Properties({
6
6
  'symbol-placement': new DataConstantProperty({
@@ -291,4 +291,4 @@ const paint = new Properties({
291
291
  })
292
292
  });
293
293
 
294
- module.exports = { paint, layout };
294
+ export default { paint, layout };
@@ -1,13 +1,21 @@
1
- const { filterObject } = require('../util/object');
2
-
3
- const { Evented } = require('@mapwhit/events');
4
- const { Layout, Transitionable, PossiblyEvaluatedPropertyValue } = require('./properties');
5
- const { supportsPropertyExpression } = require('@mapwhit/style-expressions');
6
- const featureFilter = require('../style-spec/feature_filter');
1
+ import { Evented } from '@mapwhit/events';
2
+ import { supportsPropertyExpression } from '@mapwhit/style-expressions';
3
+ import featureFilter from '../style-spec/feature_filter/index.js';
4
+ import createKey from '../util/key.js';
5
+ import { Layout, PossiblyEvaluatedPropertyValue, Transitionable } from './properties.js';
7
6
 
7
+ const keyProperties = ['type', 'minzoom', 'maxzoom', 'filter', 'layout'];
8
8
  const TRANSITION_SUFFIX = '-transition';
9
9
 
10
+ /**
11
+ * Representing a style layer in the map.
12
+ * Properties:
13
+ * `this.paint` - paint properties of the layer as defined in the map style
14
+ * `this._paint` - internal representation of paint properties necessary to calculate expressions
15
+ */
10
16
  class StyleLayer extends Evented {
17
+ #key;
18
+
11
19
  constructor(layer, properties) {
12
20
  super();
13
21
 
@@ -22,7 +30,7 @@ class StyleLayer extends Evented {
22
30
 
23
31
  if (layer.type !== 'background') {
24
32
  this.source = layer.source;
25
- this.sourceLayer = layer['source-layer'];
33
+ this['source-layer'] = this.sourceLayer = layer['source-layer'];
26
34
  this.filter = layer.filter;
27
35
  this._featureFilter = featureFilter(layer.filter);
28
36
  }
@@ -46,10 +54,26 @@ class StyleLayer extends Evented {
46
54
  }
47
55
 
48
56
  setFilter(filter) {
57
+ this.#key = undefined;
49
58
  this.filter = filter;
50
59
  this._featureFilter = featureFilter(filter);
51
60
  }
52
61
 
62
+ _setZoomRange(minzoom, maxzoom) {
63
+ if (this.minzoom === minzoom && this.maxzoom === maxzoom) {
64
+ return;
65
+ }
66
+ if (minzoom != null) {
67
+ this.#key = undefined;
68
+ this.minzoom = minzoom;
69
+ }
70
+ if (maxzoom != null) {
71
+ this.#key = undefined;
72
+ this.maxzoom = maxzoom;
73
+ }
74
+ return true;
75
+ }
76
+
53
77
  getCrossfadeParameters() {
54
78
  return this._crossfadeParameters;
55
79
  }
@@ -111,6 +135,8 @@ class StyleLayer extends Evented {
111
135
  }
112
136
 
113
137
  setLayoutProperty(name, value) {
138
+ this.#key = undefined;
139
+ this.layout[name] = value;
114
140
  if (name === 'visibility') {
115
141
  this.visibility = value === 'none' ? value : 'visible';
116
142
  return;
@@ -127,21 +153,31 @@ class StyleLayer extends Evented {
127
153
  }
128
154
 
129
155
  setPaintProperty(name, value) {
156
+ this.paint[name] = value;
130
157
  if (name.endsWith(TRANSITION_SUFFIX)) {
131
158
  this._transitionablePaint.setTransition(name.slice(0, -TRANSITION_SUFFIX.length), value || undefined);
132
159
  return false;
133
160
  }
161
+ const transitionable = this._transitionablePaint._values[name];
162
+ const isCrossFadedProperty = transitionable.property.specification['property-type'] === 'cross-faded-data-driven';
163
+ const wasDataDriven = transitionable.value.isDataDriven();
164
+ this._transitionablePaint.setValue(name, value);
165
+ this._handleSpecialPaintPropertyUpdate(name);
166
+ const isDataDriven = this._transitionablePaint._values[name].value.isDataDriven();
167
+ if (isDataDriven !== wasDataDriven || (wasDataDriven && isDataDriven) || isCrossFadedProperty) {
168
+ // reset transitioning in progress
169
+ this._untransitioned(name);
170
+ }
134
171
  // if a cross-faded value is changed, we need to make sure the new icons get added to each tile's iconAtlas
135
172
  // so a call to _updateLayer is necessary, and we return true from this function so it gets called in
136
173
  // Style#setPaintProperty
137
- const prop = this._transitionablePaint._values[name];
138
- const newCrossFadedValue =
139
- prop.property.specification['property-type'] === 'cross-faded-data-driven' && !prop.value.value && value;
140
- const wasDataDriven = this._transitionablePaint._values[name].value.isDataDriven();
141
- this._transitionablePaint.setValue(name, value);
142
- const isDataDriven = this._transitionablePaint._values[name].value.isDataDriven();
143
- this._handleSpecialPaintPropertyUpdate(name);
144
- return isDataDriven || wasDataDriven || newCrossFadedValue;
174
+ return isDataDriven || wasDataDriven || isCrossFadedProperty;
175
+ }
176
+
177
+ _untransitioned(name) {
178
+ if (this._transitioningPaint) {
179
+ this._transitioningPaint._values[name] = this._transitionablePaint._values[name].untransitioned();
180
+ }
145
181
  }
146
182
 
147
183
  _handleSpecialPaintPropertyUpdate() {
@@ -149,8 +185,12 @@ class StyleLayer extends Evented {
149
185
  }
150
186
 
151
187
  isHidden(zoom) {
152
- if (this.minzoom && zoom < this.minzoom) return true;
153
- if (this.maxzoom && zoom >= this.maxzoom) return true;
188
+ if (this.minzoom && zoom < this.minzoom) {
189
+ return true;
190
+ }
191
+ if (this.maxzoom && zoom >= this.maxzoom) {
192
+ return true;
193
+ }
154
194
  return this.visibility === 'none';
155
195
  }
156
196
 
@@ -167,38 +207,17 @@ class StyleLayer extends Evented {
167
207
  this._crossfadeParameters = parameters.getCrossfadeParameters();
168
208
  }
169
209
  if (this._unevaluatedLayout) {
170
- this.layout = this._unevaluatedLayout.possiblyEvaluate(parameters);
210
+ this._layout = this._unevaluatedLayout.possiblyEvaluate(parameters);
171
211
  }
172
212
 
173
- this.paint = this._transitioningPaint.possiblyEvaluate(parameters);
213
+ this._paint = this._transitioningPaint.possiblyEvaluate(parameters);
174
214
  }
175
215
 
176
- serialize() {
177
- const output = {
178
- id: this.id,
179
- type: this.type,
180
- source: this.source,
181
- 'source-layer': this.sourceLayer,
182
- metadata: this.metadata,
183
- minzoom: this.minzoom,
184
- maxzoom: this.maxzoom,
185
- filter: this.filter,
186
- layout: this._unevaluatedLayout?.serialize(),
187
- paint: this._transitionablePaint?.serialize()
188
- };
189
-
190
- if (this.visibility === 'none') {
191
- output.layout = output.layout || {};
192
- output.layout.visibility = 'none';
216
+ get key() {
217
+ if (!this.#key) {
218
+ this.#key = createKey(keyProperties, this);
193
219
  }
194
-
195
- return filterObject(output, (value, key) => {
196
- return (
197
- value !== undefined &&
198
- !(key === 'layout' && !Object.keys(value).length) &&
199
- !(key === 'paint' && !Object.keys(value).length)
200
- );
201
- });
220
+ return this.#key;
202
221
  }
203
222
 
204
223
  is3D() {
@@ -218,8 +237,8 @@ class StyleLayer extends Evented {
218
237
  }
219
238
 
220
239
  isStateDependent() {
221
- for (const property in this.paint._values) {
222
- const value = this.paint.get(property);
240
+ for (const property in this._paint._values) {
241
+ const value = this._paint.get(property);
223
242
  if (
224
243
  !(value instanceof PossiblyEvaluatedPropertyValue) ||
225
244
  !supportsPropertyExpression(value.property.specification)
@@ -235,4 +254,4 @@ class StyleLayer extends Evented {
235
254
  }
236
255
  }
237
256
 
238
- module.exports = StyleLayer;
257
+ export default StyleLayer;
@@ -1,55 +1,30 @@
1
- const createStyleLayer = require('./create_style_layer');
2
-
3
- const { values } = require('../util/object');
4
- const featureFilter = require('../style-spec/feature_filter');
5
- const groupByLayout = require('../style-spec/group_by_layout');
1
+ import groupBySource from '../util/group_layers.js';
6
2
 
7
3
  class StyleLayerIndex {
8
- #layerConfigs = {};
9
- #layers = {};
4
+ #layers = new Map();
5
+ #fbs = {};
10
6
 
11
- constructor(layerConfigs) {
12
- if (layerConfigs) {
13
- this.update(layerConfigs);
7
+ constructor(layers) {
8
+ if (layers) {
9
+ this.replace(layers);
14
10
  }
15
11
  }
16
12
 
17
- replace(layerConfigs) {
18
- this.#layerConfigs = {};
19
- this.#layers = {};
20
- this.update(layerConfigs);
13
+ replace(layers) {
14
+ this.#layers = layers;
15
+ this.#fbs = null;
21
16
  }
22
17
 
23
- update(layerConfigs, removedIds = []) {
24
- for (const layerConfig of layerConfigs) {
25
- this.#layerConfigs[layerConfig.id] = layerConfig;
26
-
27
- const layer = (this.#layers[layerConfig.id] = createStyleLayer(layerConfig));
28
- layer._featureFilter = featureFilter(layer.filter);
29
- }
30
- for (const id of removedIds) {
31
- delete this.#layerConfigs[id];
32
- delete this.#layers[id];
33
- }
34
-
35
- this.familiesBySource = {};
36
-
37
- const groups = groupByLayout(values(this.#layerConfigs));
38
-
39
- for (const layerConfigs of groups) {
40
- const layers = layerConfigs.map(layerConfig => this.#layers[layerConfig.id]);
41
-
42
- const layer = layers[0];
43
- if (layer.visibility === 'none') {
44
- continue;
45
- }
18
+ update() {
19
+ this.#fbs = null;
20
+ }
46
21
 
47
- const { source = '', sourceLayer = '_geojsonTileLayer' } = layer;
48
- const sourceGroup = (this.familiesBySource[source] ??= {});
49
- const sourceLayerFamilies = (sourceGroup[sourceLayer] ??= []);
50
- sourceLayerFamilies.push(layers);
22
+ get familiesBySource() {
23
+ if (!this.#fbs) {
24
+ this.#fbs = groupBySource(this.#layers.values());
51
25
  }
26
+ return this.#fbs;
52
27
  }
53
28
  }
54
29
 
55
- module.exports = StyleLayerIndex;
30
+ export default StyleLayerIndex;
@@ -33,4 +33,4 @@ class ZoomHistory {
33
33
  }
34
34
  }
35
35
 
36
- module.exports = ZoomHistory;
36
+ export default ZoomHistory;
@@ -5,4 +5,4 @@ function ParsingError(error) {
5
5
  this.line = match ? Number.parseInt(match[1], 10) : 0;
6
6
  }
7
7
 
8
- module.exports = ParsingError;
8
+ export default ParsingError;
@@ -1,10 +1,12 @@
1
- module.exports = class ValidationError {
1
+ export default class ValidationError {
2
2
  constructor(key, value, message, identifier) {
3
3
  this.message = (key ? `${key}: ` : '') + message;
4
- if (identifier) this.identifier = identifier;
4
+ if (identifier) {
5
+ this.identifier = identifier;
6
+ }
5
7
 
6
8
  if (value?.__line__) {
7
9
  this.line = value.__line__;
8
10
  }
9
11
  }
10
- };
12
+ }
@@ -1,13 +1,11 @@
1
- const { isExpressionFilter } = require('./index');
2
-
3
- module.exports = convertFilter;
1
+ import { isExpressionFilter } from './index.js';
4
2
 
5
3
  /**
6
4
  * Convert the given legacy filter to (the JSON representation of) an
7
5
  * equivalent expression
8
6
  * @private
9
7
  */
10
- function convertFilter(filter) {
8
+ export default function convertFilter(filter) {
11
9
  return _convertFilter(filter, {});
12
10
  }
13
11
 
@@ -64,9 +62,13 @@ function _convertFilter(filter, expectedTypes) {
64
62
  return filter;
65
63
  }
66
64
 
67
- if (!filter) return true;
65
+ if (!filter) {
66
+ return true;
67
+ }
68
68
  const op = filter[0];
69
- if (filter.length <= 1) return op !== 'any';
69
+ if (filter.length <= 1) {
70
+ return op !== 'any';
71
+ }
70
72
 
71
73
  let converted;
72
74
 
@@ -115,8 +117,12 @@ function runtimeTypeChecks(expectedTypes) {
115
117
  const get = property === '$id' ? ['id'] : ['get', property];
116
118
  conditions.push(['==', ['typeof', get], expectedTypes[property]]);
117
119
  }
118
- if (conditions.length === 0) return true;
119
- if (conditions.length === 1) return conditions[0];
120
+ if (conditions.length === 0) {
121
+ return true;
122
+ }
123
+ if (conditions.length === 1) {
124
+ return conditions[0];
125
+ }
120
126
  return ['all'].concat(conditions);
121
127
  }
122
128
 
@@ -155,7 +161,9 @@ function convertComparisonOp(property, value, op, expectedTypes) {
155
161
  }
156
162
 
157
163
  function convertInOp(property, values, negate = false) {
158
- if (values.length === 0) return negate;
164
+ if (values.length === 0) {
165
+ return negate;
166
+ }
159
167
 
160
168
  let get;
161
169
  if (property === '$type') {
@@ -1,11 +1,9 @@
1
- const { createExpression, findGlobalStateRefs } = require('@mapwhit/style-expressions');
2
-
3
- module.exports = createFilter;
1
+ import { createExpression, findGlobalStateRefs } from '@mapwhit/style-expressions';
4
2
 
5
3
  createFilter.isExpressionFilter = isExpressionFilter;
6
4
  createFilter.addGlobalStateRefs = addGlobalStateRefs;
7
5
 
8
- function isExpressionFilter(filter) {
6
+ export function isExpressionFilter(filter) {
9
7
  if (filter === true || filter === false) {
10
8
  return true;
11
9
  }
@@ -65,7 +63,7 @@ const filterSpec = {
65
63
  * @param {Array} filter mapbox gl filter
66
64
  * @returns {Function} filter-evaluating function
67
65
  */
68
- function createFilter(filter) {
66
+ export default function createFilter(filter) {
69
67
  if (filter === null || filter === undefined) {
70
68
  return addGlobalStateRefs(() => true);
71
69
  }
@@ -84,7 +82,7 @@ function createFilter(filter) {
84
82
  );
85
83
  }
86
84
 
87
- function addGlobalStateRefs(filter, getGlobalStateRefs = () => new Set()) {
85
+ export function addGlobalStateRefs(filter, getGlobalStateRefs = () => new Set()) {
88
86
  filter.getGlobalStateRefs = getGlobalStateRefs;
89
87
  return filter;
90
88
  }
@@ -95,9 +93,13 @@ function compare(a, b) {
95
93
  }
96
94
 
97
95
  function convertFilter(filter) {
98
- if (!filter || filter.length === 0) return true;
96
+ if (!filter || filter.length === 0) {
97
+ return true;
98
+ }
99
99
  const [op, ...args] = filter;
100
- if (filter.length <= 1) return op !== 'any';
100
+ if (filter.length <= 1) {
101
+ return op !== 'any';
102
+ }
101
103
  switch (op) {
102
104
  case '!=':
103
105
  return convertNegation(convertComparisonOp('==', ...args));
@@ -158,7 +160,9 @@ function convertInOp([property, ...values]) {
158
160
  }
159
161
 
160
162
  function isUniformLarge(values) {
161
- if (values.length < 200) return false;
163
+ if (values.length < 200) {
164
+ return false;
165
+ }
162
166
  const type = typeof values[0];
163
167
  return values.every(v => typeof v === type);
164
168
  }
@@ -1,8 +1,8 @@
1
- module.exports = (function () {
1
+ export default (function () {
2
2
  try {
3
3
  new Function('');
4
4
  return true;
5
- } catch (e) {
5
+ } catch {
6
6
  return false;
7
7
  }
8
8
  })();
@@ -1 +1 @@
1
- module.exports = ['type', 'source', 'source-layer', 'minzoom', 'maxzoom', 'filter', 'layout'];
1
+ export default ['type', 'source', 'source-layer', 'minzoom', 'maxzoom', 'filter', 'layout'];
@@ -1,6 +1,4 @@
1
- const { default: Point } = require('@mapbox/point-geometry');
2
-
3
- const { register } = require('../util/transfer_registry');
1
+ import Point from '@mapbox/point-geometry';
4
2
 
5
3
  class Anchor extends Point {
6
4
  constructor(x, y, angle, segment) {
@@ -16,6 +14,4 @@ class Anchor extends Point {
16
14
  }
17
15
  }
18
16
 
19
- register('Anchor', Anchor);
20
-
21
- module.exports = Anchor;
17
+ export default Anchor;
@@ -1,4 +1,4 @@
1
- module.exports = checkMaxAngle;
1
+ export default checkMaxAngle;
2
2
 
3
3
  /**
4
4
  * Labels placed around really sharp angles aren't readable. Check if any
@@ -15,7 +15,9 @@ module.exports = checkMaxAngle;
15
15
  */
16
16
  function checkMaxAngle(line, anchor, labelLength, windowSize, maxAngle) {
17
17
  // horizontal labels always pass
18
- if (anchor.segment === undefined) return true;
18
+ if (anchor.segment === undefined) {
19
+ return true;
20
+ }
19
21
 
20
22
  let p = anchor;
21
23
  let index = anchor.segment + 1;
@@ -26,7 +28,9 @@ function checkMaxAngle(line, anchor, labelLength, windowSize, maxAngle) {
26
28
  index--;
27
29
 
28
30
  // there isn't enough room for the label after the beginning of the line
29
- if (index < 0) return false;
31
+ if (index < 0) {
32
+ return false;
33
+ }
30
34
 
31
35
  anchorDistance -= line[index].dist(p);
32
36
  p = line[index];
@@ -46,7 +50,9 @@ function checkMaxAngle(line, anchor, labelLength, windowSize, maxAngle) {
46
50
  const next = line[index + 1];
47
51
 
48
52
  // there isn't enough room for the label before the end of the line
49
- if (!next) return false;
53
+ if (!next) {
54
+ return false;
55
+ }
50
56
 
51
57
  let angleDelta = prev.angleTo(current) - current.angleTo(next);
52
58
  // restrict angle to -pi..pi range
@@ -64,7 +70,9 @@ function checkMaxAngle(line, anchor, labelLength, windowSize, maxAngle) {
64
70
  }
65
71
 
66
72
  // the sum of angles within the window area exceeds the maximum allowed value. check fails.
67
- if (recentAngleDelta > maxAngle) return false;
73
+ if (recentAngleDelta > maxAngle) {
74
+ return false;
75
+ }
68
76
 
69
77
  index++;
70
78
  anchorDistance += current.dist(next);
@@ -1,6 +1,5 @@
1
- const { default: Point } = require('@mapbox/point-geometry');
2
-
3
- module.exports = clipLine;
1
+ import Point from '@mapbox/point-geometry';
2
+ export default clipLine;
4
3
 
5
4
  /**
6
5
  * Returns the part of a multiline that intersects with the provided rectangular box.
@@ -1,4 +1,4 @@
1
- const { default: Point } = require('@mapbox/point-geometry');
1
+ import Point from '@mapbox/point-geometry';
2
2
 
3
3
  /**
4
4
  * A CollisionFeature represents the area of the tile covered by a single label.
@@ -174,8 +174,12 @@ class CollisionFeature {
174
174
  let boxDistanceToAnchor = labelStartDistance + boxOffset;
175
175
 
176
176
  // make the distance between pitch padding boxes bigger
177
- if (boxOffset < 0) boxDistanceToAnchor += boxOffset;
178
- if (boxOffset > labelLength) boxDistanceToAnchor += boxOffset - labelLength;
177
+ if (boxOffset < 0) {
178
+ boxDistanceToAnchor += boxOffset;
179
+ }
180
+ if (boxOffset > labelLength) {
181
+ boxDistanceToAnchor += boxOffset - labelLength;
182
+ }
179
183
 
180
184
  if (boxDistanceToAnchor < anchorDistance) {
181
185
  // The line doesn't extend far enough back for this box, skip it
@@ -227,4 +231,4 @@ class CollisionFeature {
227
231
  }
228
232
  }
229
233
 
230
- module.exports = CollisionFeature;
234
+ export default CollisionFeature;
@@ -1,9 +1,7 @@
1
- const { default: Point } = require('@mapbox/point-geometry');
2
-
3
- const intersectionTests = require('../util/intersection_tests');
4
- const Grid = require('./grid_index');
5
-
6
- const projection = require('../symbol/projection');
1
+ import Point from '@mapbox/point-geometry';
2
+ import * as projection from '../symbol/projection.js';
3
+ import * as intersectionTests from '../util/intersection_tests.js';
4
+ import Grid from './grid_index.js';
7
5
 
8
6
  // When a symbol crosses the edge that causes it to be included in
9
7
  // collision detection, it will cause changes in the symbols around
@@ -382,4 +380,4 @@ function markCollisionCircleUsed(collisionCircles, index, used) {
382
380
  collisionCircles[index + 4] = used ? 1 : 0;
383
381
  }
384
382
 
385
- module.exports = CollisionIndex;
383
+ export default CollisionIndex;