@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,519 @@
1
+ /**
2
+ * Dynamic vector/query tile contract primitives.
3
+ *
4
+ * The runtime helpers in `src/runtime/query-tiles.ts` use these types to
5
+ * describe query-backed vector tile sources without tying the contract to
6
+ * MapLibre. The descriptor is intentionally serializable except for the
7
+ * optional feature identity hook.
8
+ *
9
+ * @module
10
+ */
11
+ import { trimLeadingSlashes, trimSurroundingSlashes, trimTrailingSlashes } from "../core/path-utils.js";
12
+ import { analyticsSourceId, buildAnalyticsSourceCacheKey, isAnalyticsSourceDescriptor, normalizeAnalyticsSourceDescriptor, } from "./analytics-sources.js";
13
+ export const QUERY_TILE_SERVER_CONTRACT_VERSION = 1;
14
+ export const QUERY_TILE_SERVER_ROUTE_PREFIX = "query-tiles";
15
+ export const QUERY_TILE_SERVER_SOURCE_ROUTE_TEMPLATE = "sources/{sourceId}";
16
+ export const QUERY_TILE_SERVER_TILEJSON_ROUTE_TEMPLATE = `${QUERY_TILE_SERVER_SOURCE_ROUTE_TEMPLATE}/tilejson.json`;
17
+ export const QUERY_TILE_SERVER_TILE_ROUTE_TEMPLATE = `${QUERY_TILE_SERVER_SOURCE_ROUTE_TEMPLATE}/tiles/{z}/{x}/{y}.{format}`;
18
+ export const QUERY_TILE_SERVER_FEATURE_DETAIL_ROUTE_TEMPLATE = `${QUERY_TILE_SERVER_SOURCE_ROUTE_TEMPLATE}/features/{featureId}`;
19
+ export const QUERY_TILE_SERVER_RESPONSE_HEADERS = {
20
+ cacheControl: "Cache-Control",
21
+ etag: "ETag",
22
+ lastModified: "Last-Modified",
23
+ vary: "Vary",
24
+ sourceVersion: "X-Honua-Source-Version",
25
+ featureCount: "X-Honua-Feature-Count",
26
+ maxFeatures: "X-Honua-Max-Features",
27
+ degraded: "X-Honua-Degraded",
28
+ };
29
+ /** Build a canonical query-tile server path for TileJSON, MVT tiles, or detail lookup. */
30
+ export function buildQueryTileServerPath(kind, options) {
31
+ const prefix = normalizeRoutePrefix(options.routePrefix ?? QUERY_TILE_SERVER_ROUTE_PREFIX);
32
+ const sourcePath = QUERY_TILE_SERVER_SOURCE_ROUTE_TEMPLATE.replace("{sourceId}", encodePathSegment(options.sourceId));
33
+ const parts = [prefix, sourcePath];
34
+ if (kind === "tilejson") {
35
+ parts.push("tilejson.json");
36
+ }
37
+ else if (kind === "tile") {
38
+ const tile = options.tileKey ? normalizeQueryTileKey(options.tileKey) : undefined;
39
+ parts.push("tiles", tile ? String(tile.z) : "{z}", tile ? String(tile.x) : "{x}", `${tile ? String(tile.y) : "{y}"}.${options.format ?? "mvt"}`);
40
+ }
41
+ else {
42
+ parts.push("features", options.featureId === undefined ? "{featureId}" : encodePathSegment(options.featureId));
43
+ }
44
+ return `/${parts.filter((part) => part.length > 0).join("/")}`;
45
+ }
46
+ /** Build a canonical query-tile server URL and serialize supported query parameters. */
47
+ export function buildQueryTileServerUrl(kind, options) {
48
+ const url = joinRouteUrl(options.baseUrl, buildQueryTileServerPath(kind, options));
49
+ return appendServerParams(url, queryTileServerRequestParamsFromOptions(options), options.extraParams);
50
+ }
51
+ /** Project a descriptor's query/projection/cache-relevant dimensions into server query params. */
52
+ export function queryTileServerRequestParamsFromDescriptor(descriptor, options = {}) {
53
+ const normalized = normalizeQueryTileSourceDescriptor(descriptor);
54
+ return queryTileServerRequestParamsFromOptions({
55
+ query: options.query ?? normalized.query,
56
+ projection: options.projection ?? normalized.projection,
57
+ params: {
58
+ tileMatrixSet: normalized.tileMatrixSet,
59
+ ...options.params,
60
+ },
61
+ });
62
+ }
63
+ /** Validate and return TileJSON that follows the dynamic query tile contract. */
64
+ export function parseQueryTileJson(value) {
65
+ const record = expectRecord(value, "TileJSON response");
66
+ if (record.tilejson !== "3.0.0") {
67
+ throw new Error('query tile TileJSON response must include tilejson: "3.0.0"');
68
+ }
69
+ if (!Array.isArray(record.tiles) || record.tiles.some((tile) => typeof tile !== "string" || tile.length === 0)) {
70
+ throw new Error("query tile TileJSON response must include non-empty tiles[] strings");
71
+ }
72
+ if (record.vector_layers !== undefined) {
73
+ if (!Array.isArray(record.vector_layers)) {
74
+ throw new Error("query tile TileJSON vector_layers must be an array when present");
75
+ }
76
+ for (const layer of record.vector_layers) {
77
+ const layerRecord = expectRecord(layer, "query tile vector layer");
78
+ if (typeof layerRecord.id !== "string" || layerRecord.id.length === 0) {
79
+ throw new Error("query tile vector layer id is required");
80
+ }
81
+ }
82
+ }
83
+ const metadata = record["honua:queryTiles"];
84
+ if (metadata !== undefined) {
85
+ validateQueryTileServerMetadata(metadata);
86
+ }
87
+ return record;
88
+ }
89
+ /** Validate and return the canonical feature-detail lookup response. */
90
+ export function parseQueryTileFeatureDetailResponse(value) {
91
+ const record = expectRecord(value, "query tile feature detail response");
92
+ if (typeof record.contractVersion !== "number") {
93
+ throw new Error("query tile feature detail response contractVersion is required");
94
+ }
95
+ const identity = expectRecord(record.identity, "query tile feature detail identity");
96
+ if (typeof identity.sourceId !== "string" || identity.sourceId.length === 0) {
97
+ throw new Error("query tile feature detail identity.sourceId is required");
98
+ }
99
+ if (!isFeatureId(identity.id)) {
100
+ throw new Error("query tile feature detail identity.id is required");
101
+ }
102
+ if (typeof record.found !== "boolean") {
103
+ throw new Error("query tile feature detail response found flag is required");
104
+ }
105
+ if (record.feature !== null && (record.feature === undefined || typeof record.feature !== "object")) {
106
+ throw new Error("query tile feature detail response feature must be an object or null");
107
+ }
108
+ validateDegradations(record.degraded);
109
+ return record;
110
+ }
111
+ /** Validate and return the canonical query-tile server error envelope. */
112
+ export function parseQueryTileServerErrorResponse(value) {
113
+ const record = expectRecord(value, "query tile server error response");
114
+ if (typeof record.contractVersion !== "number") {
115
+ throw new Error("query tile server error response contractVersion is required");
116
+ }
117
+ const error = expectRecord(record.error, "query tile server error");
118
+ if (typeof error.code !== "string" || error.code.length === 0) {
119
+ throw new Error("query tile server error code is required");
120
+ }
121
+ if (typeof error.message !== "string" || error.message.length === 0) {
122
+ throw new Error("query tile server error message is required");
123
+ }
124
+ if (error.status !== undefined && typeof error.status !== "number") {
125
+ throw new Error("query tile server error status must be a number when present");
126
+ }
127
+ validateDegradations(error.degraded);
128
+ return record;
129
+ }
130
+ /** Build a normalized descriptor from a source id, descriptor, or Source handle. */
131
+ export function defineQueryTileSource(options) {
132
+ const sourceDescriptor = resolveSourceDescriptor(options.source);
133
+ const analyticsSource = resolveAnalyticsSourceDescriptor(options.source);
134
+ const sourceId = options.sourceId ??
135
+ sourceDescriptor?.id ??
136
+ (analyticsSource ? analyticsSourceId(analyticsSource) : String(options.source));
137
+ const protocol = options.protocol ?? sourceDescriptor?.protocol;
138
+ return normalizeQueryTileSourceDescriptor({
139
+ ...options,
140
+ kind: "query-vector-tile",
141
+ id: options.id,
142
+ sourceId,
143
+ source: sourceDescriptor,
144
+ analyticsSource,
145
+ protocol,
146
+ });
147
+ }
148
+ /** Normalize defaults and validate the descriptor's stable identity fields. */
149
+ export function normalizeQueryTileSourceDescriptor(descriptor) {
150
+ if (!descriptor.id || typeof descriptor.id !== "string") {
151
+ throw new Error("QueryTileSourceDescriptor.id is required");
152
+ }
153
+ if (!descriptor.sourceId || typeof descriptor.sourceId !== "string") {
154
+ throw new Error("QueryTileSourceDescriptor.sourceId is required");
155
+ }
156
+ const protocol = descriptor.protocol ?? descriptor.source?.protocol;
157
+ const analyticsSource = descriptor.analyticsSource
158
+ ? normalizeAnalyticsSourceDescriptor(descriptor.analyticsSource)
159
+ : undefined;
160
+ return {
161
+ ...descriptor,
162
+ kind: "query-vector-tile",
163
+ protocol,
164
+ ...(analyticsSource ? { analyticsSource } : {}),
165
+ format: descriptor.format ?? "mvt",
166
+ scheme: descriptor.scheme ?? "xyz",
167
+ tileMatrixSet: descriptor.tileMatrixSet ?? descriptor.source?.locator.tileMatrixSetId,
168
+ attribution: descriptor.attribution ?? descriptor.source?.attribution,
169
+ };
170
+ }
171
+ /** Normalize XYZ / OGC tile aliases into a canonical, wrapped XYZ key. */
172
+ export function normalizeQueryTileKey(input) {
173
+ const z = parseInteger(input.z ?? input.tileMatrix, "z");
174
+ const x = parseInteger(input.x ?? input.tileCol, "x");
175
+ const y = parseInteger(input.y ?? input.tileRow, "y");
176
+ if (z < 0)
177
+ throw new Error("tile z must be >= 0");
178
+ const tileCount = 2 ** z;
179
+ const wrappedX = ((x % tileCount) + tileCount) % tileCount;
180
+ const clampedY = Math.min(tileCount - 1, Math.max(0, y));
181
+ return { z, x: wrappedX, y: clampedY };
182
+ }
183
+ export function queryTileKeyString(input) {
184
+ const key = normalizeQueryTileKey(input);
185
+ return `${key.z}/${key.x}/${key.y}`;
186
+ }
187
+ /**
188
+ * Build a stable cache key. The key includes tile coordinate, source id,
189
+ * protocol, tile matrix set, query, projection, style filters, source
190
+ * version, and authorization scope.
191
+ */
192
+ export function buildQueryTileCacheKey(descriptor, tileKey, options = {}) {
193
+ const normalizedDescriptor = normalizeQueryTileSourceDescriptor(descriptor);
194
+ const key = normalizeQueryTileKey(tileKey);
195
+ const cacheIdentity = {
196
+ ...(normalizedDescriptor.cache?.key ?? {}),
197
+ ...(options.cache ?? {}),
198
+ };
199
+ const payload = {
200
+ v: 1,
201
+ kind: normalizedDescriptor.kind,
202
+ descriptorId: normalizedDescriptor.id,
203
+ sourceId: normalizedDescriptor.sourceId,
204
+ protocol: normalizedDescriptor.protocol,
205
+ analyticsSource: normalizedDescriptor.analyticsSource
206
+ ? buildAnalyticsSourceCacheKey(normalizedDescriptor.analyticsSource, {
207
+ cache: {
208
+ sourceVersion: cacheIdentity.sourceVersion,
209
+ authorizationScope: cacheIdentity.authorizationScope,
210
+ filters: normalizedDescriptor.query?.where,
211
+ indexResolution: typeof cacheIdentity.extra?.indexResolution === "number"
212
+ ? cacheIdentity.extra.indexResolution
213
+ : undefined,
214
+ projection: normalizeProjection(normalizedDescriptor.projection),
215
+ styleProjection: cacheIdentity.styleFilters,
216
+ extra: cacheIdentity.extra,
217
+ },
218
+ operation: "tiles",
219
+ })
220
+ : undefined,
221
+ tileMatrixSet: normalizedDescriptor.tileMatrixSet,
222
+ format: normalizedDescriptor.format,
223
+ tile: key,
224
+ query: normalizeSerializableQuery(normalizedDescriptor.query),
225
+ projection: normalizeProjection(normalizedDescriptor.projection),
226
+ styleFilters: cacheIdentity.styleFilters,
227
+ sourceVersion: cacheIdentity.sourceVersion,
228
+ authorizationScope: cacheIdentity.authorizationScope,
229
+ extra: cacheIdentity.extra,
230
+ };
231
+ return `${options.prefix ?? "honua-query-tile"}:${stableJson(payload)}`;
232
+ }
233
+ /** Map a rendered tile feature back to canonical source + feature identity. */
234
+ export function mapQueryTileFeatureIdentity(descriptor, feature) {
235
+ const normalized = normalizeQueryTileSourceDescriptor(descriptor);
236
+ const properties = featureProperties(feature);
237
+ const sourceLayer = readStringProperty(properties, normalized.featureIdentity?.sourceLayerProperty) ?? featureSourceLayer(feature);
238
+ const context = {
239
+ descriptor: normalized,
240
+ sourceId: normalized.sourceId,
241
+ sourceLayer,
242
+ properties,
243
+ };
244
+ const mapped = normalized.featureIdentity?.mapFeature?.(feature, context);
245
+ if (mapped)
246
+ return mapped;
247
+ const sourceId = readStringProperty(properties, normalized.featureIdentity?.sourceIdProperty) ?? normalized.sourceId;
248
+ const id = readFeatureId(feature, properties, normalized.featureIdentity, sourceLayer);
249
+ if (id === undefined)
250
+ return undefined;
251
+ return {
252
+ sourceId,
253
+ id,
254
+ ...(sourceLayer ? { sourceLayer } : {}),
255
+ properties,
256
+ feature,
257
+ };
258
+ }
259
+ /** Build the canonical Source.query() request for selected-tile-feature detail. */
260
+ export function buildQueryTileFeatureDetailQuery(options) {
261
+ const idField = options.idField ??
262
+ firstString(options.descriptor?.featureIdentity?.idProperty) ??
263
+ firstString(options.descriptor?.featureIdentity?.promoteId);
264
+ const detailWhere = typeof options.where === "function"
265
+ ? options.where(options.target)
266
+ : (options.where ?? (idField ? `${idField} = ${sqlLiteral(options.target.id)}` : undefined));
267
+ if (!detailWhere) {
268
+ throw new Error("query tile feature detail requires idField, descriptor.featureIdentity.idProperty, or where");
269
+ }
270
+ const base = options.baseQuery ?? {};
271
+ return {
272
+ ...base,
273
+ where: combineWhere(base.where, detailWhere),
274
+ outFields: options.outFields ?? base.outFields,
275
+ returnGeometry: options.returnGeometry ?? base.returnGeometry ?? true,
276
+ pagination: { ...(base.pagination ?? {}), limit: 1 },
277
+ ...(options.signal ? { signal: options.signal } : {}),
278
+ };
279
+ }
280
+ /** Load a selected tile feature through the canonical Source detail path. */
281
+ export async function loadQueryTileFeatureDetail(options) {
282
+ const result = await options.source.query(buildQueryTileFeatureDetailQuery(options));
283
+ return result.features[0];
284
+ }
285
+ /** Stable JSON for cache keys and diagnostics snapshots. */
286
+ export function stableJson(value) {
287
+ return JSON.stringify(sortJson(value));
288
+ }
289
+ function resolveSourceDescriptor(source) {
290
+ if (typeof source === "string")
291
+ return undefined;
292
+ if (isAnalyticsSourceDescriptor(source))
293
+ return undefined;
294
+ const maybeSource = source;
295
+ if (maybeSource.descriptor)
296
+ return maybeSource.descriptor;
297
+ const maybeDescriptor = source;
298
+ if (typeof maybeDescriptor.id === "string" && typeof maybeDescriptor.protocol === "string") {
299
+ return maybeDescriptor;
300
+ }
301
+ return undefined;
302
+ }
303
+ function resolveAnalyticsSourceDescriptor(source) {
304
+ return isAnalyticsSourceDescriptor(source) ? normalizeAnalyticsSourceDescriptor(source) : undefined;
305
+ }
306
+ function queryTileServerRequestParamsFromOptions(options) {
307
+ return {
308
+ where: options.query?.where,
309
+ outFields: options.query?.outFields,
310
+ returnGeometry: options.query?.returnGeometry,
311
+ outSr: options.query?.outSr,
312
+ projection: options.projection?.fields,
313
+ projectionReturnGeometry: options.projection?.returnGeometry,
314
+ simplifyTolerance: options.projection?.simplifyTolerance,
315
+ ...(options.params ?? {}),
316
+ };
317
+ }
318
+ function normalizeRoutePrefix(prefix) {
319
+ return trimSurroundingSlashes(prefix);
320
+ }
321
+ function encodePathSegment(value) {
322
+ return encodeURIComponent(String(value));
323
+ }
324
+ function joinRouteUrl(baseUrl, path) {
325
+ const [basePath, query = ""] = baseUrl.split("?", 2);
326
+ const joined = `${trimTrailingSlashes(basePath)}/${trimLeadingSlashes(path)}`;
327
+ return query ? `${joined}?${query}` : joined;
328
+ }
329
+ function appendServerParams(url, params, extraParams) {
330
+ const searchParams = new URLSearchParams();
331
+ for (const [key, value] of Object.entries({ ...params, ...(extraParams ?? {}) })) {
332
+ const serialized = serverParamValue(value);
333
+ if (serialized === undefined)
334
+ continue;
335
+ searchParams.set(key, serialized);
336
+ }
337
+ const query = searchParams.toString();
338
+ if (!query)
339
+ return url;
340
+ return `${url}${url.includes("?") ? "&" : "?"}${query}`;
341
+ }
342
+ function serverParamValue(value) {
343
+ if (value === undefined || value === null)
344
+ return undefined;
345
+ if (Array.isArray(value))
346
+ return value.join(",");
347
+ if (typeof value === "object")
348
+ return stableJson(value);
349
+ return String(value);
350
+ }
351
+ function expectRecord(value, label) {
352
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
353
+ throw new Error(`${label} must be an object`);
354
+ }
355
+ return value;
356
+ }
357
+ function validateQueryTileServerMetadata(value) {
358
+ const metadata = expectRecord(value, "query tile TileJSON honua:queryTiles metadata");
359
+ if (typeof metadata.contractVersion !== "number") {
360
+ throw new Error("query tile TileJSON metadata contractVersion is required");
361
+ }
362
+ if (typeof metadata.sourceId !== "string" || metadata.sourceId.length === 0) {
363
+ throw new Error("query tile TileJSON metadata sourceId is required");
364
+ }
365
+ if (typeof metadata.tileMatrixSet !== "string" || metadata.tileMatrixSet.length === 0) {
366
+ throw new Error("query tile TileJSON metadata tileMatrixSet is required");
367
+ }
368
+ if (metadata.format !== "mvt" && metadata.format !== "geojson") {
369
+ throw new Error("query tile TileJSON metadata format must be mvt or geojson");
370
+ }
371
+ if (metadata.spatialReference === undefined) {
372
+ throw new Error("query tile TileJSON metadata spatialReference is required");
373
+ }
374
+ const identity = expectRecord(metadata.featureIdentity, "query tile TileJSON featureIdentity");
375
+ if (typeof identity.sourceId !== "string" || identity.sourceId.length === 0) {
376
+ throw new Error("query tile TileJSON featureIdentity.sourceId is required");
377
+ }
378
+ if (typeof identity.idProperty !== "string" && !Array.isArray(identity.idProperty)) {
379
+ throw new Error("query tile TileJSON featureIdentity.idProperty is required");
380
+ }
381
+ if (typeof metadata.detailUrlTemplate !== "string" || metadata.detailUrlTemplate.length === 0) {
382
+ throw new Error("query tile TileJSON metadata detailUrlTemplate is required");
383
+ }
384
+ validateDegradations(metadata.degraded);
385
+ }
386
+ function validateDegradations(value) {
387
+ if (value === undefined)
388
+ return;
389
+ if (!Array.isArray(value))
390
+ throw new Error("query tile degraded must be an array when present");
391
+ for (const item of value) {
392
+ const degradation = expectRecord(item, "query tile degradation");
393
+ if (typeof degradation.code !== "string" || degradation.code.length === 0) {
394
+ throw new Error("query tile degradation code is required");
395
+ }
396
+ if (!["info", "warning", "error"].includes(String(degradation.severity))) {
397
+ throw new Error("query tile degradation severity must be info, warning, or error");
398
+ }
399
+ if (typeof degradation.message !== "string" || degradation.message.length === 0) {
400
+ throw new Error("query tile degradation message is required");
401
+ }
402
+ }
403
+ }
404
+ function normalizeSerializableQuery(query) {
405
+ if (!query)
406
+ return undefined;
407
+ return sortJson(query);
408
+ }
409
+ function normalizeProjection(projection) {
410
+ if (!projection)
411
+ return undefined;
412
+ return {
413
+ ...projection,
414
+ fields: projection.fields ? [...projection.fields] : undefined,
415
+ };
416
+ }
417
+ function parseInteger(value, label) {
418
+ if (value === undefined || value === null || value === "") {
419
+ throw new Error(`tile ${label} is required`);
420
+ }
421
+ const parsed = typeof value === "number" ? value : Number(value);
422
+ if (!Number.isInteger(parsed) || !Number.isFinite(parsed)) {
423
+ throw new Error(`tile ${label} must be an integer`);
424
+ }
425
+ return parsed;
426
+ }
427
+ function sortJson(value) {
428
+ if (Array.isArray(value))
429
+ return value.map(sortJson);
430
+ if (!value || typeof value !== "object")
431
+ return value;
432
+ if (value instanceof Date)
433
+ return value.toISOString();
434
+ const input = value;
435
+ const out = {};
436
+ for (const key of Object.keys(input).sort()) {
437
+ const next = input[key];
438
+ if (typeof next === "undefined" || typeof next === "function" || typeof next === "symbol")
439
+ continue;
440
+ out[key] = sortJson(next);
441
+ }
442
+ return out;
443
+ }
444
+ function featureProperties(feature) {
445
+ if (!feature || typeof feature !== "object")
446
+ return {};
447
+ const properties = feature.properties;
448
+ if (properties && typeof properties === "object")
449
+ return properties;
450
+ const attributes = feature.attributes;
451
+ if (attributes && typeof attributes === "object")
452
+ return attributes;
453
+ return {};
454
+ }
455
+ function featureSourceLayer(feature) {
456
+ if (!feature || typeof feature !== "object")
457
+ return undefined;
458
+ const direct = feature.sourceLayer;
459
+ if (typeof direct === "string" && direct.length > 0)
460
+ return direct;
461
+ const layer = feature.layer;
462
+ const sourceLayer = layer?.sourceLayer ?? layer?.["source-layer"];
463
+ return typeof sourceLayer === "string" && sourceLayer.length > 0 ? sourceLayer : undefined;
464
+ }
465
+ function readFeatureId(feature, properties, identity, sourceLayer) {
466
+ const explicitId = readFeatureIdProperty(properties, identity?.idProperty);
467
+ if (explicitId !== undefined)
468
+ return explicitId;
469
+ const promoted = promoteIdProperty(identity?.promoteId, sourceLayer);
470
+ const promotedId = readFeatureIdProperty(properties, promoted);
471
+ if (promotedId !== undefined)
472
+ return promotedId;
473
+ if (feature && typeof feature === "object") {
474
+ const featureId = feature.id;
475
+ if (isFeatureId(featureId))
476
+ return featureId;
477
+ }
478
+ return readFeatureIdProperty(properties, ["id", "OBJECTID", "objectId", "fid"]);
479
+ }
480
+ function promoteIdProperty(promoteId, sourceLayer) {
481
+ if (typeof promoteId === "string")
482
+ return promoteId;
483
+ if (promoteId && sourceLayer)
484
+ return promoteId[sourceLayer];
485
+ return undefined;
486
+ }
487
+ function readFeatureIdProperty(properties, property) {
488
+ const keys = typeof property === "string" ? [property] : (property ?? []);
489
+ for (const key of keys) {
490
+ const value = properties[key];
491
+ if (isFeatureId(value))
492
+ return value;
493
+ }
494
+ return undefined;
495
+ }
496
+ function readStringProperty(properties, property) {
497
+ if (!property)
498
+ return undefined;
499
+ const value = properties[property];
500
+ return typeof value === "string" && value.length > 0 ? value : undefined;
501
+ }
502
+ function isFeatureId(value) {
503
+ return typeof value === "string" || (typeof value === "number" && Number.isFinite(value));
504
+ }
505
+ function firstString(value) {
506
+ if (typeof value === "string")
507
+ return value;
508
+ if (Array.isArray(value))
509
+ return value.find((item) => typeof item === "string" && item.length > 0);
510
+ return undefined;
511
+ }
512
+ function sqlLiteral(value) {
513
+ return typeof value === "number" ? String(value) : `'${value.replaceAll("'", "''")}'`;
514
+ }
515
+ function combineWhere(base, detail) {
516
+ if (!base || base.trim().length === 0)
517
+ return detail;
518
+ return `(${base}) AND (${detail})`;
519
+ }