@honua/app-platform 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 (840) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +11 -0
  3. package/app/index.d.ts +164 -0
  4. package/app/index.d.ts.map +1 -0
  5. package/app/index.js +424 -0
  6. package/app-controller/controller.d.ts +425 -0
  7. package/app-controller/controller.d.ts.map +1 -0
  8. package/app-controller/controller.js +1173 -0
  9. package/app-controller/index.d.ts +14 -0
  10. package/app-controller/index.d.ts.map +1 -0
  11. package/app-controller/index.js +12 -0
  12. package/app-workspace/index.d.ts +421 -0
  13. package/app-workspace/index.d.ts.map +1 -0
  14. package/app-workspace/index.js +722 -0
  15. package/collaboration/client.d.ts +40 -0
  16. package/collaboration/client.d.ts.map +1 -0
  17. package/collaboration/client.js +299 -0
  18. package/collaboration/errors.d.ts +15 -0
  19. package/collaboration/errors.d.ts.map +1 -0
  20. package/collaboration/errors.js +17 -0
  21. package/collaboration/fixture.d.ts +41 -0
  22. package/collaboration/fixture.d.ts.map +1 -0
  23. package/collaboration/fixture.js +362 -0
  24. package/collaboration/index.d.ts +18 -0
  25. package/collaboration/index.d.ts.map +1 -0
  26. package/collaboration/index.js +14 -0
  27. package/collaboration/types.d.ts +240 -0
  28. package/collaboration/types.d.ts.map +1 -0
  29. package/collaboration/types.js +1 -0
  30. package/contract/analytics-sources.d.ts +149 -0
  31. package/contract/analytics-sources.d.ts.map +1 -0
  32. package/contract/analytics-sources.js +235 -0
  33. package/contract/edit-session.d.ts +203 -0
  34. package/contract/edit-session.d.ts.map +1 -0
  35. package/contract/edit-session.js +760 -0
  36. package/contract/edit-sketch.d.ts +91 -0
  37. package/contract/edit-sketch.d.ts.map +1 -0
  38. package/contract/edit-sketch.js +281 -0
  39. package/contract/index.d.ts +63 -0
  40. package/contract/index.d.ts.map +1 -0
  41. package/contract/index.js +52 -0
  42. package/contract/jobs.d.ts +149 -0
  43. package/contract/jobs.d.ts.map +1 -0
  44. package/contract/jobs.js +40 -0
  45. package/contract/pmtiles.d.ts +162 -0
  46. package/contract/pmtiles.d.ts.map +1 -0
  47. package/contract/pmtiles.js +155 -0
  48. package/contract/source.d.ts +447 -0
  49. package/contract/source.d.ts.map +1 -0
  50. package/contract/source.js +3909 -0
  51. package/contract/spatial-aggregation.d.ts +336 -0
  52. package/contract/spatial-aggregation.d.ts.map +1 -0
  53. package/contract/spatial-aggregation.js +298 -0
  54. package/contract/temporal.d.ts +455 -0
  55. package/contract/temporal.d.ts.map +1 -0
  56. package/contract/temporal.js +146 -0
  57. package/contract/tiles.d.ts +370 -0
  58. package/contract/tiles.d.ts.map +1 -0
  59. package/contract/tiles.js +519 -0
  60. package/contract/types.d.ts +694 -0
  61. package/contract/types.d.ts.map +1 -0
  62. package/contract/types.js +183 -0
  63. package/contract/widget-source.d.ts +205 -0
  64. package/contract/widget-source.d.ts.map +1 -0
  65. package/contract/widget-source.js +1473 -0
  66. package/control-plane/client.d.ts +95 -0
  67. package/control-plane/client.d.ts.map +1 -0
  68. package/control-plane/client.js +374 -0
  69. package/control-plane/index.d.ts +18 -0
  70. package/control-plane/index.d.ts.map +1 -0
  71. package/control-plane/index.js +14 -0
  72. package/control-plane/types.d.ts +233 -0
  73. package/control-plane/types.d.ts.map +1 -0
  74. package/control-plane/types.js +7 -0
  75. package/controls/basemap-style-binding.d.ts +54 -0
  76. package/controls/basemap-style-binding.d.ts.map +1 -0
  77. package/controls/basemap-style-binding.js +199 -0
  78. package/controls/basemap-switcher.d.ts +95 -0
  79. package/controls/basemap-switcher.d.ts.map +1 -0
  80. package/controls/basemap-switcher.js +379 -0
  81. package/controls/element-utils.d.ts +48 -0
  82. package/controls/element-utils.d.ts.map +1 -0
  83. package/controls/element-utils.js +78 -0
  84. package/controls/index.d.ts +33 -0
  85. package/controls/index.d.ts.map +1 -0
  86. package/controls/index.js +30 -0
  87. package/controls/layer-list.d.ts +98 -0
  88. package/controls/layer-list.d.ts.map +1 -0
  89. package/controls/layer-list.js +375 -0
  90. package/controls/legend-derive.d.ts +53 -0
  91. package/controls/legend-derive.d.ts.map +1 -0
  92. package/controls/legend-derive.js +196 -0
  93. package/controls/legend.d.ts +104 -0
  94. package/controls/legend.d.ts.map +1 -0
  95. package/controls/legend.js +381 -0
  96. package/controls/swipe-control.d.ts +80 -0
  97. package/controls/swipe-control.d.ts.map +1 -0
  98. package/controls/swipe-control.js +368 -0
  99. package/controls/types.d.ts +227 -0
  100. package/controls/types.d.ts.map +1 -0
  101. package/controls/types.js +11 -0
  102. package/core/auth/client-credentials-provider.d.ts +51 -0
  103. package/core/auth/client-credentials-provider.d.ts.map +1 -0
  104. package/core/auth/client-credentials-provider.js +115 -0
  105. package/core/auth/credential-store.d.ts +52 -0
  106. package/core/auth/credential-store.d.ts.map +1 -0
  107. package/core/auth/credential-store.js +82 -0
  108. package/core/auth/index.d.ts +23 -0
  109. package/core/auth/index.d.ts.map +1 -0
  110. package/core/auth/index.js +20 -0
  111. package/core/auth/oauth2-provider.d.ts +114 -0
  112. package/core/auth/oauth2-provider.d.ts.map +1 -0
  113. package/core/auth/oauth2-provider.js +408 -0
  114. package/core/auth/pkce.d.ts +25 -0
  115. package/core/auth/pkce.d.ts.map +1 -0
  116. package/core/auth/pkce.js +46 -0
  117. package/core/auth/static-providers.d.ts +20 -0
  118. package/core/auth/static-providers.d.ts.map +1 -0
  119. package/core/auth/static-providers.js +26 -0
  120. package/core/auth/token-endpoint.d.ts +40 -0
  121. package/core/auth/token-endpoint.d.ts.map +1 -0
  122. package/core/auth/token-endpoint.js +133 -0
  123. package/core/auth/types.d.ts +144 -0
  124. package/core/auth/types.d.ts.map +1 -0
  125. package/core/auth/types.js +8 -0
  126. package/core/batch.d.ts +37 -0
  127. package/core/batch.d.ts.map +1 -0
  128. package/core/batch.js +79 -0
  129. package/core/cache-state.d.ts +79 -0
  130. package/core/cache-state.d.ts.map +1 -0
  131. package/core/cache-state.js +87 -0
  132. package/core/client.d.ts +607 -0
  133. package/core/client.d.ts.map +1 -0
  134. package/core/client.js +1716 -0
  135. package/core/compatibility.d.ts +18 -0
  136. package/core/compatibility.d.ts.map +1 -0
  137. package/core/compatibility.js +245 -0
  138. package/core/errors.d.ts +139 -0
  139. package/core/errors.d.ts.map +1 -0
  140. package/core/errors.js +176 -0
  141. package/core/esri-geojson.d.ts +66 -0
  142. package/core/esri-geojson.d.ts.map +1 -0
  143. package/core/esri-geojson.js +363 -0
  144. package/core/geoparquet-sql.d.ts +162 -0
  145. package/core/geoparquet-sql.d.ts.map +1 -0
  146. package/core/geoparquet-sql.js +333 -0
  147. package/core/geoservices.d.ts +34 -0
  148. package/core/geoservices.d.ts.map +1 -0
  149. package/core/geoservices.js +434 -0
  150. package/core/grpc-adapter.d.ts +23 -0
  151. package/core/grpc-adapter.d.ts.map +1 -0
  152. package/core/grpc-adapter.js +688 -0
  153. package/core/odata.d.ts +347 -0
  154. package/core/odata.d.ts.map +1 -0
  155. package/core/odata.js +913 -0
  156. package/core/ogc-conformance.d.ts +35 -0
  157. package/core/ogc-conformance.d.ts.map +1 -0
  158. package/core/ogc-conformance.js +134 -0
  159. package/core/ogc-endpoint-layout.d.ts +70 -0
  160. package/core/ogc-endpoint-layout.d.ts.map +1 -0
  161. package/core/ogc-endpoint-layout.js +173 -0
  162. package/core/ogc-features.d.ts +23 -0
  163. package/core/ogc-features.d.ts.map +1 -0
  164. package/core/ogc-features.js +129 -0
  165. package/core/ogc-maps.d.ts +49 -0
  166. package/core/ogc-maps.d.ts.map +1 -0
  167. package/core/ogc-maps.js +126 -0
  168. package/core/ogc-processes.d.ts +118 -0
  169. package/core/ogc-processes.d.ts.map +1 -0
  170. package/core/ogc-processes.js +423 -0
  171. package/core/ogc-records.d.ts +75 -0
  172. package/core/ogc-records.d.ts.map +1 -0
  173. package/core/ogc-records.js +251 -0
  174. package/core/ogc-tiles.d.ts +125 -0
  175. package/core/ogc-tiles.d.ts.map +1 -0
  176. package/core/ogc-tiles.js +183 -0
  177. package/core/path-utils.d.ts +69 -0
  178. package/core/path-utils.d.ts.map +1 -0
  179. package/core/path-utils.js +123 -0
  180. package/core/pbf-decoder.d.ts +39 -0
  181. package/core/pbf-decoder.d.ts.map +1 -0
  182. package/core/pbf-decoder.js +702 -0
  183. package/core/process-runner.d.ts +104 -0
  184. package/core/process-runner.d.ts.map +1 -0
  185. package/core/process-runner.js +315 -0
  186. package/core/protocol-transport.d.ts +76 -0
  187. package/core/protocol-transport.d.ts.map +1 -0
  188. package/core/protocol-transport.js +15 -0
  189. package/core/query-builder.d.ts +261 -0
  190. package/core/query-builder.d.ts.map +1 -0
  191. package/core/query-builder.js +538 -0
  192. package/core/request-pipeline.d.ts +88 -0
  193. package/core/request-pipeline.d.ts.map +1 -0
  194. package/core/request-pipeline.js +273 -0
  195. package/core/spatial-filter.d.ts +93 -0
  196. package/core/spatial-filter.d.ts.map +1 -0
  197. package/core/spatial-filter.js +153 -0
  198. package/core/stac-static.d.ts +51 -0
  199. package/core/stac-static.d.ts.map +1 -0
  200. package/core/stac-static.js +195 -0
  201. package/core/stac.d.ts +67 -0
  202. package/core/stac.d.ts.map +1 -0
  203. package/core/stac.js +259 -0
  204. package/core/surfaces.d.ts +540 -0
  205. package/core/surfaces.d.ts.map +1 -0
  206. package/core/surfaces.js +1964 -0
  207. package/core/terrain-elevation.d.ts +114 -0
  208. package/core/terrain-elevation.d.ts.map +1 -0
  209. package/core/terrain-elevation.js +150 -0
  210. package/core/types.d.ts +1404 -0
  211. package/core/types.d.ts.map +1 -0
  212. package/core/types.js +13 -0
  213. package/core/wfs-capabilities.d.ts +153 -0
  214. package/core/wfs-capabilities.d.ts.map +1 -0
  215. package/core/wfs-capabilities.js +490 -0
  216. package/core/wfs-filter.d.ts +118 -0
  217. package/core/wfs-filter.d.ts.map +1 -0
  218. package/core/wfs-filter.js +634 -0
  219. package/core/wfs.d.ts +232 -0
  220. package/core/wfs.d.ts.map +1 -0
  221. package/core/wfs.js +426 -0
  222. package/core/wire-shared.d.ts +32 -0
  223. package/core/wire-shared.d.ts.map +1 -0
  224. package/core/wire-shared.js +76 -0
  225. package/core/wms-axis.d.ts +36 -0
  226. package/core/wms-axis.d.ts.map +1 -0
  227. package/core/wms-axis.js +73 -0
  228. package/core/wms-capabilities.d.ts +110 -0
  229. package/core/wms-capabilities.d.ts.map +1 -0
  230. package/core/wms-capabilities.js +559 -0
  231. package/core/wms-types.d.ts +128 -0
  232. package/core/wms-types.d.ts.map +1 -0
  233. package/core/wms-types.js +32 -0
  234. package/core/wms.d.ts +144 -0
  235. package/core/wms.d.ts.map +1 -0
  236. package/core/wms.js +338 -0
  237. package/core/wmts-capabilities.d.ts +82 -0
  238. package/core/wmts-capabilities.d.ts.map +1 -0
  239. package/core/wmts-capabilities.js +402 -0
  240. package/core/wmts.d.ts +103 -0
  241. package/core/wmts.d.ts.map +1 -0
  242. package/core/wmts.js +332 -0
  243. package/core/xml-text.d.ts +20 -0
  244. package/core/xml-text.d.ts.map +1 -0
  245. package/core/xml-text.js +85 -0
  246. package/esri-compat/basemap-gallery.d.ts +38 -0
  247. package/esri-compat/basemap-gallery.d.ts.map +1 -0
  248. package/esri-compat/basemap-gallery.js +159 -0
  249. package/esri-compat/basemap-layer-list.d.ts +35 -0
  250. package/esri-compat/basemap-layer-list.d.ts.map +1 -0
  251. package/esri-compat/basemap-layer-list.js +139 -0
  252. package/esri-compat/basemap.d.ts +32 -0
  253. package/esri-compat/basemap.d.ts.map +1 -0
  254. package/esri-compat/basemap.js +84 -0
  255. package/esri-compat/bookmarks.d.ts +36 -0
  256. package/esri-compat/bookmarks.d.ts.map +1 -0
  257. package/esri-compat/bookmarks.js +108 -0
  258. package/esri-compat/class-breaks-renderer.d.ts +50 -0
  259. package/esri-compat/class-breaks-renderer.d.ts.map +1 -0
  260. package/esri-compat/class-breaks-renderer.js +164 -0
  261. package/esri-compat/color.d.ts +22 -0
  262. package/esri-compat/color.d.ts.map +1 -0
  263. package/esri-compat/color.js +106 -0
  264. package/esri-compat/controls.d.ts +174 -0
  265. package/esri-compat/controls.d.ts.map +1 -0
  266. package/esri-compat/controls.js +479 -0
  267. package/esri-compat/coordinate-conversion.d.ts +41 -0
  268. package/esri-compat/coordinate-conversion.d.ts.map +1 -0
  269. package/esri-compat/coordinate-conversion.js +125 -0
  270. package/esri-compat/directions.d.ts +45 -0
  271. package/esri-compat/directions.d.ts.map +1 -0
  272. package/esri-compat/directions.js +123 -0
  273. package/esri-compat/editor.d.ts +47 -0
  274. package/esri-compat/editor.d.ts.map +1 -0
  275. package/esri-compat/editor.js +170 -0
  276. package/esri-compat/esri-config.d.ts +16 -0
  277. package/esri-compat/esri-config.d.ts.map +1 -0
  278. package/esri-compat/esri-config.js +23 -0
  279. package/esri-compat/esri-request.d.ts +17 -0
  280. package/esri-compat/esri-request.d.ts.map +1 -0
  281. package/esri-compat/esri-request.js +127 -0
  282. package/esri-compat/event-bus.d.ts +106 -0
  283. package/esri-compat/event-bus.d.ts.map +1 -0
  284. package/esri-compat/event-bus.js +90 -0
  285. package/esri-compat/expand.d.ts +36 -0
  286. package/esri-compat/expand.d.ts.map +1 -0
  287. package/esri-compat/expand.js +97 -0
  288. package/esri-compat/extent.d.ts +43 -0
  289. package/esri-compat/extent.d.ts.map +1 -0
  290. package/esri-compat/extent.js +140 -0
  291. package/esri-compat/feature-filter.d.ts +55 -0
  292. package/esri-compat/feature-filter.d.ts.map +1 -0
  293. package/esri-compat/feature-filter.js +109 -0
  294. package/esri-compat/feature-form.d.ts +64 -0
  295. package/esri-compat/feature-form.d.ts.map +1 -0
  296. package/esri-compat/feature-form.js +137 -0
  297. package/esri-compat/feature-layer.d.ts +173 -0
  298. package/esri-compat/feature-layer.d.ts.map +1 -0
  299. package/esri-compat/feature-layer.js +661 -0
  300. package/esri-compat/feature-set.d.ts +32 -0
  301. package/esri-compat/feature-set.d.ts.map +1 -0
  302. package/esri-compat/feature-set.js +80 -0
  303. package/esri-compat/feature-table.d.ts +141 -0
  304. package/esri-compat/feature-table.d.ts.map +1 -0
  305. package/esri-compat/feature-table.js +500 -0
  306. package/esri-compat/feature-templates.d.ts +41 -0
  307. package/esri-compat/feature-templates.d.ts.map +1 -0
  308. package/esri-compat/feature-templates.js +97 -0
  309. package/esri-compat/feature.d.ts +33 -0
  310. package/esri-compat/feature.d.ts.map +1 -0
  311. package/esri-compat/feature.js +83 -0
  312. package/esri-compat/geojson-layer.d.ts +86 -0
  313. package/esri-compat/geojson-layer.d.ts.map +1 -0
  314. package/esri-compat/geojson-layer.js +191 -0
  315. package/esri-compat/geometry-engine.d.ts +107 -0
  316. package/esri-compat/geometry-engine.d.ts.map +1 -0
  317. package/esri-compat/geometry-engine.js +266 -0
  318. package/esri-compat/graphic.d.ts +46 -0
  319. package/esri-compat/graphic.d.ts.map +1 -0
  320. package/esri-compat/graphic.js +103 -0
  321. package/esri-compat/graphics-layer.d.ts +49 -0
  322. package/esri-compat/graphics-layer.d.ts.map +1 -0
  323. package/esri-compat/graphics-layer.js +185 -0
  324. package/esri-compat/group-layer.d.ts +48 -0
  325. package/esri-compat/group-layer.d.ts.map +1 -0
  326. package/esri-compat/group-layer.js +212 -0
  327. package/esri-compat/identify.d.ts +71 -0
  328. package/esri-compat/identify.d.ts.map +1 -0
  329. package/esri-compat/identify.js +299 -0
  330. package/esri-compat/identity-manager.d.ts +74 -0
  331. package/esri-compat/identity-manager.d.ts.map +1 -0
  332. package/esri-compat/identity-manager.js +245 -0
  333. package/esri-compat/imagery-layer.d.ts +78 -0
  334. package/esri-compat/imagery-layer.d.ts.map +1 -0
  335. package/esri-compat/imagery-layer.js +167 -0
  336. package/esri-compat/label-class.d.ts +31 -0
  337. package/esri-compat/label-class.d.ts.map +1 -0
  338. package/esri-compat/label-class.js +102 -0
  339. package/esri-compat/layer-list.d.ts +77 -0
  340. package/esri-compat/layer-list.d.ts.map +1 -0
  341. package/esri-compat/layer-list.js +342 -0
  342. package/esri-compat/legend.d.ts +53 -0
  343. package/esri-compat/legend.d.ts.map +1 -0
  344. package/esri-compat/legend.js +254 -0
  345. package/esri-compat/map-image-layer.d.ts +162 -0
  346. package/esri-compat/map-image-layer.d.ts.map +1 -0
  347. package/esri-compat/map-image-layer.js +709 -0
  348. package/esri-compat/map-view.d.ts +323 -0
  349. package/esri-compat/map-view.d.ts.map +1 -0
  350. package/esri-compat/map-view.js +1175 -0
  351. package/esri-compat/map.d.ts +47 -0
  352. package/esri-compat/map.d.ts.map +1 -0
  353. package/esri-compat/map.js +209 -0
  354. package/esri-compat/measurement-2d.d.ts +61 -0
  355. package/esri-compat/measurement-2d.d.ts.map +1 -0
  356. package/esri-compat/measurement-2d.js +184 -0
  357. package/esri-compat/measurement.d.ts +45 -0
  358. package/esri-compat/measurement.d.ts.map +1 -0
  359. package/esri-compat/measurement.js +193 -0
  360. package/esri-compat/oauth-info.d.ts +50 -0
  361. package/esri-compat/oauth-info.d.ts.map +1 -0
  362. package/esri-compat/oauth-info.js +142 -0
  363. package/esri-compat/picture-marker-symbol.d.ts +35 -0
  364. package/esri-compat/picture-marker-symbol.d.ts.map +1 -0
  365. package/esri-compat/picture-marker-symbol.js +126 -0
  366. package/esri-compat/point.d.ts +31 -0
  367. package/esri-compat/point.d.ts.map +1 -0
  368. package/esri-compat/point.js +102 -0
  369. package/esri-compat/polygon.d.ts +31 -0
  370. package/esri-compat/polygon.d.ts.map +1 -0
  371. package/esri-compat/polygon.js +107 -0
  372. package/esri-compat/polyline.d.ts +31 -0
  373. package/esri-compat/polyline.d.ts.map +1 -0
  374. package/esri-compat/polyline.js +107 -0
  375. package/esri-compat/popup-template.d.ts +55 -0
  376. package/esri-compat/popup-template.d.ts.map +1 -0
  377. package/esri-compat/popup-template.js +128 -0
  378. package/esri-compat/popup.d.ts +54 -0
  379. package/esri-compat/popup.d.ts.map +1 -0
  380. package/esri-compat/popup.js +312 -0
  381. package/esri-compat/print.d.ts +47 -0
  382. package/esri-compat/print.d.ts.map +1 -0
  383. package/esri-compat/print.js +105 -0
  384. package/esri-compat/query.d.ts +58 -0
  385. package/esri-compat/query.d.ts.map +1 -0
  386. package/esri-compat/query.js +128 -0
  387. package/esri-compat/reactive-utils.d.ts +24 -0
  388. package/esri-compat/reactive-utils.d.ts.map +1 -0
  389. package/esri-compat/reactive-utils.js +193 -0
  390. package/esri-compat/request.d.ts +41 -0
  391. package/esri-compat/request.d.ts.map +1 -0
  392. package/esri-compat/request.js +253 -0
  393. package/esri-compat/route-layer.d.ts +59 -0
  394. package/esri-compat/route-layer.d.ts.map +1 -0
  395. package/esri-compat/route-layer.js +223 -0
  396. package/esri-compat/route-task.d.ts +88 -0
  397. package/esri-compat/route-task.d.ts.map +1 -0
  398. package/esri-compat/route-task.js +225 -0
  399. package/esri-compat/scene-view.d.ts +41 -0
  400. package/esri-compat/scene-view.d.ts.map +1 -0
  401. package/esri-compat/scene-view.js +68 -0
  402. package/esri-compat/search.d.ts +112 -0
  403. package/esri-compat/search.d.ts.map +1 -0
  404. package/esri-compat/search.js +820 -0
  405. package/esri-compat/simple-fill-symbol.d.ts +27 -0
  406. package/esri-compat/simple-fill-symbol.d.ts.map +1 -0
  407. package/esri-compat/simple-fill-symbol.js +85 -0
  408. package/esri-compat/simple-line-symbol.d.ts +27 -0
  409. package/esri-compat/simple-line-symbol.d.ts.map +1 -0
  410. package/esri-compat/simple-line-symbol.js +85 -0
  411. package/esri-compat/simple-marker-symbol.d.ts +29 -0
  412. package/esri-compat/simple-marker-symbol.d.ts.map +1 -0
  413. package/esri-compat/simple-marker-symbol.js +92 -0
  414. package/esri-compat/simple-renderer.d.ts +29 -0
  415. package/esri-compat/simple-renderer.d.ts.map +1 -0
  416. package/esri-compat/simple-renderer.js +92 -0
  417. package/esri-compat/sketch.d.ts +64 -0
  418. package/esri-compat/sketch.d.ts.map +1 -0
  419. package/esri-compat/sketch.js +227 -0
  420. package/esri-compat/spatial-reference.d.ts +31 -0
  421. package/esri-compat/spatial-reference.d.ts.map +1 -0
  422. package/esri-compat/spatial-reference.js +102 -0
  423. package/esri-compat/swipe.d.ts +34 -0
  424. package/esri-compat/swipe.d.ts.map +1 -0
  425. package/esri-compat/swipe.js +93 -0
  426. package/esri-compat/table-list.d.ts +36 -0
  427. package/esri-compat/table-list.d.ts.map +1 -0
  428. package/esri-compat/table-list.js +126 -0
  429. package/esri-compat/text-symbol.d.ts +37 -0
  430. package/esri-compat/text-symbol.d.ts.map +1 -0
  431. package/esri-compat/text-symbol.js +123 -0
  432. package/esri-compat/tile-layer.d.ts +52 -0
  433. package/esri-compat/tile-layer.d.ts.map +1 -0
  434. package/esri-compat/tile-layer.js +168 -0
  435. package/esri-compat/time-slider.d.ts +70 -0
  436. package/esri-compat/time-slider.d.ts.map +1 -0
  437. package/esri-compat/time-slider.js +208 -0
  438. package/esri-compat/track.d.ts +51 -0
  439. package/esri-compat/track.d.ts.map +1 -0
  440. package/esri-compat/track.js +174 -0
  441. package/esri-compat/unique-value-renderer.d.ts +41 -0
  442. package/esri-compat/unique-value-renderer.d.ts.map +1 -0
  443. package/esri-compat/unique-value-renderer.js +127 -0
  444. package/esri-compat/url.d.ts +13 -0
  445. package/esri-compat/url.d.ts.map +1 -0
  446. package/esri-compat/url.js +68 -0
  447. package/esri-compat/vector-tile-layer.d.ts +47 -0
  448. package/esri-compat/vector-tile-layer.d.ts.map +1 -0
  449. package/esri-compat/vector-tile-layer.js +130 -0
  450. package/esri-compat/web-map.d.ts +14 -0
  451. package/esri-compat/web-map.d.ts.map +1 -0
  452. package/esri-compat/web-map.js +24 -0
  453. package/esri-compat/wfs-layer.d.ts +64 -0
  454. package/esri-compat/wfs-layer.d.ts.map +1 -0
  455. package/esri-compat/wfs-layer.js +145 -0
  456. package/esri-compat/wms-layer.d.ts +76 -0
  457. package/esri-compat/wms-layer.d.ts.map +1 -0
  458. package/esri-compat/wms-layer.js +157 -0
  459. package/exploration/context.d.ts +25 -0
  460. package/exploration/context.d.ts.map +1 -0
  461. package/exploration/context.js +396 -0
  462. package/exploration/index.d.ts +27 -0
  463. package/exploration/index.d.ts.map +1 -0
  464. package/exploration/index.js +24 -0
  465. package/exploration/presets.d.ts +27 -0
  466. package/exploration/presets.d.ts.map +1 -0
  467. package/exploration/presets.js +114 -0
  468. package/exploration/reducer.d.ts +23 -0
  469. package/exploration/reducer.d.ts.map +1 -0
  470. package/exploration/reducer.js +332 -0
  471. package/exploration/selection.d.ts +25 -0
  472. package/exploration/selection.d.ts.map +1 -0
  473. package/exploration/selection.js +34 -0
  474. package/exploration/selectors.d.ts +56 -0
  475. package/exploration/selectors.d.ts.map +1 -0
  476. package/exploration/selectors.js +110 -0
  477. package/exploration/types.d.ts +294 -0
  478. package/exploration/types.d.ts.map +1 -0
  479. package/exploration/types.js +33 -0
  480. package/expr/expression.d.ts +457 -0
  481. package/expr/expression.d.ts.map +1 -0
  482. package/expr/expression.js +663 -0
  483. package/expr/index.d.ts +32 -0
  484. package/expr/index.d.ts.map +1 -0
  485. package/expr/index.js +30 -0
  486. package/filter-registry/index.d.ts +145 -0
  487. package/filter-registry/index.d.ts.map +1 -0
  488. package/filter-registry/index.js +531 -0
  489. package/gen/honua/v1/feature_service_pb.d.ts +918 -0
  490. package/gen/honua/v1/feature_service_pb.d.ts.map +1 -0
  491. package/gen/honua/v1/feature_service_pb.js +375 -0
  492. package/generated-app/errors.d.ts +41 -0
  493. package/generated-app/errors.d.ts.map +1 -0
  494. package/generated-app/errors.js +41 -0
  495. package/generated-app/index.d.ts +17 -0
  496. package/generated-app/index.d.ts.map +1 -0
  497. package/generated-app/index.js +12 -0
  498. package/generated-app/manifest.d.ts +183 -0
  499. package/generated-app/manifest.d.ts.map +1 -0
  500. package/generated-app/manifest.js +14 -0
  501. package/generated-app/projection.d.ts +44 -0
  502. package/generated-app/projection.d.ts.map +1 -0
  503. package/generated-app/projection.js +234 -0
  504. package/generated-app/runtime.d.ts +215 -0
  505. package/generated-app/runtime.d.ts.map +1 -0
  506. package/generated-app/runtime.js +1196 -0
  507. package/geocoding/index.d.ts +106 -0
  508. package/geocoding/index.d.ts.map +1 -0
  509. package/geocoding/index.js +278 -0
  510. package/interactions/detail-model.d.ts +54 -0
  511. package/interactions/detail-model.d.ts.map +1 -0
  512. package/interactions/detail-model.js +105 -0
  513. package/interactions/exploration-bindings.d.ts +120 -0
  514. package/interactions/exploration-bindings.d.ts.map +1 -0
  515. package/interactions/exploration-bindings.js +218 -0
  516. package/interactions/feature-state.d.ts +144 -0
  517. package/interactions/feature-state.d.ts.map +1 -0
  518. package/interactions/feature-state.js +169 -0
  519. package/interactions/hit-test.d.ts +112 -0
  520. package/interactions/hit-test.d.ts.map +1 -0
  521. package/interactions/hit-test.js +291 -0
  522. package/interactions/index.d.ts +31 -0
  523. package/interactions/index.d.ts.map +1 -0
  524. package/interactions/index.js +24 -0
  525. package/interactions/share-state.d.ts +36 -0
  526. package/interactions/share-state.d.ts.map +1 -0
  527. package/interactions/share-state.js +123 -0
  528. package/map/feature-service-adapter.d.ts +138 -0
  529. package/map/feature-service-adapter.d.ts.map +1 -0
  530. package/map/feature-service-adapter.js +279 -0
  531. package/map/honua-map.d.ts +203 -0
  532. package/map/honua-map.d.ts.map +1 -0
  533. package/map/honua-map.js +347 -0
  534. package/map/index.d.ts +27 -0
  535. package/map/index.d.ts.map +1 -0
  536. package/map/index.js +22 -0
  537. package/map/maplibre-target.d.ts +103 -0
  538. package/map/maplibre-target.d.ts.map +1 -0
  539. package/map/maplibre-target.js +164 -0
  540. package/map/webmap-maplibre.d.ts +60 -0
  541. package/map/webmap-maplibre.d.ts.map +1 -0
  542. package/map/webmap-maplibre.js +212 -0
  543. package/operate/client.d.ts +94 -0
  544. package/operate/client.d.ts.map +1 -0
  545. package/operate/client.js +361 -0
  546. package/operate/index.d.ts +22 -0
  547. package/operate/index.d.ts.map +1 -0
  548. package/operate/index.js +19 -0
  549. package/operate/types.d.ts +397 -0
  550. package/operate/types.d.ts.map +1 -0
  551. package/operate/types.js +17 -0
  552. package/operator/client.d.ts +60 -0
  553. package/operator/client.d.ts.map +1 -0
  554. package/operator/client.js +20 -0
  555. package/operator/controllers/approval.d.ts +52 -0
  556. package/operator/controllers/approval.d.ts.map +1 -0
  557. package/operator/controllers/approval.js +123 -0
  558. package/operator/controllers/base.d.ts +27 -0
  559. package/operator/controllers/base.d.ts.map +1 -0
  560. package/operator/controllers/base.js +53 -0
  561. package/operator/controllers/builder-workspace.d.ts +55 -0
  562. package/operator/controllers/builder-workspace.d.ts.map +1 -0
  563. package/operator/controllers/builder-workspace.js +108 -0
  564. package/operator/controllers/chat.d.ts +61 -0
  565. package/operator/controllers/chat.d.ts.map +1 -0
  566. package/operator/controllers/chat.js +154 -0
  567. package/operator/controllers/clarification.d.ts +52 -0
  568. package/operator/controllers/clarification.d.ts.map +1 -0
  569. package/operator/controllers/clarification.js +121 -0
  570. package/operator/controllers/execution.d.ts +60 -0
  571. package/operator/controllers/execution.d.ts.map +1 -0
  572. package/operator/controllers/execution.js +286 -0
  573. package/operator/controllers/index.d.ts +23 -0
  574. package/operator/controllers/index.d.ts.map +1 -0
  575. package/operator/controllers/index.js +15 -0
  576. package/operator/controllers/map-workspace.d.ts +85 -0
  577. package/operator/controllers/map-workspace.d.ts.map +1 -0
  578. package/operator/controllers/map-workspace.js +296 -0
  579. package/operator/controllers/plan-review.d.ts +66 -0
  580. package/operator/controllers/plan-review.d.ts.map +1 -0
  581. package/operator/controllers/plan-review.js +124 -0
  582. package/operator/errors.d.ts +62 -0
  583. package/operator/errors.d.ts.map +1 -0
  584. package/operator/errors.js +75 -0
  585. package/operator/i18n/index.d.ts +10 -0
  586. package/operator/i18n/index.d.ts.map +1 -0
  587. package/operator/i18n/index.js +8 -0
  588. package/operator/i18n/messages.d.ts +19 -0
  589. package/operator/i18n/messages.d.ts.map +1 -0
  590. package/operator/i18n/messages.js +54 -0
  591. package/operator/index.d.ts +19 -0
  592. package/operator/index.d.ts.map +1 -0
  593. package/operator/index.js +15 -0
  594. package/operator/telemetry.d.ts +26 -0
  595. package/operator/telemetry.d.ts.map +1 -0
  596. package/operator/telemetry.js +9 -0
  597. package/operator/theming/index.d.ts +12 -0
  598. package/operator/theming/index.d.ts.map +1 -0
  599. package/operator/theming/index.js +9 -0
  600. package/operator/theming/provider.d.ts +27 -0
  601. package/operator/theming/provider.d.ts.map +1 -0
  602. package/operator/theming/provider.js +26 -0
  603. package/operator/theming/tokens.d.ts +28 -0
  604. package/operator/theming/tokens.d.ts.map +1 -0
  605. package/operator/theming/tokens.js +65 -0
  606. package/operator/workspace/events.d.ts +70 -0
  607. package/operator/workspace/events.d.ts.map +1 -0
  608. package/operator/workspace/events.js +9 -0
  609. package/operator/workspace/index.d.ts +12 -0
  610. package/operator/workspace/index.d.ts.map +1 -0
  611. package/operator/workspace/index.js +8 -0
  612. package/operator/workspace/types.d.ts +178 -0
  613. package/operator/workspace/types.d.ts.map +1 -0
  614. package/operator/workspace/types.js +47 -0
  615. package/operator/workspace/workspace.d.ts +58 -0
  616. package/operator/workspace/workspace.d.ts.map +1 -0
  617. package/operator/workspace/workspace.js +339 -0
  618. package/package.json +105 -0
  619. package/realtime/exploration.d.ts +16 -0
  620. package/realtime/exploration.d.ts.map +1 -0
  621. package/realtime/exploration.js +32 -0
  622. package/realtime/honua-server.d.ts +123 -0
  623. package/realtime/honua-server.d.ts.map +1 -0
  624. package/realtime/honua-server.js +188 -0
  625. package/realtime/index.d.ts +20 -0
  626. package/realtime/index.d.ts.map +1 -0
  627. package/realtime/index.js +14 -0
  628. package/realtime/projections.d.ts +30 -0
  629. package/realtime/projections.d.ts.map +1 -0
  630. package/realtime/projections.js +51 -0
  631. package/realtime/reducer.d.ts +14 -0
  632. package/realtime/reducer.d.ts.map +1 -0
  633. package/realtime/reducer.js +351 -0
  634. package/realtime/sse.d.ts +23 -0
  635. package/realtime/sse.d.ts.map +1 -0
  636. package/realtime/sse.js +143 -0
  637. package/realtime/store.d.ts +18 -0
  638. package/realtime/store.d.ts.map +1 -0
  639. package/realtime/store.js +63 -0
  640. package/realtime/types.d.ts +190 -0
  641. package/realtime/types.d.ts.map +1 -0
  642. package/realtime/types.js +10 -0
  643. package/replica-sync/client.d.ts +32 -0
  644. package/replica-sync/client.d.ts.map +1 -0
  645. package/replica-sync/client.js +52 -0
  646. package/replica-sync/errors.d.ts +22 -0
  647. package/replica-sync/errors.d.ts.map +1 -0
  648. package/replica-sync/errors.js +29 -0
  649. package/replica-sync/fixture.d.ts +40 -0
  650. package/replica-sync/fixture.d.ts.map +1 -0
  651. package/replica-sync/fixture.js +364 -0
  652. package/replica-sync/index.d.ts +22 -0
  653. package/replica-sync/index.d.ts.map +1 -0
  654. package/replica-sync/index.js +17 -0
  655. package/replica-sync/types.d.ts +270 -0
  656. package/replica-sync/types.d.ts.map +1 -0
  657. package/replica-sync/types.js +13 -0
  658. package/runtime/diff.d.ts +31 -0
  659. package/runtime/diff.d.ts.map +1 -0
  660. package/runtime/diff.js +143 -0
  661. package/runtime/errors.d.ts +40 -0
  662. package/runtime/errors.d.ts.map +1 -0
  663. package/runtime/errors.js +35 -0
  664. package/runtime/index.d.ts +59 -0
  665. package/runtime/index.d.ts.map +1 -0
  666. package/runtime/index.js +40 -0
  667. package/runtime/legend.d.ts +23 -0
  668. package/runtime/legend.d.ts.map +1 -0
  669. package/runtime/legend.js +38 -0
  670. package/runtime/load-package.d.ts +125 -0
  671. package/runtime/load-package.d.ts.map +1 -0
  672. package/runtime/load-package.js +272 -0
  673. package/runtime/map-package-fetch.d.ts +107 -0
  674. package/runtime/map-package-fetch.d.ts.map +1 -0
  675. package/runtime/map-package-fetch.js +336 -0
  676. package/runtime/map-package-realtime.d.ts +169 -0
  677. package/runtime/map-package-realtime.d.ts.map +1 -0
  678. package/runtime/map-package-realtime.js +350 -0
  679. package/runtime/map-package-validation.d.ts +30 -0
  680. package/runtime/map-package-validation.d.ts.map +1 -0
  681. package/runtime/map-package-validation.js +257 -0
  682. package/runtime/map-package-watch.d.ts +78 -0
  683. package/runtime/map-package-watch.d.ts.map +1 -0
  684. package/runtime/map-package-watch.js +695 -0
  685. package/runtime/map-package.d.ts +167 -0
  686. package/runtime/map-package.d.ts.map +1 -0
  687. package/runtime/map-package.js +15 -0
  688. package/runtime/ogc-styles.d.ts +110 -0
  689. package/runtime/ogc-styles.d.ts.map +1 -0
  690. package/runtime/ogc-styles.js +195 -0
  691. package/runtime/pmtiles-protocol.d.ts +77 -0
  692. package/runtime/pmtiles-protocol.d.ts.map +1 -0
  693. package/runtime/pmtiles-protocol.js +120 -0
  694. package/runtime/popups.d.ts +62 -0
  695. package/runtime/popups.d.ts.map +1 -0
  696. package/runtime/popups.js +95 -0
  697. package/runtime/query-tiles.d.ts +217 -0
  698. package/runtime/query-tiles.d.ts.map +1 -0
  699. package/runtime/query-tiles.js +801 -0
  700. package/runtime/runtime.d.ts +243 -0
  701. package/runtime/runtime.d.ts.map +1 -0
  702. package/runtime/runtime.js +1147 -0
  703. package/runtime/source-bridge.d.ts +99 -0
  704. package/runtime/source-bridge.d.ts.map +1 -0
  705. package/runtime/source-bridge.js +428 -0
  706. package/runtime/style-compose.d.ts +46 -0
  707. package/runtime/style-compose.d.ts.map +1 -0
  708. package/runtime/style-compose.js +144 -0
  709. package/runtime/style-interactions.d.ts +141 -0
  710. package/runtime/style-interactions.d.ts.map +1 -0
  711. package/runtime/style-interactions.js +574 -0
  712. package/runtime/style-spec-validation.d.ts +23 -0
  713. package/runtime/style-spec-validation.d.ts.map +1 -0
  714. package/runtime/style-spec-validation.js +357 -0
  715. package/scene-workspace/analysis-widgets.d.ts +334 -0
  716. package/scene-workspace/analysis-widgets.d.ts.map +1 -0
  717. package/scene-workspace/analysis-widgets.js +424 -0
  718. package/scene-workspace/cesium-adapter.d.ts +438 -0
  719. package/scene-workspace/cesium-adapter.d.ts.map +1 -0
  720. package/scene-workspace/cesium-adapter.js +493 -0
  721. package/scene-workspace/index.d.ts +21 -0
  722. package/scene-workspace/index.d.ts.map +1 -0
  723. package/scene-workspace/index.js +14 -0
  724. package/scene-workspace/primitives.d.ts +162 -0
  725. package/scene-workspace/primitives.d.ts.map +1 -0
  726. package/scene-workspace/primitives.js +255 -0
  727. package/scene-workspace/scene-discovery.d.ts +196 -0
  728. package/scene-workspace/scene-discovery.d.ts.map +1 -0
  729. package/scene-workspace/scene-discovery.js +228 -0
  730. package/scene-workspace/scene-view.d.ts +209 -0
  731. package/scene-workspace/scene-view.d.ts.map +1 -0
  732. package/scene-workspace/scene-view.js +267 -0
  733. package/scene-workspace/types.d.ts +229 -0
  734. package/scene-workspace/types.d.ts.map +1 -0
  735. package/scene-workspace/types.js +23 -0
  736. package/scene-workspace/workspace.d.ts +13 -0
  737. package/scene-workspace/workspace.d.ts.map +1 -0
  738. package/scene-workspace/workspace.js +391 -0
  739. package/share/denial.d.ts +78 -0
  740. package/share/denial.d.ts.map +1 -0
  741. package/share/denial.js +61 -0
  742. package/share/embed-token.d.ts +71 -0
  743. package/share/embed-token.d.ts.map +1 -0
  744. package/share/embed-token.js +99 -0
  745. package/share/index.d.ts +35 -0
  746. package/share/index.d.ts.map +1 -0
  747. package/share/index.js +30 -0
  748. package/share/open-data.d.ts +114 -0
  749. package/share/open-data.d.ts.map +1 -0
  750. package/share/open-data.js +81 -0
  751. package/share/types.d.ts +163 -0
  752. package/share/types.d.ts.map +1 -0
  753. package/share/types.js +17 -0
  754. package/studio/capability-manifest.d.ts +285 -0
  755. package/studio/capability-manifest.d.ts.map +1 -0
  756. package/studio/capability-manifest.js +59 -0
  757. package/studio/chart-spec.d.ts +85 -0
  758. package/studio/chart-spec.d.ts.map +1 -0
  759. package/studio/chart-spec.js +106 -0
  760. package/studio/index.d.ts +34 -0
  761. package/studio/index.d.ts.map +1 -0
  762. package/studio/index.js +27 -0
  763. package/studio/provenance.d.ts +131 -0
  764. package/studio/provenance.d.ts.map +1 -0
  765. package/studio/provenance.js +39 -0
  766. package/studio/publish.d.ts +64 -0
  767. package/studio/publish.d.ts.map +1 -0
  768. package/studio/publish.js +13 -0
  769. package/studio/types.d.ts +278 -0
  770. package/studio/types.d.ts.map +1 -0
  771. package/studio/types.js +71 -0
  772. package/studio/validate.d.ts +45 -0
  773. package/studio/validate.d.ts.map +1 -0
  774. package/studio/validate.js +255 -0
  775. package/studio/validation.d.ts +112 -0
  776. package/studio/validation.d.ts.map +1 -0
  777. package/studio/validation.js +42 -0
  778. package/style/factory.d.ts +30 -0
  779. package/style/factory.d.ts.map +1 -0
  780. package/style/factory.js +61 -0
  781. package/style/index.d.ts +25 -0
  782. package/style/index.d.ts.map +1 -0
  783. package/style/index.js +24 -0
  784. package/style/specification.d.ts +203 -0
  785. package/style/specification.d.ts.map +1 -0
  786. package/style/specification.js +178 -0
  787. package/style/wms-wmts-resolvers.d.ts +38 -0
  788. package/style/wms-wmts-resolvers.d.ts.map +1 -0
  789. package/style/wms-wmts-resolvers.js +92 -0
  790. package/web-components/controller.d.ts +39 -0
  791. package/web-components/controller.d.ts.map +1 -0
  792. package/web-components/controller.js +640 -0
  793. package/web-components/elements.d.ts +210 -0
  794. package/web-components/elements.d.ts.map +1 -0
  795. package/web-components/elements.js +1651 -0
  796. package/web-components/index.d.ts +24 -0
  797. package/web-components/index.d.ts.map +1 -0
  798. package/web-components/index.js +22 -0
  799. package/web-components/maplibre-renderer.d.ts +22 -0
  800. package/web-components/maplibre-renderer.d.ts.map +1 -0
  801. package/web-components/maplibre-renderer.js +474 -0
  802. package/web-components/types.d.ts +397 -0
  803. package/web-components/types.d.ts.map +1 -0
  804. package/web-components/types.js +1 -0
  805. package/webmap/contract.d.ts +28 -0
  806. package/webmap/contract.d.ts.map +1 -0
  807. package/webmap/contract.js +130 -0
  808. package/webmap/convert-basemap.d.ts +17 -0
  809. package/webmap/convert-basemap.d.ts.map +1 -0
  810. package/webmap/convert-basemap.js +78 -0
  811. package/webmap/convert-extent.d.ts +17 -0
  812. package/webmap/convert-extent.d.ts.map +1 -0
  813. package/webmap/convert-extent.js +114 -0
  814. package/webmap/convert-label.d.ts +13 -0
  815. package/webmap/convert-label.d.ts.map +1 -0
  816. package/webmap/convert-label.js +125 -0
  817. package/webmap/convert-layer.d.ts +22 -0
  818. package/webmap/convert-layer.d.ts.map +1 -0
  819. package/webmap/convert-layer.js +181 -0
  820. package/webmap/convert-popup.d.ts +34 -0
  821. package/webmap/convert-popup.d.ts.map +1 -0
  822. package/webmap/convert-popup.js +68 -0
  823. package/webmap/convert-renderer.d.ts +17 -0
  824. package/webmap/convert-renderer.d.ts.map +1 -0
  825. package/webmap/convert-renderer.js +161 -0
  826. package/webmap/convert-symbol.d.ts +17 -0
  827. package/webmap/convert-symbol.d.ts.map +1 -0
  828. package/webmap/convert-symbol.js +122 -0
  829. package/webmap/index.d.ts +44 -0
  830. package/webmap/index.d.ts.map +1 -0
  831. package/webmap/index.js +33 -0
  832. package/webmap/parse.d.ts +25 -0
  833. package/webmap/parse.d.ts.map +1 -0
  834. package/webmap/parse.js +83 -0
  835. package/webmap/types.d.ts +264 -0
  836. package/webmap/types.d.ts.map +1 -0
  837. package/webmap/types.js +13 -0
  838. package/webmap/warnings.d.ts +30 -0
  839. package/webmap/warnings.d.ts.map +1 -0
  840. package/webmap/warnings.js +37 -0
