@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,478 @@
1
+ /**
2
+ * Hand-rolled XML walker for the two WFS surfaces that the canonical adapter
3
+ * actually has to read: `wfs:WFS_Capabilities` (operation list, output formats
4
+ * by operation, advertised feature types, filter capabilities, stored-query
5
+ * names) and `ows:ExceptionReport` (turned into `HonuaWfsExceptionError`).
6
+ *
7
+ * Scope is intentionally narrow — never touches feature payloads, only
8
+ * metadata XML — so a hand-rolled walker beats pulling in a generic XML
9
+ * parser as a runtime dependency. The walker:
10
+ *
11
+ * - Refuses any document with `<!DOCTYPE …>` or `<!ENTITY …>` declarations.
12
+ * Stops XXE-class attacks before any property is read.
13
+ * - Is namespace-aware in the loose sense: it matches local element names
14
+ * (the suffix after `:`) and ignores prefixes, since WFS 2.0 uses several
15
+ * different prefix conventions in the wild.
16
+ * - Returns plain typed structs — no dependency on `xmldom`,
17
+ * `fast-xml-parser`, or other third-party libraries.
18
+ *
19
+ * @module
20
+ */
21
+ import { HonuaWfsExceptionError } from "./errors.js";
22
+ /**
23
+ * Parse a WFS `GetCapabilities` document. Throws when the document declares
24
+ * a DOCTYPE / ENTITY (XXE defense) or when the root element is not
25
+ * `WFS_Capabilities` / not parseable.
26
+ */
27
+ export function parseWfsCapabilities(xml) {
28
+ const root = parseXml(xml);
29
+ if (root.local !== "WFS_Capabilities") {
30
+ if (root.local === "ExceptionReport") {
31
+ const report = parseExceptionFromRoot(root);
32
+ throw new HonuaWfsExceptionError(report.exceptionCode, report.message, report.locator);
33
+ }
34
+ throw new Error(`WFS GetCapabilities: expected <WFS_Capabilities>, got <${root.qname}>`);
35
+ }
36
+ const version = root.attributes.version;
37
+ const operationsList = findChild(root, "OperationsMetadata")
38
+ ? findChildren(findChildOrThrow(root, "OperationsMetadata"), "Operation")
39
+ : [];
40
+ const operations = new Map();
41
+ const outputFormatsByOp = new Map();
42
+ for (const op of operationsList) {
43
+ const name = op.attributes.name;
44
+ if (!name)
45
+ continue;
46
+ const methods = [];
47
+ for (const dcp of findChildren(op, "DCP")) {
48
+ const http = findChild(dcp, "HTTP");
49
+ if (!http)
50
+ continue;
51
+ for (const method of http.children) {
52
+ if (method.local === "Get")
53
+ methods.push("GET");
54
+ if (method.local === "Post")
55
+ methods.push("POST");
56
+ }
57
+ }
58
+ const outputFormats = [];
59
+ for (const param of findChildren(op, "Parameter")) {
60
+ if (param.attributes.name?.toLowerCase() !== "outputformat")
61
+ continue;
62
+ for (const allowed of findChildren(param, "AllowedValues")) {
63
+ for (const value of findChildren(allowed, "Value")) {
64
+ const text = value.text.trim();
65
+ if (text)
66
+ outputFormats.push(text.toLowerCase());
67
+ }
68
+ }
69
+ // Older WFS servers advertise output formats as direct <Value> children
70
+ // of <Parameter> instead of nested in <AllowedValues>.
71
+ for (const value of findChildren(param, "Value")) {
72
+ const text = value.text.trim();
73
+ if (text)
74
+ outputFormats.push(text.toLowerCase());
75
+ }
76
+ }
77
+ operations.set(name, {
78
+ name,
79
+ methods: [...new Set(methods)],
80
+ outputFormats,
81
+ });
82
+ outputFormatsByOp.set(name, outputFormats);
83
+ }
84
+ const featureTypeList = findChild(root, "FeatureTypeList");
85
+ const featureTypes = [];
86
+ if (featureTypeList) {
87
+ for (const ft of findChildren(featureTypeList, "FeatureType")) {
88
+ const nameNode = findChild(ft, "Name");
89
+ const titleNode = findChild(ft, "Title");
90
+ const defaultCrsNode = findChild(ft, "DefaultCRS") ?? findChild(ft, "DefaultSRS");
91
+ const bboxNode = findChild(ft, "WGS84BoundingBox");
92
+ const lowerCorner = bboxNode ? findChild(bboxNode, "LowerCorner") : undefined;
93
+ const upperCorner = bboxNode ? findChild(bboxNode, "UpperCorner") : undefined;
94
+ const entry = {
95
+ name: nameNode?.text.trim() ?? "",
96
+ };
97
+ if (titleNode?.text)
98
+ entry.title = titleNode.text.trim();
99
+ if (defaultCrsNode?.text)
100
+ entry.defaultCrs = defaultCrsNode.text.trim();
101
+ if (lowerCorner && upperCorner) {
102
+ const [xmin, ymin] = lowerCorner.text.trim().split(/\s+/).map(Number);
103
+ const [xmax, ymax] = upperCorner.text.trim().split(/\s+/).map(Number);
104
+ if (Number.isFinite(xmin) && Number.isFinite(ymin) && Number.isFinite(xmax) && Number.isFinite(ymax)) {
105
+ entry.wgs84BoundingBox = { xmin, ymin, xmax, ymax };
106
+ }
107
+ }
108
+ if (entry.name)
109
+ featureTypes.push(entry);
110
+ }
111
+ }
112
+ const filterCapabilities = parseFilterCapabilities(findChild(root, "Filter_Capabilities"));
113
+ const storedQueryNames = parseStoredQueryNames(root);
114
+ const snapshot = {
115
+ operations,
116
+ outputFormatsByOp,
117
+ featureTypes,
118
+ filterCapabilities,
119
+ storedQueryNames,
120
+ };
121
+ if (version)
122
+ snapshot.version = version;
123
+ return snapshot;
124
+ }
125
+ /**
126
+ * Parse an `ows:ExceptionReport` document into structured fields. Used when
127
+ * the client sees a non-200 response carrying an XML body or when a
128
+ * GetCapabilities call returns an ExceptionReport.
129
+ */
130
+ export function parseWfsExceptionReport(xml) {
131
+ const root = parseXml(xml);
132
+ if (root.local !== "ExceptionReport") {
133
+ throw new Error(`WFS ExceptionReport: expected <ExceptionReport>, got <${root.qname}>`);
134
+ }
135
+ return parseExceptionFromRoot(root);
136
+ }
137
+ function parseExceptionFromRoot(root) {
138
+ const exception = findChild(root, "Exception");
139
+ if (!exception) {
140
+ return { exceptionCode: "UnknownException", message: "ExceptionReport without <Exception>" };
141
+ }
142
+ const code = exception.attributes.exceptionCode ?? "UnknownException";
143
+ const locator = exception.attributes.locator;
144
+ const text = findChild(exception, "ExceptionText");
145
+ const message = text ? text.text.trim() : "";
146
+ const out = {
147
+ exceptionCode: code,
148
+ message: message || code,
149
+ };
150
+ if (locator)
151
+ out.locator = locator;
152
+ return out;
153
+ }
154
+ function parseFilterCapabilities(node) {
155
+ if (!node) {
156
+ return { spatial: [], scalar: [], temporal: [] };
157
+ }
158
+ const spatial = [];
159
+ const scalar = [];
160
+ const temporal = [];
161
+ const spatialOps = findChild(findChild(node, "Spatial_Capabilities"), "SpatialOperators");
162
+ if (spatialOps) {
163
+ for (const op of findChildren(spatialOps, "SpatialOperator")) {
164
+ if (op.attributes.name)
165
+ spatial.push(op.attributes.name);
166
+ }
167
+ }
168
+ const scalarOps = findChild(findChild(node, "Scalar_Capabilities"), "ComparisonOperators");
169
+ if (scalarOps) {
170
+ for (const op of findChildren(scalarOps, "ComparisonOperator")) {
171
+ const text = op.text.trim();
172
+ if (text)
173
+ scalar.push(text);
174
+ }
175
+ }
176
+ const temporalOps = findChild(findChild(node, "Temporal_Capabilities"), "TemporalOperators");
177
+ if (temporalOps) {
178
+ for (const op of findChildren(temporalOps, "TemporalOperator")) {
179
+ if (op.attributes.name)
180
+ temporal.push(op.attributes.name);
181
+ }
182
+ }
183
+ return { spatial, scalar, temporal };
184
+ }
185
+ function parseStoredQueryNames(root) {
186
+ // `wfs:WFS_Capabilities` itself does not carry stored queries; they come
187
+ // back through a separate `ListStoredQueries` operation. Some servers do
188
+ // include a sibling `<wfs:StoredQueries>` block as an extension; capture
189
+ // names if present, otherwise return empty.
190
+ const stored = findChild(root, "StoredQueries");
191
+ if (!stored)
192
+ return [];
193
+ const ids = [];
194
+ for (const sq of findChildren(stored, "StoredQuery")) {
195
+ if (sq.attributes.id)
196
+ ids.push(sq.attributes.id);
197
+ }
198
+ return ids;
199
+ }
200
+ /**
201
+ * Parse the `ListStoredQueriesResponse` body — a flat list of
202
+ * `<wfs:StoredQuery id="...">` elements. Returned by `HonuaWfs.storedQueries()`.
203
+ */
204
+ export function parseListStoredQueriesResponse(xml) {
205
+ const root = parseXml(xml);
206
+ if (root.local !== "ListStoredQueriesResponse") {
207
+ if (root.local === "ExceptionReport") {
208
+ const report = parseExceptionFromRoot(root);
209
+ throw new HonuaWfsExceptionError(report.exceptionCode, report.message, report.locator);
210
+ }
211
+ throw new Error(`WFS ListStoredQueries: expected <ListStoredQueriesResponse>, got <${root.qname}>`);
212
+ }
213
+ const ids = [];
214
+ for (const sq of findChildren(root, "StoredQuery")) {
215
+ if (sq.attributes.id)
216
+ ids.push(sq.attributes.id);
217
+ }
218
+ return ids;
219
+ }
220
+ export function parseWfsTransactionResponse(xml) {
221
+ const root = parseXml(xml);
222
+ if (root.local !== "TransactionResponse") {
223
+ if (root.local === "ExceptionReport") {
224
+ const report = parseExceptionFromRoot(root);
225
+ throw new HonuaWfsExceptionError(report.exceptionCode, report.message, report.locator);
226
+ }
227
+ throw new Error(`WFS Transaction: expected <TransactionResponse>, got <${root.qname}>`);
228
+ }
229
+ const summary = findChild(root, "TransactionSummary");
230
+ const totalInserted = summary ? parseIntOrZero(findChild(summary, "totalInserted")?.text) : 0;
231
+ const totalUpdated = summary ? parseIntOrZero(findChild(summary, "totalUpdated")?.text) : 0;
232
+ const totalDeleted = summary ? parseIntOrZero(findChild(summary, "totalDeleted")?.text) : 0;
233
+ const insertResultsNode = findChild(root, "InsertResults");
234
+ const insertResults = [];
235
+ if (insertResultsNode) {
236
+ for (const feature of findChildren(insertResultsNode, "Feature")) {
237
+ const handle = feature.attributes.handle;
238
+ const ids = [];
239
+ for (const ref of findChildren(feature, "ResourceId")) {
240
+ if (ref.attributes.rid)
241
+ ids.push(ref.attributes.rid);
242
+ }
243
+ // Older WFS implementations used `<ogc:FeatureId fid="...">`.
244
+ for (const ref of findChildren(feature, "FeatureId")) {
245
+ if (ref.attributes.fid)
246
+ ids.push(ref.attributes.fid);
247
+ }
248
+ const entry = { ids };
249
+ if (handle)
250
+ entry.handle = handle;
251
+ insertResults.push(entry);
252
+ }
253
+ }
254
+ return { totalInserted, totalUpdated, totalDeleted, insertResults };
255
+ }
256
+ function parseIntOrZero(value) {
257
+ if (!value)
258
+ return 0;
259
+ const n = Number(value.trim());
260
+ return Number.isFinite(n) ? Math.trunc(n) : 0;
261
+ }
262
+ // ── XML walker ───────────────────────────────────────────────
263
+ /**
264
+ * Parse a small, well-formed XML document into an in-memory tree. The walker
265
+ * intentionally does not try to be a full XML 1.0 parser — it covers the
266
+ * subset that WFS / OWS ExceptionReport / ListStoredQueries / Transaction
267
+ * documents actually emit.
268
+ *
269
+ * Hard-fail on `<!DOCTYPE` / `<!ENTITY` / `<!--` declarations involving
270
+ * external IDs to defend against XXE.
271
+ */
272
+ export function parseXml(xml) {
273
+ if (typeof xml !== "string" || xml.length === 0) {
274
+ throw new Error("WFS XML parser: empty document");
275
+ }
276
+ // XXE / external-entity defense: refuse documents that declare a DOCTYPE
277
+ // (which is the only way to introduce ENTITY declarations in XML 1.0).
278
+ // This is intentionally strict — Honua's WFS surfaces never emit a
279
+ // DOCTYPE, and doing so on third-party servers does not unlock anything
280
+ // we want to read here.
281
+ const lower = xml.toLowerCase();
282
+ if (lower.includes("<!doctype") || lower.includes("<!entity")) {
283
+ throw new Error("WFS XML parser: DOCTYPE / ENTITY declarations are rejected");
284
+ }
285
+ const stripped = stripPrologAndComments(xml);
286
+ const len = stripped.length;
287
+ let i = 0;
288
+ const stack = [];
289
+ let root;
290
+ while (i < len) {
291
+ if (stripped[i] === "<") {
292
+ if (stripped.startsWith("<?", i)) {
293
+ const end = stripped.indexOf("?>", i + 2);
294
+ if (end === -1)
295
+ throw new Error("WFS XML parser: unterminated processing instruction");
296
+ i = end + 2;
297
+ continue;
298
+ }
299
+ if (stripped.startsWith("<!--", i)) {
300
+ const end = stripped.indexOf("-->", i + 4);
301
+ if (end === -1)
302
+ throw new Error("WFS XML parser: unterminated comment");
303
+ i = end + 3;
304
+ continue;
305
+ }
306
+ if (stripped.startsWith("<![CDATA[", i)) {
307
+ const end = stripped.indexOf("]]>", i + 9);
308
+ if (end === -1)
309
+ throw new Error("WFS XML parser: unterminated CDATA");
310
+ const text = stripped.slice(i + 9, end);
311
+ const top = stack[stack.length - 1];
312
+ if (top)
313
+ top.text += text;
314
+ i = end + 3;
315
+ continue;
316
+ }
317
+ // Closing tag.
318
+ if (stripped[i + 1] === "/") {
319
+ const end = stripped.indexOf(">", i + 2);
320
+ if (end === -1)
321
+ throw new Error("WFS XML parser: unterminated closing tag");
322
+ const closing = stripped.slice(i + 2, end).trim();
323
+ const top = stack[stack.length - 1];
324
+ if (!top)
325
+ throw new Error(`WFS XML parser: stray closing tag </${closing}>`);
326
+ if (top.qname !== closing) {
327
+ throw new Error(`WFS XML parser: mismatched closing tag </${closing}> (expected </${top.qname}>)`);
328
+ }
329
+ stack.pop();
330
+ i = end + 1;
331
+ continue;
332
+ }
333
+ // Opening (or self-closing) tag.
334
+ const end = findTagEnd(stripped, i);
335
+ if (end === -1)
336
+ throw new Error("WFS XML parser: unterminated opening tag");
337
+ const inner = stripped.slice(i + 1, end);
338
+ const selfClosing = inner.endsWith("/");
339
+ const tagBody = selfClosing ? inner.slice(0, -1).trim() : inner.trim();
340
+ const { name, attributes } = parseTagBody(tagBody);
341
+ const local = stripPrefix(name);
342
+ const node = {
343
+ local,
344
+ qname: name,
345
+ attributes,
346
+ children: [],
347
+ text: "",
348
+ };
349
+ const top = stack[stack.length - 1];
350
+ if (top)
351
+ top.children.push(node);
352
+ else if (root) {
353
+ throw new Error("WFS XML parser: multiple root elements");
354
+ }
355
+ else {
356
+ root = node;
357
+ }
358
+ if (!selfClosing)
359
+ stack.push(node);
360
+ i = end + 1;
361
+ continue;
362
+ }
363
+ // Text node — accumulate against the current top, decoding entities.
364
+ const next = stripped.indexOf("<", i);
365
+ const text = stripped.slice(i, next === -1 ? len : next);
366
+ const top = stack[stack.length - 1];
367
+ if (top)
368
+ top.text += decodeXmlEntities(text);
369
+ i = next === -1 ? len : next;
370
+ }
371
+ if (stack.length > 0) {
372
+ throw new Error(`WFS XML parser: unclosed element <${stack[stack.length - 1].qname}>`);
373
+ }
374
+ if (!root) {
375
+ throw new Error("WFS XML parser: no root element");
376
+ }
377
+ return root;
378
+ }
379
+ function stripPrologAndComments(xml) {
380
+ // Trim BOM and leading whitespace.
381
+ let out = xml;
382
+ if (out.charCodeAt(0) === 0xfeff)
383
+ out = out.slice(1);
384
+ return out.trim();
385
+ }
386
+ function findTagEnd(xml, start) {
387
+ // The tag body may contain attributes whose values are double- or single-quoted
388
+ // and could legitimately contain `>` characters. Track quote state.
389
+ let i = start + 1;
390
+ let quote;
391
+ while (i < xml.length) {
392
+ const ch = xml[i];
393
+ if (quote) {
394
+ if (ch === quote)
395
+ quote = undefined;
396
+ }
397
+ else if (ch === '"' || ch === "'") {
398
+ quote = ch;
399
+ }
400
+ else if (ch === ">") {
401
+ return i;
402
+ }
403
+ i += 1;
404
+ }
405
+ return -1;
406
+ }
407
+ function parseTagBody(body) {
408
+ const trimmed = body.trim();
409
+ if (!trimmed)
410
+ throw new Error("WFS XML parser: empty tag");
411
+ // Tag name runs to the first whitespace; attributes follow.
412
+ let i = 0;
413
+ while (i < trimmed.length && !/\s/.test(trimmed[i]))
414
+ i += 1;
415
+ const name = trimmed.slice(0, i);
416
+ if (!name)
417
+ throw new Error("WFS XML parser: missing tag name");
418
+ const attributes = {};
419
+ let j = i;
420
+ while (j < trimmed.length) {
421
+ while (j < trimmed.length && /\s/.test(trimmed[j]))
422
+ j += 1;
423
+ if (j >= trimmed.length)
424
+ break;
425
+ const eq = trimmed.indexOf("=", j);
426
+ if (eq === -1)
427
+ break;
428
+ const attrName = trimmed.slice(j, eq).trim();
429
+ let k = eq + 1;
430
+ while (k < trimmed.length && /\s/.test(trimmed[k]))
431
+ k += 1;
432
+ const quote = trimmed[k];
433
+ if (quote !== '"' && quote !== "'") {
434
+ throw new Error(`WFS XML parser: attribute "${attrName}" must be quoted`);
435
+ }
436
+ const close = trimmed.indexOf(quote, k + 1);
437
+ if (close === -1)
438
+ throw new Error(`WFS XML parser: unterminated attribute value for "${attrName}"`);
439
+ const rawValue = trimmed.slice(k + 1, close);
440
+ attributes[stripPrefix(attrName)] = decodeXmlEntities(rawValue);
441
+ j = close + 1;
442
+ }
443
+ return { name, attributes };
444
+ }
445
+ function stripPrefix(name) {
446
+ const idx = name.indexOf(":");
447
+ return idx === -1 ? name : name.slice(idx + 1);
448
+ }
449
+ function decodeXmlEntities(text) {
450
+ if (!text.includes("&"))
451
+ return text;
452
+ return text
453
+ .replaceAll("&lt;", "<")
454
+ .replaceAll("&gt;", ">")
455
+ .replaceAll("&quot;", '"')
456
+ .replaceAll("&apos;", "'")
457
+ .replaceAll("&amp;", "&");
458
+ }
459
+ function findChild(node, local) {
460
+ if (!node)
461
+ return undefined;
462
+ for (const child of node.children) {
463
+ if (child.local === local)
464
+ return child;
465
+ }
466
+ return undefined;
467
+ }
468
+ function findChildOrThrow(node, local) {
469
+ const found = findChild(node, local);
470
+ if (!found)
471
+ throw new Error(`WFS XML parser: missing child <${local}> on <${node.qname}>`);
472
+ return found;
473
+ }
474
+ function findChildren(node, local) {
475
+ if (!node)
476
+ return [];
477
+ return node.children.filter((c) => c.local === local);
478
+ }
@@ -0,0 +1,118 @@
1
+ /**
2
+ * FES 2.0 Filter Encoding emitter for the WFS adapter. Two responsibilities:
3
+ *
4
+ * - Compile the canonical `Query.where` SQL-92-ish expression into a small
5
+ * FES AST. The supported subset is documented in `docs/wfs.md` —
6
+ * comparison operators, `IN`, `BETWEEN`, `LIKE`, `IS NULL`, boolean
7
+ * combinators, parenthesization, and string / number literals. Anything
8
+ * richer (subqueries, function calls, vendor extensions) yields the
9
+ * sentinel `"unsupported"` so the caller throws
10
+ * `HonuaCapabilityNotSupportedError("query")` rather than ship a
11
+ * silent partial filter.
12
+ *
13
+ * - Translate `Query.spatialFilter` into a spatial FES predicate. Only the
14
+ * simple geometries the canonical surface emits are supported — envelope,
15
+ * point, polygon, polyline. Curves and surfaces are out of scope; callers
16
+ * that need them reach the wire through `Source.protocol("wfs")`.
17
+ *
18
+ * The emitter never reaches `fetch`; it returns plain strings the adapter
19
+ * splices into the URL (KVP `filter=`) or the POST body (`<fes:Filter>`).
20
+ *
21
+ * @module
22
+ */
23
+ import type { SpatialFilter } from "./spatial-filter.js";
24
+ /**
25
+ * Sentinel used by the `where` compiler when the input contains a construct
26
+ * the FES emitter does not know how to translate. Callers should treat this
27
+ * as "fail the query" rather than "emit a partial filter".
28
+ */
29
+ export declare const UNSUPPORTED_FES: "unsupported";
30
+ export type FesCompileResult = FesNode | typeof UNSUPPORTED_FES;
31
+ export type FesNode = {
32
+ kind: "and";
33
+ operands: readonly FesNode[];
34
+ } | {
35
+ kind: "or";
36
+ operands: readonly FesNode[];
37
+ } | {
38
+ kind: "not";
39
+ operand: FesNode;
40
+ } | {
41
+ kind: "compare";
42
+ op: FesCompareOp;
43
+ property: string;
44
+ value: FesLiteral;
45
+ } | {
46
+ kind: "between";
47
+ property: string;
48
+ lower: FesLiteral;
49
+ upper: FesLiteral;
50
+ } | {
51
+ kind: "in";
52
+ property: string;
53
+ values: readonly FesLiteral[];
54
+ } | {
55
+ kind: "like";
56
+ property: string;
57
+ pattern: string;
58
+ } | {
59
+ kind: "isNull";
60
+ property: string;
61
+ } | {
62
+ kind: "spatial";
63
+ op: FesSpatialOp;
64
+ property: string;
65
+ gml: string;
66
+ } | {
67
+ kind: "bbox";
68
+ property: string;
69
+ envelope: {
70
+ xmin: number;
71
+ ymin: number;
72
+ xmax: number;
73
+ ymax: number;
74
+ srsName?: string;
75
+ };
76
+ };
77
+ export type FesCompareOp = "=" | "<>" | "<" | "<=" | ">" | ">=";
78
+ export type FesSpatialOp = "Intersects" | "Within" | "Contains" | "Crosses" | "Disjoint" | "Touches" | "Overlaps" | "Equals";
79
+ export type FesLiteral = {
80
+ kind: "string";
81
+ value: string;
82
+ } | {
83
+ kind: "number";
84
+ value: number;
85
+ };
86
+ /**
87
+ * Compile a `Query.where` SQL-92 string into FES AST. Returns
88
+ * `UNSUPPORTED_FES` for inputs the emitter cannot translate; the adapter
89
+ * promotes this to `HonuaCapabilityNotSupportedError("query")`.
90
+ */
91
+ export declare function compileWhere(input: string | undefined): FesCompileResult;
92
+ /**
93
+ * Compile the canonical `SpatialFilter` (Esri-flavored) into the FES spatial
94
+ * leaf the adapter splices into the request. Default geometry property
95
+ * name is `the_geom`; callers may override (some servers use `geometry`,
96
+ * `shape`, etc.).
97
+ */
98
+ export declare function compileSpatialFilter(filter: SpatialFilter, options: {
99
+ geometryProperty: string;
100
+ srsName?: string;
101
+ }): FesCompileResult;
102
+ /**
103
+ * Serialize a list of FES nodes into a single `<fes:Filter>` element. Used
104
+ * for both the POST GetFeature body and (URL-encoded) the KVP `filter=`
105
+ * query parameter.
106
+ *
107
+ * The FES namespace prefix is always `fes` and is bound on the root
108
+ * `<fes:Filter>` element so the result is self-contained.
109
+ */
110
+ export declare function serializeFes(nodes: readonly FesNode[], options?: {
111
+ typeName?: string;
112
+ }): string;
113
+ /**
114
+ * Convert a canonical `CanonicalFeature.geometry` (GeoJSON) into a GML 3.2
115
+ * fragment for `<wfs:Insert>` / `<wfs:Update>` payloads.
116
+ */
117
+ export declare function geoJsonGeometryToGml(geometry: unknown, srsName: string | undefined): string | undefined;
118
+ //# sourceMappingURL=wfs-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wfs-filter.d.ts","sourceRoot":"","sources":["../../../src/core/wfs-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAG,aAAsB,CAAC;AAEtD,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,OAAO,eAAe,CAAC;AAEhE,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACpE;IACE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxF,CAAC;AAEN,MAAM,MAAM,YAAY,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;AAChE,MAAM,MAAM,YAAY,GACpB,YAAY,GACZ,QAAQ,GACR,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,GACT,UAAU,GACV,QAAQ,CAAC;AACb,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/F;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAcxE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD,gBAAgB,CAoClB;AA4ED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAS/F;AA2ID;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAqCvG"}