@honua/react 0.0.20-alpha.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 (597) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +9 -0
  3. package/contract/analytics-sources.d.ts +149 -0
  4. package/contract/analytics-sources.d.ts.map +1 -0
  5. package/contract/analytics-sources.js +235 -0
  6. package/contract/edit-session.d.ts +203 -0
  7. package/contract/edit-session.d.ts.map +1 -0
  8. package/contract/edit-session.js +760 -0
  9. package/contract/edit-sketch.d.ts +91 -0
  10. package/contract/edit-sketch.d.ts.map +1 -0
  11. package/contract/edit-sketch.js +281 -0
  12. package/contract/index.d.ts +61 -0
  13. package/contract/index.d.ts.map +1 -0
  14. package/contract/index.js +51 -0
  15. package/contract/jobs.d.ts +149 -0
  16. package/contract/jobs.d.ts.map +1 -0
  17. package/contract/jobs.js +40 -0
  18. package/contract/source.d.ts +423 -0
  19. package/contract/source.d.ts.map +1 -0
  20. package/contract/source.js +3802 -0
  21. package/contract/spatial-aggregation.d.ts +336 -0
  22. package/contract/spatial-aggregation.d.ts.map +1 -0
  23. package/contract/spatial-aggregation.js +298 -0
  24. package/contract/temporal.d.ts +455 -0
  25. package/contract/temporal.d.ts.map +1 -0
  26. package/contract/temporal.js +146 -0
  27. package/contract/tiles.d.ts +370 -0
  28. package/contract/tiles.d.ts.map +1 -0
  29. package/contract/tiles.js +519 -0
  30. package/contract/types.d.ts +665 -0
  31. package/contract/types.d.ts.map +1 -0
  32. package/contract/types.js +175 -0
  33. package/contract/widget-source.d.ts +205 -0
  34. package/contract/widget-source.d.ts.map +1 -0
  35. package/contract/widget-source.js +1473 -0
  36. package/control-plane/client.d.ts +95 -0
  37. package/control-plane/client.d.ts.map +1 -0
  38. package/control-plane/client.js +374 -0
  39. package/control-plane/index.d.ts +18 -0
  40. package/control-plane/index.d.ts.map +1 -0
  41. package/control-plane/index.js +14 -0
  42. package/control-plane/types.d.ts +233 -0
  43. package/control-plane/types.d.ts.map +1 -0
  44. package/control-plane/types.js +7 -0
  45. package/core/batch.d.ts +37 -0
  46. package/core/batch.d.ts.map +1 -0
  47. package/core/batch.js +79 -0
  48. package/core/cache-state.d.ts +79 -0
  49. package/core/cache-state.d.ts.map +1 -0
  50. package/core/cache-state.js +87 -0
  51. package/core/client.d.ts +577 -0
  52. package/core/client.d.ts.map +1 -0
  53. package/core/client.js +1664 -0
  54. package/core/compatibility.d.ts +18 -0
  55. package/core/compatibility.d.ts.map +1 -0
  56. package/core/compatibility.js +245 -0
  57. package/core/errors.d.ts +107 -0
  58. package/core/errors.d.ts.map +1 -0
  59. package/core/errors.js +156 -0
  60. package/core/esri-geojson.d.ts +66 -0
  61. package/core/esri-geojson.d.ts.map +1 -0
  62. package/core/esri-geojson.js +363 -0
  63. package/core/geoservices.d.ts +34 -0
  64. package/core/geoservices.d.ts.map +1 -0
  65. package/core/geoservices.js +434 -0
  66. package/core/grpc-adapter.d.ts +23 -0
  67. package/core/grpc-adapter.d.ts.map +1 -0
  68. package/core/grpc-adapter.js +688 -0
  69. package/core/odata.d.ts +347 -0
  70. package/core/odata.d.ts.map +1 -0
  71. package/core/odata.js +913 -0
  72. package/core/ogc-conformance.d.ts +35 -0
  73. package/core/ogc-conformance.d.ts.map +1 -0
  74. package/core/ogc-conformance.js +134 -0
  75. package/core/ogc-features.d.ts +23 -0
  76. package/core/ogc-features.d.ts.map +1 -0
  77. package/core/ogc-features.js +114 -0
  78. package/core/ogc-maps.d.ts +49 -0
  79. package/core/ogc-maps.d.ts.map +1 -0
  80. package/core/ogc-maps.js +126 -0
  81. package/core/ogc-processes.d.ts +118 -0
  82. package/core/ogc-processes.d.ts.map +1 -0
  83. package/core/ogc-processes.js +423 -0
  84. package/core/ogc-records.d.ts +75 -0
  85. package/core/ogc-records.d.ts.map +1 -0
  86. package/core/ogc-records.js +251 -0
  87. package/core/ogc-tiles.d.ts +125 -0
  88. package/core/ogc-tiles.d.ts.map +1 -0
  89. package/core/ogc-tiles.js +183 -0
  90. package/core/path-utils.d.ts +69 -0
  91. package/core/path-utils.d.ts.map +1 -0
  92. package/core/path-utils.js +123 -0
  93. package/core/pbf-decoder.d.ts +39 -0
  94. package/core/pbf-decoder.d.ts.map +1 -0
  95. package/core/pbf-decoder.js +702 -0
  96. package/core/process-runner.d.ts +104 -0
  97. package/core/process-runner.d.ts.map +1 -0
  98. package/core/process-runner.js +315 -0
  99. package/core/protocol-transport.d.ts +76 -0
  100. package/core/protocol-transport.d.ts.map +1 -0
  101. package/core/protocol-transport.js +15 -0
  102. package/core/query-builder.d.ts +261 -0
  103. package/core/query-builder.d.ts.map +1 -0
  104. package/core/query-builder.js +538 -0
  105. package/core/request-pipeline.d.ts +88 -0
  106. package/core/request-pipeline.d.ts.map +1 -0
  107. package/core/request-pipeline.js +273 -0
  108. package/core/spatial-filter.d.ts +93 -0
  109. package/core/spatial-filter.d.ts.map +1 -0
  110. package/core/spatial-filter.js +153 -0
  111. package/core/stac.d.ts +55 -0
  112. package/core/stac.d.ts.map +1 -0
  113. package/core/stac.js +229 -0
  114. package/core/surfaces.d.ts +527 -0
  115. package/core/surfaces.d.ts.map +1 -0
  116. package/core/surfaces.js +1917 -0
  117. package/core/terrain-elevation.d.ts +114 -0
  118. package/core/terrain-elevation.d.ts.map +1 -0
  119. package/core/terrain-elevation.js +150 -0
  120. package/core/types.d.ts +1355 -0
  121. package/core/types.d.ts.map +1 -0
  122. package/core/types.js +13 -0
  123. package/core/wfs-capabilities.d.ts +143 -0
  124. package/core/wfs-capabilities.d.ts.map +1 -0
  125. package/core/wfs-capabilities.js +478 -0
  126. package/core/wfs-filter.d.ts +118 -0
  127. package/core/wfs-filter.d.ts.map +1 -0
  128. package/core/wfs-filter.js +634 -0
  129. package/core/wfs.d.ts +219 -0
  130. package/core/wfs.d.ts.map +1 -0
  131. package/core/wfs.js +406 -0
  132. package/core/wire-shared.d.ts +32 -0
  133. package/core/wire-shared.d.ts.map +1 -0
  134. package/core/wire-shared.js +76 -0
  135. package/core/wms-axis.d.ts +36 -0
  136. package/core/wms-axis.d.ts.map +1 -0
  137. package/core/wms-axis.js +73 -0
  138. package/core/wms-capabilities.d.ts +110 -0
  139. package/core/wms-capabilities.d.ts.map +1 -0
  140. package/core/wms-capabilities.js +559 -0
  141. package/core/wms-types.d.ts +128 -0
  142. package/core/wms-types.d.ts.map +1 -0
  143. package/core/wms-types.js +32 -0
  144. package/core/wms.d.ts +144 -0
  145. package/core/wms.d.ts.map +1 -0
  146. package/core/wms.js +338 -0
  147. package/core/wmts-capabilities.d.ts +82 -0
  148. package/core/wmts-capabilities.d.ts.map +1 -0
  149. package/core/wmts-capabilities.js +402 -0
  150. package/core/wmts.d.ts +103 -0
  151. package/core/wmts.d.ts.map +1 -0
  152. package/core/wmts.js +332 -0
  153. package/core/xml-text.d.ts +20 -0
  154. package/core/xml-text.d.ts.map +1 -0
  155. package/core/xml-text.js +85 -0
  156. package/esri-compat/basemap-gallery.d.ts +38 -0
  157. package/esri-compat/basemap-gallery.d.ts.map +1 -0
  158. package/esri-compat/basemap-gallery.js +159 -0
  159. package/esri-compat/basemap-layer-list.d.ts +35 -0
  160. package/esri-compat/basemap-layer-list.d.ts.map +1 -0
  161. package/esri-compat/basemap-layer-list.js +139 -0
  162. package/esri-compat/basemap.d.ts +32 -0
  163. package/esri-compat/basemap.d.ts.map +1 -0
  164. package/esri-compat/basemap.js +84 -0
  165. package/esri-compat/bookmarks.d.ts +36 -0
  166. package/esri-compat/bookmarks.d.ts.map +1 -0
  167. package/esri-compat/bookmarks.js +108 -0
  168. package/esri-compat/class-breaks-renderer.d.ts +50 -0
  169. package/esri-compat/class-breaks-renderer.d.ts.map +1 -0
  170. package/esri-compat/class-breaks-renderer.js +164 -0
  171. package/esri-compat/color.d.ts +22 -0
  172. package/esri-compat/color.d.ts.map +1 -0
  173. package/esri-compat/color.js +106 -0
  174. package/esri-compat/controls.d.ts +174 -0
  175. package/esri-compat/controls.d.ts.map +1 -0
  176. package/esri-compat/controls.js +479 -0
  177. package/esri-compat/coordinate-conversion.d.ts +41 -0
  178. package/esri-compat/coordinate-conversion.d.ts.map +1 -0
  179. package/esri-compat/coordinate-conversion.js +125 -0
  180. package/esri-compat/directions.d.ts +45 -0
  181. package/esri-compat/directions.d.ts.map +1 -0
  182. package/esri-compat/directions.js +123 -0
  183. package/esri-compat/editor.d.ts +47 -0
  184. package/esri-compat/editor.d.ts.map +1 -0
  185. package/esri-compat/editor.js +170 -0
  186. package/esri-compat/esri-config.d.ts +16 -0
  187. package/esri-compat/esri-config.d.ts.map +1 -0
  188. package/esri-compat/esri-config.js +23 -0
  189. package/esri-compat/esri-request.d.ts +17 -0
  190. package/esri-compat/esri-request.d.ts.map +1 -0
  191. package/esri-compat/esri-request.js +127 -0
  192. package/esri-compat/event-bus.d.ts +106 -0
  193. package/esri-compat/event-bus.d.ts.map +1 -0
  194. package/esri-compat/event-bus.js +90 -0
  195. package/esri-compat/expand.d.ts +36 -0
  196. package/esri-compat/expand.d.ts.map +1 -0
  197. package/esri-compat/expand.js +97 -0
  198. package/esri-compat/extent.d.ts +43 -0
  199. package/esri-compat/extent.d.ts.map +1 -0
  200. package/esri-compat/extent.js +140 -0
  201. package/esri-compat/feature-filter.d.ts +55 -0
  202. package/esri-compat/feature-filter.d.ts.map +1 -0
  203. package/esri-compat/feature-filter.js +109 -0
  204. package/esri-compat/feature-form.d.ts +64 -0
  205. package/esri-compat/feature-form.d.ts.map +1 -0
  206. package/esri-compat/feature-form.js +137 -0
  207. package/esri-compat/feature-layer.d.ts +173 -0
  208. package/esri-compat/feature-layer.d.ts.map +1 -0
  209. package/esri-compat/feature-layer.js +661 -0
  210. package/esri-compat/feature-set.d.ts +32 -0
  211. package/esri-compat/feature-set.d.ts.map +1 -0
  212. package/esri-compat/feature-set.js +80 -0
  213. package/esri-compat/feature-table.d.ts +141 -0
  214. package/esri-compat/feature-table.d.ts.map +1 -0
  215. package/esri-compat/feature-table.js +500 -0
  216. package/esri-compat/feature-templates.d.ts +41 -0
  217. package/esri-compat/feature-templates.d.ts.map +1 -0
  218. package/esri-compat/feature-templates.js +97 -0
  219. package/esri-compat/feature.d.ts +33 -0
  220. package/esri-compat/feature.d.ts.map +1 -0
  221. package/esri-compat/feature.js +83 -0
  222. package/esri-compat/geojson-layer.d.ts +86 -0
  223. package/esri-compat/geojson-layer.d.ts.map +1 -0
  224. package/esri-compat/geojson-layer.js +191 -0
  225. package/esri-compat/geometry-engine.d.ts +107 -0
  226. package/esri-compat/geometry-engine.d.ts.map +1 -0
  227. package/esri-compat/geometry-engine.js +266 -0
  228. package/esri-compat/graphic.d.ts +46 -0
  229. package/esri-compat/graphic.d.ts.map +1 -0
  230. package/esri-compat/graphic.js +103 -0
  231. package/esri-compat/graphics-layer.d.ts +49 -0
  232. package/esri-compat/graphics-layer.d.ts.map +1 -0
  233. package/esri-compat/graphics-layer.js +185 -0
  234. package/esri-compat/group-layer.d.ts +48 -0
  235. package/esri-compat/group-layer.d.ts.map +1 -0
  236. package/esri-compat/group-layer.js +212 -0
  237. package/esri-compat/identify.d.ts +71 -0
  238. package/esri-compat/identify.d.ts.map +1 -0
  239. package/esri-compat/identify.js +299 -0
  240. package/esri-compat/identity-manager.d.ts +31 -0
  241. package/esri-compat/identity-manager.d.ts.map +1 -0
  242. package/esri-compat/identity-manager.js +115 -0
  243. package/esri-compat/imagery-layer.d.ts +78 -0
  244. package/esri-compat/imagery-layer.d.ts.map +1 -0
  245. package/esri-compat/imagery-layer.js +167 -0
  246. package/esri-compat/label-class.d.ts +31 -0
  247. package/esri-compat/label-class.d.ts.map +1 -0
  248. package/esri-compat/label-class.js +102 -0
  249. package/esri-compat/layer-list.d.ts +77 -0
  250. package/esri-compat/layer-list.d.ts.map +1 -0
  251. package/esri-compat/layer-list.js +342 -0
  252. package/esri-compat/legend.d.ts +53 -0
  253. package/esri-compat/legend.d.ts.map +1 -0
  254. package/esri-compat/legend.js +254 -0
  255. package/esri-compat/map-image-layer.d.ts +162 -0
  256. package/esri-compat/map-image-layer.d.ts.map +1 -0
  257. package/esri-compat/map-image-layer.js +709 -0
  258. package/esri-compat/map-view.d.ts +323 -0
  259. package/esri-compat/map-view.d.ts.map +1 -0
  260. package/esri-compat/map-view.js +1175 -0
  261. package/esri-compat/map.d.ts +47 -0
  262. package/esri-compat/map.d.ts.map +1 -0
  263. package/esri-compat/map.js +209 -0
  264. package/esri-compat/measurement-2d.d.ts +61 -0
  265. package/esri-compat/measurement-2d.d.ts.map +1 -0
  266. package/esri-compat/measurement-2d.js +184 -0
  267. package/esri-compat/measurement.d.ts +45 -0
  268. package/esri-compat/measurement.d.ts.map +1 -0
  269. package/esri-compat/measurement.js +193 -0
  270. package/esri-compat/oauth-info.d.ts +35 -0
  271. package/esri-compat/oauth-info.d.ts.map +1 -0
  272. package/esri-compat/oauth-info.js +115 -0
  273. package/esri-compat/picture-marker-symbol.d.ts +35 -0
  274. package/esri-compat/picture-marker-symbol.d.ts.map +1 -0
  275. package/esri-compat/picture-marker-symbol.js +126 -0
  276. package/esri-compat/point.d.ts +31 -0
  277. package/esri-compat/point.d.ts.map +1 -0
  278. package/esri-compat/point.js +102 -0
  279. package/esri-compat/polygon.d.ts +31 -0
  280. package/esri-compat/polygon.d.ts.map +1 -0
  281. package/esri-compat/polygon.js +107 -0
  282. package/esri-compat/polyline.d.ts +31 -0
  283. package/esri-compat/polyline.d.ts.map +1 -0
  284. package/esri-compat/polyline.js +107 -0
  285. package/esri-compat/popup-template.d.ts +55 -0
  286. package/esri-compat/popup-template.d.ts.map +1 -0
  287. package/esri-compat/popup-template.js +128 -0
  288. package/esri-compat/popup.d.ts +54 -0
  289. package/esri-compat/popup.d.ts.map +1 -0
  290. package/esri-compat/popup.js +312 -0
  291. package/esri-compat/print.d.ts +47 -0
  292. package/esri-compat/print.d.ts.map +1 -0
  293. package/esri-compat/print.js +105 -0
  294. package/esri-compat/query.d.ts +58 -0
  295. package/esri-compat/query.d.ts.map +1 -0
  296. package/esri-compat/query.js +128 -0
  297. package/esri-compat/reactive-utils.d.ts +24 -0
  298. package/esri-compat/reactive-utils.d.ts.map +1 -0
  299. package/esri-compat/reactive-utils.js +193 -0
  300. package/esri-compat/request.d.ts +41 -0
  301. package/esri-compat/request.d.ts.map +1 -0
  302. package/esri-compat/request.js +253 -0
  303. package/esri-compat/route-layer.d.ts +59 -0
  304. package/esri-compat/route-layer.d.ts.map +1 -0
  305. package/esri-compat/route-layer.js +223 -0
  306. package/esri-compat/route-task.d.ts +88 -0
  307. package/esri-compat/route-task.d.ts.map +1 -0
  308. package/esri-compat/route-task.js +225 -0
  309. package/esri-compat/scene-view.d.ts +41 -0
  310. package/esri-compat/scene-view.d.ts.map +1 -0
  311. package/esri-compat/scene-view.js +68 -0
  312. package/esri-compat/search.d.ts +112 -0
  313. package/esri-compat/search.d.ts.map +1 -0
  314. package/esri-compat/search.js +820 -0
  315. package/esri-compat/simple-fill-symbol.d.ts +27 -0
  316. package/esri-compat/simple-fill-symbol.d.ts.map +1 -0
  317. package/esri-compat/simple-fill-symbol.js +85 -0
  318. package/esri-compat/simple-line-symbol.d.ts +27 -0
  319. package/esri-compat/simple-line-symbol.d.ts.map +1 -0
  320. package/esri-compat/simple-line-symbol.js +85 -0
  321. package/esri-compat/simple-marker-symbol.d.ts +29 -0
  322. package/esri-compat/simple-marker-symbol.d.ts.map +1 -0
  323. package/esri-compat/simple-marker-symbol.js +92 -0
  324. package/esri-compat/simple-renderer.d.ts +29 -0
  325. package/esri-compat/simple-renderer.d.ts.map +1 -0
  326. package/esri-compat/simple-renderer.js +92 -0
  327. package/esri-compat/sketch.d.ts +64 -0
  328. package/esri-compat/sketch.d.ts.map +1 -0
  329. package/esri-compat/sketch.js +227 -0
  330. package/esri-compat/spatial-reference.d.ts +31 -0
  331. package/esri-compat/spatial-reference.d.ts.map +1 -0
  332. package/esri-compat/spatial-reference.js +102 -0
  333. package/esri-compat/swipe.d.ts +34 -0
  334. package/esri-compat/swipe.d.ts.map +1 -0
  335. package/esri-compat/swipe.js +93 -0
  336. package/esri-compat/table-list.d.ts +36 -0
  337. package/esri-compat/table-list.d.ts.map +1 -0
  338. package/esri-compat/table-list.js +126 -0
  339. package/esri-compat/text-symbol.d.ts +37 -0
  340. package/esri-compat/text-symbol.d.ts.map +1 -0
  341. package/esri-compat/text-symbol.js +123 -0
  342. package/esri-compat/tile-layer.d.ts +52 -0
  343. package/esri-compat/tile-layer.d.ts.map +1 -0
  344. package/esri-compat/tile-layer.js +168 -0
  345. package/esri-compat/time-slider.d.ts +70 -0
  346. package/esri-compat/time-slider.d.ts.map +1 -0
  347. package/esri-compat/time-slider.js +208 -0
  348. package/esri-compat/track.d.ts +51 -0
  349. package/esri-compat/track.d.ts.map +1 -0
  350. package/esri-compat/track.js +174 -0
  351. package/esri-compat/unique-value-renderer.d.ts +41 -0
  352. package/esri-compat/unique-value-renderer.d.ts.map +1 -0
  353. package/esri-compat/unique-value-renderer.js +127 -0
  354. package/esri-compat/url.d.ts +13 -0
  355. package/esri-compat/url.d.ts.map +1 -0
  356. package/esri-compat/url.js +68 -0
  357. package/esri-compat/vector-tile-layer.d.ts +47 -0
  358. package/esri-compat/vector-tile-layer.d.ts.map +1 -0
  359. package/esri-compat/vector-tile-layer.js +130 -0
  360. package/esri-compat/web-map.d.ts +14 -0
  361. package/esri-compat/web-map.d.ts.map +1 -0
  362. package/esri-compat/web-map.js +24 -0
  363. package/esri-compat/wfs-layer.d.ts +64 -0
  364. package/esri-compat/wfs-layer.d.ts.map +1 -0
  365. package/esri-compat/wfs-layer.js +145 -0
  366. package/esri-compat/wms-layer.d.ts +76 -0
  367. package/esri-compat/wms-layer.d.ts.map +1 -0
  368. package/esri-compat/wms-layer.js +157 -0
  369. package/exploration/context.d.ts +25 -0
  370. package/exploration/context.d.ts.map +1 -0
  371. package/exploration/context.js +396 -0
  372. package/exploration/index.d.ts +27 -0
  373. package/exploration/index.d.ts.map +1 -0
  374. package/exploration/index.js +24 -0
  375. package/exploration/presets.d.ts +27 -0
  376. package/exploration/presets.d.ts.map +1 -0
  377. package/exploration/presets.js +114 -0
  378. package/exploration/reducer.d.ts +23 -0
  379. package/exploration/reducer.d.ts.map +1 -0
  380. package/exploration/reducer.js +332 -0
  381. package/exploration/selection.d.ts +25 -0
  382. package/exploration/selection.d.ts.map +1 -0
  383. package/exploration/selection.js +34 -0
  384. package/exploration/selectors.d.ts +56 -0
  385. package/exploration/selectors.d.ts.map +1 -0
  386. package/exploration/selectors.js +110 -0
  387. package/exploration/types.d.ts +294 -0
  388. package/exploration/types.d.ts.map +1 -0
  389. package/exploration/types.js +33 -0
  390. package/expr/expression.d.ts +457 -0
  391. package/expr/expression.d.ts.map +1 -0
  392. package/expr/expression.js +663 -0
  393. package/expr/index.d.ts +32 -0
  394. package/expr/index.d.ts.map +1 -0
  395. package/expr/index.js +30 -0
  396. package/gen/honua/v1/feature_service_pb.d.ts +918 -0
  397. package/gen/honua/v1/feature_service_pb.d.ts.map +1 -0
  398. package/gen/honua/v1/feature_service_pb.js +375 -0
  399. package/generated-app/errors.d.ts +41 -0
  400. package/generated-app/errors.d.ts.map +1 -0
  401. package/generated-app/errors.js +41 -0
  402. package/generated-app/index.d.ts +17 -0
  403. package/generated-app/index.d.ts.map +1 -0
  404. package/generated-app/index.js +12 -0
  405. package/generated-app/manifest.d.ts +183 -0
  406. package/generated-app/manifest.d.ts.map +1 -0
  407. package/generated-app/manifest.js +14 -0
  408. package/generated-app/projection.d.ts +44 -0
  409. package/generated-app/projection.d.ts.map +1 -0
  410. package/generated-app/projection.js +234 -0
  411. package/generated-app/runtime.d.ts +215 -0
  412. package/generated-app/runtime.d.ts.map +1 -0
  413. package/generated-app/runtime.js +1196 -0
  414. package/interactions/detail-model.d.ts +54 -0
  415. package/interactions/detail-model.d.ts.map +1 -0
  416. package/interactions/detail-model.js +105 -0
  417. package/interactions/exploration-bindings.d.ts +120 -0
  418. package/interactions/exploration-bindings.d.ts.map +1 -0
  419. package/interactions/exploration-bindings.js +218 -0
  420. package/interactions/feature-state.d.ts +144 -0
  421. package/interactions/feature-state.d.ts.map +1 -0
  422. package/interactions/feature-state.js +169 -0
  423. package/interactions/hit-test.d.ts +112 -0
  424. package/interactions/hit-test.d.ts.map +1 -0
  425. package/interactions/hit-test.js +291 -0
  426. package/interactions/index.d.ts +31 -0
  427. package/interactions/index.d.ts.map +1 -0
  428. package/interactions/index.js +24 -0
  429. package/interactions/share-state.d.ts +36 -0
  430. package/interactions/share-state.d.ts.map +1 -0
  431. package/interactions/share-state.js +123 -0
  432. package/map/feature-service-adapter.d.ts +138 -0
  433. package/map/feature-service-adapter.d.ts.map +1 -0
  434. package/map/feature-service-adapter.js +279 -0
  435. package/map/honua-map.d.ts +203 -0
  436. package/map/honua-map.d.ts.map +1 -0
  437. package/map/honua-map.js +347 -0
  438. package/map/index.d.ts +27 -0
  439. package/map/index.d.ts.map +1 -0
  440. package/map/index.js +22 -0
  441. package/map/maplibre-target.d.ts +103 -0
  442. package/map/maplibre-target.d.ts.map +1 -0
  443. package/map/maplibre-target.js +164 -0
  444. package/map/webmap-maplibre.d.ts +60 -0
  445. package/map/webmap-maplibre.d.ts.map +1 -0
  446. package/map/webmap-maplibre.js +212 -0
  447. package/package.json +37 -0
  448. package/react/context.d.ts +32 -0
  449. package/react/context.d.ts.map +1 -0
  450. package/react/context.js +19 -0
  451. package/react/honua-layer.d.ts +35 -0
  452. package/react/honua-layer.d.ts.map +1 -0
  453. package/react/honua-layer.js +47 -0
  454. package/react/honua-map.d.ts +83 -0
  455. package/react/honua-map.d.ts.map +1 -0
  456. package/react/honua-map.js +109 -0
  457. package/react/honua-popup.d.ts +26 -0
  458. package/react/honua-popup.d.ts.map +1 -0
  459. package/react/honua-popup.js +34 -0
  460. package/react/hooks.d.ts +127 -0
  461. package/react/hooks.d.ts.map +1 -0
  462. package/react/hooks.js +206 -0
  463. package/react/index.d.ts +42 -0
  464. package/react/index.d.ts.map +1 -0
  465. package/react/index.js +34 -0
  466. package/react/provider.d.ts +36 -0
  467. package/react/provider.d.ts.map +1 -0
  468. package/react/provider.js +35 -0
  469. package/react/query-cache.d.ts +76 -0
  470. package/react/query-cache.d.ts.map +1 -0
  471. package/react/query-cache.js +188 -0
  472. package/runtime/diff.d.ts +31 -0
  473. package/runtime/diff.d.ts.map +1 -0
  474. package/runtime/diff.js +143 -0
  475. package/runtime/errors.d.ts +40 -0
  476. package/runtime/errors.d.ts.map +1 -0
  477. package/runtime/errors.js +35 -0
  478. package/runtime/index.d.ts +59 -0
  479. package/runtime/index.d.ts.map +1 -0
  480. package/runtime/index.js +43 -0
  481. package/runtime/legend.d.ts +23 -0
  482. package/runtime/legend.d.ts.map +1 -0
  483. package/runtime/legend.js +38 -0
  484. package/runtime/load-package.d.ts +125 -0
  485. package/runtime/load-package.d.ts.map +1 -0
  486. package/runtime/load-package.js +264 -0
  487. package/runtime/map-package-fetch.d.ts +107 -0
  488. package/runtime/map-package-fetch.d.ts.map +1 -0
  489. package/runtime/map-package-fetch.js +336 -0
  490. package/runtime/map-package-realtime.d.ts +169 -0
  491. package/runtime/map-package-realtime.d.ts.map +1 -0
  492. package/runtime/map-package-realtime.js +350 -0
  493. package/runtime/map-package-validation.d.ts +43 -0
  494. package/runtime/map-package-validation.d.ts.map +1 -0
  495. package/runtime/map-package-validation.js +269 -0
  496. package/runtime/map-package-watch.d.ts +78 -0
  497. package/runtime/map-package-watch.d.ts.map +1 -0
  498. package/runtime/map-package-watch.js +695 -0
  499. package/runtime/map-package.d.ts +167 -0
  500. package/runtime/map-package.d.ts.map +1 -0
  501. package/runtime/map-package.js +15 -0
  502. package/runtime/ogc-styles.d.ts +110 -0
  503. package/runtime/ogc-styles.d.ts.map +1 -0
  504. package/runtime/ogc-styles.js +195 -0
  505. package/runtime/popups.d.ts +62 -0
  506. package/runtime/popups.d.ts.map +1 -0
  507. package/runtime/popups.js +95 -0
  508. package/runtime/query-tiles.d.ts +217 -0
  509. package/runtime/query-tiles.d.ts.map +1 -0
  510. package/runtime/query-tiles.js +801 -0
  511. package/runtime/runtime.d.ts +243 -0
  512. package/runtime/runtime.d.ts.map +1 -0
  513. package/runtime/runtime.js +1147 -0
  514. package/runtime/source-bridge.d.ts +99 -0
  515. package/runtime/source-bridge.d.ts.map +1 -0
  516. package/runtime/source-bridge.js +401 -0
  517. package/runtime/style-compose.d.ts +46 -0
  518. package/runtime/style-compose.d.ts.map +1 -0
  519. package/runtime/style-compose.js +144 -0
  520. package/runtime/style-interactions.d.ts +141 -0
  521. package/runtime/style-interactions.d.ts.map +1 -0
  522. package/runtime/style-interactions.js +574 -0
  523. package/runtime/style-spec-validation.d.ts +23 -0
  524. package/runtime/style-spec-validation.d.ts.map +1 -0
  525. package/runtime/style-spec-validation.js +357 -0
  526. package/studio/capability-manifest.d.ts +285 -0
  527. package/studio/capability-manifest.d.ts.map +1 -0
  528. package/studio/capability-manifest.js +59 -0
  529. package/studio/chart-spec.d.ts +85 -0
  530. package/studio/chart-spec.d.ts.map +1 -0
  531. package/studio/chart-spec.js +106 -0
  532. package/studio/index.d.ts +34 -0
  533. package/studio/index.d.ts.map +1 -0
  534. package/studio/index.js +27 -0
  535. package/studio/provenance.d.ts +131 -0
  536. package/studio/provenance.d.ts.map +1 -0
  537. package/studio/provenance.js +39 -0
  538. package/studio/publish.d.ts +64 -0
  539. package/studio/publish.d.ts.map +1 -0
  540. package/studio/publish.js +13 -0
  541. package/studio/types.d.ts +278 -0
  542. package/studio/types.d.ts.map +1 -0
  543. package/studio/types.js +71 -0
  544. package/studio/validate.d.ts +45 -0
  545. package/studio/validate.d.ts.map +1 -0
  546. package/studio/validate.js +255 -0
  547. package/studio/validation.d.ts +112 -0
  548. package/studio/validation.d.ts.map +1 -0
  549. package/studio/validation.js +42 -0
  550. package/style/factory.d.ts +30 -0
  551. package/style/factory.d.ts.map +1 -0
  552. package/style/factory.js +61 -0
  553. package/style/index.d.ts +25 -0
  554. package/style/index.d.ts.map +1 -0
  555. package/style/index.js +24 -0
  556. package/style/specification.d.ts +203 -0
  557. package/style/specification.d.ts.map +1 -0
  558. package/style/specification.js +178 -0
  559. package/style/wms-wmts-resolvers.d.ts +38 -0
  560. package/style/wms-wmts-resolvers.d.ts.map +1 -0
  561. package/style/wms-wmts-resolvers.js +92 -0
  562. package/webmap/contract.d.ts +28 -0
  563. package/webmap/contract.d.ts.map +1 -0
  564. package/webmap/contract.js +130 -0
  565. package/webmap/convert-basemap.d.ts +17 -0
  566. package/webmap/convert-basemap.d.ts.map +1 -0
  567. package/webmap/convert-basemap.js +78 -0
  568. package/webmap/convert-extent.d.ts +17 -0
  569. package/webmap/convert-extent.d.ts.map +1 -0
  570. package/webmap/convert-extent.js +114 -0
  571. package/webmap/convert-label.d.ts +13 -0
  572. package/webmap/convert-label.d.ts.map +1 -0
  573. package/webmap/convert-label.js +125 -0
  574. package/webmap/convert-layer.d.ts +22 -0
  575. package/webmap/convert-layer.d.ts.map +1 -0
  576. package/webmap/convert-layer.js +181 -0
  577. package/webmap/convert-popup.d.ts +34 -0
  578. package/webmap/convert-popup.d.ts.map +1 -0
  579. package/webmap/convert-popup.js +68 -0
  580. package/webmap/convert-renderer.d.ts +17 -0
  581. package/webmap/convert-renderer.d.ts.map +1 -0
  582. package/webmap/convert-renderer.js +161 -0
  583. package/webmap/convert-symbol.d.ts +17 -0
  584. package/webmap/convert-symbol.d.ts.map +1 -0
  585. package/webmap/convert-symbol.js +122 -0
  586. package/webmap/index.d.ts +44 -0
  587. package/webmap/index.d.ts.map +1 -0
  588. package/webmap/index.js +33 -0
  589. package/webmap/parse.d.ts +25 -0
  590. package/webmap/parse.d.ts.map +1 -0
  591. package/webmap/parse.js +83 -0
  592. package/webmap/types.d.ts +264 -0
  593. package/webmap/types.d.ts.map +1 -0
  594. package/webmap/types.js +13 -0
  595. package/webmap/warnings.d.ts +30 -0
  596. package/webmap/warnings.d.ts.map +1 -0
  597. package/webmap/warnings.js +37 -0
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Shareable serialization helpers for map/table/detail interaction state.
3
+ *
4
+ * The encoded query string is intended for URLs and bookmarks. It carries the
5
+ * query projection and selection but leaves state ownership with
6
+ * `ExplorationContext`.
7
+ *
8
+ * @module
9
+ */
10
+ import type { LinkedViewQueryProjection } from "../exploration/selectors.js";
11
+ import type { FeatureSelectionTarget } from "../exploration/types.js";
12
+ export type ShareableInteractionQueryState = Partial<LinkedViewQueryProjection> & {
13
+ readonly selection?: ReadonlyArray<FeatureSelectionTarget>;
14
+ };
15
+ export interface ShareableInteractionQueryParams {
16
+ readonly filters: string;
17
+ readonly spatialFilter: string;
18
+ readonly extent: string;
19
+ readonly orderBy: string;
20
+ readonly pagination: string;
21
+ readonly outFields: string;
22
+ readonly grouping: string;
23
+ readonly aggregation: string;
24
+ readonly selection: string;
25
+ }
26
+ /** Encode selection targets as a stable JSON value suitable for a URL param. */
27
+ export declare function serializeSelection(selection: ReadonlyArray<FeatureSelectionTarget>): string;
28
+ /** Decode a selection value produced by {@link serializeSelection}. */
29
+ export declare function parseSelection(value: string | null | undefined): FeatureSelectionTarget[];
30
+ /** Encode query projection state into URL query parameters. */
31
+ export declare function serializeInteractionQueryState(state: ShareableInteractionQueryState): string;
32
+ /** Decode URL query parameters produced by {@link serializeInteractionQueryState}. */
33
+ export declare function parseInteractionQueryState(search: string | URLSearchParams): ShareableInteractionQueryState;
34
+ /** Return the query parameter names used by the shareable serializer. */
35
+ export declare function interactionQueryParamNames(): ShareableInteractionQueryParams;
36
+ //# sourceMappingURL=share-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share-state.d.ts","sourceRoot":"","sources":["../../../src/interactions/share-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEtE,MAAM,MAAM,8BAA8B,GAAG,OAAO,CAAC,yBAAyB,CAAC,GAAG;IAChF,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;CAC5D,CAAC;AAEF,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAcD,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,sBAAsB,CAAC,GAAG,MAAM,CAE3F;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,sBAAsB,EAAE,CAIzF;AAED,+DAA+D;AAC/D,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,8BAA8B,GAAG,MAAM,CAY5F;AAED,sFAAsF;AACtF,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,8BAA8B,CAc3G;AAED,yEAAyE;AACzE,wBAAgB,0BAA0B,IAAI,+BAA+B,CAE5E"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Shareable serialization helpers for map/table/detail interaction state.
3
+ *
4
+ * The encoded query string is intended for URLs and bookmarks. It carries the
5
+ * query projection and selection but leaves state ownership with
6
+ * `ExplorationContext`.
7
+ *
8
+ * @module
9
+ */
10
+ const PARAMS = {
11
+ filters: "f",
12
+ spatialFilter: "sf",
13
+ extent: "ext",
14
+ orderBy: "sort",
15
+ pagination: "page",
16
+ outFields: "fields",
17
+ grouping: "group",
18
+ aggregation: "agg",
19
+ selection: "sel",
20
+ };
21
+ /** Encode selection targets as a stable JSON value suitable for a URL param. */
22
+ export function serializeSelection(selection) {
23
+ return stableStringify(selection);
24
+ }
25
+ /** Decode a selection value produced by {@link serializeSelection}. */
26
+ export function parseSelection(value) {
27
+ if (!value)
28
+ return [];
29
+ const parsed = parseJson(value);
30
+ return Array.isArray(parsed) ? parsed.filter(isSelectionTarget) : [];
31
+ }
32
+ /** Encode query projection state into URL query parameters. */
33
+ export function serializeInteractionQueryState(state) {
34
+ const params = new URLSearchParams();
35
+ setJsonParam(params, PARAMS.filters, emptyObjectToUndefined(state.filters));
36
+ setJsonParam(params, PARAMS.spatialFilter, state.spatialFilter);
37
+ setJsonParam(params, PARAMS.extent, state.extent);
38
+ setJsonParam(params, PARAMS.orderBy, emptyArrayToUndefined(state.orderBy));
39
+ setJsonParam(params, PARAMS.pagination, emptyObjectToUndefined(state.pagination));
40
+ setJsonParam(params, PARAMS.outFields, emptyArrayToUndefined(state.outFields));
41
+ setJsonParam(params, PARAMS.grouping, emptyArrayToUndefined(state.grouping));
42
+ setJsonParam(params, PARAMS.aggregation, state.aggregation);
43
+ setJsonParam(params, PARAMS.selection, emptyArrayToUndefined(state.selection));
44
+ return params.toString();
45
+ }
46
+ /** Decode URL query parameters produced by {@link serializeInteractionQueryState}. */
47
+ export function parseInteractionQueryState(search) {
48
+ const params = typeof search === "string" ? new URLSearchParams(search.startsWith("?") ? search.slice(1) : search) : search;
49
+ return {
50
+ filters: parseRecordParam(params.get(PARAMS.filters)),
51
+ spatialFilter: parseRecordParam(params.get(PARAMS.spatialFilter)),
52
+ extent: parseRecordParam(params.get(PARAMS.extent)),
53
+ orderBy: parseArrayParam(params.get(PARAMS.orderBy)),
54
+ pagination: parseRecordParam(params.get(PARAMS.pagination)),
55
+ outFields: parseStringArrayParam(params.get(PARAMS.outFields)),
56
+ grouping: parseStringArrayParam(params.get(PARAMS.grouping)),
57
+ aggregation: parseRecordParam(params.get(PARAMS.aggregation)),
58
+ selection: parseSelection(params.get(PARAMS.selection)),
59
+ };
60
+ }
61
+ /** Return the query parameter names used by the shareable serializer. */
62
+ export function interactionQueryParamNames() {
63
+ return { ...PARAMS };
64
+ }
65
+ function setJsonParam(params, name, value) {
66
+ if (value === undefined)
67
+ return;
68
+ params.set(name, stableStringify(value));
69
+ }
70
+ function stableStringify(value) {
71
+ return JSON.stringify(sortJsonValue(value));
72
+ }
73
+ function sortJsonValue(value) {
74
+ if (Array.isArray(value))
75
+ return value.map(sortJsonValue);
76
+ if (!value || typeof value !== "object")
77
+ return value;
78
+ const out = {};
79
+ for (const key of Object.keys(value).sort()) {
80
+ out[key] = sortJsonValue(value[key]);
81
+ }
82
+ return out;
83
+ }
84
+ function parseJson(value) {
85
+ try {
86
+ return JSON.parse(value);
87
+ }
88
+ catch {
89
+ return undefined;
90
+ }
91
+ }
92
+ function parseRecordParam(value) {
93
+ if (!value)
94
+ return undefined;
95
+ const parsed = parseJson(value);
96
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : undefined;
97
+ }
98
+ function parseArrayParam(value) {
99
+ if (!value)
100
+ return undefined;
101
+ const parsed = parseJson(value);
102
+ return Array.isArray(parsed) ? parsed : undefined;
103
+ }
104
+ function parseStringArrayParam(value) {
105
+ const parsed = parseArrayParam(value);
106
+ if (!parsed)
107
+ return undefined;
108
+ return parsed.filter((entry) => typeof entry === "string");
109
+ }
110
+ function emptyArrayToUndefined(value) {
111
+ return value && value.length > 0 ? value : undefined;
112
+ }
113
+ function emptyObjectToUndefined(value) {
114
+ return value && Object.keys(value).length > 0 ? value : undefined;
115
+ }
116
+ function isSelectionTarget(value) {
117
+ if (typeof value === "string" || typeof value === "number")
118
+ return true;
119
+ if (!value || typeof value !== "object" || Array.isArray(value))
120
+ return false;
121
+ const record = value;
122
+ return typeof record.sourceId === "string" && (typeof record.id === "string" || typeof record.id === "number");
123
+ }
@@ -0,0 +1,138 @@
1
+ /**
2
+ * MapLibre runtime adapter for Honua feature-service sources.
3
+ *
4
+ * {@link createHonuaFeatureServiceLayer} (and the migration codemod) emit a
5
+ * custom `honua-feature-service` source type that MapLibre's renderer does not
6
+ * understand — adding it to a `maplibre-gl` `Map` directly is a silent no-op.
7
+ *
8
+ * This module bridges that gap. It fetches features through the SDK query path
9
+ * ({@link HonuaFeatureLayer}) and converts the Esri feature set into a standard
10
+ * GeoJSON `FeatureCollection`, then exposes it as a plain MapLibre `geojson`
11
+ * source spec that the renderer renders natively. Callers either:
12
+ *
13
+ * - call {@link loadHonuaFeatureServiceGeoJson} to obtain a `geojson` source
14
+ * spec they add to their style themselves, or
15
+ * - call {@link registerHonuaFeatureServiceSources} to walk a {@link HonuaMap}
16
+ * and live-patch every `honua-feature-service` source on a real MapLibre map
17
+ * into a fetched `geojson` source.
18
+ *
19
+ * Raster Honua sources (`honua-map-service`, tile services) already project
20
+ * onto MapLibre-native sources and need no adapter; this fills in the feature
21
+ * (vector) asymmetry.
22
+ *
23
+ * @module
24
+ */
25
+ import type { HonuaClient } from "../core/client.js";
26
+ import type { EsriGeometryType } from "../core/types.js";
27
+ import type { HonuaMap } from "./honua-map.js";
28
+ /** A GeoJSON geometry produced by the adapter. */
29
+ export interface AdapterGeoJsonGeometry {
30
+ type: string;
31
+ coordinates: unknown;
32
+ }
33
+ /** A GeoJSON feature produced by the adapter. */
34
+ export interface AdapterGeoJsonFeature {
35
+ type: "Feature";
36
+ id?: string | number;
37
+ geometry: AdapterGeoJsonGeometry | null;
38
+ properties: Record<string, unknown>;
39
+ }
40
+ /** A GeoJSON feature collection produced by the adapter. */
41
+ export interface AdapterGeoJsonFeatureCollection {
42
+ type: "FeatureCollection";
43
+ features: AdapterGeoJsonFeature[];
44
+ }
45
+ /** A standard MapLibre `geojson` source specification. */
46
+ export interface MapLibreGeoJsonSourceSpecification {
47
+ type: "geojson";
48
+ data: AdapterGeoJsonFeatureCollection;
49
+ attribution?: string;
50
+ }
51
+ /** Options controlling how the adapter fetches feature-service data. */
52
+ export interface LoadHonuaFeatureServiceGeoJsonOptions {
53
+ /** Server-side WHERE clause. Defaults to `"1=1"`. */
54
+ definitionExpression?: string;
55
+ /** Fields to request. Defaults to all (`["*"]`). */
56
+ outFields?: string[];
57
+ /** Output spatial reference WKID. GeoJSON requires `4326`; defaults to it. */
58
+ outSR?: number;
59
+ /** Page size for paginated fetching. */
60
+ pageSize?: number;
61
+ /** Maximum pages to fetch. */
62
+ maxPages?: number;
63
+ /** Attribution to attach to the produced source spec. */
64
+ attribution?: string;
65
+ /** Abort signal forwarded to the query. */
66
+ signal?: AbortSignal;
67
+ }
68
+ /**
69
+ * The minimal MapLibre `Map` surface the adapter mutates. Any object exposing
70
+ * these methods — including a real `maplibre-gl` `Map` — satisfies it.
71
+ */
72
+ export interface FeatureServiceAdapterMap {
73
+ getSource(id: string): unknown;
74
+ addSource(id: string, source: unknown): void;
75
+ removeSource(id: string): void;
76
+ }
77
+ /**
78
+ * Convert a single Esri geometry into a GeoJSON geometry.
79
+ *
80
+ * Handles the geometry kinds a feature-service query returns (point,
81
+ * multipoint, polyline, polygon, envelope). Returns `null` when the geometry is
82
+ * absent or unrecognised so the feature still renders attribute-only.
83
+ */
84
+ export declare function esriGeometryToGeoJson(geometry: Record<string, unknown> | null | undefined, geometryType: EsriGeometryType | undefined): AdapterGeoJsonGeometry | null;
85
+ /**
86
+ * Convert an array of Esri features (attributes + geometry) into a GeoJSON
87
+ * `FeatureCollection`.
88
+ */
89
+ export declare function esriFeaturesToGeoJson(features: ReadonlyArray<{
90
+ attributes?: Record<string, unknown>;
91
+ geometry?: Record<string, unknown> | null;
92
+ }>, geometryType: EsriGeometryType | undefined): AdapterGeoJsonFeatureCollection;
93
+ /**
94
+ * Fetch a Honua feature-service layer through the SDK and return a standard
95
+ * MapLibre `geojson` source specification that the renderer renders natively.
96
+ *
97
+ * @example
98
+ * ```ts
99
+ * const source = await loadHonuaFeatureServiceGeoJson(client, layer.source.url);
100
+ * map.addSource(layer.sourceId, source);
101
+ * map.addLayer(layer.layer);
102
+ * ```
103
+ */
104
+ export declare function loadHonuaFeatureServiceGeoJson(client: HonuaClient, url: string, options?: LoadHonuaFeatureServiceGeoJsonOptions): Promise<MapLibreGeoJsonSourceSpecification>;
105
+ /** Result of {@link registerHonuaFeatureServiceSources}. */
106
+ export interface RegisterHonuaFeatureServiceSourcesResult {
107
+ /** Source ids that were fetched and wired as `geojson` sources. */
108
+ registered: string[];
109
+ /** Source ids that failed to load, with the error encountered. */
110
+ failed: Array<{
111
+ sourceId: string;
112
+ error: unknown;
113
+ }>;
114
+ }
115
+ /** Options for {@link registerHonuaFeatureServiceSources}. */
116
+ export interface RegisterHonuaFeatureServiceSourcesOptions extends LoadHonuaFeatureServiceGeoJsonOptions {
117
+ /**
118
+ * Maximum number of feature-service sources to fetch concurrently. Defaults
119
+ * to {@link DEFAULT_REGISTER_CONCURRENCY}. Total load latency becomes the max
120
+ * of the per-source fetches rather than their sum.
121
+ */
122
+ concurrency?: number;
123
+ }
124
+ /**
125
+ * Walk a {@link HonuaMap} and replace every `honua-feature-service` source on a
126
+ * real MapLibre map with a fetched standard `geojson` source so feature layers
127
+ * actually render.
128
+ *
129
+ * Existing `geojson` sources are updated in place via `setData`; otherwise a new
130
+ * source is added. Layers should be added by the caller (or already present in
131
+ * the style) — this only manages the data sources.
132
+ *
133
+ * @param map - A `maplibre-gl` `Map` (or any {@link FeatureServiceAdapterMap}).
134
+ * @param honuaMap - The {@link HonuaMap} whose feature-service sources to wire.
135
+ * @param client - The Honua client used to fetch features.
136
+ */
137
+ export declare function registerHonuaFeatureServiceSources(map: FeatureServiceAdapterMap, honuaMap: HonuaMap, client: HonuaClient, options?: RegisterHonuaFeatureServiceSourcesOptions): Promise<RegisterHonuaFeatureServiceSourcesResult>;
138
+ //# sourceMappingURL=feature-service-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-service-adapter.d.ts","sourceRoot":"","sources":["../../../src/map/feature-service-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,kDAAkD;AAClD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,iDAAiD;AACjD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,4DAA4D;AAC5D,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CACnC;AAED,0DAA0D;AAC1D,MAAM,WAAW,kCAAkC;IACjD,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,+BAA+B,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wEAAwE;AACxE,MAAM,WAAW,qCAAqC;IACpD,qDAAqD;IACrD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAMD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EACpD,YAAY,EAAE,gBAAgB,GAAG,SAAS,GACzC,sBAAsB,GAAG,IAAI,CA+D/B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,aAAa,CAAC;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAAE,CAAC,EAC5G,YAAY,EAAE,gBAAgB,GAAG,SAAS,GACzC,+BAA+B,CASjC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,qCAA0C,GAClD,OAAO,CAAC,kCAAkC,CAAC,CAmC7C;AAED,4DAA4D;AAC5D,MAAM,WAAW,wCAAwC;IACvD,mEAAmE;IACnE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,kEAAkE;IAClE,MAAM,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACrD;AAED,8DAA8D;AAC9D,MAAM,WAAW,yCAA0C,SAAQ,qCAAqC;IACtG;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD;;;;;;;;;;;;GAYG;AACH,wBAAsB,kCAAkC,CACtD,GAAG,EAAE,wBAAwB,EAC7B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,yCAA8C,GACtD,OAAO,CAAC,wCAAwC,CAAC,CA4DnD"}
@@ -0,0 +1,279 @@
1
+ /**
2
+ * MapLibre runtime adapter for Honua feature-service sources.
3
+ *
4
+ * {@link createHonuaFeatureServiceLayer} (and the migration codemod) emit a
5
+ * custom `honua-feature-service` source type that MapLibre's renderer does not
6
+ * understand — adding it to a `maplibre-gl` `Map` directly is a silent no-op.
7
+ *
8
+ * This module bridges that gap. It fetches features through the SDK query path
9
+ * ({@link HonuaFeatureLayer}) and converts the Esri feature set into a standard
10
+ * GeoJSON `FeatureCollection`, then exposes it as a plain MapLibre `geojson`
11
+ * source spec that the renderer renders natively. Callers either:
12
+ *
13
+ * - call {@link loadHonuaFeatureServiceGeoJson} to obtain a `geojson` source
14
+ * spec they add to their style themselves, or
15
+ * - call {@link registerHonuaFeatureServiceSources} to walk a {@link HonuaMap}
16
+ * and live-patch every `honua-feature-service` source on a real MapLibre map
17
+ * into a fetched `geojson` source.
18
+ *
19
+ * Raster Honua sources (`honua-map-service`, tile services) already project
20
+ * onto MapLibre-native sources and need no adapter; this fills in the feature
21
+ * (vector) asymmetry.
22
+ *
23
+ * @module
24
+ */
25
+ import { HonuaFeatureLayer } from "../core/surfaces.js";
26
+ import { parseFeatureLayerUrl } from "../esri-compat/url.js";
27
+ /**
28
+ * Convert a single Esri geometry into a GeoJSON geometry.
29
+ *
30
+ * Handles the geometry kinds a feature-service query returns (point,
31
+ * multipoint, polyline, polygon, envelope). Returns `null` when the geometry is
32
+ * absent or unrecognised so the feature still renders attribute-only.
33
+ */
34
+ export function esriGeometryToGeoJson(geometry, geometryType) {
35
+ if (!geometry) {
36
+ return null;
37
+ }
38
+ // Point geometries are recognisable structurally even without a declared
39
+ // type (queries that elide geometryType still return {x, y}).
40
+ if (geometryType === "esriGeometryPoint" || (geometry.x !== undefined && geometry.y !== undefined)) {
41
+ const x = asFiniteNumber(geometry.x);
42
+ const y = asFiniteNumber(geometry.y);
43
+ if (x === undefined || y === undefined)
44
+ return null;
45
+ return { type: "Point", coordinates: [x, y] };
46
+ }
47
+ if (geometryType === "esriGeometryMultipoint") {
48
+ const points = asArray(geometry.points)
49
+ .map(asCoordinatePair)
50
+ .filter((value) => value !== undefined);
51
+ return { type: "MultiPoint", coordinates: points };
52
+ }
53
+ if (geometryType === "esriGeometryPolyline") {
54
+ const paths = asArray(geometry.paths)
55
+ .map(asCoordinateArray)
56
+ .filter((path) => path.length > 0);
57
+ if (paths.length === 1) {
58
+ return { type: "LineString", coordinates: paths[0] };
59
+ }
60
+ return { type: "MultiLineString", coordinates: paths };
61
+ }
62
+ if (geometryType === "esriGeometryPolygon") {
63
+ const rings = asArray(geometry.rings)
64
+ .map(asCoordinateArray)
65
+ .filter((ring) => ring.length > 0);
66
+ // MapLibre does not enforce GeoJSON ring winding for rendering, so the
67
+ // adapter passes Esri rings through as a Polygon without re-nesting.
68
+ return { type: "Polygon", coordinates: rings };
69
+ }
70
+ if (geometryType === "esriGeometryEnvelope") {
71
+ const xmin = asFiniteNumber(geometry.xmin);
72
+ const ymin = asFiniteNumber(geometry.ymin);
73
+ const xmax = asFiniteNumber(geometry.xmax);
74
+ const ymax = asFiniteNumber(geometry.ymax);
75
+ if (xmin === undefined || ymin === undefined || xmax === undefined || ymax === undefined) {
76
+ return null;
77
+ }
78
+ return {
79
+ type: "Polygon",
80
+ coordinates: [
81
+ [
82
+ [xmin, ymin],
83
+ [xmax, ymin],
84
+ [xmax, ymax],
85
+ [xmin, ymax],
86
+ [xmin, ymin],
87
+ ],
88
+ ],
89
+ };
90
+ }
91
+ return null;
92
+ }
93
+ /**
94
+ * Convert an array of Esri features (attributes + geometry) into a GeoJSON
95
+ * `FeatureCollection`.
96
+ */
97
+ export function esriFeaturesToGeoJson(features, geometryType) {
98
+ return {
99
+ type: "FeatureCollection",
100
+ features: features.map((feature) => ({
101
+ type: "Feature",
102
+ geometry: esriGeometryToGeoJson(feature.geometry ?? null, geometryType),
103
+ properties: { ...(feature.attributes ?? {}) },
104
+ })),
105
+ };
106
+ }
107
+ /**
108
+ * Fetch a Honua feature-service layer through the SDK and return a standard
109
+ * MapLibre `geojson` source specification that the renderer renders natively.
110
+ *
111
+ * @example
112
+ * ```ts
113
+ * const source = await loadHonuaFeatureServiceGeoJson(client, layer.source.url);
114
+ * map.addSource(layer.sourceId, source);
115
+ * map.addLayer(layer.layer);
116
+ * ```
117
+ */
118
+ export async function loadHonuaFeatureServiceGeoJson(client, url, options = {}) {
119
+ const parsed = parseFeatureLayerUrl(url);
120
+ const layer = new HonuaFeatureLayer({
121
+ client,
122
+ serviceId: parsed.serviceId,
123
+ layerId: parsed.layerId,
124
+ });
125
+ // GeoJSON is lon/lat (WGS84). Default outSR to 4326 so the rendered
126
+ // coordinates land where MapLibre expects them.
127
+ const outSR = options.outSR ?? 4326;
128
+ const request = {
129
+ where: options.definitionExpression ?? "1=1",
130
+ outFields: options.outFields ?? ["*"],
131
+ returnGeometry: true,
132
+ outSr: outSR,
133
+ ...(options.pageSize !== undefined ? { pageSize: options.pageSize } : {}),
134
+ ...(options.maxPages !== undefined ? { maxPages: options.maxPages } : {}),
135
+ ...(options.signal ? { signal: options.signal } : {}),
136
+ };
137
+ const metadataPromise = layer.metadata(options.signal ? { signal: options.signal } : {}).catch(() => undefined);
138
+ const features = await layer.queryFeaturesAll(request);
139
+ const geometryType = (await metadataPromise)?.geometryType;
140
+ const data = esriFeaturesToGeoJson(features, geometryType);
141
+ return {
142
+ type: "geojson",
143
+ data,
144
+ ...(options.attribution ? { attribution: options.attribution } : {}),
145
+ };
146
+ }
147
+ /** Default fetch fan-out for {@link registerHonuaFeatureServiceSources}. */
148
+ const DEFAULT_REGISTER_CONCURRENCY = 6;
149
+ /**
150
+ * Walk a {@link HonuaMap} and replace every `honua-feature-service` source on a
151
+ * real MapLibre map with a fetched standard `geojson` source so feature layers
152
+ * actually render.
153
+ *
154
+ * Existing `geojson` sources are updated in place via `setData`; otherwise a new
155
+ * source is added. Layers should be added by the caller (or already present in
156
+ * the style) — this only manages the data sources.
157
+ *
158
+ * @param map - A `maplibre-gl` `Map` (or any {@link FeatureServiceAdapterMap}).
159
+ * @param honuaMap - The {@link HonuaMap} whose feature-service sources to wire.
160
+ * @param client - The Honua client used to fetch features.
161
+ */
162
+ export async function registerHonuaFeatureServiceSources(map, honuaMap, client, options = {}) {
163
+ const registered = [];
164
+ const failed = [];
165
+ // Collect the feature-service sources to load, validating `url` up front so a
166
+ // missing url fails fast without consuming a fetch slot.
167
+ const pending = [];
168
+ for (const sourceId of honuaMap.sourceIds) {
169
+ const spec = honuaMap.getSourceSpec(sourceId);
170
+ if (!spec || spec.type !== "honua-feature-service") {
171
+ continue;
172
+ }
173
+ const url = spec.url;
174
+ if (typeof url !== "string" || url.length === 0) {
175
+ failed.push({ sourceId, error: new Error(`feature-service source "${sourceId}" is missing url`) });
176
+ continue;
177
+ }
178
+ pending.push({ sourceId, url, spec });
179
+ }
180
+ // Fetch sources with bounded concurrency: total latency becomes the max of the
181
+ // per-source fetches instead of their sum (a startup cliff for multi-layer maps).
182
+ const concurrency = typeof options.concurrency === "number" && Number.isFinite(options.concurrency)
183
+ ? Math.max(1, Math.trunc(options.concurrency))
184
+ : DEFAULT_REGISTER_CONCURRENCY;
185
+ const results = await allSettledLimited(pending, concurrency, (item) => loadHonuaFeatureServiceGeoJson(client, item.url, {
186
+ ...options,
187
+ ...featureServiceSpecOverrides(item.spec),
188
+ }));
189
+ // Apply the fetched sources to the map sequentially, preserving source order.
190
+ // Map mutations are synchronous and must stay single-threaded.
191
+ for (let index = 0; index < pending.length; index += 1) {
192
+ const { sourceId } = pending[index];
193
+ const result = results[index];
194
+ if (result.status === "rejected") {
195
+ failed.push({ sourceId, error: result.reason });
196
+ continue;
197
+ }
198
+ try {
199
+ const source = result.value;
200
+ const existing = map.getSource(sourceId);
201
+ if (existing && typeof existing.setData === "function") {
202
+ existing.setData(source.data);
203
+ }
204
+ else {
205
+ if (existing) {
206
+ map.removeSource(sourceId);
207
+ }
208
+ map.addSource(sourceId, source);
209
+ }
210
+ registered.push(sourceId);
211
+ }
212
+ catch (error) {
213
+ failed.push({ sourceId, error });
214
+ }
215
+ }
216
+ return { registered, failed };
217
+ }
218
+ /** Derive per-source query overrides from a `honua-feature-service` source spec. */
219
+ function featureServiceSpecOverrides(spec) {
220
+ return {
221
+ ...(typeof spec.definitionExpression === "string"
222
+ ? { definitionExpression: spec.definitionExpression }
223
+ : {}),
224
+ ...(Array.isArray(spec.outFields)
225
+ ? { outFields: spec.outFields }
226
+ : {}),
227
+ ...(typeof spec.outSR === "number" ? { outSR: spec.outSR } : {}),
228
+ ...(typeof spec.attribution === "string"
229
+ ? { attribution: spec.attribution }
230
+ : {}),
231
+ };
232
+ }
233
+ /**
234
+ * Run `worker` over `values` with at most `concurrency` in flight, collecting
235
+ * settled results in input order. Mirrors the limiter in `runtime/query-tiles`;
236
+ * kept local to avoid coupling the map layer to the runtime tile pipeline.
237
+ */
238
+ async function allSettledLimited(values, concurrency, worker) {
239
+ const results = new Array(values.length);
240
+ let nextIndex = 0;
241
+ async function run() {
242
+ for (;;) {
243
+ const index = nextIndex;
244
+ nextIndex += 1;
245
+ if (index >= values.length)
246
+ return;
247
+ try {
248
+ results[index] = { status: "fulfilled", value: await worker(values[index]) };
249
+ }
250
+ catch (reason) {
251
+ results[index] = { status: "rejected", reason };
252
+ }
253
+ }
254
+ }
255
+ const workers = Array.from({ length: Math.min(concurrency, values.length) }, () => run());
256
+ await Promise.all(workers);
257
+ return results;
258
+ }
259
+ // ── Coercion helpers ─────────────────────────────────────────
260
+ function asFiniteNumber(value) {
261
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
262
+ }
263
+ function asArray(value) {
264
+ return Array.isArray(value) ? value : [];
265
+ }
266
+ function asCoordinatePair(value) {
267
+ if (!Array.isArray(value) || value.length < 2)
268
+ return undefined;
269
+ const x = asFiniteNumber(value[0]);
270
+ const y = asFiniteNumber(value[1]);
271
+ if (x === undefined || y === undefined)
272
+ return undefined;
273
+ return [x, y];
274
+ }
275
+ function asCoordinateArray(value) {
276
+ return asArray(value)
277
+ .map(asCoordinatePair)
278
+ .filter((pair) => pair !== undefined);
279
+ }