@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,702 @@
1
+ /**
2
+ * Minimal protobuf wire-format reader and Esri PBF query response decoder.
3
+ *
4
+ * Decodes `FeatureCollectionPBuffer` responses (from `f=pbf`) into the same
5
+ * JSON-compatible shape as `f=json`, making the binary format transparent
6
+ * to callers.
7
+ *
8
+ * No external protobuf library dependency. Implements only the subset of
9
+ * the wire format needed for the Esri PBF query schema.
10
+ *
11
+ * @module
12
+ */
13
+ // ── Wire format constants ────────────────────────────────────
14
+ const WIRE_VARINT = 0;
15
+ const WIRE_64BIT = 1;
16
+ const WIRE_LENGTH_DELIMITED = 2;
17
+ const WIRE_32BIT = 5;
18
+ /**
19
+ * Thrown when a PBF feature response cannot be decoded losslessly into the
20
+ * `f=json` shape — either because it carries Z/M geometry (which the flat
21
+ * 2D fast-path decoder would silently garble) or because the coordinate
22
+ * stream is malformed (odd length / non-finite values from a truncated or
23
+ * hostile payload). `HonuaClient` treats this as a signal to fall back to a
24
+ * fresh `f=json` request, which decodes the same data correctly.
25
+ */
26
+ export class PbfDecodeError extends Error {
27
+ constructor(message) {
28
+ super(message);
29
+ this.name = "PbfDecodeError";
30
+ }
31
+ }
32
+ // ── Low-level protobuf reader ────────────────────────────────
33
+ /** Reads protobuf wire-format primitives from a byte buffer. */
34
+ class PbfReader {
35
+ view;
36
+ bytes;
37
+ pos;
38
+ end;
39
+ constructor(buffer, offset = 0, length) {
40
+ this.bytes = buffer;
41
+ this.view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
42
+ this.pos = offset;
43
+ this.end = length !== undefined ? offset + length : buffer.length;
44
+ }
45
+ /** Read an unsigned 32-bit varint. */
46
+ readVarint() {
47
+ let result = 0;
48
+ let shift = 0;
49
+ while (this.pos < this.end) {
50
+ const byte = this.bytes[this.pos++];
51
+ result |= (byte & 0x7f) << shift;
52
+ if ((byte & 0x80) === 0)
53
+ return result >>> 0;
54
+ shift += 7;
55
+ if (shift > 35)
56
+ throw new Error("Varint too long");
57
+ }
58
+ throw new Error("Unexpected end of buffer reading varint");
59
+ }
60
+ /** Read a 64-bit varint as a JavaScript number (safe for values < 2^53). */
61
+ readVarint64() {
62
+ let lo = 0;
63
+ let hi = 0;
64
+ let shift = 0;
65
+ while (shift < 28 && this.pos < this.end) {
66
+ const byte = this.bytes[this.pos++];
67
+ lo |= (byte & 0x7f) << shift;
68
+ shift += 7;
69
+ if ((byte & 0x80) === 0)
70
+ return lo >>> 0;
71
+ }
72
+ // Remaining bits go into hi
73
+ while (this.pos < this.end) {
74
+ const byte = this.bytes[this.pos++];
75
+ hi |= (byte & 0x7f) << (shift - 28);
76
+ shift += 7;
77
+ if ((byte & 0x80) === 0)
78
+ break;
79
+ if (shift > 63)
80
+ throw new Error("Varint too long");
81
+ }
82
+ return (hi >>> 0) * 0x10000000 + (lo >>> 0);
83
+ }
84
+ /**
85
+ * Read a 64-bit varint as a raw {@link bigint} with no precision loss. Used
86
+ * for attribute decoding where values may exceed `Number.MAX_SAFE_INTEGER`
87
+ * (e.g. BigInteger / 64-bit OID fields), so the caller can preserve exact
88
+ * values as a string instead of silently rounding.
89
+ */
90
+ readVarint64Bigint() {
91
+ let result = 0n;
92
+ let shift = 0n;
93
+ while (this.pos < this.end) {
94
+ const byte = this.bytes[this.pos++];
95
+ result |= BigInt(byte & 0x7f) << shift;
96
+ if ((byte & 0x80) === 0)
97
+ return result;
98
+ shift += 7n;
99
+ if (shift > 63n)
100
+ throw new Error("Varint too long");
101
+ }
102
+ throw new Error("Unexpected end of buffer reading varint");
103
+ }
104
+ /** Read a signed 64-bit varint (zigzag-decoded) as a JavaScript number. */
105
+ readSVarint64() {
106
+ const n = this.readVarint64();
107
+ // Zigzag decode: (n >>> 1) ^ -(n & 1)
108
+ // For numbers that fit in 32 bits this is straightforward.
109
+ // For larger numbers, we do the math in floating point (safe for ints < 2^53).
110
+ const half = Math.floor(n / 2);
111
+ return n % 2 === 0 ? half : -(half + 1);
112
+ }
113
+ /** Read a signed 32-bit varint (zigzag-decoded). */
114
+ readSVarint32() {
115
+ const n = this.readVarint();
116
+ return (n >>> 1) ^ -(n & 1);
117
+ }
118
+ /** Read a little-endian 64-bit float. */
119
+ readDouble() {
120
+ const val = this.view.getFloat64(this.pos, true);
121
+ this.pos += 8;
122
+ return val;
123
+ }
124
+ /** Read a little-endian 32-bit float. */
125
+ readFloat() {
126
+ const val = this.view.getFloat32(this.pos, true);
127
+ this.pos += 4;
128
+ return val;
129
+ }
130
+ /** Read a UTF-8 string of the given byte length. */
131
+ readString(byteLength) {
132
+ const slice = this.bytes.subarray(this.pos, this.pos + byteLength);
133
+ this.pos += byteLength;
134
+ return textDecoder.decode(slice);
135
+ }
136
+ /** Read a boolean from a varint. */
137
+ readBool() {
138
+ return this.readVarint() !== 0;
139
+ }
140
+ /** Read a field tag, returning [fieldNumber, wireType]. */
141
+ readTag() {
142
+ const tag = this.readVarint();
143
+ return [tag >>> 3, tag & 0x07];
144
+ }
145
+ /** Skip a field value based on wire type. */
146
+ skip(wireType) {
147
+ switch (wireType) {
148
+ case WIRE_VARINT:
149
+ this.readVarint64();
150
+ break;
151
+ case WIRE_64BIT:
152
+ this.pos += 8;
153
+ break;
154
+ case WIRE_LENGTH_DELIMITED: {
155
+ const len = this.readVarint();
156
+ this.pos += len;
157
+ break;
158
+ }
159
+ case WIRE_32BIT:
160
+ this.pos += 4;
161
+ break;
162
+ default:
163
+ throw new Error(`Unknown wire type: ${wireType}`);
164
+ }
165
+ }
166
+ /** Create a sub-reader for a length-delimited field. */
167
+ subReader(byteLength) {
168
+ const sub = new PbfReader(this.bytes, this.pos, byteLength);
169
+ this.pos += byteLength;
170
+ return sub;
171
+ }
172
+ /** Read packed repeated sint64 values. */
173
+ readPackedSInt64(byteLength) {
174
+ const result = [];
175
+ const end = this.pos + byteLength;
176
+ while (this.pos < end) {
177
+ result.push(this.readSVarint64());
178
+ }
179
+ return result;
180
+ }
181
+ /** Read packed repeated uint32 values. */
182
+ readPackedUInt32(byteLength) {
183
+ const result = [];
184
+ const end = this.pos + byteLength;
185
+ while (this.pos < end) {
186
+ result.push(this.readVarint());
187
+ }
188
+ return result;
189
+ }
190
+ }
191
+ const textDecoder = new TextDecoder();
192
+ // ── Esri PBF geometry type enum ──────────────────────────────
193
+ const PBF_GEOMETRY_TYPE_NAMES = {
194
+ 0: "esriGeometryPoint",
195
+ 1: "esriGeometryMultipoint",
196
+ 2: "esriGeometryPolyline",
197
+ 3: "esriGeometryPolygon",
198
+ 4: "esriGeometryEnvelope",
199
+ 127: "esriGeometryNull",
200
+ };
201
+ function decodeScale(reader) {
202
+ let xScale = 0;
203
+ let yScale = 0;
204
+ while (reader.pos < reader.end) {
205
+ const [field, wire] = reader.readTag();
206
+ if (field === 1 && wire === WIRE_64BIT)
207
+ xScale = reader.readDouble();
208
+ else if (field === 2 && wire === WIRE_64BIT)
209
+ yScale = reader.readDouble();
210
+ else
211
+ reader.skip(wire);
212
+ }
213
+ return { xScale, yScale };
214
+ }
215
+ function decodeTranslate(reader) {
216
+ let xTranslate = 0;
217
+ let yTranslate = 0;
218
+ while (reader.pos < reader.end) {
219
+ const [field, wire] = reader.readTag();
220
+ if (field === 1 && wire === WIRE_64BIT)
221
+ xTranslate = reader.readDouble();
222
+ else if (field === 2 && wire === WIRE_64BIT)
223
+ yTranslate = reader.readDouble();
224
+ else
225
+ reader.skip(wire);
226
+ }
227
+ return { xTranslate, yTranslate };
228
+ }
229
+ function decodeTransform(reader) {
230
+ let xScale = 1;
231
+ let yScale = 1;
232
+ let xTranslate = 0;
233
+ let yTranslate = 0;
234
+ while (reader.pos < reader.end) {
235
+ const [field, wire] = reader.readTag();
236
+ if (field === 2 && wire === WIRE_LENGTH_DELIMITED) {
237
+ const len = reader.readVarint();
238
+ const sub = reader.subReader(len);
239
+ const s = decodeScale(sub);
240
+ xScale = s.xScale;
241
+ yScale = s.yScale;
242
+ }
243
+ else if (field === 3 && wire === WIRE_LENGTH_DELIMITED) {
244
+ const len = reader.readVarint();
245
+ const sub = reader.subReader(len);
246
+ const t = decodeTranslate(sub);
247
+ xTranslate = t.xTranslate;
248
+ yTranslate = t.yTranslate;
249
+ }
250
+ else {
251
+ reader.skip(wire);
252
+ }
253
+ }
254
+ return { xScale, yScale, xTranslate, yTranslate };
255
+ }
256
+ function decodeField(reader) {
257
+ let name = "";
258
+ let fieldType = 0;
259
+ let alias = "";
260
+ while (reader.pos < reader.end) {
261
+ const [field, wire] = reader.readTag();
262
+ if (field === 1 && wire === WIRE_LENGTH_DELIMITED) {
263
+ const len = reader.readVarint();
264
+ name = reader.readString(len);
265
+ }
266
+ else if (field === 2 && wire === WIRE_VARINT) {
267
+ fieldType = reader.readVarint();
268
+ }
269
+ else if (field === 3 && wire === WIRE_LENGTH_DELIMITED) {
270
+ const len = reader.readVarint();
271
+ alias = reader.readString(len);
272
+ }
273
+ else {
274
+ reader.skip(wire);
275
+ }
276
+ }
277
+ return { name, fieldType, alias: alias || name };
278
+ }
279
+ function decodeSpatialReference(reader) {
280
+ let wkid = 0;
281
+ let latestWkid = 0;
282
+ while (reader.pos < reader.end) {
283
+ const [field, wire] = reader.readTag();
284
+ if (field === 1 && wire === WIRE_VARINT)
285
+ wkid = reader.readVarint();
286
+ else if (field === 2 && wire === WIRE_VARINT)
287
+ latestWkid = reader.readVarint();
288
+ else
289
+ reader.skip(wire);
290
+ }
291
+ return { wkid, latestWkid: latestWkid || wkid };
292
+ }
293
+ const MAX_SAFE = BigInt(Number.MAX_SAFE_INTEGER);
294
+ const MIN_SAFE = BigInt(Number.MIN_SAFE_INTEGER);
295
+ const TWO_POW_64 = 1n << 64n;
296
+ /**
297
+ * Reinterpret an unsigned 64-bit value as signed two's-complement, matching how
298
+ * GeoServices PBF encodes `int64` attributes.
299
+ */
300
+ function asInt64(unsigned) {
301
+ return unsigned >= 1n << 63n ? unsigned - TWO_POW_64 : unsigned;
302
+ }
303
+ /**
304
+ * Preserve 64-bit integer precision: return a JS `number` when the value fits
305
+ * within the safe-integer range, otherwise a decimal string. Mirrors the gRPC
306
+ * transport's `toSafeNumberOrString` so PBF, gRPC, and `f=json` agree on large
307
+ * 64-bit ids instead of the PBF fast path silently rounding above 2^53.
308
+ */
309
+ function safeNumberOrString(value) {
310
+ return value <= MAX_SAFE && value >= MIN_SAFE ? Number(value) : value.toString();
311
+ }
312
+ function decodeValue(reader) {
313
+ let value = null;
314
+ let fieldIndex = -1;
315
+ while (reader.pos < reader.end) {
316
+ const [field, wire] = reader.readTag();
317
+ switch (field) {
318
+ case 1: // string_value
319
+ if (wire === WIRE_LENGTH_DELIMITED) {
320
+ const len = reader.readVarint();
321
+ value = reader.readString(len);
322
+ }
323
+ else
324
+ reader.skip(wire);
325
+ break;
326
+ case 2: // float_value
327
+ if (wire === WIRE_32BIT)
328
+ value = reader.readFloat();
329
+ else
330
+ reader.skip(wire);
331
+ break;
332
+ case 3: // double_value
333
+ if (wire === WIRE_64BIT)
334
+ value = reader.readDouble();
335
+ else
336
+ reader.skip(wire);
337
+ break;
338
+ case 4: // sint_value (sint32)
339
+ if (wire === WIRE_VARINT)
340
+ value = reader.readSVarint32();
341
+ else
342
+ reader.skip(wire);
343
+ break;
344
+ case 5: // uint_value
345
+ if (wire === WIRE_VARINT)
346
+ value = reader.readVarint();
347
+ else
348
+ reader.skip(wire);
349
+ break;
350
+ case 6: // int64_value (signed two's-complement)
351
+ if (wire === WIRE_VARINT)
352
+ value = safeNumberOrString(asInt64(reader.readVarint64Bigint()));
353
+ else
354
+ reader.skip(wire);
355
+ break;
356
+ case 7: // uint64_value
357
+ if (wire === WIRE_VARINT)
358
+ value = safeNumberOrString(reader.readVarint64Bigint());
359
+ else
360
+ reader.skip(wire);
361
+ break;
362
+ case 9: // bool_value
363
+ if (wire === WIRE_VARINT)
364
+ value = reader.readBool();
365
+ else
366
+ reader.skip(wire);
367
+ break;
368
+ case 10: // null_value
369
+ if (wire === WIRE_VARINT) {
370
+ reader.readVarint(); // consume the bool
371
+ value = null;
372
+ }
373
+ else
374
+ reader.skip(wire);
375
+ break;
376
+ case 11: // field_index
377
+ if (wire === WIRE_VARINT)
378
+ fieldIndex = reader.readVarint();
379
+ else
380
+ reader.skip(wire);
381
+ break;
382
+ default:
383
+ reader.skip(wire);
384
+ }
385
+ }
386
+ return { value, fieldIndex };
387
+ }
388
+ function decodeGeometry(reader, transform, layerGeometryType) {
389
+ let lengths = [];
390
+ let coords = [];
391
+ while (reader.pos < reader.end) {
392
+ const [field, wire] = reader.readTag();
393
+ if (field === 1 && wire === WIRE_VARINT) {
394
+ reader.readVarint(); // geometryType — we use layerGeometryType instead
395
+ }
396
+ else if (field === 2 && wire === WIRE_LENGTH_DELIMITED) {
397
+ const len = reader.readVarint();
398
+ lengths = reader.readPackedUInt32(len);
399
+ }
400
+ else if (field === 3 && wire === WIRE_LENGTH_DELIMITED) {
401
+ const len = reader.readVarint();
402
+ coords = reader.readPackedSInt64(len);
403
+ }
404
+ else {
405
+ reader.skip(wire);
406
+ }
407
+ }
408
+ if (coords.length === 0)
409
+ return null;
410
+ // The 2D fast path packs the stream as flat (x, y) pairs. A truncated or
411
+ // hostile payload with an odd number of values would otherwise read past the
412
+ // last x as a `y === undefined`, delta-accumulate to NaN, and propagate
413
+ // silent NaN coordinates through the geometry. Reject it instead so the
414
+ // caller can fall back to f=json.
415
+ if (coords.length % 2 !== 0) {
416
+ throw new PbfDecodeError(`PBF geometry coordinate stream has an odd length (${coords.length})`);
417
+ }
418
+ // Delta-decode and transform coordinates
419
+ const xScale = transform?.xScale ?? 1;
420
+ const yScale = transform?.yScale ?? 1;
421
+ const xTranslate = transform?.xTranslate ?? 0;
422
+ const yTranslate = transform?.yTranslate ?? 0;
423
+ // Undo delta encoding: each coordinate pair is (deltaX, deltaY)
424
+ let prevX = 0;
425
+ let prevY = 0;
426
+ const worldCoords = [];
427
+ for (let i = 0; i < coords.length; i += 2) {
428
+ prevX += coords[i];
429
+ prevY += coords[i + 1];
430
+ const x = prevX * xScale + xTranslate;
431
+ const y = prevY * yScale + yTranslate;
432
+ if (!Number.isFinite(x) || !Number.isFinite(y)) {
433
+ throw new PbfDecodeError("PBF geometry produced a non-finite coordinate");
434
+ }
435
+ worldCoords.push([x, y]);
436
+ }
437
+ return buildGeoServicesGeometry(layerGeometryType, worldCoords, lengths);
438
+ }
439
+ function buildGeoServicesGeometry(geometryType, worldCoords, lengths) {
440
+ switch (geometryType) {
441
+ case "esriGeometryPoint":
442
+ return worldCoords.length > 0 ? { x: worldCoords[0][0], y: worldCoords[0][1] } : { x: null, y: null };
443
+ case "esriGeometryMultipoint":
444
+ return { points: worldCoords };
445
+ case "esriGeometryPolyline": {
446
+ const paths = [];
447
+ let offset = 0;
448
+ for (const len of lengths) {
449
+ paths.push(worldCoords.slice(offset, offset + len));
450
+ offset += len;
451
+ }
452
+ return { paths: paths.length > 0 ? paths : [worldCoords] };
453
+ }
454
+ case "esriGeometryPolygon": {
455
+ const rings = [];
456
+ let offset = 0;
457
+ for (const len of lengths) {
458
+ rings.push(worldCoords.slice(offset, offset + len));
459
+ offset += len;
460
+ }
461
+ return { rings: rings.length > 0 ? rings : [worldCoords] };
462
+ }
463
+ default:
464
+ return { x: worldCoords[0]?.[0] ?? null, y: worldCoords[0]?.[1] ?? null };
465
+ }
466
+ }
467
+ function decodeFeature(reader, fields, transform, geometryType) {
468
+ const attributes = {};
469
+ let geometry = null;
470
+ const valueEntries = [];
471
+ while (reader.pos < reader.end) {
472
+ const [field, wire] = reader.readTag();
473
+ if (field === 1 && wire === WIRE_LENGTH_DELIMITED) {
474
+ const len = reader.readVarint();
475
+ const sub = reader.subReader(len);
476
+ valueEntries.push(decodeValue(sub));
477
+ }
478
+ else if (field === 2 && wire === WIRE_LENGTH_DELIMITED) {
479
+ const len = reader.readVarint();
480
+ const sub = reader.subReader(len);
481
+ geometry = decodeGeometry(sub, transform, geometryType);
482
+ }
483
+ else {
484
+ reader.skip(wire);
485
+ }
486
+ }
487
+ // Map value entries to field names using field indices
488
+ for (const entry of valueEntries) {
489
+ if (entry.fieldIndex >= 0 && entry.fieldIndex < fields.length) {
490
+ attributes[fields[entry.fieldIndex].name] = entry.value;
491
+ }
492
+ }
493
+ const result = { attributes };
494
+ if (geometry !== null) {
495
+ result.geometry = geometry;
496
+ }
497
+ return result;
498
+ }
499
+ function decodeFeatureResult(reader) {
500
+ let objectIdFieldName = "";
501
+ let geometryType = "";
502
+ let spatialReference = null;
503
+ let exceededTransferLimit = false;
504
+ let hasZ = false;
505
+ let hasM = false;
506
+ let transform = null;
507
+ const fields = [];
508
+ const featureReaders = [];
509
+ while (reader.pos < reader.end) {
510
+ const [field, wire] = reader.readTag();
511
+ switch (field) {
512
+ case 1: // objectIdFieldName
513
+ if (wire === WIRE_LENGTH_DELIMITED) {
514
+ const len = reader.readVarint();
515
+ objectIdFieldName = reader.readString(len);
516
+ }
517
+ else
518
+ reader.skip(wire);
519
+ break;
520
+ case 7: // geometryType
521
+ if (wire === WIRE_VARINT) {
522
+ const gt = reader.readVarint();
523
+ geometryType = PBF_GEOMETRY_TYPE_NAMES[gt] ?? "esriGeometryNull";
524
+ }
525
+ else
526
+ reader.skip(wire);
527
+ break;
528
+ case 8: // spatialReference
529
+ if (wire === WIRE_LENGTH_DELIMITED) {
530
+ const len = reader.readVarint();
531
+ spatialReference = decodeSpatialReference(reader.subReader(len));
532
+ }
533
+ else
534
+ reader.skip(wire);
535
+ break;
536
+ case 9: // exceededTransferLimit
537
+ if (wire === WIRE_VARINT)
538
+ exceededTransferLimit = reader.readBool();
539
+ else
540
+ reader.skip(wire);
541
+ break;
542
+ case 10: // hasZ
543
+ if (wire === WIRE_VARINT)
544
+ hasZ = reader.readBool();
545
+ else
546
+ reader.skip(wire);
547
+ break;
548
+ case 11: // hasM
549
+ if (wire === WIRE_VARINT)
550
+ hasM = reader.readBool();
551
+ else
552
+ reader.skip(wire);
553
+ break;
554
+ case 12: // transform
555
+ if (wire === WIRE_LENGTH_DELIMITED) {
556
+ const len = reader.readVarint();
557
+ transform = decodeTransform(reader.subReader(len));
558
+ }
559
+ else
560
+ reader.skip(wire);
561
+ break;
562
+ case 13: // fields (repeated)
563
+ if (wire === WIRE_LENGTH_DELIMITED) {
564
+ const len = reader.readVarint();
565
+ fields.push(decodeField(reader.subReader(len)));
566
+ }
567
+ else
568
+ reader.skip(wire);
569
+ break;
570
+ case 15: // features (repeated)
571
+ if (wire === WIRE_LENGTH_DELIMITED) {
572
+ const len = reader.readVarint();
573
+ // Defer feature decoding until we have all fields and transform
574
+ featureReaders.push(reader.subReader(len));
575
+ }
576
+ else
577
+ reader.skip(wire);
578
+ break;
579
+ default:
580
+ reader.skip(wire);
581
+ }
582
+ }
583
+ // The geometry decoder reads the packed coordinate stream as flat (x, y)
584
+ // pairs. When the server advertises Z and/or M, each vertex carries extra
585
+ // ordinates, so decoding as 2D pairs would mis-pair every coordinate and
586
+ // garble the geometry. Rather than emit silently corrupt geometry on the
587
+ // binary fast path, signal the caller to fall back to f=json (which decodes
588
+ // Z/M correctly). See HonuaClient.requestBinaryWithJsonFallback.
589
+ if (hasZ || hasM) {
590
+ throw new PbfDecodeError(`PBF response carries ${hasZ ? "Z" : ""}${hasZ && hasM ? "/" : ""}${hasM ? "M" : ""} geometry; falling back to f=json`);
591
+ }
592
+ // Now decode features with full field/transform context
593
+ const features = featureReaders.map((fr) => decodeFeature(fr, fields, transform, geometryType));
594
+ // Build JSON-compatible response matching f=json shape
595
+ const result = {
596
+ objectIdFieldName,
597
+ fields: fields.map((f) => ({
598
+ name: f.name,
599
+ type: mapPbfFieldTypeToGeoServices(f.fieldType),
600
+ alias: f.alias,
601
+ })),
602
+ features,
603
+ };
604
+ if (geometryType && geometryType !== "esriGeometryNull") {
605
+ result.geometryType = geometryType;
606
+ }
607
+ if (spatialReference) {
608
+ result.spatialReference = spatialReference;
609
+ }
610
+ if (hasZ)
611
+ result.hasZ = true;
612
+ if (hasM)
613
+ result.hasM = true;
614
+ if (exceededTransferLimit) {
615
+ result.exceededTransferLimit = true;
616
+ }
617
+ return result;
618
+ }
619
+ function mapPbfFieldTypeToGeoServices(fieldType) {
620
+ switch (fieldType) {
621
+ case 0:
622
+ return "esriFieldTypeSmallInteger";
623
+ case 1:
624
+ return "esriFieldTypeInteger";
625
+ case 2:
626
+ return "esriFieldTypeSingle";
627
+ case 3:
628
+ return "esriFieldTypeDouble";
629
+ case 4:
630
+ return "esriFieldTypeString";
631
+ case 5:
632
+ return "esriFieldTypeDate";
633
+ case 6:
634
+ return "esriFieldTypeOID";
635
+ case 7:
636
+ return "esriFieldTypeGeometry";
637
+ case 8:
638
+ return "esriFieldTypeBlob";
639
+ case 10:
640
+ return "esriFieldTypeGUID";
641
+ case 11:
642
+ return "esriFieldTypeGlobalID";
643
+ case 12:
644
+ return "esriFieldTypeXML";
645
+ case 13:
646
+ return "esriFieldTypeBigInteger";
647
+ default:
648
+ return "esriFieldTypeString";
649
+ }
650
+ }
651
+ // ── Public API ───────────────────────────────────────────────
652
+ /**
653
+ * Decode an Esri FeatureCollectionPBuffer response into a JSON-compatible
654
+ * query response object.
655
+ *
656
+ * The returned object has the same shape as an `f=json` response:
657
+ * `{ objectIdFieldName, geometryType, spatialReference, fields, features, ... }`
658
+ *
659
+ * @param buffer - The raw PBF bytes from a `f=pbf` response.
660
+ * @returns A JSON-compatible query response object.
661
+ */
662
+ export function decodePbfQueryResponse(buffer) {
663
+ const bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);
664
+ const reader = new PbfReader(bytes);
665
+ let queryResult = {};
666
+ // FeatureCollectionPBuffer
667
+ while (reader.pos < reader.end) {
668
+ const [field, wire] = reader.readTag();
669
+ if (field === 1 && wire === WIRE_LENGTH_DELIMITED) {
670
+ // version string — skip
671
+ const len = reader.readVarint();
672
+ reader.pos += len;
673
+ }
674
+ else if (field === 2 && wire === WIRE_LENGTH_DELIMITED) {
675
+ // queryResult
676
+ const len = reader.readVarint();
677
+ const qrReader = reader.subReader(len);
678
+ // QueryResult → featureResult (field 1)
679
+ while (qrReader.pos < qrReader.end) {
680
+ const [qrField, qrWire] = qrReader.readTag();
681
+ if (qrField === 1 && qrWire === WIRE_LENGTH_DELIMITED) {
682
+ const frLen = qrReader.readVarint();
683
+ queryResult = decodeFeatureResult(qrReader.subReader(frLen));
684
+ }
685
+ else {
686
+ qrReader.skip(qrWire);
687
+ }
688
+ }
689
+ }
690
+ else {
691
+ reader.skip(wire);
692
+ }
693
+ }
694
+ return queryResult;
695
+ }
696
+ /**
697
+ * Check whether a Response has a protobuf content type.
698
+ */
699
+ export function isPbfResponse(response) {
700
+ const ct = response.headers.get("content-type") ?? "";
701
+ return ct.includes("application/x-protobuf") || ct.includes("application/protobuf");
702
+ }