@vcmap/core 6.2.4 → 6.3.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/dist/cesium.d.ts +12 -0
  2. package/dist/index.d.ts +13 -3
  3. package/dist/index.js +11 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/ol.d.ts +13 -2
  6. package/dist/src/category/category.d.ts +1 -1
  7. package/dist/src/category/category.js +3 -4
  8. package/dist/src/category/category.js.map +1 -1
  9. package/dist/src/cesium/cesium3DTileFeature.d.ts +1 -0
  10. package/dist/src/cesium/cesium3DTileFeature.js +14 -3
  11. package/dist/src/cesium/cesium3DTileFeature.js.map +1 -1
  12. package/dist/src/cesium/cesium3DTilePointFeature.js +2 -1
  13. package/dist/src/cesium/cesium3DTilePointFeature.js.map +1 -1
  14. package/dist/src/classRegistry.d.ts +7 -1
  15. package/dist/src/classRegistry.js.map +1 -1
  16. package/dist/src/featureProvider/abstractAttributeProvider.d.ts +62 -0
  17. package/dist/src/featureProvider/abstractAttributeProvider.js +129 -0
  18. package/dist/src/featureProvider/abstractAttributeProvider.js.map +1 -0
  19. package/dist/src/featureProvider/abstractFeatureProvider.d.ts +10 -19
  20. package/dist/src/featureProvider/abstractFeatureProvider.js +10 -42
  21. package/dist/src/featureProvider/abstractFeatureProvider.js.map +1 -1
  22. package/dist/src/featureProvider/compositeFeatureProvider.d.ts +27 -0
  23. package/dist/src/featureProvider/compositeFeatureProvider.js +53 -0
  24. package/dist/src/featureProvider/compositeFeatureProvider.js.map +1 -0
  25. package/dist/src/featureProvider/csvAttributeProvider.d.ts +41 -0
  26. package/dist/src/featureProvider/csvAttributeProvider.js +126 -0
  27. package/dist/src/featureProvider/csvAttributeProvider.js.map +1 -0
  28. package/dist/src/featureProvider/featureProviderFactory.d.ts +3 -0
  29. package/dist/src/featureProvider/featureProviderFactory.js +17 -0
  30. package/dist/src/featureProvider/featureProviderFactory.js.map +1 -0
  31. package/dist/src/featureProvider/i3sAttributeProvider.d.ts +7 -0
  32. package/dist/src/featureProvider/i3sAttributeProvider.js +43 -0
  33. package/dist/src/featureProvider/i3sAttributeProvider.js.map +1 -0
  34. package/dist/src/featureProvider/jsonAttributeProvider.d.ts +26 -0
  35. package/dist/src/featureProvider/jsonAttributeProvider.js +73 -0
  36. package/dist/src/featureProvider/jsonAttributeProvider.js.map +1 -0
  37. package/dist/src/featureProvider/tileProviderFeatureProvider.d.ts +4 -6
  38. package/dist/src/featureProvider/tileProviderFeatureProvider.js +9 -11
  39. package/dist/src/featureProvider/tileProviderFeatureProvider.js.map +1 -1
  40. package/dist/src/featureProvider/urlIdAttributeProvider.d.ts +28 -0
  41. package/dist/src/featureProvider/urlIdAttributeProvider.js +50 -0
  42. package/dist/src/featureProvider/urlIdAttributeProvider.js.map +1 -0
  43. package/dist/src/featureProvider/wmsFeatureProvider.d.ts +13 -4
  44. package/dist/src/featureProvider/wmsFeatureProvider.js +19 -9
  45. package/dist/src/featureProvider/wmsFeatureProvider.js.map +1 -1
  46. package/dist/src/interaction/coordinateAtPixel.js +4 -6
  47. package/dist/src/interaction/coordinateAtPixel.js.map +1 -1
  48. package/dist/src/interaction/ensurePositionInteraction.d.ts +14 -0
  49. package/dist/src/interaction/ensurePositionInteraction.js +42 -0
  50. package/dist/src/interaction/ensurePositionInteraction.js.map +1 -0
  51. package/dist/src/interaction/eventHandler.d.ts +3 -0
  52. package/dist/src/interaction/eventHandler.js +10 -1
  53. package/dist/src/interaction/eventHandler.js.map +1 -1
  54. package/dist/src/interaction/featureAtPixelInteraction.d.ts +15 -3
  55. package/dist/src/interaction/featureAtPixelInteraction.js +70 -18
  56. package/dist/src/interaction/featureAtPixelInteraction.js.map +1 -1
  57. package/dist/src/interaction/featureProviderInteraction.js +42 -26
  58. package/dist/src/interaction/featureProviderInteraction.js.map +1 -1
  59. package/dist/src/interaction/panoramaImageSelection.js +2 -2
  60. package/dist/src/interaction/panoramaImageSelection.js.map +1 -1
  61. package/dist/src/layer/cesium/cesiumTilesetCesiumImpl.d.ts +17 -9
  62. package/dist/src/layer/cesium/cesiumTilesetCesiumImpl.js +244 -165
  63. package/dist/src/layer/cesium/cesiumTilesetCesiumImpl.js.map +1 -1
  64. package/dist/src/layer/cesium/i3sCesiumImpl.d.ts +33 -0
  65. package/dist/src/layer/cesium/i3sCesiumImpl.js +107 -0
  66. package/dist/src/layer/cesium/i3sCesiumImpl.js.map +1 -0
  67. package/dist/src/layer/cesium/rasterLayerCesiumImpl.d.ts +3 -3
  68. package/dist/src/layer/cesium/rasterLayerCesiumImpl.js.map +1 -1
  69. package/dist/src/layer/cesium/terrainCesiumImpl.d.ts +3 -3
  70. package/dist/src/layer/cesium/terrainCesiumImpl.js.map +1 -1
  71. package/dist/src/layer/cesium/vcsTile/vcsQuadtreeTileProvider.js +2 -1
  72. package/dist/src/layer/cesium/vcsTile/vcsQuadtreeTileProvider.js.map +1 -1
  73. package/dist/src/layer/cesium/vectorContext.js +1 -1
  74. package/dist/src/layer/cesium/vectorContext.js.map +1 -1
  75. package/dist/src/layer/cesium/vectorRasterTileCesiumImpl.js +7 -6
  76. package/dist/src/layer/cesium/vectorRasterTileCesiumImpl.js.map +1 -1
  77. package/dist/src/layer/cesium/vectorTileImageryProvider.js +2 -2
  78. package/dist/src/layer/cesium/vectorTileImageryProvider.js.map +1 -1
  79. package/dist/src/layer/cesiumTilesetLayer.d.ts +10 -1
  80. package/dist/src/layer/cesiumTilesetLayer.js +33 -8
  81. package/dist/src/layer/cesiumTilesetLayer.js.map +1 -1
  82. package/dist/src/layer/cogLayer.d.ts +1 -1
  83. package/dist/src/layer/cogLayer.js +3 -4
  84. package/dist/src/layer/cogLayer.js.map +1 -1
  85. package/dist/src/layer/czmlLayer.d.ts +1 -1
  86. package/dist/src/layer/czmlLayer.js +4 -4
  87. package/dist/src/layer/czmlLayer.js.map +1 -1
  88. package/dist/src/layer/featureLayer.d.ts +1 -6
  89. package/dist/src/layer/featureLayer.js +3 -10
  90. package/dist/src/layer/featureLayer.js.map +1 -1
  91. package/dist/src/layer/featureStoreLayer.d.ts +3 -2
  92. package/dist/src/layer/featureStoreLayer.js +5 -5
  93. package/dist/src/layer/featureStoreLayer.js.map +1 -1
  94. package/dist/src/layer/flatGeobufLayer.d.ts +2 -0
  95. package/dist/src/layer/flatGeobufLayer.js +8 -0
  96. package/dist/src/layer/flatGeobufLayer.js.map +1 -1
  97. package/dist/src/layer/geojsonLayer.d.ts +1 -1
  98. package/dist/src/layer/geojsonLayer.js +5 -12
  99. package/dist/src/layer/geojsonLayer.js.map +1 -1
  100. package/dist/src/layer/i3sLayer.d.ts +80 -0
  101. package/dist/src/layer/i3sLayer.js +242 -0
  102. package/dist/src/layer/i3sLayer.js.map +1 -0
  103. package/dist/src/layer/layer.d.ts +29 -10
  104. package/dist/src/layer/layer.js +114 -34
  105. package/dist/src/layer/layer.js.map +1 -1
  106. package/dist/src/layer/layerSymbols.d.ts +4 -0
  107. package/dist/src/layer/layerSymbols.js +4 -0
  108. package/dist/src/layer/layerSymbols.js.map +1 -1
  109. package/dist/src/layer/openStreetMapLayer.d.ts +1 -1
  110. package/dist/src/layer/openStreetMapLayer.js +11 -6
  111. package/dist/src/layer/openStreetMapLayer.js.map +1 -1
  112. package/dist/src/layer/panorama/vectorPanoramaImpl.d.ts +38 -0
  113. package/dist/src/layer/panorama/vectorPanoramaImpl.js +164 -0
  114. package/dist/src/layer/panorama/vectorPanoramaImpl.js.map +1 -0
  115. package/dist/src/layer/panoramaDatasetLayer.d.ts +7 -3
  116. package/dist/src/layer/panoramaDatasetLayer.js +46 -20
  117. package/dist/src/layer/panoramaDatasetLayer.js.map +1 -1
  118. package/dist/src/layer/pointCloudLayer.d.ts +1 -5
  119. package/dist/src/layer/pointCloudLayer.js +3 -15
  120. package/dist/src/layer/pointCloudLayer.js.map +1 -1
  121. package/dist/src/layer/rasterLayer.d.ts +1 -1
  122. package/dist/src/layer/rasterLayer.js +4 -4
  123. package/dist/src/layer/rasterLayer.js.map +1 -1
  124. package/dist/src/layer/singleImageLayer.d.ts +1 -1
  125. package/dist/src/layer/singleImageLayer.js +3 -3
  126. package/dist/src/layer/singleImageLayer.js.map +1 -1
  127. package/dist/src/layer/terrainLayer.d.ts +1 -1
  128. package/dist/src/layer/terrainLayer.js +8 -6
  129. package/dist/src/layer/terrainLayer.js.map +1 -1
  130. package/dist/src/layer/tileProvider/flatGeobufTileProvider.d.ts +1 -1
  131. package/dist/src/layer/tileProvider/flatGeobufTileProvider.js +7 -5
  132. package/dist/src/layer/tileProvider/flatGeobufTileProvider.js.map +1 -1
  133. package/dist/src/layer/tileProvider/mvtTileProvider.d.ts +1 -1
  134. package/dist/src/layer/tileProvider/mvtTileProvider.js +6 -5
  135. package/dist/src/layer/tileProvider/mvtTileProvider.js.map +1 -1
  136. package/dist/src/layer/tileProvider/staticFeatureTileProvider.d.ts +1 -1
  137. package/dist/src/layer/tileProvider/staticFeatureTileProvider.js +3 -3
  138. package/dist/src/layer/tileProvider/staticFeatureTileProvider.js.map +1 -1
  139. package/dist/src/layer/tileProvider/staticGeojsonTileProvider.d.ts +1 -1
  140. package/dist/src/layer/tileProvider/staticGeojsonTileProvider.js +7 -4
  141. package/dist/src/layer/tileProvider/staticGeojsonTileProvider.js.map +1 -1
  142. package/dist/src/layer/tileProvider/tileProvider.d.ts +7 -1
  143. package/dist/src/layer/tileProvider/tileProvider.js +15 -5
  144. package/dist/src/layer/tileProvider/tileProvider.js.map +1 -1
  145. package/dist/src/layer/tileProvider/urlTemplateTileProvider.d.ts +1 -1
  146. package/dist/src/layer/tileProvider/urlTemplateTileProvider.js +3 -3
  147. package/dist/src/layer/tileProvider/urlTemplateTileProvider.js.map +1 -1
  148. package/dist/src/layer/tmsLayer.d.ts +1 -1
  149. package/dist/src/layer/tmsLayer.js +3 -10
  150. package/dist/src/layer/tmsLayer.js.map +1 -1
  151. package/dist/src/layer/vectorLayer.d.ts +11 -5
  152. package/dist/src/layer/vectorLayer.js +21 -10
  153. package/dist/src/layer/vectorLayer.js.map +1 -1
  154. package/dist/src/layer/vectorProperties.js +10 -1
  155. package/dist/src/layer/vectorProperties.js.map +1 -1
  156. package/dist/src/layer/vectorTileLayer.d.ts +14 -5
  157. package/dist/src/layer/vectorTileLayer.js +82 -31
  158. package/dist/src/layer/vectorTileLayer.js.map +1 -1
  159. package/dist/src/layer/wfsLayer.d.ts +1 -1
  160. package/dist/src/layer/wfsLayer.js +5 -4
  161. package/dist/src/layer/wfsLayer.js.map +1 -1
  162. package/dist/src/layer/wmsLayer.d.ts +4 -1
  163. package/dist/src/layer/wmsLayer.js +65 -36
  164. package/dist/src/layer/wmsLayer.js.map +1 -1
  165. package/dist/src/layer/wmtsLayer.d.ts +1 -1
  166. package/dist/src/layer/wmtsLayer.js +3 -10
  167. package/dist/src/layer/wmtsLayer.js.map +1 -1
  168. package/dist/src/map/baseCesiumMap.d.ts +69 -0
  169. package/dist/src/map/baseCesiumMap.js +393 -0
  170. package/dist/src/map/baseCesiumMap.js.map +1 -0
  171. package/dist/src/map/cesiumMap.d.ts +6 -98
  172. package/dist/src/map/cesiumMap.js +29 -266
  173. package/dist/src/map/cesiumMap.js.map +1 -1
  174. package/dist/src/map/obliqueMap.d.ts +1 -1
  175. package/dist/src/map/obliqueMap.js +14 -8
  176. package/dist/src/map/obliqueMap.js.map +1 -1
  177. package/dist/src/map/openlayersMap.d.ts +1 -1
  178. package/dist/src/map/openlayersMap.js +3 -4
  179. package/dist/src/map/openlayersMap.js.map +1 -1
  180. package/dist/src/map/panoramaMap.d.ts +17 -29
  181. package/dist/src/map/panoramaMap.js +56 -100
  182. package/dist/src/map/panoramaMap.js.map +1 -1
  183. package/dist/src/map/vcsMap.d.ts +15 -2
  184. package/dist/src/map/vcsMap.js +26 -3
  185. package/dist/src/map/vcsMap.js.map +1 -1
  186. package/dist/src/oblique/obliqueCollection.d.ts +1 -1
  187. package/dist/src/oblique/obliqueCollection.js +3 -4
  188. package/dist/src/oblique/obliqueCollection.js.map +1 -1
  189. package/dist/src/panorama/panoramaCameraController.d.ts +4 -0
  190. package/dist/src/panorama/panoramaCameraController.js +8 -0
  191. package/dist/src/panorama/panoramaCameraController.js.map +1 -1
  192. package/dist/src/panorama/panoramaImage.d.ts +10 -1
  193. package/dist/src/panorama/panoramaImage.js +15 -9
  194. package/dist/src/panorama/panoramaImage.js.map +1 -1
  195. package/dist/src/panorama/panoramaImageView.d.ts +6 -1
  196. package/dist/src/panorama/panoramaImageView.js +11 -2
  197. package/dist/src/panorama/panoramaImageView.js.map +1 -1
  198. package/dist/src/panorama/panoramaTileMaterial.d.ts +6 -0
  199. package/dist/src/panorama/panoramaTileMaterial.js +14 -0
  200. package/dist/src/panorama/panoramaTileMaterial.js.map +1 -1
  201. package/dist/src/panorama/panoramaTileMaterialFS.shader.d.ts +1 -1
  202. package/dist/src/panorama/panoramaTileMaterialFS.shader.js +16 -1
  203. package/dist/src/panorama/panoramaTileMaterialFS.shader.js.map +1 -1
  204. package/dist/src/panorama/panoramaTilePrimitiveCollection.d.ts +6 -0
  205. package/dist/src/panorama/panoramaTilePrimitiveCollection.js +28 -0
  206. package/dist/src/panorama/panoramaTilePrimitiveCollection.js.map +1 -1
  207. package/dist/src/style/declarativeStyleItem.js +7 -8
  208. package/dist/src/style/declarativeStyleItem.js.map +1 -1
  209. package/dist/src/util/clipping/clippingPolygonObject.d.ts +1 -1
  210. package/dist/src/util/clipping/clippingPolygonObject.js +3 -4
  211. package/dist/src/util/clipping/clippingPolygonObject.js.map +1 -1
  212. package/dist/src/util/displayQuality/displayQuality.js +4 -4
  213. package/dist/src/util/displayQuality/displayQuality.js.map +1 -1
  214. package/dist/src/util/editor/createFeatureSession.js +3 -1
  215. package/dist/src/util/editor/createFeatureSession.js.map +1 -1
  216. package/dist/src/util/editor/editFeaturesSession.js +9 -2
  217. package/dist/src/util/editor/editFeaturesSession.js.map +1 -1
  218. package/dist/src/util/editor/editGeometrySession.js +3 -1
  219. package/dist/src/util/editor/editGeometrySession.js.map +1 -1
  220. package/dist/src/util/editor/editorSessionHelpers.d.ts +3 -3
  221. package/dist/src/util/editor/editorSessionHelpers.js +4 -2
  222. package/dist/src/util/editor/editorSessionHelpers.js.map +1 -1
  223. package/dist/src/util/editor/interactions/creationSnapping.js +4 -1
  224. package/dist/src/util/editor/interactions/creationSnapping.js.map +1 -1
  225. package/dist/src/util/editor/interactions/ensureHandlerSelectionInteraction.js +2 -2
  226. package/dist/src/util/editor/interactions/ensureHandlerSelectionInteraction.js.map +1 -1
  227. package/dist/src/util/editor/interactions/layerSnapping.js +4 -1
  228. package/dist/src/util/editor/interactions/layerSnapping.js.map +1 -1
  229. package/dist/src/util/editor/interactions/mapInteractionController.js +12 -1
  230. package/dist/src/util/editor/interactions/mapInteractionController.js.map +1 -1
  231. package/dist/src/util/editor/interactions/translationSnapping.js +4 -2
  232. package/dist/src/util/editor/interactions/translationSnapping.js.map +1 -1
  233. package/dist/src/util/editor/selectFeaturesSession.js +1 -1
  234. package/dist/src/util/editor/selectFeaturesSession.js.map +1 -1
  235. package/dist/src/util/editor/transformation/create3DHandlers.d.ts +2 -2
  236. package/dist/src/util/editor/transformation/create3DHandlers.js.map +1 -1
  237. package/dist/src/util/editor/transformation/transformationHandler.js +5 -2
  238. package/dist/src/util/editor/transformation/transformationHandler.js.map +1 -1
  239. package/dist/src/util/editor/transformation/translateInteraction.js +2 -2
  240. package/dist/src/util/editor/transformation/translateInteraction.js.map +1 -1
  241. package/dist/src/util/fetch.d.ts +7 -0
  242. package/dist/src/util/fetch.js +7 -0
  243. package/dist/src/util/fetch.js.map +1 -1
  244. package/dist/src/util/flight/flightInstance.d.ts +1 -1
  245. package/dist/src/util/flight/flightInstance.js +3 -4
  246. package/dist/src/util/flight/flightInstance.js.map +1 -1
  247. package/dist/src/util/mapCollection.d.ts +5 -0
  248. package/dist/src/util/mapCollection.js +14 -0
  249. package/dist/src/util/mapCollection.js.map +1 -1
  250. package/dist/src/util/renderScreenshot.js +2 -3
  251. package/dist/src/util/renderScreenshot.js.map +1 -1
  252. package/dist/src/util/viewpoint.js +1 -1
  253. package/dist/src/util/viewpoint.js.map +1 -1
  254. package/dist/src/vcsApp.d.ts +2 -3
  255. package/dist/src/vcsApp.js.map +1 -1
  256. package/dist/src/vcsModuleHelpers.d.ts +5 -2
  257. package/dist/src/vcsModuleHelpers.js +27 -1
  258. package/dist/src/vcsModuleHelpers.js.map +1 -1
  259. package/dist/src/vcsObject.d.ts +2 -1
  260. package/dist/src/vcsObject.js +9 -1
  261. package/dist/src/vcsObject.js.map +1 -1
  262. package/dist/src/vectorCluster/vectorClusterGroup.d.ts +1 -1
  263. package/dist/src/vectorCluster/vectorClusterGroup.js +3 -4
  264. package/dist/src/vectorCluster/vectorClusterGroup.js.map +1 -1
  265. package/dist/src/vectorCluster/vectorClusterStyleItem.d.ts +1 -1
  266. package/dist/src/vectorCluster/vectorClusterStyleItem.js +3 -4
  267. package/dist/src/vectorCluster/vectorClusterStyleItem.js.map +1 -1
  268. package/dist/tests/unit/helpers/cesiumHelpers.d.ts +11 -1
  269. package/dist/tests/unit/helpers/cesiumHelpers.js +26 -3
  270. package/dist/tests/unit/helpers/cesiumHelpers.js.map +1 -1
  271. package/dist/tests/unit/helpers/panoramaHelpers.js +1 -1
  272. package/dist/tests/unit/helpers/panoramaHelpers.js.map +1 -1
  273. package/index.ts +30 -5
  274. package/package.json +3 -3
  275. package/src/category/category.ts +3 -4
  276. package/src/cesium/cesium.d.ts +12 -0
  277. package/src/cesium/cesium3DTileFeature.ts +23 -3
  278. package/src/cesium/cesium3DTilePointFeature.ts +3 -1
  279. package/src/classRegistry.ts +8 -3
  280. package/src/featureProvider/abstractAttributeProvider.ts +201 -0
  281. package/src/featureProvider/abstractFeatureProvider.ts +32 -51
  282. package/src/featureProvider/compositeFeatureProvider.ts +103 -0
  283. package/src/featureProvider/csvAttributeProvider.ts +186 -0
  284. package/src/featureProvider/featureProviderFactory.ts +31 -0
  285. package/src/featureProvider/i3sAttributeProvider.ts +60 -0
  286. package/src/featureProvider/jsonAttributeProvider.ts +109 -0
  287. package/src/featureProvider/tileProviderFeatureProvider.ts +13 -14
  288. package/src/featureProvider/urlIdAttributeProvider.ts +82 -0
  289. package/src/featureProvider/wmsFeatureProvider.ts +31 -10
  290. package/src/global.d.ts +2 -0
  291. package/src/interaction/coordinateAtPixel.ts +4 -6
  292. package/src/interaction/ensurePositionInteraction.ts +50 -0
  293. package/src/interaction/eventHandler.ts +12 -1
  294. package/src/interaction/featureAtPixelInteraction.ts +92 -32
  295. package/src/interaction/featureProviderInteraction.ts +59 -38
  296. package/src/interaction/panoramaImageSelection.ts +4 -2
  297. package/src/layer/cesium/cesiumTilesetCesiumImpl.ts +297 -197
  298. package/src/layer/cesium/i3sCesiumImpl.ts +141 -0
  299. package/src/layer/cesium/rasterLayerCesiumImpl.ts +3 -3
  300. package/src/layer/cesium/terrainCesiumImpl.ts +3 -3
  301. package/src/layer/cesium/vcsTile/vcsQuadtreeTileProvider.ts +4 -3
  302. package/src/layer/cesium/vectorContext.ts +1 -1
  303. package/src/layer/cesium/vectorRasterTileCesiumImpl.ts +7 -6
  304. package/src/layer/cesium/vectorTileImageryProvider.ts +2 -2
  305. package/src/layer/cesiumTilesetLayer.ts +60 -8
  306. package/src/layer/cogLayer.ts +5 -5
  307. package/src/layer/czmlLayer.ts +4 -4
  308. package/src/layer/featureLayer.ts +5 -16
  309. package/src/layer/featureStoreLayer.ts +11 -5
  310. package/src/layer/flatGeobufLayer.ts +12 -0
  311. package/src/layer/geojsonLayer.ts +5 -12
  312. package/src/layer/i3sLayer.ts +343 -0
  313. package/src/layer/layer.ts +178 -39
  314. package/src/layer/layerSymbols.ts +5 -0
  315. package/src/layer/openStreetMapLayer.ts +13 -6
  316. package/src/layer/panorama/vectorPanoramaImpl.ts +238 -0
  317. package/src/layer/panoramaDatasetLayer.ts +69 -23
  318. package/src/layer/pointCloudLayer.ts +5 -20
  319. package/src/layer/rasterLayer.ts +4 -4
  320. package/src/layer/singleImageLayer.ts +5 -3
  321. package/src/layer/terrainLayer.ts +9 -6
  322. package/src/layer/tileProvider/flatGeobufTileProvider.ts +9 -5
  323. package/src/layer/tileProvider/mvtTileProvider.ts +10 -5
  324. package/src/layer/tileProvider/staticFeatureTileProvider.ts +5 -3
  325. package/src/layer/tileProvider/staticGeojsonTileProvider.ts +11 -4
  326. package/src/layer/tileProvider/tileProvider.ts +18 -5
  327. package/src/layer/tileProvider/urlTemplateTileProvider.ts +7 -3
  328. package/src/layer/tmsLayer.ts +3 -10
  329. package/src/layer/vectorLayer.ts +29 -11
  330. package/src/layer/vectorProperties.ts +10 -1
  331. package/src/layer/vectorTileLayer.ts +141 -53
  332. package/src/layer/wfsLayer.ts +7 -4
  333. package/src/layer/wmsLayer.ts +80 -48
  334. package/src/layer/wmtsLayer.ts +3 -10
  335. package/src/map/baseCesiumMap.ts +600 -0
  336. package/src/map/cesiumMap.ts +99 -457
  337. package/src/map/obliqueMap.ts +16 -10
  338. package/src/map/openlayersMap.ts +5 -5
  339. package/src/map/panoramaMap.ts +74 -139
  340. package/src/map/vcsMap.ts +44 -4
  341. package/src/oblique/obliqueCollection.ts +5 -4
  342. package/src/ol/ol.d.ts +13 -2
  343. package/src/panorama/panoramaCameraController.ts +13 -1
  344. package/src/panorama/panoramaImage.ts +25 -8
  345. package/src/panorama/panoramaImageView.ts +29 -3
  346. package/src/panorama/panoramaTileMaterial.ts +20 -0
  347. package/src/panorama/panoramaTileMaterialFS.glsl +16 -1
  348. package/src/panorama/panoramaTilePrimitiveCollection.ts +34 -0
  349. package/src/style/declarativeStyleItem.ts +7 -9
  350. package/src/util/clipping/clippingPolygonObject.ts +5 -4
  351. package/src/util/displayQuality/displayQuality.ts +4 -4
  352. package/src/util/editor/createFeatureSession.ts +4 -1
  353. package/src/util/editor/editFeaturesSession.ts +14 -4
  354. package/src/util/editor/editGeometrySession.ts +3 -1
  355. package/src/util/editor/editorSessionHelpers.ts +5 -3
  356. package/src/util/editor/interactions/creationSnapping.ts +7 -1
  357. package/src/util/editor/interactions/ensureHandlerSelectionInteraction.ts +2 -2
  358. package/src/util/editor/interactions/layerSnapping.ts +7 -1
  359. package/src/util/editor/interactions/mapInteractionController.ts +12 -2
  360. package/src/util/editor/interactions/translationSnapping.ts +6 -4
  361. package/src/util/editor/selectFeaturesSession.ts +1 -1
  362. package/src/util/editor/transformation/create3DHandlers.ts +2 -2
  363. package/src/util/editor/transformation/transformationHandler.ts +5 -3
  364. package/src/util/editor/transformation/translateInteraction.ts +4 -4
  365. package/src/util/fetch.ts +7 -0
  366. package/src/util/flight/flightInstance.ts +6 -5
  367. package/src/util/mapCollection.ts +18 -0
  368. package/src/util/renderScreenshot.ts +4 -8
  369. package/src/util/viewpoint.ts +2 -2
  370. package/src/vcsApp.ts +7 -8
  371. package/src/vcsModuleHelpers.ts +62 -4
  372. package/src/vcsObject.ts +10 -1
  373. package/src/vectorCluster/vectorClusterGroup.ts +7 -4
  374. package/src/vectorCluster/vectorClusterStyleItem.ts +8 -4
  375. package/dist/src/map/cesiumMapHelpers.d.ts +0 -7
  376. package/dist/src/map/cesiumMapHelpers.js +0 -144
  377. package/dist/src/map/cesiumMapHelpers.js.map +0 -1
  378. package/src/map/cesiumMapHelpers.ts +0 -219
