@scoova/mgl 1.0.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 (565) hide show
  1. package/LICENSE.txt +116 -0
  2. package/README.md +174 -0
  3. package/build/banner.ts +12 -0
  4. package/build/bump-version-changelog.js +26 -0
  5. package/build/check-bundle-size.js +77 -0
  6. package/build/generate-dist-package.js +26 -0
  7. package/build/generate-doc-images.ts +78 -0
  8. package/build/generate-docs.ts +190 -0
  9. package/build/generate-shaders.ts +68 -0
  10. package/build/generate-struct-arrays.ts +438 -0
  11. package/build/generate-style-code.ts +283 -0
  12. package/build/readme.md +56 -0
  13. package/build/release-notes.js +45 -0
  14. package/build/rollup/bundle_prelude.js +29 -0
  15. package/build/rollup/maplibregl.js +22 -0
  16. package/build/rollup_plugins.ts +58 -0
  17. package/dist/LICENSE.txt +116 -0
  18. package/dist/maplibre-gl.css +1 -0
  19. package/dist/maplibre-gl.d.ts +13304 -0
  20. package/dist/maplibre-gl.js +59 -0
  21. package/dist/maplibre-gl.js.map +1 -0
  22. package/dist/package.json +1 -0
  23. package/package.json +192 -0
  24. package/src/css/maplibre-gl.css +854 -0
  25. package/src/css/svg/maplibregl-ctrl-attrib.svg +3 -0
  26. package/src/css/svg/maplibregl-ctrl-compass.svg +4 -0
  27. package/src/css/svg/maplibregl-ctrl-fullscreen.svg +3 -0
  28. package/src/css/svg/maplibregl-ctrl-geolocate.svg +5 -0
  29. package/src/css/svg/maplibregl-ctrl-logo.svg +11 -0
  30. package/src/css/svg/maplibregl-ctrl-shrink.svg +3 -0
  31. package/src/css/svg/maplibregl-ctrl-terrain.svg +3 -0
  32. package/src/css/svg/maplibregl-ctrl-zoom-in.svg +3 -0
  33. package/src/css/svg/maplibregl-ctrl-zoom-out.svg +3 -0
  34. package/src/data/array_types.g.ts +1130 -0
  35. package/src/data/bucket/circle_attributes.ts +8 -0
  36. package/src/data/bucket/circle_bucket.ts +197 -0
  37. package/src/data/bucket/fill_attributes.ts +8 -0
  38. package/src/data/bucket/fill_bucket.test.ts +95 -0
  39. package/src/data/bucket/fill_bucket.ts +228 -0
  40. package/src/data/bucket/fill_extrusion_attributes.ts +13 -0
  41. package/src/data/bucket/fill_extrusion_bucket.ts +305 -0
  42. package/src/data/bucket/heatmap_bucket.ts +12 -0
  43. package/src/data/bucket/line_attributes.ts +8 -0
  44. package/src/data/bucket/line_attributes_ext.ts +8 -0
  45. package/src/data/bucket/line_bucket.test.ts +142 -0
  46. package/src/data/bucket/line_bucket.ts +592 -0
  47. package/src/data/bucket/pattern_attributes.ts +9 -0
  48. package/src/data/bucket/pattern_bucket_features.ts +57 -0
  49. package/src/data/bucket/symbol_attributes.ts +122 -0
  50. package/src/data/bucket/symbol_bucket.test.ts +243 -0
  51. package/src/data/bucket/symbol_bucket.ts +975 -0
  52. package/src/data/bucket.ts +123 -0
  53. package/src/data/dem_data.test.ts +237 -0
  54. package/src/data/dem_data.ts +171 -0
  55. package/src/data/evaluation_feature.ts +18 -0
  56. package/src/data/extent.ts +13 -0
  57. package/src/data/feature_index.ts +337 -0
  58. package/src/data/feature_position_map.test.ts +33 -0
  59. package/src/data/feature_position_map.ts +126 -0
  60. package/src/data/index_array_type.ts +9 -0
  61. package/src/data/load_geometry.test.ts +49 -0
  62. package/src/data/load_geometry.ts +44 -0
  63. package/src/data/pos3d_attributes.ts +5 -0
  64. package/src/data/pos_attributes.ts +5 -0
  65. package/src/data/program_configuration.ts +735 -0
  66. package/src/data/raster_bounds_attributes.ts +6 -0
  67. package/src/data/segment.ts +89 -0
  68. package/src/geo/edge_insets.test.ts +83 -0
  69. package/src/geo/edge_insets.ts +146 -0
  70. package/src/geo/lng_lat.test.ts +65 -0
  71. package/src/geo/lng_lat.ts +169 -0
  72. package/src/geo/lng_lat_bounds.test.ts +357 -0
  73. package/src/geo/lng_lat_bounds.ts +356 -0
  74. package/src/geo/mercator_coordinate.test.ts +34 -0
  75. package/src/geo/mercator_coordinate.ts +157 -0
  76. package/src/geo/projection/projection.ts +72 -0
  77. package/src/geo/transform.test.ts +509 -0
  78. package/src/geo/transform.ts +1072 -0
  79. package/src/gl/color_mode.ts +31 -0
  80. package/src/gl/context.ts +321 -0
  81. package/src/gl/cull_face_mode.ts +22 -0
  82. package/src/gl/depth_mode.ts +26 -0
  83. package/src/gl/framebuffer.ts +48 -0
  84. package/src/gl/index_buffer.ts +55 -0
  85. package/src/gl/render_pool.test.ts +69 -0
  86. package/src/gl/render_pool.ts +93 -0
  87. package/src/gl/state.test.ts +125 -0
  88. package/src/gl/stencil_mode.ts +27 -0
  89. package/src/gl/types.ts +59 -0
  90. package/src/gl/value.ts +534 -0
  91. package/src/gl/vertex_buffer.test.ts +57 -0
  92. package/src/gl/vertex_buffer.ts +111 -0
  93. package/src/gl/webgl2.ts +12 -0
  94. package/src/index.test.ts +121 -0
  95. package/src/index.ts +250 -0
  96. package/src/render/draw_background.ts +53 -0
  97. package/src/render/draw_circle.ts +113 -0
  98. package/src/render/draw_collision_debug.ts +168 -0
  99. package/src/render/draw_custom.test.ts +73 -0
  100. package/src/render/draw_custom.ts +45 -0
  101. package/src/render/draw_debug.test.ts +122 -0
  102. package/src/render/draw_debug.ts +148 -0
  103. package/src/render/draw_fill.test.ts +137 -0
  104. package/src/render/draw_fill.ts +128 -0
  105. package/src/render/draw_fill_extrusion.ts +97 -0
  106. package/src/render/draw_heatmap.ts +228 -0
  107. package/src/render/draw_hillshade.ts +119 -0
  108. package/src/render/draw_line.ts +125 -0
  109. package/src/render/draw_raster.ts +133 -0
  110. package/src/render/draw_sky.ts +44 -0
  111. package/src/render/draw_symbol.test.ts +223 -0
  112. package/src/render/draw_symbol.ts +499 -0
  113. package/src/render/draw_terrain.ts +99 -0
  114. package/src/render/glyph_atlas.ts +83 -0
  115. package/src/render/glyph_manager.test.ts +147 -0
  116. package/src/render/glyph_manager.ts +198 -0
  117. package/src/render/image_atlas.ts +159 -0
  118. package/src/render/image_manager.ts +337 -0
  119. package/src/render/line_atlas.test.ts +38 -0
  120. package/src/render/line_atlas.ts +214 -0
  121. package/src/render/mesh.ts +25 -0
  122. package/src/render/painter.test.ts +51 -0
  123. package/src/render/painter.ts +666 -0
  124. package/src/render/program/background_program.ts +100 -0
  125. package/src/render/program/circle_program.ts +61 -0
  126. package/src/render/program/clipping_mask_program.ts +19 -0
  127. package/src/render/program/collision_program.ts +47 -0
  128. package/src/render/program/debug_program.ts +29 -0
  129. package/src/render/program/fill_extrusion_program.ts +120 -0
  130. package/src/render/program/fill_program.ts +121 -0
  131. package/src/render/program/heatmap_program.ts +76 -0
  132. package/src/render/program/hillshade_program.ts +116 -0
  133. package/src/render/program/line_program.ts +207 -0
  134. package/src/render/program/pattern.ts +102 -0
  135. package/src/render/program/program_uniforms.ts +46 -0
  136. package/src/render/program/raster_program.ts +88 -0
  137. package/src/render/program/sky_program.ts +28 -0
  138. package/src/render/program/symbol_program.ts +266 -0
  139. package/src/render/program/terrain_program.ts +116 -0
  140. package/src/render/program.ts +233 -0
  141. package/src/render/render_to_texture.test.ts +151 -0
  142. package/src/render/render_to_texture.ts +197 -0
  143. package/src/render/terrain.test.ts +322 -0
  144. package/src/render/terrain.ts +464 -0
  145. package/src/render/texture.ts +114 -0
  146. package/src/render/uniform_binding.test.ts +122 -0
  147. package/src/render/uniform_binding.ts +157 -0
  148. package/src/render/update_pattern_positions_in_program.test.ts +74 -0
  149. package/src/render/update_pattern_positions_in_program.ts +50 -0
  150. package/src/render/vertex_array_object.ts +163 -0
  151. package/src/shaders/README.md +42 -0
  152. package/src/shaders/_prelude.fragment.glsl +19 -0
  153. package/src/shaders/_prelude.fragment.glsl.g.ts +2 -0
  154. package/src/shaders/_prelude.vertex.glsl +148 -0
  155. package/src/shaders/_prelude.vertex.glsl.g.ts +2 -0
  156. package/src/shaders/background.fragment.glsl +10 -0
  157. package/src/shaders/background.fragment.glsl.g.ts +2 -0
  158. package/src/shaders/background.vertex.glsl +7 -0
  159. package/src/shaders/background.vertex.glsl.g.ts +2 -0
  160. package/src/shaders/background_pattern.fragment.glsl +28 -0
  161. package/src/shaders/background_pattern.fragment.glsl.g.ts +2 -0
  162. package/src/shaders/background_pattern.vertex.glsl +19 -0
  163. package/src/shaders/background_pattern.vertex.glsl.g.ts +2 -0
  164. package/src/shaders/circle.fragment.glsl +34 -0
  165. package/src/shaders/circle.fragment.glsl.g.ts +2 -0
  166. package/src/shaders/circle.vertex.glsl +68 -0
  167. package/src/shaders/circle.vertex.glsl.g.ts +2 -0
  168. package/src/shaders/clipping_mask.fragment.glsl +3 -0
  169. package/src/shaders/clipping_mask.fragment.glsl.g.ts +2 -0
  170. package/src/shaders/clipping_mask.vertex.glsl +7 -0
  171. package/src/shaders/clipping_mask.vertex.glsl.g.ts +2 -0
  172. package/src/shaders/collision_box.fragment.glsl +20 -0
  173. package/src/shaders/collision_box.fragment.glsl.g.ts +2 -0
  174. package/src/shaders/collision_box.vertex.glsl +27 -0
  175. package/src/shaders/collision_box.vertex.glsl.g.ts +2 -0
  176. package/src/shaders/collision_circle.fragment.glsl +17 -0
  177. package/src/shaders/collision_circle.fragment.glsl.g.ts +2 -0
  178. package/src/shaders/collision_circle.vertex.glsl +59 -0
  179. package/src/shaders/collision_circle.vertex.glsl.g.ts +2 -0
  180. package/src/shaders/debug.fragment.glsl +9 -0
  181. package/src/shaders/debug.fragment.glsl.g.ts +2 -0
  182. package/src/shaders/debug.vertex.glsl +12 -0
  183. package/src/shaders/debug.vertex.glsl.g.ts +2 -0
  184. package/src/shaders/encode_attribute.test.ts +11 -0
  185. package/src/shaders/encode_attribute.ts +13 -0
  186. package/src/shaders/fill.fragment.glsl +13 -0
  187. package/src/shaders/fill.fragment.glsl.g.ts +2 -0
  188. package/src/shaders/fill.vertex.glsl +13 -0
  189. package/src/shaders/fill.vertex.glsl.g.ts +2 -0
  190. package/src/shaders/fill_extrusion.fragment.glsl +9 -0
  191. package/src/shaders/fill_extrusion.fragment.glsl.g.ts +2 -0
  192. package/src/shaders/fill_extrusion.vertex.glsl +84 -0
  193. package/src/shaders/fill_extrusion.vertex.glsl.g.ts +2 -0
  194. package/src/shaders/fill_extrusion_pattern.fragment.glsl +47 -0
  195. package/src/shaders/fill_extrusion_pattern.fragment.glsl.g.ts +2 -0
  196. package/src/shaders/fill_extrusion_pattern.vertex.glsl +96 -0
  197. package/src/shaders/fill_extrusion_pattern.vertex.glsl.g.ts +2 -0
  198. package/src/shaders/fill_outline.fragment.glsl +17 -0
  199. package/src/shaders/fill_outline.fragment.glsl.g.ts +2 -0
  200. package/src/shaders/fill_outline.vertex.glsl +17 -0
  201. package/src/shaders/fill_outline.vertex.glsl.g.ts +2 -0
  202. package/src/shaders/fill_outline_pattern.fragment.glsl +43 -0
  203. package/src/shaders/fill_outline_pattern.fragment.glsl.g.ts +2 -0
  204. package/src/shaders/fill_outline_pattern.vertex.glsl +44 -0
  205. package/src/shaders/fill_outline_pattern.vertex.glsl.g.ts +2 -0
  206. package/src/shaders/fill_pattern.fragment.glsl +39 -0
  207. package/src/shaders/fill_pattern.fragment.glsl.g.ts +2 -0
  208. package/src/shaders/fill_pattern.vertex.glsl +39 -0
  209. package/src/shaders/fill_pattern.vertex.glsl.g.ts +2 -0
  210. package/src/shaders/heatmap.fragment.glsl +22 -0
  211. package/src/shaders/heatmap.fragment.glsl.g.ts +2 -0
  212. package/src/shaders/heatmap.vertex.glsl +54 -0
  213. package/src/shaders/heatmap.vertex.glsl.g.ts +2 -0
  214. package/src/shaders/heatmap_texture.fragment.glsl +15 -0
  215. package/src/shaders/heatmap_texture.fragment.glsl.g.ts +2 -0
  216. package/src/shaders/heatmap_texture.vertex.glsl +11 -0
  217. package/src/shaders/heatmap_texture.vertex.glsl.g.ts +2 -0
  218. package/src/shaders/hillshade.fragment.glsl +52 -0
  219. package/src/shaders/hillshade.fragment.glsl.g.ts +2 -0
  220. package/src/shaders/hillshade.vertex.glsl +11 -0
  221. package/src/shaders/hillshade.vertex.glsl.g.ts +2 -0
  222. package/src/shaders/hillshade_prepare.fragment.glsl +77 -0
  223. package/src/shaders/hillshade_prepare.fragment.glsl.g.ts +2 -0
  224. package/src/shaders/hillshade_prepare.vertex.glsl +15 -0
  225. package/src/shaders/hillshade_prepare.vertex.glsl.g.ts +2 -0
  226. package/src/shaders/line.fragment.glsl +30 -0
  227. package/src/shaders/line.fragment.glsl.g.ts +2 -0
  228. package/src/shaders/line.vertex.glsl +89 -0
  229. package/src/shaders/line.vertex.glsl.g.ts +2 -0
  230. package/src/shaders/line_gradient.fragment.glsl +34 -0
  231. package/src/shaders/line_gradient.fragment.glsl.g.ts +2 -0
  232. package/src/shaders/line_gradient.vertex.glsl +92 -0
  233. package/src/shaders/line_gradient.vertex.glsl.g.ts +2 -0
  234. package/src/shaders/line_pattern.fragment.glsl +77 -0
  235. package/src/shaders/line_pattern.fragment.glsl.g.ts +2 -0
  236. package/src/shaders/line_pattern.vertex.glsl +103 -0
  237. package/src/shaders/line_pattern.vertex.glsl.g.ts +2 -0
  238. package/src/shaders/line_sdf.fragment.glsl +45 -0
  239. package/src/shaders/line_sdf.fragment.glsl.g.ts +2 -0
  240. package/src/shaders/line_sdf.vertex.glsl +101 -0
  241. package/src/shaders/line_sdf.vertex.glsl.g.ts +2 -0
  242. package/src/shaders/raster.fragment.glsl +53 -0
  243. package/src/shaders/raster.fragment.glsl.g.ts +2 -0
  244. package/src/shaders/raster.vertex.glsl +21 -0
  245. package/src/shaders/raster.vertex.glsl.g.ts +2 -0
  246. package/src/shaders/shaders.ts +197 -0
  247. package/src/shaders/sky.fragment.glsl +17 -0
  248. package/src/shaders/sky.fragment.glsl.g.ts +2 -0
  249. package/src/shaders/sky.vertex.glsl +5 -0
  250. package/src/shaders/sky.vertex.glsl.g.ts +2 -0
  251. package/src/shaders/symbol_icon.fragment.glsl +17 -0
  252. package/src/shaders/symbol_icon.fragment.glsl.g.ts +2 -0
  253. package/src/shaders/symbol_icon.vertex.glsl +117 -0
  254. package/src/shaders/symbol_icon.vertex.glsl.g.ts +2 -0
  255. package/src/shaders/symbol_sdf.fragment.glsl +58 -0
  256. package/src/shaders/symbol_sdf.fragment.glsl.g.ts +2 -0
  257. package/src/shaders/symbol_sdf.vertex.glsl +142 -0
  258. package/src/shaders/symbol_sdf.vertex.glsl.g.ts +2 -0
  259. package/src/shaders/symbol_text_and_icon.fragment.glsl +68 -0
  260. package/src/shaders/symbol_text_and_icon.fragment.glsl.g.ts +2 -0
  261. package/src/shaders/symbol_text_and_icon.vertex.glsl +140 -0
  262. package/src/shaders/symbol_text_and_icon.vertex.glsl.g.ts +2 -0
  263. package/src/shaders/terrain.fragment.glsl +32 -0
  264. package/src/shaders/terrain.fragment.glsl.g.ts +2 -0
  265. package/src/shaders/terrain.vertex.glsl +17 -0
  266. package/src/shaders/terrain.vertex.glsl.g.ts +2 -0
  267. package/src/shaders/terrain_coords.fragment.glsl +11 -0
  268. package/src/shaders/terrain_coords.fragment.glsl.g.ts +2 -0
  269. package/src/shaders/terrain_coords.vertex.glsl +13 -0
  270. package/src/shaders/terrain_coords.vertex.glsl.g.ts +2 -0
  271. package/src/shaders/terrain_depth.fragment.glsl +15 -0
  272. package/src/shaders/terrain_depth.fragment.glsl.g.ts +2 -0
  273. package/src/shaders/terrain_depth.vertex.glsl +13 -0
  274. package/src/shaders/terrain_depth.vertex.glsl.g.ts +2 -0
  275. package/src/source/canvas_source.test.ts +210 -0
  276. package/src/source/canvas_source.ts +227 -0
  277. package/src/source/geojson_source.test.ts +492 -0
  278. package/src/source/geojson_source.ts +431 -0
  279. package/src/source/geojson_source_diff.test.ts +364 -0
  280. package/src/source/geojson_source_diff.ts +172 -0
  281. package/src/source/geojson_worker_source.test.ts +399 -0
  282. package/src/source/geojson_worker_source.ts +303 -0
  283. package/src/source/geojson_wrapper.test.ts +32 -0
  284. package/src/source/geojson_wrapper.ts +81 -0
  285. package/src/source/image_source.test.ts +235 -0
  286. package/src/source/image_source.ts +338 -0
  287. package/src/source/load_tilejson.ts +47 -0
  288. package/src/source/pixels_to_tile_units.ts +25 -0
  289. package/src/source/protocol_crud.ts +48 -0
  290. package/src/source/query_features.test.ts +31 -0
  291. package/src/source/query_features.ts +252 -0
  292. package/src/source/raster_dem_tile_source.test.ts +158 -0
  293. package/src/source/raster_dem_tile_source.ts +166 -0
  294. package/src/source/raster_dem_tile_worker_source.test.ts +36 -0
  295. package/src/source/raster_dem_tile_worker_source.ts +38 -0
  296. package/src/source/raster_tile_source.test.ts +206 -0
  297. package/src/source/raster_tile_source.ts +227 -0
  298. package/src/source/rtl_text_plugin_main_thread.test.ts +170 -0
  299. package/src/source/rtl_text_plugin_main_thread.ts +89 -0
  300. package/src/source/rtl_text_plugin_status.ts +33 -0
  301. package/src/source/rtl_text_plugin_worker.ts +49 -0
  302. package/src/source/source.test.ts +41 -0
  303. package/src/source/source.ts +186 -0
  304. package/src/source/source_cache.test.ts +2069 -0
  305. package/src/source/source_cache.ts +1102 -0
  306. package/src/source/source_state.ts +157 -0
  307. package/src/source/terrain_source_cache.test.ts +105 -0
  308. package/src/source/terrain_source_cache.ts +204 -0
  309. package/src/source/tile.test.ts +290 -0
  310. package/src/source/tile.ts +478 -0
  311. package/src/source/tile_bounds.ts +34 -0
  312. package/src/source/tile_cache.test.ts +130 -0
  313. package/src/source/tile_cache.ts +208 -0
  314. package/src/source/tile_id.test.ts +112 -0
  315. package/src/source/tile_id.ts +221 -0
  316. package/src/source/vector_tile_source.test.ts +401 -0
  317. package/src/source/vector_tile_source.ts +283 -0
  318. package/src/source/vector_tile_worker_source.test.ts +396 -0
  319. package/src/source/vector_tile_worker_source.ts +199 -0
  320. package/src/source/video_source.test.ts +124 -0
  321. package/src/source/video_source.ts +204 -0
  322. package/src/source/worker.test.ts +233 -0
  323. package/src/source/worker.ts +301 -0
  324. package/src/source/worker_source.ts +117 -0
  325. package/src/source/worker_tile.test.ts +226 -0
  326. package/src/source/worker_tile.ts +208 -0
  327. package/src/style/create_style_layer.ts +39 -0
  328. package/src/style/evaluation_parameters.ts +62 -0
  329. package/src/style/format_section_override.test.ts +62 -0
  330. package/src/style/format_section_override.ts +50 -0
  331. package/src/style/light.test.ts +86 -0
  332. package/src/style/light.ts +135 -0
  333. package/src/style/load_glyph_range.test.ts +40 -0
  334. package/src/style/load_glyph_range.ts +32 -0
  335. package/src/style/load_sprite.test.ts +227 -0
  336. package/src/style/load_sprite.ts +71 -0
  337. package/src/style/parse_glyph_pbf.ts +42 -0
  338. package/src/style/pauseable_placement.ts +138 -0
  339. package/src/style/properties.ts +726 -0
  340. package/src/style/query_utils.test.ts +107 -0
  341. package/src/style/query_utils.ts +70 -0
  342. package/src/style/sky.ts +127 -0
  343. package/src/style/style.test.ts +2654 -0
  344. package/src/style/style.ts +1814 -0
  345. package/src/style/style_glyph.ts +25 -0
  346. package/src/style/style_image.ts +188 -0
  347. package/src/style/style_layer/background_style_layer.ts +17 -0
  348. package/src/style/style_layer/background_style_layer_properties.g.ts +40 -0
  349. package/src/style/style_layer/circle_style_layer.ts +98 -0
  350. package/src/style/style_layer/circle_style_layer_properties.g.ts +76 -0
  351. package/src/style/style_layer/custom_style_layer.ts +233 -0
  352. package/src/style/style_layer/fill_extrusion_style_layer.ts +224 -0
  353. package/src/style/style_layer/fill_extrusion_style_layer_properties.g.ts +55 -0
  354. package/src/style/style_layer/fill_style_layer.test.ts +37 -0
  355. package/src/style/style_layer/fill_style_layer.ts +65 -0
  356. package/src/style/style_layer/fill_style_layer_properties.g.ts +64 -0
  357. package/src/style/style_layer/heatmap_style_layer.ts +74 -0
  358. package/src/style/style_layer/heatmap_style_layer_properties.g.ts +46 -0
  359. package/src/style/style_layer/hillshade_style_layer.ts +21 -0
  360. package/src/style/style_layer/hillshade_style_layer_properties.g.ts +49 -0
  361. package/src/style/style_layer/line_style_layer.test.ts +50 -0
  362. package/src/style/style_layer/line_style_layer.ts +131 -0
  363. package/src/style/style_layer/line_style_layer_properties.g.ts +88 -0
  364. package/src/style/style_layer/overlap_mode.test.ts +57 -0
  365. package/src/style/style_layer/overlap_mode.ts +25 -0
  366. package/src/style/style_layer/raster_style_layer.ts +17 -0
  367. package/src/style/style_layer/raster_style_layer_properties.g.ts +55 -0
  368. package/src/style/style_layer/symbol_style_layer.ts +195 -0
  369. package/src/style/style_layer/symbol_style_layer_properties.g.ts +218 -0
  370. package/src/style/style_layer/typed_style_layer.ts +9 -0
  371. package/src/style/style_layer/variable_text_anchor.test.ts +117 -0
  372. package/src/style/style_layer/variable_text_anchor.ts +163 -0
  373. package/src/style/style_layer.test.ts +372 -0
  374. package/src/style/style_layer.ts +287 -0
  375. package/src/style/style_layer_index.test.ts +99 -0
  376. package/src/style/style_layer_index.ts +78 -0
  377. package/src/style/validate_style.ts +53 -0
  378. package/src/style/zoom_history.ts +40 -0
  379. package/src/symbol/anchor.test.ts +14 -0
  380. package/src/symbol/anchor.ts +22 -0
  381. package/src/symbol/check_max_angle.test.ts +54 -0
  382. package/src/symbol/check_max_angle.ts +76 -0
  383. package/src/symbol/clip_line.test.ts +154 -0
  384. package/src/symbol/clip_line.ts +66 -0
  385. package/src/symbol/collision_feature.test.ts +98 -0
  386. package/src/symbol/collision_feature.ts +114 -0
  387. package/src/symbol/collision_index.test.ts +19 -0
  388. package/src/symbol/collision_index.ts +618 -0
  389. package/src/symbol/cross_tile_symbol_index.test.ts +260 -0
  390. package/src/symbol/cross_tile_symbol_index.ts +367 -0
  391. package/src/symbol/get_anchors.test.ts +113 -0
  392. package/src/symbol/get_anchors.ts +167 -0
  393. package/src/symbol/grid_index.test.ts +75 -0
  394. package/src/symbol/grid_index.ts +414 -0
  395. package/src/symbol/merge_lines.test.ts +30 -0
  396. package/src/symbol/merge_lines.ts +80 -0
  397. package/src/symbol/one_em.ts +3 -0
  398. package/src/symbol/opacity_state.ts +23 -0
  399. package/src/symbol/path_interpolator.test.ts +134 -0
  400. package/src/symbol/path_interpolator.ts +55 -0
  401. package/src/symbol/placement.ts +1371 -0
  402. package/src/symbol/projection.test.ts +171 -0
  403. package/src/symbol/projection.ts +833 -0
  404. package/src/symbol/quads.test.ts +157 -0
  405. package/src/symbol/quads.ts +349 -0
  406. package/src/symbol/shaping.test.ts +360 -0
  407. package/src/symbol/shaping.ts +911 -0
  408. package/src/symbol/symbol_layout.ts +739 -0
  409. package/src/symbol/symbol_size.ts +129 -0
  410. package/src/symbol/symbol_style_layer.test.ts +103 -0
  411. package/src/symbol/transform_text.ts +27 -0
  412. package/src/ui/anchor.ts +27 -0
  413. package/src/ui/camera.test.ts +2301 -0
  414. package/src/ui/camera.ts +1520 -0
  415. package/src/ui/control/attribution_control.test.ts +543 -0
  416. package/src/ui/control/attribution_control.ts +209 -0
  417. package/src/ui/control/control.ts +67 -0
  418. package/src/ui/control/fullscreen_control.test.ts +114 -0
  419. package/src/ui/control/fullscreen_control.ts +189 -0
  420. package/src/ui/control/geolocate_control.test.ts +619 -0
  421. package/src/ui/control/geolocate_control.ts +725 -0
  422. package/src/ui/control/logo_control.test.ts +88 -0
  423. package/src/ui/control/logo_control.ts +86 -0
  424. package/src/ui/control/navigation_control.test.ts +238 -0
  425. package/src/ui/control/navigation_control.ts +294 -0
  426. package/src/ui/control/scale_control.test.ts +52 -0
  427. package/src/ui/control/scale_control.ts +152 -0
  428. package/src/ui/control/terrain_control.test.ts +58 -0
  429. package/src/ui/control/terrain_control.ts +74 -0
  430. package/src/ui/default_locale.ts +25 -0
  431. package/src/ui/events.ts +758 -0
  432. package/src/ui/handler/box_zoom.test.ts +163 -0
  433. package/src/ui/handler/box_zoom.ts +171 -0
  434. package/src/ui/handler/click_zoom.ts +55 -0
  435. package/src/ui/handler/cooperative_gestures.test.ts +338 -0
  436. package/src/ui/handler/cooperative_gestures.ts +111 -0
  437. package/src/ui/handler/dblclick_zoom.test.ts +151 -0
  438. package/src/ui/handler/drag_handler.ts +174 -0
  439. package/src/ui/handler/drag_move_state_manager.ts +115 -0
  440. package/src/ui/handler/drag_pan.test.ts +487 -0
  441. package/src/ui/handler/drag_rotate.test.ts +859 -0
  442. package/src/ui/handler/handler_util.ts +10 -0
  443. package/src/ui/handler/keyboard.test.ts +235 -0
  444. package/src/ui/handler/keyboard.ts +212 -0
  445. package/src/ui/handler/map_event.test.ts +158 -0
  446. package/src/ui/handler/map_event.ts +161 -0
  447. package/src/ui/handler/mouse.ts +92 -0
  448. package/src/ui/handler/mouse_handler_interface.test.ts +111 -0
  449. package/src/ui/handler/mouse_rotate.test.ts +62 -0
  450. package/src/ui/handler/one_finger_touch_drag.ts +45 -0
  451. package/src/ui/handler/one_finger_touch_drag_handler_interface.test.ts +77 -0
  452. package/src/ui/handler/scroll_zoom.test.ts +382 -0
  453. package/src/ui/handler/scroll_zoom.ts +379 -0
  454. package/src/ui/handler/shim/dblclick_zoom.ts +64 -0
  455. package/src/ui/handler/shim/drag_pan.ts +104 -0
  456. package/src/ui/handler/shim/drag_rotate.ts +76 -0
  457. package/src/ui/handler/shim/two_fingers_touch.ts +112 -0
  458. package/src/ui/handler/tap_drag_zoom.test.ts +113 -0
  459. package/src/ui/handler/tap_drag_zoom.ts +112 -0
  460. package/src/ui/handler/tap_recognizer.ts +138 -0
  461. package/src/ui/handler/tap_zoom.ts +98 -0
  462. package/src/ui/handler/touch_pan.ts +115 -0
  463. package/src/ui/handler/transform-provider.ts +44 -0
  464. package/src/ui/handler/two_fingers_touch.test.ts +283 -0
  465. package/src/ui/handler/two_fingers_touch.ts +336 -0
  466. package/src/ui/handler_inertia.ts +157 -0
  467. package/src/ui/handler_manager.ts +637 -0
  468. package/src/ui/hash.test.ts +404 -0
  469. package/src/ui/hash.ts +153 -0
  470. package/src/ui/map.ts +3393 -0
  471. package/src/ui/map_tests/map_animation.test.ts +61 -0
  472. package/src/ui/map_tests/map_basic.test.ts +223 -0
  473. package/src/ui/map_tests/map_bounds.test.ts +123 -0
  474. package/src/ui/map_tests/map_calculate_camera_options.test.ts +113 -0
  475. package/src/ui/map_tests/map_canvas.test.ts +59 -0
  476. package/src/ui/map_tests/map_control.test.ts +61 -0
  477. package/src/ui/map_tests/map_disable_handlers.test.ts +38 -0
  478. package/src/ui/map_tests/map_events.test.ts +1001 -0
  479. package/src/ui/map_tests/map_feature_state.test.ts +421 -0
  480. package/src/ui/map_tests/map_images.test.ts +175 -0
  481. package/src/ui/map_tests/map_is_moving.test.ts +164 -0
  482. package/src/ui/map_tests/map_is_rotating.test.ts +62 -0
  483. package/src/ui/map_tests/map_is_zooming.test.ts +86 -0
  484. package/src/ui/map_tests/map_layer.test.ts +457 -0
  485. package/src/ui/map_tests/map_options.test.ts +64 -0
  486. package/src/ui/map_tests/map_pitch.test.ts +90 -0
  487. package/src/ui/map_tests/map_pixel_ratio.test.ts +75 -0
  488. package/src/ui/map_tests/map_query_rendered_features.test.ts +93 -0
  489. package/src/ui/map_tests/map_render.test.ts +90 -0
  490. package/src/ui/map_tests/map_request_render_frame.test.ts +51 -0
  491. package/src/ui/map_tests/map_resize.test.ts +120 -0
  492. package/src/ui/map_tests/map_style.test.ts +541 -0
  493. package/src/ui/map_tests/map_terrian.test.ts +104 -0
  494. package/src/ui/map_tests/map_webgl.test.ts +72 -0
  495. package/src/ui/map_tests/map_world_copies.test.ts +103 -0
  496. package/src/ui/map_tests/map_zoom.test.ts +95 -0
  497. package/src/ui/marker.test.ts +1149 -0
  498. package/src/ui/marker.ts +880 -0
  499. package/src/ui/popup.test.ts +827 -0
  500. package/src/ui/popup.ts +717 -0
  501. package/src/util/abort_error.ts +21 -0
  502. package/src/util/actor.test.ts +218 -0
  503. package/src/util/actor.ts +241 -0
  504. package/src/util/actor_messages.ts +149 -0
  505. package/src/util/ajax.test.ts +237 -0
  506. package/src/util/ajax.ts +297 -0
  507. package/src/util/browser.test.ts +23 -0
  508. package/src/util/browser.ts +63 -0
  509. package/src/util/color_ramp.test.ts +105 -0
  510. package/src/util/color_ramp.ts +56 -0
  511. package/src/util/config.ts +29 -0
  512. package/src/util/dictionary_coder.ts +23 -0
  513. package/src/util/dispatcher.test.ts +76 -0
  514. package/src/util/dispatcher.ts +78 -0
  515. package/src/util/dom.ts +135 -0
  516. package/src/util/evented.test.ts +231 -0
  517. package/src/util/evented.ts +178 -0
  518. package/src/util/find_pole_of_inaccessibility.test.ts +21 -0
  519. package/src/util/find_pole_of_inaccessibility.ts +130 -0
  520. package/src/util/geolocation_support.test.ts +43 -0
  521. package/src/util/geolocation_support.ts +23 -0
  522. package/src/util/global_worker_pool.ts +65 -0
  523. package/src/util/image.ts +150 -0
  524. package/src/util/image_request.test.ts +408 -0
  525. package/src/util/image_request.ts +246 -0
  526. package/src/util/intersection_tests.ts +206 -0
  527. package/src/util/is_char_in_unicode_block.test.ts +15 -0
  528. package/src/util/is_char_in_unicode_block.ts +345 -0
  529. package/src/util/offscreen_canvas_distorted.test.ts +13 -0
  530. package/src/util/offscreen_canvas_distorted.ts +39 -0
  531. package/src/util/offscreen_canvas_supported.ts +11 -0
  532. package/src/util/performance.ts +117 -0
  533. package/src/util/primitives.test.ts +140 -0
  534. package/src/util/primitives.ts +143 -0
  535. package/src/util/request_manager.ts +42 -0
  536. package/src/util/resolve_tokens.test.ts +45 -0
  537. package/src/util/resolve_tokens.ts +17 -0
  538. package/src/util/script_detection.test.ts +138 -0
  539. package/src/util/script_detection.ts +376 -0
  540. package/src/util/smart_wrap.test.ts +97 -0
  541. package/src/util/smart_wrap.ts +58 -0
  542. package/src/util/struct_array.test.ts +101 -0
  543. package/src/util/struct_array.ts +246 -0
  544. package/src/util/style.test.ts +34 -0
  545. package/src/util/style.ts +28 -0
  546. package/src/util/task_queue.test.ts +114 -0
  547. package/src/util/task_queue.ts +64 -0
  548. package/src/util/test/util.ts +185 -0
  549. package/src/util/throttle.test.ts +42 -0
  550. package/src/util/throttle.ts +28 -0
  551. package/src/util/throttled_invoker.ts +41 -0
  552. package/src/util/transferable_grid_index.test.ts +56 -0
  553. package/src/util/transferable_grid_index.ts +214 -0
  554. package/src/util/util.test.ts +414 -0
  555. package/src/util/util.ts +724 -0
  556. package/src/util/vectortile_to_geojson.ts +72 -0
  557. package/src/util/verticalize_punctuation.ts +110 -0
  558. package/src/util/web_worker.ts +16 -0
  559. package/src/util/web_worker_transfer.test.ts +153 -0
  560. package/src/util/web_worker_transfer.ts +254 -0
  561. package/src/util/webp_supported.ts +63 -0
  562. package/src/util/worker_pool.test.ts +43 -0
  563. package/src/util/worker_pool.ts +58 -0
  564. package/src/util/world_bounds.test.ts +59 -0
  565. package/src/util/world_bounds.ts +46 -0
