@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,559 @@
1
+ /**
2
+ * WMS 1.3.0 Capabilities parser. Hand-rolled, narrow-scope text-walker
3
+ * over a `WMS_Capabilities` document. Returns a typed shape (layers,
4
+ * styles, bbox-per-CRS, dimensions, advertised formats) that the SDK
5
+ * can route through the canonical `Source` surface without leaking XML
6
+ * nodes into its public API.
7
+ *
8
+ * The parser is closed-schema (WMS 1.3 + the ISO 19128 service-metadata
9
+ * subset honua-server emits) and tolerates missing optional nodes
10
+ * gracefully. Vendor-extension elements outside the named set are
11
+ * ignored. A `HonuaWmsCapabilitiesParseError` (extends `HonuaError`) is
12
+ * thrown when a required root or top-level node is missing.
13
+ *
14
+ * @module
15
+ */
16
+ import { decodeXmlText as decodeXmlEntities } from "./xml-text.js";
17
+ /**
18
+ * Thrown when WMS Capabilities XML is missing required root structure or
19
+ * is otherwise malformed in a way that prevents extracting the typed
20
+ * shape above. Recoverable per-node gaps (missing `<Title>`,
21
+ * `<Abstract>`, etc.) are tolerated and return defaults.
22
+ */
23
+ export class HonuaWmsCapabilitiesParseError extends Error {
24
+ constructor(message) {
25
+ super(message);
26
+ this.name = "HonuaWmsCapabilitiesParseError";
27
+ }
28
+ }
29
+ /**
30
+ * Parse a `WMS_Capabilities` text body into the typed `WmsCapabilities`
31
+ * shape. The input is the raw XML string returned by `requestText`; the
32
+ * parser walks it once with a small named-element matcher and tolerates
33
+ * vendor extensions (unknown elements are skipped).
34
+ */
35
+ export function parseWmsCapabilities(xml) {
36
+ if (typeof xml !== "string" || xml.length === 0) {
37
+ throw new HonuaWmsCapabilitiesParseError("WMS Capabilities body is empty");
38
+ }
39
+ const root = findElement(xml, 0, "WMS_Capabilities") ?? findElement(xml, 0, "WMT_MS_Capabilities");
40
+ if (!root) {
41
+ throw new HonuaWmsCapabilitiesParseError("missing <WMS_Capabilities> root element (received WMS Capabilities XML?)");
42
+ }
43
+ const version = readAttribute(root.openTag, "version") ?? "1.3.0";
44
+ const service = parseServiceMetadata(root.inner);
45
+ const capabilityNode = findElement(root.inner, 0, "Capability");
46
+ const requestNode = capabilityNode ? findElement(capabilityNode.inner, 0, "Request") : undefined;
47
+ const formats = parseFormats(requestNode?.inner ?? "");
48
+ const requestSupport = {
49
+ getFeatureInfo: requestNode ? findElement(requestNode.inner, 0, "GetFeatureInfo") !== undefined : false,
50
+ getLegendGraphic: requestNode ? findElement(requestNode.inner, 0, "GetLegendGraphic") !== undefined : false,
51
+ };
52
+ const layers = [];
53
+ if (capabilityNode) {
54
+ for (const layer of iterChildLayers(capabilityNode.inner, [])) {
55
+ layers.push(layer);
56
+ }
57
+ }
58
+ return {
59
+ version,
60
+ service,
61
+ layers,
62
+ formats,
63
+ request: requestSupport,
64
+ };
65
+ }
66
+ function parseServiceMetadata(capabilityXml) {
67
+ const node = findElement(capabilityXml, 0, "Service");
68
+ if (!node)
69
+ return {};
70
+ const out = {};
71
+ const title = readTextElement(node.inner, "Title");
72
+ if (title !== undefined)
73
+ out.title = title;
74
+ const abstract = readTextElement(node.inner, "Abstract");
75
+ if (abstract !== undefined)
76
+ out.abstract = abstract;
77
+ return out;
78
+ }
79
+ function parseFormats(requestInnerXml) {
80
+ const map = collectFormats(requestInnerXml, "GetMap");
81
+ const featureInfo = collectFormats(requestInnerXml, "GetFeatureInfo");
82
+ const legend = collectFormats(requestInnerXml, "GetLegendGraphic");
83
+ return { map, featureInfo, legend };
84
+ }
85
+ function collectFormats(requestInnerXml, requestName) {
86
+ const node = findElement(requestInnerXml, 0, requestName);
87
+ if (!node)
88
+ return [];
89
+ const formats = [];
90
+ let cursor = 0;
91
+ while (cursor < node.inner.length) {
92
+ const fmt = findElement(node.inner, cursor, "Format");
93
+ if (!fmt)
94
+ break;
95
+ const text = decodeXmlText(fmt.inner.trim());
96
+ if (text.length > 0)
97
+ formats.push(text);
98
+ cursor = fmt.endIndex;
99
+ }
100
+ return formats;
101
+ }
102
+ /**
103
+ * Walk every `<Layer>` element directly inside `parentInner`, applying
104
+ * inherited CRS / dimension / style fields from ancestors per WMS 1.3
105
+ * §7.2.4.6 inheritance rules. Iterative (no recursion through closures)
106
+ * to keep the parse hot path small.
107
+ */
108
+ function* iterChildLayers(parentInner, ancestors) {
109
+ let cursor = 0;
110
+ while (cursor < parentInner.length) {
111
+ const layer = findElement(parentInner, cursor, "Layer");
112
+ if (!layer)
113
+ break;
114
+ const queryableAttr = readAttribute(layer.openTag, "queryable");
115
+ const inherited = mergeAncestors(ancestors);
116
+ // Strip nested <Layer>...</Layer> subtrees from the layer's own inner so
117
+ // descendant Name / Title / CRS / BoundingBox / Style / Dimension nodes
118
+ // do not leak upward into the parent (and from there into siblings via
119
+ // `mergeAncestors`). WMS 1.3 §7.2.4.6 inheritance is ancestor → descendant
120
+ // only; without this guard, an unnamed group layer takes its first child's
121
+ // name and bleeds the child's style across siblings.
122
+ const ownInner = stripNestedLayers(layer.inner);
123
+ const name = readTextElement(ownInner, "Name") ?? "";
124
+ const title = readTextElement(ownInner, "Title");
125
+ const abstract = readTextElement(ownInner, "Abstract");
126
+ const localCrs = collectChildText(ownInner, "CRS");
127
+ const localBbox = collectBoundingBoxes(ownInner);
128
+ const localStyles = collectStyles(ownInner);
129
+ const localDimensions = collectDimensions(ownInner);
130
+ const mergedCrs = uniqueOrder([...inherited.crs, ...localCrs]);
131
+ const mergedBbox = mergeBoundingBoxes(inherited.bbox, localBbox);
132
+ const mergedStyles = mergeStyles(inherited.styles, localStyles);
133
+ const mergedDimensions = mergeDimensions(inherited.dimensions, localDimensions);
134
+ const queryable = queryableAttr === "1" || /^true$/i.test(queryableAttr ?? "")
135
+ ? true
136
+ : queryableAttr === "0"
137
+ ? false
138
+ : inherited.queryable;
139
+ const node = {
140
+ name,
141
+ ...(title !== undefined ? { title } : {}),
142
+ ...(abstract !== undefined ? { abstract } : {}),
143
+ crs: mergedCrs,
144
+ bbox: mergedBbox,
145
+ styles: mergedStyles,
146
+ dimensions: mergedDimensions,
147
+ queryable,
148
+ children: [],
149
+ };
150
+ const ancestorsForChildren = [...ancestors, node];
151
+ const children = [];
152
+ for (const child of iterChildLayers(layer.inner, ancestorsForChildren)) {
153
+ children.push(child);
154
+ }
155
+ yield { ...node, children };
156
+ cursor = layer.endIndex;
157
+ }
158
+ }
159
+ function mergeAncestors(ancestors) {
160
+ if (ancestors.length === 0) {
161
+ return { crs: [], bbox: [], styles: [], dimensions: [], queryable: false };
162
+ }
163
+ let crs = [];
164
+ let bbox = [];
165
+ let styles = [];
166
+ let dimensions = [];
167
+ let queryable = false;
168
+ for (const ancestor of ancestors) {
169
+ crs = uniqueOrder([...crs, ...ancestor.crs]);
170
+ bbox = mergeBoundingBoxes(bbox, ancestor.bbox);
171
+ styles = mergeStyles(styles, ancestor.styles);
172
+ dimensions = mergeDimensions(dimensions, ancestor.dimensions);
173
+ queryable = queryable || ancestor.queryable;
174
+ }
175
+ return { crs, bbox, styles, dimensions, queryable };
176
+ }
177
+ function uniqueOrder(values) {
178
+ const seen = new Set();
179
+ const out = [];
180
+ for (const v of values) {
181
+ if (seen.has(v))
182
+ continue;
183
+ seen.add(v);
184
+ out.push(v);
185
+ }
186
+ return out;
187
+ }
188
+ function mergeBoundingBoxes(parent, local) {
189
+ if (local.length === 0)
190
+ return parent;
191
+ const out = [];
192
+ const seen = new Set();
193
+ for (const bb of local) {
194
+ seen.add(bb.crs);
195
+ out.push(bb);
196
+ }
197
+ for (const bb of parent) {
198
+ if (!seen.has(bb.crs))
199
+ out.push(bb);
200
+ }
201
+ return out;
202
+ }
203
+ function mergeStyles(parent, local) {
204
+ if (parent.length === 0)
205
+ return local;
206
+ const seen = new Set(local.map((s) => s.name));
207
+ const out = [...local];
208
+ for (const s of parent) {
209
+ if (!seen.has(s.name))
210
+ out.push(s);
211
+ }
212
+ return out;
213
+ }
214
+ function mergeDimensions(parent, local) {
215
+ if (parent.length === 0)
216
+ return local;
217
+ const seen = new Set(local.map((d) => d.name));
218
+ const out = [...local];
219
+ for (const d of parent) {
220
+ if (!seen.has(d.name))
221
+ out.push(d);
222
+ }
223
+ return out;
224
+ }
225
+ function collectBoundingBoxes(inner) {
226
+ const out = [];
227
+ let cursor = 0;
228
+ while (cursor < inner.length) {
229
+ const node = findElement(inner, cursor, "BoundingBox");
230
+ if (!node)
231
+ break;
232
+ const crs = readAttribute(node.openTag, "CRS") ?? readAttribute(node.openTag, "SRS");
233
+ const minx = parseFloatAttr(node.openTag, "minx");
234
+ const miny = parseFloatAttr(node.openTag, "miny");
235
+ const maxx = parseFloatAttr(node.openTag, "maxx");
236
+ const maxy = parseFloatAttr(node.openTag, "maxy");
237
+ if (crs && Number.isFinite(minx) && Number.isFinite(miny) && Number.isFinite(maxx) && Number.isFinite(maxy)) {
238
+ out.push({ crs, minx, miny, maxx, maxy });
239
+ }
240
+ cursor = node.endIndex;
241
+ }
242
+ // EX_GeographicBoundingBox is the WMS 1.3 alternative geographic bbox node
243
+ // (always WGS84). honua-server emits both; we pull it as a CRS:84 entry
244
+ // when the layer has not advertised one already.
245
+ const geo = findElement(inner, 0, "EX_GeographicBoundingBox");
246
+ if (geo) {
247
+ const w = parseFloatText(readTextElement(geo.inner, "westBoundLongitude"));
248
+ const e = parseFloatText(readTextElement(geo.inner, "eastBoundLongitude"));
249
+ const s = parseFloatText(readTextElement(geo.inner, "southBoundLatitude"));
250
+ const n = parseFloatText(readTextElement(geo.inner, "northBoundLatitude"));
251
+ if (Number.isFinite(w) &&
252
+ Number.isFinite(e) &&
253
+ Number.isFinite(s) &&
254
+ Number.isFinite(n) &&
255
+ !out.some((bb) => bb.crs === "CRS:84")) {
256
+ out.push({ crs: "CRS:84", minx: w, miny: s, maxx: e, maxy: n });
257
+ }
258
+ }
259
+ return out;
260
+ }
261
+ function collectStyles(inner) {
262
+ const out = [];
263
+ let cursor = 0;
264
+ while (cursor < inner.length) {
265
+ const node = findElement(inner, cursor, "Style");
266
+ if (!node)
267
+ break;
268
+ const name = readTextElement(node.inner, "Name") ?? "";
269
+ const title = readTextElement(node.inner, "Title");
270
+ const legend = findElement(node.inner, 0, "LegendURL");
271
+ const onlineResource = legend ? findElement(legend.inner, 0, "OnlineResource") : undefined;
272
+ const legendUrl = onlineResource ? readAttribute(onlineResource.openTag, "xlink:href") : undefined;
273
+ if (name.length > 0) {
274
+ const entry = { name };
275
+ if (title !== undefined)
276
+ entry.title = title;
277
+ if (legendUrl !== undefined)
278
+ entry.legendUrl = legendUrl;
279
+ out.push(entry);
280
+ }
281
+ cursor = node.endIndex;
282
+ }
283
+ return out;
284
+ }
285
+ function collectDimensions(inner) {
286
+ const out = [];
287
+ let cursor = 0;
288
+ while (cursor < inner.length) {
289
+ const node = findElement(inner, cursor, "Dimension");
290
+ if (!node)
291
+ break;
292
+ const name = readAttribute(node.openTag, "name");
293
+ if (typeof name === "string" && name.length > 0) {
294
+ const units = readAttribute(node.openTag, "units");
295
+ const def = readAttribute(node.openTag, "default");
296
+ const text = decodeXmlText(node.inner.trim());
297
+ const values = text.length > 0
298
+ ? text
299
+ .split(",")
300
+ .map((v) => v.trim())
301
+ .filter((v) => v.length > 0)
302
+ : [];
303
+ const dim = { name, values };
304
+ if (units !== undefined)
305
+ dim.units = units;
306
+ if (def !== undefined)
307
+ dim.default = def;
308
+ out.push(dim);
309
+ }
310
+ cursor = node.endIndex;
311
+ }
312
+ return out;
313
+ }
314
+ function collectChildText(inner, tag) {
315
+ const out = [];
316
+ let cursor = 0;
317
+ while (cursor < inner.length) {
318
+ const node = findElement(inner, cursor, tag);
319
+ if (!node)
320
+ break;
321
+ const text = decodeXmlText(node.inner.trim());
322
+ if (text.length > 0)
323
+ out.push(text);
324
+ cursor = node.endIndex;
325
+ }
326
+ return out;
327
+ }
328
+ /**
329
+ * Return `inner` with every nested `<Layer>...</Layer>` (and self-closed
330
+ * `<Layer .../>`) subtree elided. Used by `iterChildLayers` to read the
331
+ * layer's *own* metadata without walking into descendant layers.
332
+ */
333
+ function stripNestedLayers(inner) {
334
+ if (inner.indexOf("<Layer") < 0)
335
+ return inner;
336
+ let cursor = 0;
337
+ let out = "";
338
+ while (cursor < inner.length) {
339
+ const node = findElement(inner, cursor, "Layer");
340
+ if (!node) {
341
+ out += inner.slice(cursor);
342
+ break;
343
+ }
344
+ out += inner.slice(cursor, node.startIndex);
345
+ cursor = node.endIndex;
346
+ }
347
+ return out;
348
+ }
349
+ /**
350
+ * Find the next `<tag …>…</tag>` (or `<tag …/>`) starting at `from`. The
351
+ * search ignores element nesting other than the requested tag and walks
352
+ * a balanced depth counter for the same tag so nested same-name elements
353
+ * (`<Layer>` inside `<Layer>`) terminate against the correct close. Skips
354
+ * XML comments (`<!-- … -->`) and CDATA sections (`<![CDATA[ … ]]>`).
355
+ */
356
+ function findElement(xml, from, tag) {
357
+ let i = from;
358
+ while (i < xml.length) {
359
+ if (xml[i] !== "<") {
360
+ i += 1;
361
+ continue;
362
+ }
363
+ const next = xml[i + 1];
364
+ if (next === "!" && xml.startsWith("<!--", i)) {
365
+ const end = xml.indexOf("-->", i + 4);
366
+ if (end < 0)
367
+ return undefined;
368
+ i = end + 3;
369
+ continue;
370
+ }
371
+ if (next === "!" && xml.startsWith("<![CDATA[", i)) {
372
+ const end = xml.indexOf("]]>", i + 9);
373
+ if (end < 0)
374
+ return undefined;
375
+ i = end + 3;
376
+ continue;
377
+ }
378
+ if (next === "?" || next === "!") {
379
+ const end = xml.indexOf(">", i);
380
+ if (end < 0)
381
+ return undefined;
382
+ i = end + 1;
383
+ continue;
384
+ }
385
+ const isClosing = next === "/";
386
+ const nameStart = isClosing ? i + 2 : i + 1;
387
+ const matchesTag = xml.startsWith(tag, nameStart) && isTagBoundary(xml.charCodeAt(nameStart + tag.length));
388
+ if (!matchesTag) {
389
+ const close = xml.indexOf(">", i);
390
+ if (close < 0)
391
+ return undefined;
392
+ i = close + 1;
393
+ continue;
394
+ }
395
+ const close = xml.indexOf(">", i);
396
+ if (close < 0)
397
+ return undefined;
398
+ const openTag = xml.slice(i, close + 1);
399
+ const selfClosing = !isClosing && xml.charCodeAt(close - 1) === 47; // '/'
400
+ if (selfClosing) {
401
+ return { openTag, inner: "", startIndex: i, endIndex: close + 1 };
402
+ }
403
+ if (isClosing) {
404
+ // unmatched closing tag at this level — caller advanced past the
405
+ // opener. Skip past and keep searching.
406
+ i = close + 1;
407
+ continue;
408
+ }
409
+ // Walk forward looking for the matching close tag, accounting for
410
+ // nested same-name openings.
411
+ let depth = 1;
412
+ let cursor = close + 1;
413
+ while (cursor < xml.length && depth > 0) {
414
+ const angle = xml.indexOf("<", cursor);
415
+ if (angle < 0)
416
+ break;
417
+ const next2 = xml[angle + 1];
418
+ if (next2 === "!" && xml.startsWith("<!--", angle)) {
419
+ const end = xml.indexOf("-->", angle + 4);
420
+ if (end < 0)
421
+ return undefined;
422
+ cursor = end + 3;
423
+ continue;
424
+ }
425
+ if (next2 === "!" && xml.startsWith("<![CDATA[", angle)) {
426
+ const end = xml.indexOf("]]>", angle + 9);
427
+ if (end < 0)
428
+ return undefined;
429
+ cursor = end + 3;
430
+ continue;
431
+ }
432
+ const isCloser = next2 === "/";
433
+ const inspectStart = isCloser ? angle + 2 : angle + 1;
434
+ const matchesSame = xml.startsWith(tag, inspectStart) && isTagBoundary(xml.charCodeAt(inspectStart + tag.length));
435
+ const angleClose = xml.indexOf(">", angle);
436
+ if (angleClose < 0)
437
+ return undefined;
438
+ if (matchesSame) {
439
+ if (isCloser) {
440
+ depth -= 1;
441
+ if (depth === 0) {
442
+ return {
443
+ openTag,
444
+ inner: xml.slice(close + 1, angle),
445
+ startIndex: i,
446
+ endIndex: angleClose + 1,
447
+ };
448
+ }
449
+ }
450
+ else {
451
+ const innerSelfClose = xml.charCodeAt(angleClose - 1) === 47;
452
+ if (!innerSelfClose)
453
+ depth += 1;
454
+ }
455
+ }
456
+ cursor = angleClose + 1;
457
+ }
458
+ return undefined;
459
+ }
460
+ return undefined;
461
+ }
462
+ function isTagBoundary(code) {
463
+ // Whitespace, '/', or '>' terminate a tag name.
464
+ return code === 32 || code === 9 || code === 10 || code === 13 || code === 47 || code === 62;
465
+ }
466
+ function readAttribute(openTag, name) {
467
+ // Match `name="value"` or `name='value'`. Tolerates leading whitespace
468
+ // and case-sensitive name match (WMS attribute names are case-sensitive).
469
+ const idx = findAttributeIndex(openTag, name);
470
+ if (idx < 0)
471
+ return undefined;
472
+ const after = openTag.slice(idx + name.length);
473
+ const eq = after.indexOf("=");
474
+ if (eq < 0)
475
+ return undefined;
476
+ let cursor = eq + 1;
477
+ while (cursor < after.length && /\s/.test(after[cursor]))
478
+ cursor += 1;
479
+ const quote = after[cursor];
480
+ if (quote !== '"' && quote !== "'")
481
+ return undefined;
482
+ const end = after.indexOf(quote, cursor + 1);
483
+ if (end < 0)
484
+ return undefined;
485
+ return decodeXmlText(after.slice(cursor + 1, end));
486
+ }
487
+ function findAttributeIndex(openTag, name) {
488
+ let i = 0;
489
+ while (i < openTag.length) {
490
+ const found = openTag.indexOf(name, i);
491
+ if (found < 0)
492
+ return -1;
493
+ const before = openTag.charCodeAt(found - 1);
494
+ const isBoundaryStart = found === 0 || before === 32 || before === 9 || before === 10 || before === 13;
495
+ const after = openTag.charCodeAt(found + name.length);
496
+ const isBoundaryEnd = after === 61 || after === 32 || after === 9 || after === 10 || after === 13;
497
+ if (isBoundaryStart && isBoundaryEnd) {
498
+ return found;
499
+ }
500
+ i = found + 1;
501
+ }
502
+ return -1;
503
+ }
504
+ function readTextElement(xml, tag) {
505
+ const node = findElement(xml, 0, tag);
506
+ if (!node)
507
+ return undefined;
508
+ const decoded = decodeXmlText(node.inner.trim());
509
+ return decoded;
510
+ }
511
+ function parseFloatAttr(openTag, name) {
512
+ const value = readAttribute(openTag, name);
513
+ if (value === undefined)
514
+ return Number.NaN;
515
+ const parsed = Number(value);
516
+ return Number.isFinite(parsed) ? parsed : Number.NaN;
517
+ }
518
+ function parseFloatText(value) {
519
+ if (value === undefined)
520
+ return Number.NaN;
521
+ const parsed = Number(value);
522
+ return Number.isFinite(parsed) ? parsed : Number.NaN;
523
+ }
524
+ function decodeXmlText(text) {
525
+ if (text.indexOf("&") < 0 && text.indexOf("<![CDATA[") < 0)
526
+ return text;
527
+ return decodeXmlEntities(text);
528
+ }
529
+ /**
530
+ * Walk a parsed `WmsCapabilities` tree and yield every named layer
531
+ * (skipping container layers without a `name`). Useful for descriptor
532
+ * resolution: callers want to bind a `LAYER` name without re-walking
533
+ * the parent hierarchy.
534
+ */
535
+ export function* iterateWmsLayers(capabilities) {
536
+ const stack = [...capabilities.layers];
537
+ while (stack.length > 0) {
538
+ const next = stack.shift();
539
+ if (!next)
540
+ break;
541
+ if (next.name.length > 0)
542
+ yield next;
543
+ for (const child of next.children) {
544
+ stack.push(child);
545
+ }
546
+ }
547
+ }
548
+ /**
549
+ * Find the first named layer with a matching name, or `undefined` if the
550
+ * capabilities document does not advertise it. Walks both root layers and
551
+ * children. Intended for the `HonuaWms.layer(name)` resolver path.
552
+ */
553
+ export function findWmsLayer(capabilities, name) {
554
+ for (const layer of iterateWmsLayers(capabilities)) {
555
+ if (layer.name === name)
556
+ return layer;
557
+ }
558
+ return undefined;
559
+ }
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Public request/response envelopes for the WMS / WMTS first-party
3
+ * adapter. Kept in their own module so the canonical SDK surface
4
+ * (`src/contract/index.ts`, `src/runtime/index.ts`, `src/index.ts`) can
5
+ * re-export them without dragging the runtime classes into trees that
6
+ * never reference WMS.
7
+ *
8
+ * @module
9
+ */
10
+ import type { HonuaTypedFeature } from "./types.js";
11
+ /**
12
+ * Coordinate reference system identifier accepted by WMS 1.3 endpoints.
13
+ * `EPSG:4326`, `EPSG:3857`, `CRS:84` are first-party; any other string is
14
+ * accepted but the adapter will trust the caller for axis order.
15
+ */
16
+ export type WmsCrs = "EPSG:4326" | "EPSG:3857" | "CRS:84" | (string & {});
17
+ /** WMS 1.3 GetMap request envelope. */
18
+ export interface WmsMapRequest {
19
+ /** Layer names. Multiple layers are serialized as a comma-separated `LAYERS=` value. */
20
+ layers: readonly string[];
21
+ /**
22
+ * Style names. When present the array length must match `layers`. An
23
+ * empty array (or a missing entry) selects the layer's default style.
24
+ */
25
+ styles?: readonly string[];
26
+ /** CRS code. Defaults to `EPSG:3857`. */
27
+ crs?: WmsCrs;
28
+ /**
29
+ * Bounding box in the requested CRS. Tuple is the canonical
30
+ * `[minx, miny, maxx, maxy]` shape; the adapter swaps axis order when
31
+ * the CRS is `EPSG:4326` (lat,lon) per WMS 1.3 §6.7.3.2.
32
+ */
33
+ bbox: readonly [number, number, number, number];
34
+ width: number;
35
+ height: number;
36
+ /** Image MIME type. Defaults to `image/png`. */
37
+ format?: string;
38
+ /** Whether the rendered image should be transparent. Defaults to `true`. */
39
+ transparent?: boolean;
40
+ /** WMS `TIME` dimension override; falls back to the layer default. */
41
+ time?: string;
42
+ /** WMS `ELEVATION` dimension override. */
43
+ elevation?: string;
44
+ /** Background colour as `0xRRGGBB` or `#RRGGBB`. */
45
+ bgcolor?: string;
46
+ /** Vendor extras forwarded verbatim on the wire. */
47
+ extraParams?: Record<string, string | number | boolean>;
48
+ signal?: AbortSignal;
49
+ }
50
+ /** WMS 1.3 GetFeatureInfo request envelope. */
51
+ export interface WmsFeatureInfoRequest extends WmsMapRequest {
52
+ /** Layers to query. Subset of `layers`. */
53
+ queryLayers: readonly string[];
54
+ /** Pixel column offset within the rendered image. */
55
+ i: number;
56
+ /** Pixel row offset within the rendered image. */
57
+ j: number;
58
+ /** `INFO_FORMAT` MIME type. Defaults to `application/json`. */
59
+ infoFormat?: "application/json" | "text/plain" | "text/html" | (string & {});
60
+ /** Maximum features to return. */
61
+ featureCount?: number;
62
+ }
63
+ /** WMS GetLegendGraphic request envelope. */
64
+ export interface WmsLegendRequest {
65
+ layer: string;
66
+ style?: string;
67
+ format?: string;
68
+ width?: number;
69
+ height?: number;
70
+ signal?: AbortSignal;
71
+ extraParams?: Record<string, string | number | boolean>;
72
+ }
73
+ /**
74
+ * Decoded GetFeatureInfo response. `features` carries the canonical
75
+ * typed-feature shape when the wire response was JSON; non-JSON content
76
+ * is exposed through `bytes` so the protocol escape hatch still owns the
77
+ * raw payload.
78
+ */
79
+ export interface HonuaWmsFeatureInfoResponse<T = Record<string, unknown>> {
80
+ contentType: string;
81
+ /** Decoded features when `infoFormat` was `application/json`. */
82
+ features?: ReadonlyArray<HonuaTypedFeature<T>>;
83
+ /** Raw bytes for non-JSON info formats (text/plain, html, …). */
84
+ bytes?: Uint8Array;
85
+ }
86
+ /** Raw bytes returned by `GetMap` / `GetLegendGraphic`. */
87
+ export interface HonuaWmsImageResponse {
88
+ bytes: Uint8Array;
89
+ contentType: string;
90
+ }
91
+ /** Routing mode for `GetTile`. honua-server advertises both. */
92
+ export type WmtsTileMode = "kvp" | "rest";
93
+ /** WMTS 1.0 GetTile request envelope. */
94
+ export interface WmtsTileRequest {
95
+ layer: string;
96
+ /** Style identifier. Defaults to `default`. */
97
+ style?: string;
98
+ /** TileMatrixSet identifier. Defaults to `WebMercatorQuad`. */
99
+ tileMatrixSet?: string;
100
+ /** TileMatrix identifier (zoom level). */
101
+ tileMatrix: string | number;
102
+ tileRow: number;
103
+ tileCol: number;
104
+ /** Image MIME type. Defaults to `image/png`. */
105
+ format?: string;
106
+ /** Routing mode. Defaults to `rest`. */
107
+ mode?: WmtsTileMode;
108
+ signal?: AbortSignal;
109
+ extraParams?: Record<string, string | number | boolean>;
110
+ }
111
+ /** WMTS 1.0 GetFeatureInfo request envelope. */
112
+ export interface WmtsFeatureInfoRequest extends WmtsTileRequest {
113
+ i: number;
114
+ j: number;
115
+ infoFormat?: "application/json" | "text/plain" | "text/html" | (string & {});
116
+ }
117
+ /** Raw bytes returned by a WMTS `GetTile`. */
118
+ export interface HonuaWmtsTileResponse {
119
+ bytes: Uint8Array;
120
+ contentType: string;
121
+ /** True when the server returned a non-error empty payload (sparse tile). */
122
+ empty: boolean;
123
+ }
124
+ /** WMTS GetFeatureInfo response (mirrors WMS). */
125
+ export type HonuaWmtsFeatureInfoResponse<T = Record<string, unknown>> = HonuaWmsFeatureInfoResponse<T>;
126
+ /** Resolve the RESTful path extension for a WMTS tile `Format` MIME type. */
127
+ export declare function wmtsExtensionForFormat(format: string): string;
128
+ //# sourceMappingURL=wms-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wms-types.d.ts","sourceRoot":"","sources":["../../../src/core/wms-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAIpD;;;;GAIG;AACH,MAAM,MAAM,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE1E,uCAAuC;AACvC,MAAM,WAAW,aAAa;IAC5B,wFAAwF;IACxF,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACxD,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,+CAA+C;AAC/C,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,2CAA2C;IAC3C,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,qDAAqD;IACrD,CAAC,EAAE,MAAM,CAAC;IACV,kDAAkD;IAClD,CAAC,EAAE,MAAM,CAAC;IACV,+DAA+D;IAC/D,UAAU,CAAC,EAAE,kBAAkB,GAAG,YAAY,GAAG,WAAW,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC7E,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACzD;AAED;;;;;GAKG;AACH,MAAM,WAAW,2BAA2B,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,iEAAiE;IACjE,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,2DAA2D;AAC3D,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,gEAAgE;AAChE,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,CAAC;AAE1C,yCAAyC;AACzC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACzD;AAED,gDAAgD;AAChD,MAAM,WAAW,sBAAuB,SAAQ,eAAe;IAC7D,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,CAAC,EAAE,kBAAkB,GAAG,YAAY,GAAG,WAAW,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;CAC9E;AAED,8CAA8C;AAC9C,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,kDAAkD;AAClD,MAAM,MAAM,4BAA4B,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,2BAA2B,CAAC,CAAC,CAAC,CAAC;AAuBvG,6EAA6E;AAC7E,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE7D"}