@@ -0,0 +1,129 @@
1
+ import Feature from 'ol/Feature.js';
2
+ import { v4 as uuid } from 'uuid';
3
+ import { is, oneOf } from '@vcsuite/check';
4
+ import { Cesium3DTileFeature, Cesium3DTilePointFeature, Entity, } from '@vcmap-cesium/engine';
5
+ import VcsObject from '../vcsObject.js';
6
+ import { featureExists } from '../layer/featureVisibility.js';
7
+ export const attributeProviderName = Symbol('attributeProvider');
8
+ export default class AbstractAttributeProvider extends VcsObject {
9
+ static get className() {
10
+ return 'AbstractAttributeProvider';
11
+ }
12
+ static getDefaultOptions() {
13
+ return {
14
+ ...VcsObject.getDefaultOptions(),
15
+ keyProperty: undefined,
16
+ };
17
+ }
18
+ _id = uuid();
19
+ keyProperty;
20
+ constructor(options) {
21
+ super(options);
22
+ this.keyProperty = options.keyProperty;
23
+ }
24
+ _setAttributesOnFeature(feature, attributes) {
25
+ if (feature instanceof Feature) {
26
+ feature.setProperties(attributes, true);
27
+ feature.changed();
28
+ }
29
+ else if (feature instanceof Cesium3DTileFeature ||
30
+ feature instanceof Cesium3DTilePointFeature) {
31
+ if (featureExists(feature)) {
32
+ for (const key of Object.keys(attributes)) {
33
+ feature.setAttribute(key, attributes[key]);
34
+ }
35
+ }
36
+ feature[attributeProviderName] = this._id;
37
+ }
38
+ else if (feature instanceof Entity) {
39
+ for (const key of Object.keys(attributes)) {
40
+ feature.properties?.addProperty(key, attributes[key]);
41
+ }
42
+ feature[attributeProviderName] = this._id;
43
+ }
44
+ }
45
+ _getKeyForFeature(feature) {
46
+ let key;
47
+ if (this.keyProperty) {
48
+ key = feature.getProperty(this.keyProperty);
49
+ }
50
+ else {
51
+ key = feature.getId();
52
+ }
53
+ if (is(key, oneOf(String, Number))) {
54
+ return String(key);
55
+ }
56
+ return undefined;
57
+ }
58
+ /**
59
+ * Optional bulk attribute retrieval for multiple keys.
60
+ * Can be implemented for optimal loading of data.
61
+ * Provides a webmercator extent to limit the lookup if needed.
62
+ * You MUST return a same length array as keys, with undefined for missing attributes.
63
+ * @param bulk - array of key and feature pairs to retrieve attributes for
64
+ * @param _extent - optional extent in webmercator to limit attribute lookup on certain providers.
65
+ * @protected
66
+ */
67
+ _getBulkAttributes(bulk,
68
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
69
+ _extent) {
70
+ return Promise.all(bulk.map(({ key, feature }) => this._getAttributes(key, feature)));
71
+ }
72
+ /**
73
+ * Augments a feature with attributes from the provider
74
+ * @param feature
75
+ */
76
+ async augmentFeature(feature) {
77
+ if (feature[attributeProviderName] !== this._id) {
78
+ const key = this._getKeyForFeature(feature);
79
+ if (key) {
80
+ const attributes = await this._getAttributes(key, feature);
81
+ if (attributes) {
82
+ this._setAttributesOnFeature(feature, attributes);
83
+ }
84
+ }
85
+ }
86
+ feature[attributeProviderName] = this._id;
87
+ }
88
+ /**
89
+ * Augments multiple features with attributes from the provider
90
+ * @param features
91
+ * @param extent - optional extent in webmercator to limit attribute lookup on certain providers.
92
+ */
93
+ async augmentFeatures(features, extent) {
94
+ const bulk = features
95
+ .map((feature) => {
96
+ if (feature[attributeProviderName] !== this._id) {
97
+ const key = this._getKeyForFeature(feature);
98
+ if (key) {
99
+ return { key, feature };
100
+ }
101
+ }
102
+ feature[attributeProviderName] = this._id;
103
+ return undefined;
104
+ })
105
+ .filter((i) => !!i);
106
+ if (bulk.length === 0) {
107
+ return;
108
+ }
109
+ const attributes = await this._getBulkAttributes(bulk, extent);
110
+ if (attributes.length !== bulk.length) {
111
+ this.getLogger().error(`Bulk attribute retrieval returned ${attributes.length} results for ${bulk.length} features.`);
112
+ return;
113
+ }
114
+ for (let i = 0; i < bulk.length; i++) {
115
+ const attr = attributes[i];
116
+ if (attr) {
117
+ this._setAttributesOnFeature(bulk[i].feature, attr);
118
+ }
119
+ }
120
+ }
121
+ toJSON(defaultOptions = AbstractAttributeProvider.getDefaultOptions()) {
122
+ const config = super.toJSON(defaultOptions);
123
+ if (this.keyProperty !== defaultOptions.keyProperty) {
124
+ config.keyProperty = this.keyProperty;
125
+ }
126
+ return config;
127
+ }
128
+ }
129
+ //# sourceMappingURL=abstractAttributeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstractAttributeProvider.js","sourceRoot":"","sources":["../../../src/featureProvider/abstractAttributeProvider.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,22 @@
1
1
  import type { Feature } from 'ol/index.js';