@@ -0,0 +1,121 @@
1
+ import {config} from './util/config';
2
+ import {addProtocol, getWorkerCount, removeProtocol, getVersion} from './index';
3
+ import {getJSON, getArrayBuffer} from './util/ajax';
4
+ import {ImageRequest} from './util/image_request';
5
+ import {isAbortError} from './util/abort_error';
6
+
7
+ describe('maplibre', () => {
8
+ beforeEach(() => {
9
+ config.REGISTERED_PROTOCOLS = {};
10
+ });
11
+ afterAll(() => {
12
+ config.REGISTERED_PROTOCOLS = {};
13
+ });
14
+
15
+ test('workerCount', () => {
16
+ expect(typeof getWorkerCount() === 'number').toBeTruthy();
17
+ });
18
+
19
+ test('addProtocol', () => {
20
+ const protocolName = 'custom';
21
+ expect(Object.keys(config.REGISTERED_PROTOCOLS)).toHaveLength(0);
22
+
23
+ addProtocol(protocolName, async () => Promise.resolve({} as any));
24
+ expect(Object.keys(config.REGISTERED_PROTOCOLS)[0]).toBe(protocolName);
25
+ });
26
+
27
+ test('removeProtocol', () => {
28
+ const protocolName = 'custom';
29
+ expect(Object.keys(config.REGISTERED_PROTOCOLS)).toHaveLength(0);
30
+
31
+ addProtocol(protocolName, () => Promise.resolve({} as any));
32
+ expect(Object.keys(config.REGISTERED_PROTOCOLS)[0]).toBe(protocolName);
33
+
34
+ removeProtocol(protocolName);
35
+ expect(Object.keys(config.REGISTERED_PROTOCOLS)).toHaveLength(0);
36
+ });
37
+
38
+ test('#addProtocol - getJSON', async () => {
39
+ let protocolCallbackCalled = false;
40
+ addProtocol('custom', () => {
41
+ protocolCallbackCalled = true;
42
+ return Promise.resolve({data: {'foo': 'bar'}});
43
+ });
44
+ const response = await getJSON({url: 'custom://test/url/json'}, new AbortController());
45
+ expect(response.data).toEqual({foo: 'bar'});
46
+ expect(protocolCallbackCalled).toBeTruthy();
47
+ });
48
+
49
+ test('#addProtocol - getArrayBuffer', async () => {
50
+ let protocolCallbackCalled = false;
51
+ addProtocol('custom', () => {
52
+ protocolCallbackCalled = true;
53
+ return Promise.resolve({data: new ArrayBuffer(1), cacheControl: 'cache-control', expires: 'expires'});
54
+ });
55
+ const response = await getArrayBuffer({url: 'custom://test/url/getArrayBuffer'}, new AbortController());
56
+ expect(response.data).toBeInstanceOf(ArrayBuffer);
57
+ expect(response.cacheControl).toBe('cache-control');
58
+ expect(response.expires).toBe('expires');
59
+ expect(protocolCallbackCalled).toBeTruthy();
60
+ });
61
+
62
+ test('#addProtocol - returning ImageBitmap for getImage', async () => {
63
+ let protocolCallbackCalled = false;
64
+ addProtocol('custom', () => {
65
+ protocolCallbackCalled = true;
66
+ return Promise.resolve({data: new ImageBitmap()});
67
+ });
68
+
69
+ const img = await ImageRequest.getImage({url: 'custom://test/url/getImage'}, new AbortController());
70
+ expect(img.data).toBeInstanceOf(ImageBitmap);
71
+ expect(protocolCallbackCalled).toBeTruthy();
72
+ });
73
+
74
+ test('#addProtocol - returning HTMLImageElement for getImage', async () => {
75
+ let protocolCallbackCalled = false;
76
+ addProtocol('custom', () => {
77
+ protocolCallbackCalled = true;
78
+ return Promise.resolve({data: new Image()});
79
+ });
80
+ const img = await ImageRequest.getImage({url: 'custom://test/url/getImage'}, new AbortController());
81
+ expect(img.data).toBeInstanceOf(HTMLImageElement);
82
+ expect(protocolCallbackCalled).toBeTruthy();
83
+ });
84
+
85
+ test('#addProtocol - error', () => {
86
+ addProtocol('custom', () => Promise.reject(new Error('test error')));
87
+
88
+ getJSON({url: 'custom://test/url/json'}, new AbortController()).catch((error) => {
89
+ expect(error).toBeTruthy();
90
+ });
91
+ });
92
+
93
+ test('#addProtocol - Cancel request', async () => {
94
+ let cancelCalled = false;
95
+ addProtocol('custom', (_req, abortController) => {
96
+ abortController.signal.addEventListener('abort', () => {
97
+ cancelCalled = true;
98
+ });
99
+ return Promise.resolve({} as any);
100
+ });
101
+ const abortController = new AbortController();
102
+ const promise = getJSON({url: 'custom://test/url/json'}, abortController);
103
+ abortController.abort();
104
+ try {
105
+ await promise;
106
+ } catch (err) {
107
+ expect(isAbortError(err)).toBeTruthy();
108
+ }
109
+
110
+ expect(cancelCalled).toBeTruthy();
111
+ });
112
+
113
+ test('version', () => {
114
+ expect(typeof getVersion() === 'string').toBeTruthy();
115
+
116
+ // Semver regex: https://gist.github.com/jhorsman/62eeea161a13b80e39f5249281e17c39
117
+ // Backslashes are doubled to escape them
118
+ const regexp = new RegExp('^([0-9]+)\\.([0-9]+)\\.([0-9]+)(?:-([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+[0-9A-Za-z-]+)?$');
119
+ expect(regexp.test(getVersion())).toBeTruthy();
120
+ });
121
+ });
package/src/index.ts ADDED
@@ -0,0 +1,250 @@
1
+ import packageJSON from '../package.json' with {type: 'json'};
2
+ import {Map} from './ui/map';
3
+ import {NavigationControl} from './ui/control/navigation_control';
4
+ import {GeolocateControl} from './ui/control/geolocate_control';
5
+ import {AttributionControl} from './ui/control/attribution_control';
6
+ import {LogoControl} from './ui/control/logo_control';
7
+ import {ScaleControl} from './ui/control/scale_control';
8
+ import {FullscreenControl} from './ui/control/fullscreen_control';
9
+ import {TerrainControl} from './ui/control/terrain_control';
10
+ import {Popup} from './ui/popup';
11
+ import {Marker} from './ui/marker';
12
+ import {Style} from './style/style';
13
+ import {LngLat, LngLatLike} from './geo/lng_lat';
14
+ import {LngLatBounds, LngLatBoundsLike} from './geo/lng_lat_bounds';
15
+ import Point from '@mapbox/point-geometry';
16
+ import {MercatorCoordinate} from './geo/mercator_coordinate';
17
+ import {Evented} from './util/evented';
18
+ import {config} from './util/config';
19
+ import {rtlMainThreadPluginFactory} from './source/rtl_text_plugin_main_thread';
20
+ import {WorkerPool} from './util/worker_pool';
21
+ import {prewarm, clearPrewarmedResources} from './util/global_worker_pool';
22
+ import {AJAXError} from './util/ajax';
23
+ import {GeoJSONSource} from './source/geojson_source';
24
+ import {CanvasSource, CanvasSourceSpecification} from './source/canvas_source';
25
+ import {ImageSource} from './source/image_source';
26
+ import {RasterDEMTileSource} from './source/raster_dem_tile_source';
27
+ import {RasterTileSource} from './source/raster_tile_source';
28
+ import {VectorTileSource} from './source/vector_tile_source';
29
+ import {VideoSource} from './source/video_source';
30
+ import {Source, addSourceType} from './source/source';
31
+ import {addProtocol, removeProtocol} from './source/protocol_crud';
32
+ import {getGlobalDispatcher} from './util/dispatcher';
33
+ import {IControl} from './ui/control/control';
34
+ import {EdgeInsets, PaddingOptions} from './geo/edge_insets';
35
+ import {MapTerrainEvent, MapStyleImageMissingEvent, MapStyleDataEvent, MapSourceDataEvent, MapLibreZoomEvent, MapLibreEvent, MapLayerTouchEvent, MapLayerMouseEvent, MapLayerEventType, MapEventType, MapDataEvent, MapContextEvent, MapWheelEvent, MapTouchEvent, MapMouseEvent} from './ui/events';
36
+ import {BoxZoomHandler} from './ui/handler/box_zoom';
37
+ import {DragRotateHandler} from './ui/handler/shim/drag_rotate';
38
+ import {DragPanHandler} from './ui/handler/shim/drag_pan';
39
+ import {ScrollZoomHandler} from './ui/handler/scroll_zoom';
40
+ import {TwoFingersTouchZoomRotateHandler} from './ui/handler/shim/two_fingers_touch';
41
+ import {CustomLayerInterface} from './style/style_layer/custom_style_layer';
42
+ import {PointLike} from './ui/camera';
43
+ import {Hash} from './ui/hash';
44
+ import {CooperativeGesturesHandler} from './ui/handler/cooperative_gestures';
45
+ import {DoubleClickZoomHandler} from './ui/handler/shim/dblclick_zoom';
46
+ import {KeyboardHandler} from './ui/handler/keyboard';
47
+ import {TwoFingersTouchPitchHandler, TwoFingersTouchRotateHandler, TwoFingersTouchZoomHandler} from './ui/handler/two_fingers_touch';
48
+ import {MessageType} from './util/actor_messages';
49
+ const version = packageJSON.version;
50
+
51
+ export type * from '@maplibre/maplibre-gl-style-spec';
52
+
53
+ /**
54
+ * Sets the map's [RTL text plugin](https://www.mapbox.com/mapbox-gl-js/plugins/#mapbox-gl-rtl-text).
55
+ * Necessary for supporting the Arabic and Hebrew languages, which are written right-to-left.
56
+ *
57
+ * @param pluginURL - URL pointing to the Mapbox RTL text plugin source.
58
+ * @param lazy - If set to `true`, maplibre will defer loading the plugin until rtl text is encountered,
59
+ * rtl text will then be rendered only after the plugin finishes loading.
60
+ * @example
61
+ * ```ts
62
+ * setRTLTextPlugin('https://unpkg.com/@mapbox/mapbox-gl-rtl-text@0.2.3/mapbox-gl-rtl-text.js', false);
63
+ * ```
64
+ * @see [Add support for right-to-left scripts](https://maplibre.org/maplibre-gl-js/docs/examples/mapbox-gl-rtl-text/)
65
+ */
66
+ function setRTLTextPlugin(pluginURL: string, lazy: boolean): Promise<void> {
67
+ return rtlMainThreadPluginFactory().setRTLTextPlugin(pluginURL, lazy);
68
+ }
69
+ /**
70
+ * Gets the map's [RTL text plugin](https://www.mapbox.com/mapbox-gl-js/plugins/#mapbox-gl-rtl-text) status.
71
+ * The status can be `unavailable` (i.e. not requested or removed), `loading`, `loaded` or `error`.
72
+ * If the status is `loaded` and the plugin is requested again, an error will be thrown.
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * const pluginStatus = getRTLTextPluginStatus();
77
+ * ```
78
+ */
79
+ function getRTLTextPluginStatus(): string {
80
+ return rtlMainThreadPluginFactory().getRTLTextPluginStatus();
81
+ }
82
+ /**
83
+ * Returns the package version of the library
84
+ * @returns Package version of the library
85
+ */
86
+ function getVersion() { return version; }
87
+ /**
88
+ * Gets the number of web workers instantiated on a page with GL JS maps.
89
+ * By default, workerCount is 1 except for Safari browser where it is set to half the number of CPU cores (capped at 3).
90
+ * Make sure to set this property before creating any map instances for it to have effect.
91
+ *
92
+ * @returns Number of workers currently configured.
93
+ * @example
94
+ * ```ts
95
+ * const workerCount = getWorkerCount()
96
+ * ```
97
+ */
98
+ function getWorkerCount() { return WorkerPool.workerCount; }
99
+ /**
100
+ * Sets the number of web workers instantiated on a page with GL JS maps.
101
+ * By default, workerCount is 1 except for Safari browser where it is set to half the number of CPU cores (capped at 3).
102
+ * Make sure to set this property before creating any map instances for it to have effect.
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * setWorkerCount(2);
107
+ * ```
108
+ */
109
+ function setWorkerCount(count: number) { WorkerPool.workerCount = count; }
110
+ /**
111
+ * Gets and sets the maximum number of images (raster tiles, sprites, icons) to load in parallel,
112
+ * which affects performance in raster-heavy maps. 16 by default.
113
+ *
114
+ * @returns Number of parallel requests currently configured.
115
+ * @example
116
+ * ```ts
117
+ * getMaxParallelImageRequests();
118
+ * ```
119
+ */
120
+ function getMaxParallelImageRequests() { return config.MAX_PARALLEL_IMAGE_REQUESTS; }
121
+ /**
122
+ * Sets the maximum number of images (raster tiles, sprites, icons) to load in parallel,
123
+ * which affects performance in raster-heavy maps. 16 by default.
124
+ *
125
+ * @example
126
+ * ```ts
127
+ * setMaxParallelImageRequests(10);
128
+ * ```
129
+ */
130
+ function setMaxParallelImageRequests(numRequests: number) { config.MAX_PARALLEL_IMAGE_REQUESTS = numRequests; }
131
+ /**
132
+ * Gets the worker url
133
+ * @returns The worker url
134
+ */
135
+ function getWorkerUrl() { return config.WORKER_URL; }
136
+ /**
137
+ * Sets the worker url
138
+ */
139
+ function setWorkerUrl(value: string) { config.WORKER_URL = value; }
140
+ /**
141
+ * Allows loading javascript code in the worker thread.
142
+ * *Note* that since this is using some very internal classes and flows it is considered experimental and can break at any point.
143
+ *
144
+ * It can be useful for the following examples:
145
+ * 1. Using `self.addProtocol` in the worker thread - note that you might need to also register the protocol on the main thread.
146
+ * 2. Using `self.registerWorkerSource(workerSource: WorkerSource)` to register a worker source, which should come with `addSourceType` usually.
147
+ * 3. using `self.actor.registerMessageHandler` to override some internal worker operations
148
+ * @param workerUrl - the worker url e.g. a url of a javascript file to load in the worker
149
+ * @returns
150
+ *
151
+ * @example
152
+ * ```ts
153
+ * // below is an example of sending a js file to the worker to load the method there
154
+ * // Note that you'll need to call the global function `addProtocol` in the worker to register the protocol there.
155
+ * // add-protocol-worker.js
156
+ * async function loadFn(params, abortController) {
157
+ * const t = await fetch(`https://${params.url.split("://")[1]}`);
158
+ * if (t.status == 200) {
159
+ * const buffer = await t.arrayBuffer();
160
+ * return {data: buffer}
161
+ * } else {
162
+ * throw new Error(`Tile fetch error: ${t.statusText}`);
163
+ * }
164
+ * }
165
+ * self.addProtocol('custom', loadFn);
166
+ *
167
+ * // main.js
168
+ * importScriptInWorkers('add-protocol-worker.js');
169
+ * ```
170
+ */
171
+ function importScriptInWorkers(workerUrl: string) { return getGlobalDispatcher().broadcast(MessageType.importScript, workerUrl); }
172
+
173
+ export {
174
+ Map,
175
+ NavigationControl,
176
+ GeolocateControl,
177
+ AttributionControl,
178
+ LogoControl,
179
+ ScaleControl,
180
+ FullscreenControl,
181
+ TerrainControl,
182
+ Hash,
183
+ Popup,
184
+ Marker,
185
+ Style,
186
+ LngLat,
187
+ LngLatBounds,
188
+ Point,
189
+ MercatorCoordinate,
190
+ Evented,
191
+ AJAXError,
192
+ config,
193
+ CanvasSource,
194
+ GeoJSONSource,
195
+ ImageSource,
196
+ RasterDEMTileSource,
197
+ RasterTileSource,
198
+ VectorTileSource,
199
+ VideoSource,
200
+ EdgeInsets,
201
+ BoxZoomHandler,
202
+ DragRotateHandler,
203
+ DragPanHandler,
204
+ ScrollZoomHandler,
205
+ TwoFingersTouchZoomRotateHandler,
206
+ CooperativeGesturesHandler,
207
+ DoubleClickZoomHandler,
208
+ KeyboardHandler,
209
+ TwoFingersTouchZoomHandler,
210
+ TwoFingersTouchRotateHandler,
211
+ TwoFingersTouchPitchHandler,
212
+ MapWheelEvent,
213
+ MapTouchEvent,
214
+ MapMouseEvent,
215
+ type IControl,
216
+ type CustomLayerInterface,
217
+ type CanvasSourceSpecification,
218
+ type PaddingOptions,
219
+ type LngLatLike,
220
+ type PointLike,
221
+ type LngLatBoundsLike,
222
+ type Source,
223
+ type MapTerrainEvent,
224
+ type MapStyleImageMissingEvent,
225
+ type MapStyleDataEvent,
226
+ type MapSourceDataEvent,
227
+ type MapLibreZoomEvent,
228
+ type MapLibreEvent,
229
+ type MapLayerTouchEvent,
230
+ type MapLayerMouseEvent,
231
+ type MapLayerEventType,
232
+ type MapEventType,
233
+ type MapDataEvent,
234
+ type MapContextEvent,
235
+ setRTLTextPlugin,
236
+ getRTLTextPluginStatus,
237
+ prewarm,
238
+ clearPrewarmedResources,
239
+ getVersion,
240
+ getWorkerCount,
241
+ setWorkerCount,
242
+ getMaxParallelImageRequests,
243
+ setMaxParallelImageRequests,
244
+ getWorkerUrl,
245
+ setWorkerUrl,
246
+ addProtocol,
247
+ removeProtocol,
248
+ addSourceType,
249
+ importScriptInWorkers
250
+ };
@@ -0,0 +1,53 @@
1
+ import {StencilMode} from '../gl/stencil_mode';
2
+ import {DepthMode} from '../gl/depth_mode';
3
+ import {CullFaceMode} from '../gl/cull_face_mode';
4
+ import {
5
+ backgroundUniformValues,
6
+ backgroundPatternUniformValues
7
+ } from './program/background_program';
8
+
9
+ import type {Painter} from './painter';
10
+ import type {SourceCache} from '../source/source_cache';
11
+ import type {BackgroundStyleLayer} from '../style/style_layer/background_style_layer';
12
+ import {OverscaledTileID} from '../source/tile_id';
13
+
14
+ export function drawBackground(painter: Painter, sourceCache: SourceCache, layer: BackgroundStyleLayer, coords?: Array<OverscaledTileID>) {
15
+ const color = layer.paint.get('background-color');
16
+ const opacity = layer.paint.get('background-opacity');
17
+
18
+ if (opacity === 0) return;
19
+
20
+ const context = painter.context;
21
+ const gl = context.gl;
22
+ const transform = painter.transform;
23
+ const tileSize = transform.tileSize;
24
+ const image = layer.paint.get('background-pattern');
25
+ if (painter.isPatternMissing(image)) return;
26
+
27
+ const pass = (!image && color.a === 1 && opacity === 1 && painter.opaquePassEnabledForLayer()) ? 'opaque' : 'translucent';
28
+ if (painter.renderPass !== pass) return;
29
+
30
+ const stencilMode = StencilMode.disabled;
31
+ const depthMode = painter.depthModeForSublayer(0, pass === 'opaque' ? DepthMode.ReadWrite : DepthMode.ReadOnly);
32
+ const colorMode = painter.colorModeForRenderPass();
33
+ const program = painter.useProgram(image ? 'backgroundPattern' : 'background');
34
+ const tileIDs = coords ? coords : transform.coveringTiles({tileSize, terrain: painter.style.map.terrain});
35
+
36
+ if (image) {
37
+ context.activeTexture.set(gl.TEXTURE0);
38
+ painter.imageManager.bind(painter.context);
39
+ }
40
+
41
+ const crossfade = layer.getCrossfadeParameters();
42
+ for (const tileID of tileIDs) {
43
+ const matrix = coords ? tileID.posMatrix : painter.transform.calculatePosMatrix(tileID.toUnwrapped());
44
+ const uniformValues = image ?
45
+ backgroundPatternUniformValues(matrix, opacity, painter, image, {tileID, tileSize}, crossfade) :
46
+ backgroundUniformValues(matrix, opacity, color);
47
+ const terrainData = painter.style.map.terrain && painter.style.map.terrain.getTerrainData(tileID);
48
+
49
+ program.draw(context, gl.TRIANGLES, depthMode, stencilMode, colorMode, CullFaceMode.disabled,
50
+ uniformValues, terrainData, layer.id, painter.tileExtentBuffer,
51
+ painter.quadTriangleIndexBuffer, painter.tileExtentSegments);
52
+ }
53
+ }
@@ -0,0 +1,113 @@
1
+ import {StencilMode} from '../gl/stencil_mode';
2
+ import {DepthMode} from '../gl/depth_mode';
3
+ import {CullFaceMode} from '../gl/cull_face_mode';
4
+ import {Program} from './program';
5
+ import {circleUniformValues} from './program/circle_program';
6
+ import {SegmentVector} from '../data/segment';
7
+ import {OverscaledTileID} from '../source/tile_id';
8
+
9
+ import type {Painter} from './painter';
10
+ import type {SourceCache} from '../source/source_cache';
11
+ import type {CircleStyleLayer} from '../style/style_layer/circle_style_layer';
12
+ import type {CircleBucket} from '../data/bucket/circle_bucket';
13
+ import type {ProgramConfiguration} from '../data/program_configuration';
14
+ import type {VertexBuffer} from '../gl/vertex_buffer';
15
+ import type {IndexBuffer} from '../gl/index_buffer';
16
+ import type {UniformValues} from './uniform_binding';
17
+ import type {CircleUniformsType} from './program/circle_program';
18
+ import type {TerrainData} from '../render/terrain';
19
+
20
+ type TileRenderState = {
21
+ programConfiguration: ProgramConfiguration;
22
+ program: Program<any>;
23
+ layoutVertexBuffer: VertexBuffer;
24
+ indexBuffer: IndexBuffer;
25
+ uniformValues: UniformValues<CircleUniformsType>;
26
+ terrainData: TerrainData;
27
+ };
28
+
29
+ type SegmentsTileRenderState = {
30
+ segments: SegmentVector;
31
+ sortKey: number;
32
+ state: TileRenderState;
33
+ };
34
+
35
+ export function drawCircles(painter: Painter, sourceCache: SourceCache, layer: CircleStyleLayer, coords: Array<OverscaledTileID>) {
36
+ if (painter.renderPass !== 'translucent') return;
37
+
38
+ const opacity = layer.paint.get('circle-opacity');
39
+ const strokeWidth = layer.paint.get('circle-stroke-width');
40
+ const strokeOpacity = layer.paint.get('circle-stroke-opacity');
41
+ const sortFeaturesByKey = !layer.layout.get('circle-sort-key').isConstant();
42
+
43
+ if (opacity.constantOr(1) === 0 && (strokeWidth.constantOr(1) === 0 || strokeOpacity.constantOr(1) === 0)) {
44
+ return;
45
+ }
46
+
47
+ const context = painter.context;
48
+ const gl = context.gl;
49
+
50
+ const depthMode = painter.depthModeForSublayer(0, DepthMode.ReadOnly);
51
+ // Turn off stencil testing to allow circles to be drawn across boundaries,
52
+ // so that large circles are not clipped to tiles
53
+ const stencilMode = StencilMode.disabled;
54
+ const colorMode = painter.colorModeForRenderPass();
55
+
56
+ const segmentsRenderStates: Array<SegmentsTileRenderState> = [];
57
+
58
+ for (let i = 0; i < coords.length; i++) {
59
+ const coord = coords[i];
60
+
61
+ const tile = sourceCache.getTile(coord);
62
+ const bucket: CircleBucket<any> = (tile.getBucket(layer) as any);
63
+ if (!bucket) continue;
64
+
65
+ const programConfiguration = bucket.programConfigurations.get(layer.id);
66
+ const program = painter.useProgram('circle', programConfiguration);
67
+ const layoutVertexBuffer = bucket.layoutVertexBuffer;
68
+ const indexBuffer = bucket.indexBuffer;
69
+ const terrainData = painter.style.map.terrain && painter.style.map.terrain.getTerrainData(coord);
70
+ const uniformValues = circleUniformValues(painter, coord, tile, layer);
71
+
72
+ const state: TileRenderState = {
73
+ programConfiguration,
74
+ program,
75
+ layoutVertexBuffer,
76
+ indexBuffer,
77
+ uniformValues,
78
+ terrainData
79
+ };
80
+
81
+ if (sortFeaturesByKey) {
82
+ const oldSegments = bucket.segments.get();
83
+ for (const segment of oldSegments) {
84
+ segmentsRenderStates.push({
85
+ segments: new SegmentVector([segment]),
86
+ sortKey: (segment.sortKey as any as number),
87
+ state
88
+ });
89
+ }
90
+ } else {
91
+ segmentsRenderStates.push({
92
+ segments: bucket.segments,
93
+ sortKey: 0,
94
+ state
95
+ });
96
+ }
97
+
98
+ }
99
+
100
+ if (sortFeaturesByKey) {
101
+ segmentsRenderStates.sort((a, b) => a.sortKey - b.sortKey);
102
+ }
103
+
104
+ for (const segmentsState of segmentsRenderStates) {
105
+ const {programConfiguration, program, layoutVertexBuffer, indexBuffer, uniformValues, terrainData} = segmentsState.state;
106
+ const segments = segmentsState.segments;
107
+
108
+ program.draw(context, gl.TRIANGLES, depthMode, stencilMode, colorMode, CullFaceMode.disabled,
109
+ uniformValues, terrainData, layer.id,
110
+ layoutVertexBuffer, indexBuffer, segments,
111
+ layer.paint, painter.transform.zoom, programConfiguration);
112
+ }
113
+ }