@@ -0,0 +1,801 @@
1
+ /**
2
+ * Runtime helpers for query-backed vector tile sources.
3
+ *
4
+ * This module is MapLibre-shaped but does not import `maplibre-gl`.
5
+ * Callers can use the pure source-spec helpers, or the request controller
6
+ * when they need explicit viewport/tile lifecycle management outside
7
+ * MapLibre's built-in source loader.
8
+ *
9
+ * @module
10
+ */
11
+ import { assessAnalyticsSourcePushdown } from "../contract/analytics-sources.js";
12
+ import { buildQueryTileCacheKey, buildQueryTileServerPath, normalizeQueryTileKey, normalizeQueryTileSourceDescriptor, parseQueryTileFeatureDetailResponse, parseQueryTileJson, parseQueryTileServerErrorResponse, queryTileKeyString, queryTileServerRequestParamsFromDescriptor, stableJson, } from "../contract/tiles.js";
13
+ import { trimLeadingSlashes, trimTrailingSlashes } from "../core/path-utils.js";
14
+ export class QueryTileServerResponseError extends Error {
15
+ status;
16
+ url;
17
+ response;
18
+ body;
19
+ validators;
20
+ constructor(options) {
21
+ super(options.message);
22
+ this.name = "QueryTileServerResponseError";
23
+ this.status = options.status;
24
+ this.url = options.url;
25
+ this.response = options.response;
26
+ this.body = options.body;
27
+ this.validators = options.validators ?? {};
28
+ }
29
+ }
30
+ const WEB_MERCATOR_LAT_LIMIT = 85.05112878;
31
+ const DEFAULT_MAX_VIEWPORT_TILES = 1024;
32
+ const MAX_SAFE_TILE_ZOOM = 30;
33
+ const DEFAULT_VIEWPORT_FETCH_CONCURRENCY = 8;
34
+ const TILE_PUSHDOWN_PROTOCOLS = new Set([
35
+ "ogc-tiles",
36
+ "wmts",
37
+ "maplibre-vector",
38
+ "maplibre-raster",
39
+ "geoservices-map-service",
40
+ ]);
41
+ const QUERY_FALLBACK_PROTOCOLS = new Set([
42
+ "grpc",
43
+ "geoservices-feature-service",
44
+ "geoservices-map-service",
45
+ "geoservices-image-service",
46
+ "ogc-features",
47
+ "ogc-records",
48
+ "stac",
49
+ "wfs",
50
+ "wms",
51
+ "odata",
52
+ ]);
53
+ /** Build a MapLibre-compatible TileJSON document from a query tile descriptor. */
54
+ export function buildQueryTileJson(descriptor, options = {}) {
55
+ const normalized = normalizeQueryTileSourceDescriptor(descriptor);
56
+ const tilejson = normalized.tilejson;
57
+ const tiles = tilejson?.tiles?.length ? tilejson.tiles : [buildQueryTileUrlTemplate(normalized, options)];
58
+ return {
59
+ tilejson: "3.0.0",
60
+ ...tilejson,
61
+ tiles,
62
+ name: tilejson?.name ?? normalized.id,
63
+ attribution: tilejson?.attribution ?? normalized.attribution,
64
+ scheme: tilejson?.scheme ?? normalized.scheme,
65
+ minzoom: tilejson?.minzoom ?? normalized.minzoom,
66
+ maxzoom: tilejson?.maxzoom ?? normalized.maxzoom,
67
+ bounds: tilejson?.bounds ?? normalized.bounds,
68
+ vector_layers: tilejson?.vector_layers ?? [
69
+ {
70
+ id: normalized.sourceId,
71
+ fields: fieldsToTileJson(normalized.projection?.fields),
72
+ minzoom: normalized.minzoom,
73
+ maxzoom: normalized.maxzoom,
74
+ },
75
+ ],
76
+ };
77
+ }
78
+ /** Build a MapLibre vector source spec using TileJSON URL or inline tile template metadata. */
79
+ export function buildMapLibreQueryTileSourceSpec(descriptor, options = {}) {
80
+ const normalized = normalizeQueryTileSourceDescriptor(descriptor);
81
+ const endpoint = { ...(normalized.endpoint ?? {}), ...(options.endpoint ?? {}) };
82
+ const promoteId = promoteIdFromIdentity(normalized.featureIdentity);
83
+ if (options.useTileJsonUrl !== false && endpoint.tilejsonUrl) {
84
+ return {
85
+ type: "vector",
86
+ url: endpoint.tilejsonUrl,
87
+ ...(promoteId ? { promoteId } : {}),
88
+ ...(options.volatile !== undefined ? { volatile: options.volatile } : {}),
89
+ };
90
+ }
91
+ const tilejson = buildQueryTileJson(normalized, options);
92
+ return {
93
+ type: "vector",
94
+ tiles: [...tilejson.tiles],
95
+ scheme: tilejson.scheme,
96
+ tileSize: normalized.tileSize,
97
+ minzoom: tilejson.minzoom,
98
+ maxzoom: tilejson.maxzoom,
99
+ bounds: tilejson.bounds,
100
+ attribution: tilejson.attribution,
101
+ ...(promoteId ? { promoteId } : {}),
102
+ ...(options.volatile !== undefined ? { volatile: options.volatile } : {}),
103
+ };
104
+ }
105
+ /** Build a URL template with MapLibre `{z}` / `{x}` / `{y}` placeholders. */
106
+ export function buildQueryTileUrlTemplate(descriptor, options = {}) {
107
+ const normalized = normalizeQueryTileSourceDescriptor(descriptor);
108
+ const endpoint = { ...(normalized.endpoint ?? {}), ...(options.endpoint ?? {}) };
109
+ if (endpoint.urlTemplate)
110
+ return endpoint.urlTemplate;
111
+ if (normalized.tilejson?.tiles?.[0])
112
+ return normalized.tilejson.tiles[0];
113
+ const baseUrl = endpoint.baseUrl ?? normalized.source?.locator.url;
114
+ if (!baseUrl) {
115
+ throw new Error(`query tile descriptor "${normalized.id}" is missing endpoint.baseUrl or endpoint.urlTemplate`);
116
+ }
117
+ const path = endpoint.path ??
118
+ buildQueryTileServerPath("tile", {
119
+ sourceId: normalized.sourceId,
120
+ routePrefix: "",
121
+ format: normalized.format ?? "mvt",
122
+ });
123
+ const normalizedPath = trimLeadingSlashes(path);
124
+ const url = joinUrl(baseUrl, normalizedPath);
125
+ const params = {
126
+ ...queryTileServerRequestParamsFromDescriptor(normalized, {
127
+ params: options.includeCacheKey
128
+ ? { cacheKey: buildQueryTileCacheKey(normalized, { z: 0, x: 0, y: 0 }, { cache: options.cache }) }
129
+ : undefined,
130
+ }),
131
+ ...(options.extraParams ?? {}),
132
+ };
133
+ return appendParams(url, params);
134
+ }
135
+ /** Substitute one normalized tile key into a query tile URL template. */
136
+ export function buildQueryTileUrl(descriptor, tileKey, options = {}) {
137
+ const key = normalizeQueryTileKey(tileKey);
138
+ return buildQueryTileUrlTemplate(descriptor, options)
139
+ .replaceAll("{z}", String(key.z))
140
+ .replaceAll("{x}", String(key.x))
141
+ .replaceAll("{y}", String(key.y))
142
+ .replaceAll("{tileMatrix}", String(key.z))
143
+ .replaceAll("{tileCol}", String(key.x))
144
+ .replaceAll("{tileRow}", String(key.y));
145
+ }
146
+ /** Fetch and validate TileJSON from a dynamic query tile server. */
147
+ export async function fetchQueryTileJson(descriptor, options = {}) {
148
+ const normalized = normalizeQueryTileSourceDescriptor(descriptor);
149
+ const url = options.url ?? buildQueryTileJsonRequestUrl(normalized, options);
150
+ const response = await queryTileFetch(options)(url, {
151
+ method: "GET",
152
+ headers: queryTileRequestHeaders("application/json", options),
153
+ signal: options.signal,
154
+ credentials: options.credentials,
155
+ });
156
+ const validators = queryTileValidatorsFromHeaders(response.headers);
157
+ if (response.status === 304) {
158
+ return { url, status: response.status, notModified: true, validators };
159
+ }
160
+ const body = await readJsonBody(response);
161
+ if (!response.ok) {
162
+ throw queryTileServerResponseError(url, response.status, body, validators);
163
+ }
164
+ const tilejson = parseQueryTileJson(body);
165
+ return {
166
+ url,
167
+ status: response.status,
168
+ notModified: false,
169
+ validators,
170
+ tilejson,
171
+ degraded: tilejson["honua:queryTiles"]?.degraded,
172
+ };
173
+ }
174
+ /** Fetch and validate a source-qualified feature-detail response from a query tile server. */
175
+ export async function fetchQueryTileFeatureDetail(descriptor, target, options = {}) {
176
+ const normalized = normalizeQueryTileSourceDescriptor(descriptor);
177
+ const url = options.url ?? buildQueryTileFeatureDetailRequestUrl(normalized, target, options);
178
+ const response = await queryTileFetch(options)(url, {
179
+ method: "GET",
180
+ headers: queryTileRequestHeaders("application/json", options),
181
+ signal: options.signal,
182
+ credentials: options.credentials,
183
+ });
184
+ const validators = queryTileValidatorsFromHeaders(response.headers);
185
+ if (response.status === 304) {
186
+ return { url, status: response.status, notModified: true, validators };
187
+ }
188
+ const body = await readJsonBody(response);
189
+ if (!response.ok) {
190
+ throw queryTileServerResponseError(url, response.status, body, validators);
191
+ }
192
+ const detail = parseQueryTileFeatureDetailResponse(body);
193
+ return {
194
+ url,
195
+ status: response.status,
196
+ notModified: false,
197
+ validators,
198
+ detail,
199
+ degraded: detail.degraded,
200
+ };
201
+ }
202
+ /** Compute visible XYZ tiles for a WGS84 bounds + zoom viewport. */
203
+ export function queryTilesForViewport(viewport) {
204
+ const { z, ranges, maxTiles } = normalizedViewportTileRanges(viewport);
205
+ const cardinality = tileRangeCardinality(ranges);
206
+ if (cardinality > maxTiles) {
207
+ throw new Error(`viewport resolves to ${cardinality} tiles, exceeding maxTiles=${maxTiles}`);
208
+ }
209
+ const out = [];
210
+ const seen = new Set();
211
+ for (const range of ranges) {
212
+ for (let x = range.minX; x <= range.maxX; x += 1) {
213
+ for (let y = range.minY; y <= range.maxY; y += 1) {
214
+ const tile = normalizeQueryTileKey({ z, x, y });
215
+ const id = stableJson(tile);
216
+ if (seen.has(id))
217
+ continue;
218
+ seen.add(id);
219
+ if (out.length >= maxTiles) {
220
+ throw new Error(`viewport resolves to more than maxTiles=${maxTiles} tiles`);
221
+ }
222
+ out.push(tile);
223
+ }
224
+ }
225
+ }
226
+ return out;
227
+ }
228
+ /** Diagnose protocol support, fallback behavior, and cache observability gaps. */
229
+ export function diagnoseQueryTileSourceSupport(descriptor) {
230
+ const normalized = normalizeQueryTileSourceDescriptor(descriptor);
231
+ const protocol = normalized.protocol;
232
+ const diagnostics = [];
233
+ const base = {
234
+ sourceId: normalized.sourceId,
235
+ descriptorId: normalized.id,
236
+ ...(protocol ? { protocol } : {}),
237
+ };
238
+ const hasEndpoint = Boolean(normalized.endpoint?.urlTemplate) ||
239
+ Boolean(normalized.endpoint?.baseUrl) ||
240
+ Boolean(normalized.endpoint?.tilejsonUrl) ||
241
+ Boolean(normalized.tilejson?.tiles?.length) ||
242
+ Boolean(normalized.source?.locator.url);
243
+ if (!hasEndpoint) {
244
+ diagnostics.push({
245
+ ...base,
246
+ severity: "error",
247
+ code: "missing-tile-endpoint",
248
+ message: "query tile source has no urlTemplate, tilejson, baseUrl, or source locator URL",
249
+ });
250
+ }
251
+ if (!protocol) {
252
+ if (normalized.analyticsSource) {
253
+ const assessment = assessAnalyticsSourcePushdown(normalized.analyticsSource, "tiles", {
254
+ operation: "tiles",
255
+ cache: normalized.analyticsSource.cache?.key,
256
+ });
257
+ diagnostics.push({
258
+ ...base,
259
+ severity: assessment.supported ? "info" : "warning",
260
+ code: assessment.supported ? "analytics-tile-pushdown-supported" : "analytics-tile-pushdown-unavailable",
261
+ capability: "tiles",
262
+ message: assessment.supported
263
+ ? `analytics source "${normalized.analyticsSource.id}" advertises tile pushdown`
264
+ : (assessment.degraded?.[0]?.reason ??
265
+ `analytics source "${normalized.analyticsSource.id}" lacks tile pushdown`),
266
+ });
267
+ if (normalized.analyticsSource.fallback?.mode === "disabled") {
268
+ diagnostics.push({
269
+ ...base,
270
+ severity: "info",
271
+ code: "client-materialization-disabled",
272
+ capability: "query",
273
+ message: "analytics source disables unbounded browser materialization",
274
+ });
275
+ }
276
+ }
277
+ else {
278
+ diagnostics.push({
279
+ ...base,
280
+ severity: "warning",
281
+ code: "unsupported-protocol",
282
+ message: "query tile source has no protocol metadata; server pushdown cannot be inferred",
283
+ });
284
+ }
285
+ }
286
+ else if (TILE_PUSHDOWN_PROTOCOLS.has(protocol)) {
287
+ diagnostics.push({
288
+ ...base,
289
+ severity: "info",
290
+ code: "tile-pushdown-supported",
291
+ capability: "tiles",
292
+ message: `protocol "${protocol}" advertises first-party tile/render support`,
293
+ });
294
+ }
295
+ else if (QUERY_FALLBACK_PROTOCOLS.has(protocol)) {
296
+ diagnostics.push({
297
+ ...base,
298
+ severity: normalized.fallback?.mode === "disabled" ? "error" : "warning",
299
+ code: normalized.fallback?.mode === "disabled" ? "fallback-disabled" : "tile-pushdown-unavailable",
300
+ capability: "tiles",
301
+ message: normalized.fallback?.mode === "disabled"
302
+ ? `protocol "${protocol}" does not support tile pushdown and fallback is disabled`
303
+ : `protocol "${protocol}" needs a query-backed tile endpoint or viewport-bounded fallback`,
304
+ });
305
+ if (normalized.fallback && normalized.fallback.mode !== "disabled") {
306
+ diagnostics.push({
307
+ ...base,
308
+ severity: "warning",
309
+ code: "fallback-enabled",
310
+ capability: "query",
311
+ message: normalized.fallback.reason ?? `fallback mode "${normalized.fallback.mode}" is enabled`,
312
+ });
313
+ }
314
+ }
315
+ else {
316
+ diagnostics.push({
317
+ ...base,
318
+ severity: "error",
319
+ code: "unsupported-protocol",
320
+ message: `protocol "${protocol}" cannot serve query tiles or query fallback requests`,
321
+ });
322
+ }
323
+ const cacheKey = normalized.cache?.key;
324
+ if (!cacheKey?.sourceVersion || !cacheKey.authorizationScope) {
325
+ diagnostics.push({
326
+ ...base,
327
+ severity: "warning",
328
+ code: "missing-cache-scope",
329
+ message: "tile cache key should include sourceVersion and authorizationScope",
330
+ });
331
+ }
332
+ if (normalized.cache?.maxEntries === undefined) {
333
+ diagnostics.push({
334
+ ...base,
335
+ severity: "warning",
336
+ code: "unbounded-cache",
337
+ message: "tile cache maxEntries is not set on the descriptor",
338
+ });
339
+ }
340
+ return diagnostics;
341
+ }
342
+ export function createQueryTileRequestController(descriptor, options) {
343
+ return new QueryTileRequestController(descriptor, options);
344
+ }
345
+ /** Viewport-aware tile request manager with abortable inflight requests and bounded cache. */
346
+ export class QueryTileRequestController {
347
+ descriptor;
348
+ #fetchTile;
349
+ #cachePolicy;
350
+ #onEvent;
351
+ #cache = new Map();
352
+ #inflight = new Map();
353
+ constructor(descriptor, options) {
354
+ this.descriptor = normalizeQueryTileSourceDescriptor(descriptor);
355
+ this.#fetchTile = options.fetchTile;
356
+ this.#cachePolicy = { ...(this.descriptor.cache ?? {}), ...(options.cache ?? {}) };
357
+ this.#onEvent = options.onEvent;
358
+ }
359
+ requestTile(tileKey, options = {}) {
360
+ const key = normalizeQueryTileKey(tileKey);
361
+ const cacheKey = this.#cacheKey(key, options.cache);
362
+ const cached = this.#cache.get(cacheKey);
363
+ const now = Date.now();
364
+ const cacheEnabled = this.#cacheEnabled(options.cache);
365
+ if (cacheEnabled && cached && this.#isFresh(cached, now)) {
366
+ cached.lastAccessedAt = now;
367
+ this.#emit({ type: "tile-cache-hit", ...this.#eventBase(key, cacheKey), value: cached.value });
368
+ return Promise.resolve(cached.value);
369
+ }
370
+ if (cached)
371
+ this.#evict(cacheKey, cached, "invalidate");
372
+ const inflight = this.#inflight.get(cacheKey);
373
+ if (inflight)
374
+ return inflight.promise;
375
+ const controller = new AbortController();
376
+ const cleanup = linkAbortSignals(controller, options.signal);
377
+ const url = buildQueryTileUrl(this.descriptor, key, { cache: options.cache });
378
+ const request = {
379
+ descriptor: this.descriptor,
380
+ tileKey: key,
381
+ cacheKey,
382
+ url,
383
+ signal: controller.signal,
384
+ };
385
+ this.#emit({ type: "tile-requested", ...this.#eventBase(key, cacheKey), url });
386
+ const promise = this.#fetchTile(request)
387
+ .then((value) => {
388
+ if (controller.signal.aborted) {
389
+ this.#emit({
390
+ type: "tile-aborted",
391
+ ...this.#eventBase(key, cacheKey),
392
+ reason: controller.signal.reason,
393
+ });
394
+ throw abortError(controller.signal.reason);
395
+ }
396
+ if (cacheEnabled) {
397
+ this.#cache.set(cacheKey, {
398
+ value,
399
+ tileKey: key,
400
+ createdAt: Date.now(),
401
+ lastAccessedAt: Date.now(),
402
+ });
403
+ this.#enforceMaxEntries();
404
+ }
405
+ this.#emit({ type: "tile-loaded", ...this.#eventBase(key, cacheKey), value });
406
+ return value;
407
+ })
408
+ .catch((error) => {
409
+ if (controller.signal.aborted || isAbortError(error)) {
410
+ this.#emit({
411
+ type: "tile-aborted",
412
+ ...this.#eventBase(key, cacheKey),
413
+ reason: controller.signal.reason ?? error,
414
+ });
415
+ }
416
+ else {
417
+ this.#emit({ type: "tile-error", ...this.#eventBase(key, cacheKey), error });
418
+ }
419
+ throw error;
420
+ })
421
+ .finally(() => {
422
+ cleanup();
423
+ this.#inflight.delete(cacheKey);
424
+ });
425
+ this.#inflight.set(cacheKey, { promise, controller, tileKey: key, cacheKey });
426
+ return promise;
427
+ }
428
+ async requestViewport(viewport, options = {}) {
429
+ const tiles = queryTilesForViewport(viewport);
430
+ const visibleCacheKeys = new Set(tiles.map((tile) => this.#cacheKey(tile, options.cache)));
431
+ if (options.abortOutOfViewport !== false) {
432
+ for (const [cacheKey, entry] of this.#inflight) {
433
+ if (!visibleCacheKeys.has(cacheKey))
434
+ entry.controller.abort("out-of-viewport");
435
+ }
436
+ }
437
+ const results = await allSettledLimited(tiles, normalizeConcurrency(options.concurrency, DEFAULT_VIEWPORT_FETCH_CONCURRENCY), (tile) => this.requestTile(tile, options));
438
+ return {
439
+ viewport,
440
+ tiles,
441
+ results,
442
+ diagnostics: this.diagnostics(),
443
+ };
444
+ }
445
+ abort(tileKey, reason = "aborted") {
446
+ if (!tileKey) {
447
+ for (const entry of this.#inflight.values())
448
+ entry.controller.abort(reason);
449
+ return;
450
+ }
451
+ const normalized = normalizeQueryTileKey(tileKey);
452
+ for (const entry of this.#inflight.values()) {
453
+ if (sameTile(entry.tileKey, normalized))
454
+ entry.controller.abort(reason);
455
+ }
456
+ }
457
+ invalidate(predicate) {
458
+ let count = 0;
459
+ for (const [cacheKey, entry] of this.#cache) {
460
+ if (!predicate || predicate({ cacheKey, tileKey: entry.tileKey, value: entry.value })) {
461
+ this.#evict(cacheKey, entry, "invalidate");
462
+ count += 1;
463
+ }
464
+ }
465
+ return count;
466
+ }
467
+ clearCache() {
468
+ for (const [cacheKey, entry] of this.#cache) {
469
+ this.#evict(cacheKey, entry, "clear");
470
+ }
471
+ }
472
+ dispose() {
473
+ this.abort(undefined, "disposed");
474
+ this.clearCache();
475
+ }
476
+ cacheSnapshot() {
477
+ return {
478
+ entries: this.#cache.size,
479
+ inflight: this.#inflight.size,
480
+ maxEntries: this.#cachePolicy.maxEntries,
481
+ tileKeys: [...this.#cache.values()].map((entry) => queryTileKeyString(entry.tileKey)),
482
+ };
483
+ }
484
+ diagnostics() {
485
+ return diagnoseQueryTileSourceSupport({
486
+ ...this.descriptor,
487
+ cache: { ...(this.descriptor.cache ?? {}), ...this.#cachePolicy },
488
+ });
489
+ }
490
+ #cacheKey(tileKey, cache) {
491
+ return buildQueryTileCacheKey(this.descriptor, tileKey, { cache });
492
+ }
493
+ #cacheEnabled(cache) {
494
+ const key = { ...(this.descriptor.cache?.key ?? {}), ...(cache ?? {}) };
495
+ return typeof key.authorizationScope === "string" && key.authorizationScope.length > 0;
496
+ }
497
+ #isFresh(entry, now) {
498
+ const ttlMs = this.#cachePolicy.ttlMs;
499
+ return ttlMs === undefined || now - entry.createdAt <= ttlMs;
500
+ }
501
+ #enforceMaxEntries() {
502
+ const maxEntries = this.#cachePolicy.maxEntries;
503
+ if (maxEntries === undefined || maxEntries < 0)
504
+ return;
505
+ while (this.#cache.size > maxEntries) {
506
+ const lru = [...this.#cache.entries()].sort((a, b) => a[1].lastAccessedAt - b[1].lastAccessedAt)[0];
507
+ if (!lru)
508
+ return;
509
+ this.#evict(lru[0], lru[1], "lru");
510
+ }
511
+ }
512
+ #evict(cacheKey, entry, reason) {
513
+ if (!this.#cache.delete(cacheKey))
514
+ return;
515
+ this.#emit({ type: "tile-evicted", ...this.#eventBase(entry.tileKey, cacheKey), reason });
516
+ }
517
+ #eventBase(tileKey, cacheKey) {
518
+ return {
519
+ descriptorId: this.descriptor.id,
520
+ sourceId: this.descriptor.sourceId,
521
+ tileKey,
522
+ cacheKey,
523
+ };
524
+ }
525
+ #emit(event) {
526
+ this.#onEvent?.(event);
527
+ }
528
+ }
529
+ function fieldsToTileJson(fields) {
530
+ if (!fields || fields.length === 0)
531
+ return undefined;
532
+ return Object.fromEntries(fields.map((field) => [field, "String"]));
533
+ }
534
+ function promoteIdFromIdentity(identity) {
535
+ if (identity?.promoteId)
536
+ return identity.promoteId;
537
+ if (typeof identity?.idProperty === "string")
538
+ return identity.idProperty;
539
+ return undefined;
540
+ }
541
+ function buildQueryTileJsonRequestUrl(descriptor, options) {
542
+ const endpoint = { ...(descriptor.endpoint ?? {}), ...(options.endpoint ?? {}) };
543
+ if (options.url)
544
+ return options.url;
545
+ if (endpoint.tilejsonUrl)
546
+ return appendParams(endpoint.tilejsonUrl, {
547
+ ...queryTileServerRequestParamsFromDescriptor(descriptor, { params: options.params }),
548
+ ...(options.extraParams ?? {}),
549
+ });
550
+ const baseUrl = endpoint.baseUrl ?? descriptor.source?.locator.url;
551
+ if (!baseUrl) {
552
+ throw new Error(`query tile descriptor "${descriptor.id}" is missing endpoint.baseUrl or endpoint.tilejsonUrl`);
553
+ }
554
+ const path = buildQueryTileServerPath("tilejson", {
555
+ sourceId: descriptor.sourceId,
556
+ routePrefix: options.routePrefix ?? "",
557
+ });
558
+ return appendParams(joinUrl(baseUrl, path), {
559
+ ...queryTileServerRequestParamsFromDescriptor(descriptor, { params: options.params }),
560
+ ...(options.extraParams ?? {}),
561
+ });
562
+ }
563
+ function buildQueryTileFeatureDetailRequestUrl(descriptor, target, options) {
564
+ const detailTemplate = descriptor.tilejson?.["honua:queryTiles"]?.detailUrlTemplate;
565
+ const baseUrl = descriptor.endpoint?.baseUrl ?? descriptor.source?.locator.url;
566
+ const url = detailTemplate
567
+ ? substituteFeatureDetailTemplate(detailTemplate, target)
568
+ : baseUrl
569
+ ? joinUrl(baseUrl, buildQueryTileServerPath("feature-detail", {
570
+ sourceId: target.sourceId || descriptor.sourceId,
571
+ featureId: target.id,
572
+ routePrefix: options.routePrefix ?? "",
573
+ }))
574
+ : undefined;
575
+ if (!url) {
576
+ throw new Error(`query tile descriptor "${descriptor.id}" is missing detailUrlTemplate or endpoint.baseUrl`);
577
+ }
578
+ return appendParams(url, { ...(options.params ?? {}), ...(options.extraParams ?? {}) });
579
+ }
580
+ function substituteFeatureDetailTemplate(template, target) {
581
+ return template
582
+ .replaceAll("{sourceId}", encodeURIComponent(target.sourceId))
583
+ .replaceAll("{featureId}", encodeURIComponent(String(target.id)))
584
+ .replaceAll("{id}", encodeURIComponent(String(target.id)))
585
+ .replaceAll("{sourceLayer}", encodeURIComponent(target.sourceLayer ?? ""));
586
+ }
587
+ function queryTileFetch(options) {
588
+ const fetchImpl = options.fetch ?? globalThis.fetch?.bind(globalThis);
589
+ if (!fetchImpl)
590
+ throw new Error("fetch is required to request query tile server resources");
591
+ return fetchImpl;
592
+ }
593
+ function queryTileRequestHeaders(accept, options) {
594
+ const headers = new Headers(options.headers);
595
+ if (!headers.has("Accept"))
596
+ headers.set("Accept", accept);
597
+ if (options.validators?.etag && !headers.has("If-None-Match")) {
598
+ headers.set("If-None-Match", options.validators.etag);
599
+ }
600
+ if (options.validators?.lastModified && !headers.has("If-Modified-Since")) {
601
+ headers.set("If-Modified-Since", options.validators.lastModified);
602
+ }
603
+ return headers;
604
+ }
605
+ function queryTileValidatorsFromHeaders(headers) {
606
+ return stripUndefined({
607
+ etag: headers.get("ETag") ?? undefined,
608
+ lastModified: headers.get("Last-Modified") ?? undefined,
609
+ cacheControl: headers.get("Cache-Control") ?? undefined,
610
+ expires: headers.get("Expires") ?? undefined,
611
+ vary: headers.get("Vary") ?? undefined,
612
+ sourceVersion: headers.get("X-Honua-Source-Version") ?? undefined,
613
+ });
614
+ }
615
+ async function readJsonBody(response) {
616
+ const text = await response.text();
617
+ if (text.length === 0)
618
+ return undefined;
619
+ return JSON.parse(text);
620
+ }
621
+ function queryTileServerResponseError(url, status, body, validators) {
622
+ let errorResponse;
623
+ try {
624
+ errorResponse = parseQueryTileServerErrorResponse(body);
625
+ }
626
+ catch {
627
+ errorResponse = undefined;
628
+ }
629
+ return new QueryTileServerResponseError({
630
+ status,
631
+ url,
632
+ response: errorResponse,
633
+ body,
634
+ validators,
635
+ message: errorResponse?.error.message ?? `query tile server request failed with HTTP ${status}`,
636
+ });
637
+ }
638
+ function joinUrl(baseUrl, path) {
639
+ const [basePath, query = ""] = baseUrl.split("?", 2);
640
+ const joined = `${trimTrailingSlashes(basePath)}/${trimLeadingSlashes(path)}`;
641
+ return query ? `${joined}?${query}` : joined;
642
+ }
643
+ function appendParams(url, params) {
644
+ const searchParams = new URLSearchParams();
645
+ for (const [key, value] of Object.entries(params)) {
646
+ const serialized = urlParamValue(value);
647
+ if (serialized === undefined)
648
+ continue;
649
+ searchParams.set(key, serialized);
650
+ }
651
+ const query = searchParams.toString();
652
+ if (!query)
653
+ return url;
654
+ return `${url}${url.includes("?") ? "&" : "?"}${query}`;
655
+ }
656
+ function urlParamValue(value) {
657
+ if (value === undefined || value === null)
658
+ return undefined;
659
+ if (Array.isArray(value))
660
+ return value.join(",");
661
+ if (typeof value === "object")
662
+ return stableJson(value);
663
+ return String(value);
664
+ }
665
+ function stripUndefined(value) {
666
+ const out = {};
667
+ for (const [key, entry] of Object.entries(value)) {
668
+ if (entry !== undefined)
669
+ out[key] = entry;
670
+ }
671
+ return out;
672
+ }
673
+ function normalizedViewportTileRanges(viewport) {
674
+ validateViewport(viewport);
675
+ const z = clampZoom(Math.floor(viewport.zoom), viewport.minzoom, viewport.maxzoom);
676
+ if (!Number.isSafeInteger(z) || z < 0 || z > MAX_SAFE_TILE_ZOOM) {
677
+ throw new Error(`viewport zoom ${z} exceeds safe tile zoom ${MAX_SAFE_TILE_ZOOM}`);
678
+ }
679
+ const maxTiles = Math.trunc(viewport.maxTiles ?? DEFAULT_MAX_VIEWPORT_TILES);
680
+ return {
681
+ z,
682
+ ranges: tileRangesForBounds(viewport.bounds, z),
683
+ maxTiles,
684
+ };
685
+ }
686
+ function validateViewport(viewport) {
687
+ if (!Array.isArray(viewport.bounds) || viewport.bounds.length !== 4) {
688
+ throw new Error("viewport bounds must be [west, south, east, north]");
689
+ }
690
+ if (viewport.bounds.some((value) => typeof value !== "number" || !Number.isFinite(value))) {
691
+ throw new Error("viewport bounds must contain finite numbers");
692
+ }
693
+ const [west, south, east, north] = viewport.bounds;
694
+ if (south > north) {
695
+ throw new Error("viewport bounds south must be <= north");
696
+ }
697
+ if (west < -360 || west > 360 || east < -360 || east > 360 || south < -90 || north > 90) {
698
+ throw new Error("viewport bounds exceed supported WGS84 ranges");
699
+ }
700
+ for (const [name, value] of [
701
+ ["zoom", viewport.zoom],
702
+ ["minzoom", viewport.minzoom],
703
+ ["maxzoom", viewport.maxzoom],
704
+ ["maxTiles", viewport.maxTiles],
705
+ ]) {
706
+ if (value !== undefined && (typeof value !== "number" || !Number.isFinite(value))) {
707
+ throw new Error(`viewport ${name} must be finite`);
708
+ }
709
+ }
710
+ if (viewport.maxTiles !== undefined && viewport.maxTiles < 1) {
711
+ throw new Error("viewport maxTiles must be >= 1");
712
+ }
713
+ }
714
+ function clampZoom(zoom, minzoom, maxzoom) {
715
+ const min = minzoom ?? 0;
716
+ const max = maxzoom ?? 24;
717
+ return Math.min(max, Math.max(min, zoom));
718
+ }
719
+ function tileRangesForBounds(bounds, z) {
720
+ const [west, south, east, north] = bounds;
721
+ if (west <= east)
722
+ return [tileRangeForNormalizedBounds(west, south, east, north, z)];
723
+ return [
724
+ tileRangeForNormalizedBounds(west, south, 180, north, z),
725
+ tileRangeForNormalizedBounds(-180, south, east, north, z),
726
+ ];
727
+ }
728
+ function tileRangeForNormalizedBounds(west, south, east, north, z) {
729
+ const tileCount = 2 ** z;
730
+ const minX = lonToTileX(west, z);
731
+ const maxX = lonToTileX(east, z);
732
+ const minY = latToTileY(north, z);
733
+ const maxY = latToTileY(south, z);
734
+ return {
735
+ minX: Math.max(0, Math.min(tileCount - 1, Math.min(minX, maxX))),
736
+ maxX: Math.max(0, Math.min(tileCount - 1, Math.max(minX, maxX))),
737
+ minY: Math.max(0, Math.min(tileCount - 1, Math.min(minY, maxY))),
738
+ maxY: Math.max(0, Math.min(tileCount - 1, Math.max(minY, maxY))),
739
+ };
740
+ }
741
+ function tileRangeCardinality(ranges) {
742
+ return ranges.reduce((total, range) => total + (range.maxX - range.minX + 1) * (range.maxY - range.minY + 1), 0);
743
+ }
744
+ function lonToTileX(lon, z) {
745
+ const clampedLon = Math.max(-180, Math.min(180, lon));
746
+ return Math.floor(((clampedLon + 180) / 360) * 2 ** z);
747
+ }
748
+ function latToTileY(lat, z) {
749
+ const clampedLat = Math.max(-WEB_MERCATOR_LAT_LIMIT, Math.min(WEB_MERCATOR_LAT_LIMIT, lat));
750
+ const radians = (clampedLat * Math.PI) / 180;
751
+ return Math.floor(((1 - Math.log(Math.tan(radians) + 1 / Math.cos(radians)) / Math.PI) / 2) * 2 ** z);
752
+ }
753
+ function sameTile(a, b) {
754
+ return a.z === b.z && a.x === b.x && a.y === b.y;
755
+ }
756
+ async function allSettledLimited(values, concurrency, worker) {
757
+ const results = new Array(values.length);
758
+ let nextIndex = 0;
759
+ async function run() {
760
+ for (;;) {
761
+ const index = nextIndex;
762
+ nextIndex += 1;
763
+ if (index >= values.length)
764
+ return;
765
+ try {
766
+ results[index] = { status: "fulfilled", value: await worker(values[index]) };
767
+ }
768
+ catch (reason) {
769
+ results[index] = { status: "rejected", reason };
770
+ }
771
+ }
772
+ }
773
+ const workers = Array.from({ length: Math.min(concurrency, values.length) }, () => run());
774
+ await Promise.all(workers);
775
+ return results;
776
+ }
777
+ function normalizeConcurrency(value, fallback) {
778
+ if (typeof value !== "number" || !Number.isFinite(value))
779
+ return fallback;
780
+ return Math.max(1, Math.trunc(value));
781
+ }
782
+ function linkAbortSignals(controller, signal) {
783
+ if (!signal)
784
+ return () => undefined;
785
+ if (signal.aborted) {
786
+ controller.abort(signal.reason);
787
+ return () => undefined;
788
+ }
789
+ const abort = () => controller.abort(signal.reason);
790
+ signal.addEventListener("abort", abort, { once: true });
791
+ return () => signal.removeEventListener("abort", abort);
792
+ }
793
+ function isAbortError(error) {
794
+ return ((error instanceof DOMException && error.name === "AbortError") ||
795
+ (error instanceof Error && error.name === "AbortError"));
796
+ }
797
+ function abortError(reason) {
798
+ const error = new Error(typeof reason === "string" ? reason : "tile request aborted");
799
+ error.name = "AbortError";
800
+ return error;
801
+ }