2
2
  import type { Coordinate } from 'ol/coordinate.js';
3
3
  import VcsObject, { type VcsObjectOptions } from '../vcsObject.js';
4
+ import { type VectorStyleItemOptions } from '../style/vectorStyleItem.js';
4
5
  import VectorProperties, { type VectorPropertiesOptions } from '../layer/vectorProperties.js';
5
6
  import type StyleItem from '../style/styleItem.js';
6
7
  import { type StyleItemOptions } from '../style/styleItem.js';
7
8
  import type VcsMap from '../map/vcsMap.js';
9
+ import type { DeclarativeStyleItemOptions } from '../style/declarativeStyleItem.js';
10
+ import type Layer from '../layer/layer.js';
8
11
  export type AbstractFeatureProviderOptions = VcsObjectOptions & {
9
12
  /**
10
13
  * the style to apply to features created by this feature provider
11
14
  */
12
- style?: StyleItemOptions | StyleItem;
15
+ style?: StyleItemOptions | VectorStyleItemOptions | DeclarativeStyleItemOptions | StyleItem;
13
16
  /**
14
17
  * the vector properties of the features. Allow picking is false by default.
15
18
  */
16
19
  vectorProperties?: VectorProperties | VectorPropertiesOptions;
17
- /**
18
- * show the resulting geometry in the map
19
- */
20
- showGeometry?: boolean;
21
20
  /**
22
21
  * can be used to constrict the featureProvider to specific mapTypes empty array means no restriction
23
22
  */
@@ -27,21 +26,13 @@ export type AbstractFeatureProviderOptions = VcsObjectOptions & {
27
26
  * An abstract class providing features for {@link Layer}s which cannot provide features directly, but can provide features for
28
27
  * a given location, e.g. WmsLayer with a getFeatureInfo configuration. In this case, a feature provider can be created for this layer.
29
28
  */
30
- declare class AbstractFeatureProvider extends VcsObject {
29
+ declare abstract class AbstractFeatureProvider extends VcsObject {
31
30
  static get className(): string;
32
31
  static getDefaultOptions(): AbstractFeatureProviderOptions;
33
- /**
34
- * The layer name of the associated layer
35
- */
36
- layerName: string;
37
32
  /**
38
33
  * The style set on features created by this provider
39
34
  */
40
35
  style: StyleItem | undefined;
41
- /**
42
- * Whether to show the geometry on selection.
43
- */
44
- showGeometry: boolean;
45
36
  /**
46
37
  * The vector properties assigned to features created by this provider
47
38
  */
@@ -50,7 +41,7 @@ declare class AbstractFeatureProvider extends VcsObject {
50
41
  * Map ClassNames Can be used to only apply this featureProvider to the specified maps
51
42
  */
52
43
  mapTypes: string[];
53
- constructor(layerName: string, options: AbstractFeatureProviderOptions);
44
+ constructor(options: AbstractFeatureProviderOptions);
54
45
  /**
55
46
  * checks if the featureProvider is supported for provided Map
56
47
  */
@@ -59,20 +50,20 @@ declare class AbstractFeatureProvider extends VcsObject {
59
50
  * Ensures the feature has an ID, applies all vectorProperties and adds style and the vcsLayerName
60
51
  * and isProvidedFeature symbols to the feature
61
52
  */
62
- getProviderFeature(feature: Feature): Feature;
53
+ getProviderFeature(feature: Feature, layer: Layer): Feature;
63
54
  /**
64
55
  * This method must be overwritten by any implementations. Before returning the array of features, be sure to use the getProviderFeature
65
56
  * on each feature to ensure all properties and symbols required by the VCM architecture
66
57
  * to handle your feature is called: (e.g. <code>return features.map(f => this.getProviderFeature(f)</code>);
67
58
  * @param coordinate - in mercator
68
59
  * @param resolution - meters per pixel for the given location
69
- * @param headers - headers optional request headers to be sent with the server request
60
+ * @param layer - the layer to request the features for
70
61
  */
71
- getFeaturesByCoordinate(_coordinate: Coordinate, _resolution: number, _headers?: Record<string, string>): Promise<Feature[]>;
62
+ abstract getFeaturesByCoordinate(coordinate: Coordinate, resolution: number, layer: Layer): Promise<Feature[]>;
72
63
  /**
73
64
  * Returns the object required to configure this feature provider.
74
65
  */
75
- toJSON(): AbstractFeatureProviderOptions;
66
+ toJSON(defaultOptions?: AbstractFeatureProviderOptions): AbstractFeatureProviderOptions;
76
67
  destroy(): void;
77
68
  }
78
69
  export default AbstractFeatureProvider;
@@ -1,9 +1,8 @@
1
1
  import { v4 as uuidv4 } from 'uuid';
2
- import { parseBoolean } from '@vcsuite/parsers';
3
2
  import { vcsLayerName } from '../layer/layerSymbols.js';
4
3
  import VcsObject from '../vcsObject.js';
5
4
  import { getStyleOrDefaultStyle } from '../style/styleFactory.js';
6
- import { defaultVectorStyle } from '../style/vectorStyleItem.js';
5
+ import { defaultVectorStyle, } from '../style/vectorStyleItem.js';
7
6
  import VectorProperties from '../layer/vectorProperties.js';
8
7
  import { isProvidedFeature } from './featureProviderSymbols.js';
9
8
  /**
@@ -19,22 +18,13 @@ class AbstractFeatureProvider extends VcsObject {
19
18
  vectorProperties: {
20
19
  allowPicking: false,
21
20
  },
22
- showGeometry: false,
23
21
  mapTypes: [],
24
22
  };
25
23
  }
26
- /**
27
- * The layer name of the associated layer
28
- */
29
- layerName;
30
24
  /**
31
25
  * The style set on features created by this provider
32
26
  */
33
27
  style;
34
- /**
35
- * Whether to show the geometry on selection.
36
- */
37
- showGeometry;
38
28
  /**
39
29
  * The vector properties assigned to features created by this provider
40
30
  */
@@ -43,14 +33,12 @@ class AbstractFeatureProvider extends VcsObject {
43
33
  * Map ClassNames Can be used to only apply this featureProvider to the specified maps
44
34
  */
45
35
  mapTypes;
46
- constructor(layerName, options) {
47
- super(options);
36
+ constructor(options) {
48
37
  const defaultOptions = AbstractFeatureProvider.getDefaultOptions();
49
- this.layerName = layerName;
38
+ super({ ...defaultOptions, ...options });
50
39
  this.style = options.style
51
40
  ? getStyleOrDefaultStyle(options.style, defaultVectorStyle.clone())
52
41
  : undefined;
53
- this.showGeometry = parseBoolean(options.showGeometry, defaultOptions.showGeometry);
54
42
  this.vectorProperties =
55
43
  options.vectorProperties instanceof VectorProperties
56
44
  ? options.vectorProperties
@@ -73,14 +61,14 @@ class AbstractFeatureProvider extends VcsObject {
73
61
  * Ensures the feature has an ID, applies all vectorProperties and adds style and the vcsLayerName
74
62
  * and isProvidedFeature symbols to the feature
75
63
  */
76
- getProviderFeature(feature) {
64
+ getProviderFeature(feature, layer) {
77
65
  if (!feature.getId()) {
78
66
  feature.setId(uuidv4());
79
67
  }
80
68
  if (this.style) {
81
69
  feature.setStyle(this.style.style);
82
70
  }
83
- feature[vcsLayerName] = this.layerName;
71
+ feature[vcsLayerName] = layer.name;
84
72
  feature[isProvidedFeature] = true;
85
73
  Object.entries(this.vectorProperties.getValues()).forEach(([key, value]) => {
86
74
  const olcsKey = `olcs_${key}`;
@@ -90,34 +78,11 @@ class AbstractFeatureProvider extends VcsObject {
90
78
  });
91
79
  return feature;
92
80
  }
93
- /**
94
- * This method must be overwritten by any implementations. Before returning the array of features, be sure to use the getProviderFeature
95
- * on each feature to ensure all properties and symbols required by the VCM architecture
96
- * to handle your feature is called: (e.g. <code>return features.map(f => this.getProviderFeature(f)</code>);
97
- * @param coordinate - in mercator
98
- * @param resolution - meters per pixel for the given location
99
- * @param headers - headers optional request headers to be sent with the server request
100
- */
101
- // eslint-disable-next-line class-methods-use-this
102
- getFeaturesByCoordinate(
103
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
104
- _coordinate,
105
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
106
- _resolution,
107
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
108
- _headers) {
109
- return Promise.resolve([]);
110
- }
111
81
  /**
112
82
  * Returns the object required to configure this feature provider.
113
83
  */
114
- toJSON() {
115
- const config = super.toJSON();
116
- const defaultOptions = AbstractFeatureProvider.getDefaultOptions();
117
- delete config.name; // the name is irrelevant, since its the layers name
118
- if (this.showGeometry !== defaultOptions.showGeometry) {
119
- config.showGeometry = this.showGeometry;
120
- }
84
+ toJSON(defaultOptions = AbstractFeatureProvider.getDefaultOptions()) {
85
+ const config = super.toJSON(defaultOptions);
121
86
  if (this.style) {
122
87
  config.style = this.style.toJSON();
123
88
  }
@@ -128,6 +93,9 @@ class AbstractFeatureProvider extends VcsObject {
128
93
  if (Object.keys(vectorPropertiesConfig).length > 0) {
129
94
  config.vectorProperties = vectorPropertiesConfig;
130
95
  }
96
+ if (this.mapTypes.length > 0) {
97
+ config.mapTypes = this.mapTypes.slice();
98
+ }
131
99
  return config;
132
100
  }
133
101
  destroy() {
@@ -1 +1 @@
1
- {"version":3,"file":"abstractFeatureProvider.js","sourceRoot":"","sources":["../../../src/featureProvider/abstractFeatureProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abstractFeatureProvider.js","sourceRoot":"","sources":["../../../src/featureProvider/abstractFeatureProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type Feature from 'ol/Feature.js';
2
+ import type { Extent } from 'ol/extent.js';
3
+ import type { AbstractFeatureProviderOptions } from './abstractFeatureProvider.js';
4
+ import AbstractFeatureProvider from './abstractFeatureProvider.js';
5
+ import AbstractAttributeProvider, { type AbstractAttributeProviderOptions, type AttributeProvider } from './abstractAttributeProvider.js';
6
+ import type { EventFeature } from '../interaction/abstractInteraction.js';
7
+ import type Layer from '../layer/layer.js';
8
+ export type CompositeFeatureProviderOptions = AbstractFeatureProviderOptions & {
9
+ featureProviders: (AbstractFeatureProviderOptions | AbstractFeatureProvider)[];
10
+ attributeProviders: (AbstractAttributeProviderOptions | AbstractAttributeProvider)[];
11
+ };
12
+ /**
13
+ * A feature provider that combines multiple feature providers and attribute providers.
14
+ * Used to combine multiple feature & attribute providers for a layer.
15
+ * The order of providers is important, as attributes are applied and
16
+ * features are returned in the order.
17
+ */
18
+ export default class CompositeFeatureProvider extends AbstractFeatureProvider implements AttributeProvider {
19
+ static get className(): string;
20
+ private _attributeProviders;
21
+ private _featureProviders;
22
+ constructor(options: CompositeFeatureProviderOptions);
23
+ augmentFeatures(features: EventFeature[], extent?: Extent): Promise<void>;
24
+ getFeaturesByCoordinate(coordinate: [number, number], resolution: number, layer: Layer): Promise<Feature[]>;
25
+ augmentFeature(feature: EventFeature): Promise<void>;
26
+ toJSON(defaultOptions?: AbstractFeatureProviderOptions): CompositeFeatureProviderOptions;
27
+ }
@@ -0,0 +1,53 @@
1
+ import AbstractFeatureProvider from './abstractFeatureProvider.js';
2
+ import AbstractAttributeProvider from './abstractAttributeProvider.js';
3
+ import { getProviderForOption } from './featureProviderFactory.js';
4
+ /**
5
+ * A feature provider that combines multiple feature providers and attribute providers.
6
+ * Used to combine multiple feature & attribute providers for a layer.
7
+ * The order of providers is important, as attributes are applied and
8
+ * features are returned in the order.
9
+ */
10
+ export default class CompositeFeatureProvider extends AbstractFeatureProvider {
11
+ static get className() {
12
+ return 'CompositeFeatureProvider';
13
+ }
14
+ _attributeProviders;
15
+ _featureProviders;
16
+ constructor(options) {
17
+ super(options);
18
+ this._featureProviders = options.featureProviders
19
+ .map(getProviderForOption)
20
+ .filter((fp) => fp instanceof AbstractFeatureProvider);
21
+ this._featureProviders.forEach((fp) => {
22
+ fp.mapTypes = this.mapTypes;
23
+ });
24
+ this._attributeProviders = options.attributeProviders
25
+ .map(getProviderForOption)
26
+ .filter((ap) => ap instanceof AbstractAttributeProvider);
27
+ }
28
+ async augmentFeatures(features, extent) {
29
+ for (const provider of this._attributeProviders) {
30
+ // order is relevant. second provider can overwrite or use attributes of first provider.
31
+ // eslint-disable-next-line no-await-in-loop
32
+ await provider.augmentFeatures(features, extent);
33
+ }
34
+ }
35
+ async getFeaturesByCoordinate(coordinate, resolution, layer) {
36
+ const featureArray = await Promise.all(this._featureProviders.map((fp) => fp.getFeaturesByCoordinate(coordinate, resolution, layer)));
37
+ return featureArray.flat();
38
+ }
39
+ async augmentFeature(feature) {
40
+ for (const provider of this._attributeProviders) {
41
+ // order is relevant. second provider can overwrite or use attributes of first provider.
42
+ // eslint-disable-next-line no-await-in-loop
43
+ await provider.augmentFeature(feature);
44
+ }
45
+ }
46
+ toJSON(defaultOptions = AbstractFeatureProvider.getDefaultOptions()) {
47
+ const config = super.toJSON(defaultOptions);
48
+ config.featureProviders = this._featureProviders.map((fp) => fp.toJSON());
49
+ config.attributeProviders = this._attributeProviders.map((ap) => ap.toJSON());
50
+ return config;
51
+ }
52
+ }
53
+ //# sourceMappingURL=compositeFeatureProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compositeFeatureProvider.js","sourceRoot":"","sources":["../../../src/featureProvider/compositeFeatureProvider.ts"],"names":[],"mappings":"AAGA,OAAO,uBAAuB,MAAM,8BAA8B,CAAC;AACnE,OAAO,yBAGN,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAanE;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,wBACnB,SAAQ,uBAAuB;IAG/B,MAAM,KAAK,SAAS;QAClB,OAAO,0BAA0B,CAAC;IACpC,CAAC;IAEO,mBAAmB,CAAsB;IAEzC,iBAAiB,CAA4B;IAErD,YAAY,OAAwC;QAClD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,gBAAgB;aAC9C,GAAG,CAAC,oBAAoB,CAAC;aACzB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,YAAY,uBAAuB,CAAC,CAAC;QAEzD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACpC,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,kBAAkB;aAClD,GAAG,CAAC,oBAAoB,CAAC;aACzB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,YAAY,yBAAyB,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,QAAwB,EACxB,MAAe;QAEf,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAChD,wFAAwF;YACxF,4CAA4C;YAC5C,MAAM,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,UAA4B,EAC5B,UAAkB,EAClB,KAAY;QAEZ,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAChC,EAAE,CAAC,uBAAuB,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,CAC1D,CACF,CAAC;QAEF,OAAO,YAAY,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAqB;QACxC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAChD,wFAAwF;YACxF,4CAA4C;YAC5C,MAAM,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,MAAM,CACJ,iBAAiD,uBAAuB,CAAC,iBAAiB,EAAE;QAE5F,MAAM,MAAM,GAA6C,KAAK,CAAC,MAAM,CACnE,cAAc,CACf,CAAC;QAEF,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1E,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAC9D,EAAE,CAAC,MAAM,EAAE,CACZ,CAAC;QACF,OAAO,MAAyC,CAAC;IACnD,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ import AbstractAttributeProvider, { type AbstractAttributeProviderOptions } from './abstractAttributeProvider.js';
2
+ export type CsvAttributeProviderOptions = AbstractAttributeProviderOptions & {
3
+ /**
4
+ * CSV data as a string or URL to fetch the CSV data from
5
+ */
6
+ data: string;
7
+ /**
8
+ * Delimiter used in the CSV data (default: ",")
9
+ */
10
+ delimiter?: string;
11
+ /**
12
+ * Column name to use as the feature ID (default: "id")
13
+ */
14
+ idColumn?: string;
15
+ /**
16
+ * Optional array of headers, if the data does not contain a header row. If not provided, the first row of the CSV data will be used as headers.
17
+ */
18
+ headers?: string[] | null;
19
+ httpHeaders?: Record<string, string>;
20
+ };
21
+ export default class CsvAttributeProvider extends AbstractAttributeProvider {
22
+ static get className(): string;
23
+ static getDefaultOptions(): Required<CsvAttributeProviderOptions>;
24
+ private _urlOrData;
25
+ private _data?;
26
+ private _delimiter;
27
+ private _idColumn;
28
+ private _headers?;
29
+ private _httpHeaders?;
30
+ private _dataLoadingPromise?;
31
+ constructor(options: CsvAttributeProviderOptions);
32
+ private _readLine;
33
+ private _loadData;
34
+ private _ensureDataLoaded;
35
+ protected _getAttributes(key: string): Promise<Record<string, unknown> | undefined>;
36
+ protected _getBulkAttributes(bulk: {
37
+ key: string;
38
+ }[]): Promise<(Record<string, unknown> | undefined)[]>;
39
+ toJSON(defaultOptions?: Required<CsvAttributeProviderOptions>): CsvAttributeProviderOptions;
40
+ destroy(): void;
41
+ }
@@ -0,0 +1,126 @@
1
+ import AbstractAttributeProvider from './abstractAttributeProvider.js';
2
+ import { featureProviderClassRegistry } from '../classRegistry.js';
3
+ import { getInitForUrl } from '../util/fetch.js';
4
+ export default class CsvAttributeProvider extends AbstractAttributeProvider {
5
+ static get className() {
6
+ return 'CsvAttributeProvider';
7
+ }
8
+ static getDefaultOptions() {
9
+ return {
10
+ name: '',
11
+ keyProperty: '',
12
+ properties: {},
13
+ type: CsvAttributeProvider.className,
14
+ data: '',
15
+ delimiter: ',',
16
+ idColumn: 'id',
17
+ headers: null,
18
+ httpHeaders: {},
19
+ };
20
+ }
21
+ _urlOrData;
22
+ _data;
23
+ _delimiter;
24
+ _idColumn;
25
+ _headers;
26
+ _httpHeaders;
27
+ _dataLoadingPromise;
28
+ constructor(options) {
29
+ const defaultOptions = CsvAttributeProvider.getDefaultOptions();
30
+ super({ ...defaultOptions, ...options });
31
+ this._urlOrData = options.data;
32
+ this._delimiter = options.delimiter ?? defaultOptions.delimiter;
33
+ this._idColumn = options.idColumn ?? defaultOptions.idColumn;
34
+ if (Array.isArray(options.headers)) {
35
+ this._headers = options.headers.slice();
36
+ }
37
+ if (options.httpHeaders) {
38
+ this._httpHeaders = structuredClone(options.httpHeaders);
39
+ }
40
+ }
41
+ _readLine(line) {
42
+ return line.split(this._delimiter).map((v) => v.trim());
43
+ }
44
+ async _loadData() {
45
+ if (this._data) {
46
+ return;
47
+ }
48
+ let csvData;
49
+ // Check if URL contains newline - if so, it's the data itself
50
+ if (this._urlOrData.includes('\n')) {
51
+ csvData = this._urlOrData;
52
+ }
53
+ else {
54
+ const init = getInitForUrl(this._urlOrData, this._httpHeaders);
55
+ const response = await fetch(this._urlOrData, init);
56
+ if (!response.ok) {
57
+ throw new Error(`Failed to fetch CSV data from ${this._urlOrData}`);
58
+ }
59
+ csvData = await response.text();
60
+ }
61
+ // Split by both Windows (\r\n) and Unix (\n) line endings
62
+ const lines = csvData.split(/\r?\n/).filter((line) => line.trim() !== '');
63
+ if (lines.length === 0) {
64
+ this.getLogger().warning('No CSV data available to load.');
65
+ this._data = new Map();
66
+ return;
67
+ }
68
+ const dataMap = new Map();
69
+ let startIndex = 0;
70
+ if (!this._headers) {
71
+ this._headers = this._readLine(lines[0]);
72
+ startIndex = 1;
73
+ }
74
+ for (let i = startIndex; i < lines.length; i++) {
75
+ const values = this._readLine(lines[i]);
76
+ const attributes = {};
77
+ for (let j = 0; j < values.length; j++) {
78
+ const key = this._headers[j] ?? `column_${j}`;
79
+ attributes[key] = values[j];
80
+ }
81
+ const id = attributes[this._idColumn];
82
+ if (typeof id === 'string') {
83
+ dataMap.set(id, attributes);
84
+ }
85
+ }
86
+ this._data = dataMap;
87
+ }
88
+ _ensureDataLoaded() {
89
+ if (!this._dataLoadingPromise) {
90
+ this._dataLoadingPromise = this._loadData();
91
+ }
92
+ return this._dataLoadingPromise;
93
+ }
94
+ async _getAttributes(key) {
95
+ await this._ensureDataLoaded();
96
+ return this._data?.get(key);
97
+ }
98
+ async _getBulkAttributes(bulk) {
99
+ await this._ensureDataLoaded();
100
+ return bulk.map(({ key }) => this._data?.get(key));
101
+ }
102
+ toJSON(defaultOptions = CsvAttributeProvider.getDefaultOptions()) {
103
+ const config = super.toJSON(defaultOptions);
104
+ config.data = this._urlOrData;
105
+ if (this._delimiter !== defaultOptions.delimiter) {
106
+ config.delimiter = this._delimiter;
107
+ }
108
+ if (this._idColumn !== defaultOptions.idColumn) {
109
+ config.idColumn = this._idColumn;
110
+ }
111
+ if (this._headers && this._headers.length > 0) {
112
+ config.headers = this._headers.slice();
113
+ }
114
+ if (this._httpHeaders) {
115
+ config.httpHeaders = structuredClone(this._httpHeaders);
116
+ }
117
+ return config;
118
+ }
119
+ destroy() {
120
+ this._data?.clear();
121
+ this._data = undefined;
122
+ super.destroy();
123
+ }
124
+ }
125
+ featureProviderClassRegistry.registerClass(CsvAttributeProvider.className, CsvAttributeProvider);
126
+ //# sourceMappingURL=csvAttributeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csvAttributeProvider.js","sourceRoot":"","sources":["../../../src/featureProvider/csvAttributeProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import AbstractFeatureProvider, { type AbstractFeatureProviderOptions } from './abstractFeatureProvider.js';
2
+ import AbstractAttributeProvider, { type AbstractAttributeProviderOptions } from './abstractAttributeProvider.js';
3
+ export declare function getProviderForOption(options?: AbstractFeatureProviderOptions | AbstractAttributeProviderOptions | AbstractAttributeProvider | AbstractFeatureProvider): AbstractFeatureProvider | AbstractAttributeProvider | undefined;
@@ -0,0 +1,17 @@
1
+ import AbstractFeatureProvider from './abstractFeatureProvider.js';
2
+ import AbstractAttributeProvider from './abstractAttributeProvider.js';
3
+ import { featureProviderClassRegistry } from '../classRegistry.js';
4
+ export function getProviderForOption(options) {
5
+ if (options instanceof AbstractFeatureProvider ||
6
+ options instanceof AbstractAttributeProvider) {
7
+ return options;
8
+ }
9
+ if (options?.type) {
10
+ const CTOR = featureProviderClassRegistry.getClass(options.type);
11
+ if (CTOR) {
12
+ return new CTOR(options);
13
+ }
14
+ }
15
+ return undefined;
16
+ }
17
+ //# sourceMappingURL=featureProviderFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"featureProviderFactory.js","sourceRoot":"","sources":["../../../src/featureProvider/featureProviderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,uBAEN,MAAM,8BAA8B,CAAC;AACtC,OAAO,yBAEN,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAEnE,MAAM,UAAU,oBAAoB,CAClC,OAI2B;IAE3B,IACE,OAAO,YAAY,uBAAuB;QAC1C,OAAO,YAAY,yBAAyB,EAC5C,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,4BAA4B,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjE,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}