@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,350 @@
1
+ export const MAP_PACKAGE_REALTIME_CHANNEL_V1 = "honua.map-package.watch.v1";
2
+ const DEFAULT_MAP_PACKAGE_EVENT_TYPES = [
3
+ "ready",
4
+ "heartbeat",
5
+ "stale",
6
+ "updated",
7
+ "refetch-required",
8
+ "reload-required",
9
+ "error",
10
+ "disconnected",
11
+ ];
12
+ export function createMapPackageServerSentEventsTransport(options) {
13
+ return {
14
+ kind: "sse",
15
+ subscribe(request, observer) {
16
+ const encoded = encodeMapPackageRealtimeUrl(new URL(options.url, request.client.serverBaseUrl), request);
17
+ applyMapPackageRealtimeAuth(encoded, options.auth);
18
+ const source = createEventSource(resolveEventSourceUrl(options.url, encoded), options);
19
+ const listeners = [];
20
+ let closed = false;
21
+ const emitPayload = (payload) => {
22
+ if (closed || payload.trim() === "")
23
+ return;
24
+ try {
25
+ observer.message(decodeMapPackageRealtimeMessage(JSON.parse(payload)));
26
+ }
27
+ catch (error) {
28
+ observer.error(error);
29
+ }
30
+ };
31
+ const messageListener = (event) => emitPayload(event.data);
32
+ source.onopen = () => {
33
+ if (!closed) {
34
+ observer.connected({
35
+ channel: MAP_PACKAGE_REALTIME_CHANNEL_V1,
36
+ transport: "sse",
37
+ url: redactMapPackageRealtimeUrl(encoded),
38
+ });
39
+ }
40
+ };
41
+ source.onmessage = messageListener;
42
+ source.onerror = (event) => {
43
+ if (closed)
44
+ return;
45
+ if (isEventSourceClosed(source)) {
46
+ observer.error(event);
47
+ closeSource("sse-closed");
48
+ }
49
+ else {
50
+ observer.message({
51
+ type: "stale",
52
+ channel: MAP_PACKAGE_REALTIME_CHANNEL_V1,
53
+ packageId: request.packageId,
54
+ reason: "sse-error",
55
+ });
56
+ }
57
+ };
58
+ for (const type of options.eventTypes ?? DEFAULT_MAP_PACKAGE_EVENT_TYPES) {
59
+ if (!source.addEventListener)
60
+ break;
61
+ const listener = (event) => emitPayload(event.data);
62
+ source.addEventListener(type, listener);
63
+ listeners.push([type, listener]);
64
+ }
65
+ const abortListener = () => closeSource("aborted");
66
+ request.signal.addEventListener("abort", abortListener, { once: true });
67
+ function closeSource(reason) {
68
+ if (closed)
69
+ return;
70
+ closed = true;
71
+ request.signal.removeEventListener("abort", abortListener);
72
+ for (const [type, listener] of listeners)
73
+ source.removeEventListener?.(type, listener);
74
+ source.onopen = null;
75
+ source.onmessage = null;
76
+ source.onerror = null;
77
+ source.close();
78
+ observer.disconnected({ reason });
79
+ }
80
+ return {
81
+ close: () => closeSource("closed"),
82
+ };
83
+ },
84
+ };
85
+ }
86
+ export function encodeMapPackageRealtimeUrl(url, request) {
87
+ url.searchParams.set("channel", MAP_PACKAGE_REALTIME_CHANNEL_V1);
88
+ url.searchParams.set("path", request.path);
89
+ if (request.packageId)
90
+ url.searchParams.set("packageId", request.packageId);
91
+ if (request.resumeFrom?.eventId)
92
+ url.searchParams.set("eventId", request.resumeFrom.eventId);
93
+ if (request.resumeFrom?.fingerprint)
94
+ url.searchParams.set("fingerprint", request.resumeFrom.fingerprint);
95
+ if (request.resumeFrom?.updatedAt)
96
+ url.searchParams.set("updatedAt", request.resumeFrom.updatedAt);
97
+ if (request.resumeFrom?.sequence !== undefined)
98
+ url.searchParams.set("sequence", String(request.resumeFrom.sequence));
99
+ if (request.resumeFrom?.validator?.etag)
100
+ url.searchParams.set("etag", request.resumeFrom.validator.etag);
101
+ if (request.resumeFrom?.validator?.lastModified) {
102
+ url.searchParams.set("lastModified", request.resumeFrom.validator.lastModified);
103
+ }
104
+ return url;
105
+ }
106
+ export function redactMapPackageRealtimeUrl(input) {
107
+ const text = String(input);
108
+ try {
109
+ const url = new URL(text, "https://honua.invalid");
110
+ const sensitiveParams = new Set(["access_token", "token", "api_key", "apikey", "key", "authorization"]);
111
+ for (const key of [...url.searchParams.keys()]) {
112
+ if (sensitiveParams.has(key.toLowerCase())) {
113
+ url.searchParams.set(key, "REDACTED");
114
+ }
115
+ }
116
+ url.username = url.username ? "REDACTED" : "";
117
+ url.password = url.password ? "REDACTED" : "";
118
+ const redacted = url.toString();
119
+ return text.startsWith("http://") || text.startsWith("https://")
120
+ ? redacted
121
+ : `${url.pathname}${url.search}${url.hash}`;
122
+ }
123
+ catch {
124
+ return text.replace(/([?&](?:access_token|token|api_key|apikey|key|authorization)=)[^&#]*/gi, "$1REDACTED");
125
+ }
126
+ }
127
+ export function decodeMapPackageRealtimeMessage(payload) {
128
+ const event = unwrapRealtimeEnvelope(payload);
129
+ const rawType = typeof event.type === "string" ? event.type : typeof event.kind === "string" ? event.kind : undefined;
130
+ if (!rawType)
131
+ throw new Error("MapPackage realtime message is missing type.");
132
+ const base = realtimeMessageBase(event);
133
+ switch (rawType) {
134
+ case "ready":
135
+ case "connected":
136
+ return { ...base, type: "ready" };
137
+ case "heartbeat":
138
+ return { ...base, type: "heartbeat" };
139
+ case "stale":
140
+ return {
141
+ ...base,
142
+ type: "stale",
143
+ ...(typeof event.reason === "string" ? { reason: event.reason } : {}),
144
+ ...(typeof event.retryAfterMs === "number" ? { retryAfterMs: event.retryAfterMs } : {}),
145
+ };
146
+ case "updated":
147
+ case "package":
148
+ return { ...base, type: "updated", update: decodeRealtimeUpdate(event) };
149
+ case "refetch-required":
150
+ return {
151
+ ...base,
152
+ type: "refetch-required",
153
+ ...(typeof event.reason === "string" ? { reason: event.reason } : {}),
154
+ ...(typeof event.path === "string" ? { path: event.path } : {}),
155
+ ...(isCacheValidator(event.validator) ? { validator: event.validator } : {}),
156
+ };
157
+ case "reload-required":
158
+ return {
159
+ ...base,
160
+ type: "reload-required",
161
+ reason: typeof event.reason === "string" ? event.reason : "MapPackage update requires a full style reload.",
162
+ ...(hasRealtimeUpdate(event) ? { update: decodeRealtimeUpdate(event) } : {}),
163
+ };
164
+ case "error":
165
+ return {
166
+ ...base,
167
+ type: "error",
168
+ error: event.error ?? event.message ?? "MapPackage realtime channel error.",
169
+ ...(typeof event.code === "string" ? { code: event.code } : {}),
170
+ ...(typeof event.terminal === "boolean" ? { terminal: event.terminal } : {}),
171
+ ...(typeof event.retryAfterMs === "number" ? { retryAfterMs: event.retryAfterMs } : {}),
172
+ };
173
+ case "disconnected":
174
+ return {
175
+ ...base,
176
+ type: "disconnected",
177
+ ...(typeof event.reason === "string" ? { reason: event.reason } : {}),
178
+ ...(typeof event.retryAfterMs === "number" ? { retryAfterMs: event.retryAfterMs } : {}),
179
+ };
180
+ default:
181
+ throw new Error(`Unsupported MapPackage realtime message type "${rawType}".`);
182
+ }
183
+ }
184
+ export function readMapPackageRealtimeAdvertisement(pkg) {
185
+ if (!pkg)
186
+ return undefined;
187
+ const record = pkg;
188
+ const directCandidates = [
189
+ valueAt(record, ["realtime", "mapPackageWatch"]),
190
+ valueAt(record, ["realtime", "mapPackage"]),
191
+ valueAt(record, ["watch", "realtime"]),
192
+ record.realtimeWatch,
193
+ record.watchChannel,
194
+ ];
195
+ for (const candidate of directCandidates) {
196
+ const normalized = normalizeAdvertisement(candidate);
197
+ if (normalized)
198
+ return normalized;
199
+ }
200
+ if (Array.isArray(record.links)) {
201
+ for (const link of record.links) {
202
+ const normalized = normalizeLinkAdvertisement(link);
203
+ if (normalized)
204
+ return normalized;
205
+ }
206
+ }
207
+ return undefined;
208
+ }
209
+ function createEventSource(url, options) {
210
+ if (options.eventSourceFactory) {
211
+ return options.eventSourceFactory(url, { withCredentials: options.withCredentials });
212
+ }
213
+ // The global `EventSource` is a constructor: calling it as a plain
214
+ // function (`EventSource(url, init)`) throws a TypeError in browsers,
215
+ // so the default path must construct with `new`.
216
+ const EventSourceCtor = globalThis.EventSource;
217
+ if (!EventSourceCtor)
218
+ throw new Error("EventSource is not available; provide eventSourceFactory for this runtime.");
219
+ return new EventSourceCtor(url, { withCredentials: options.withCredentials });
220
+ }
221
+ function applyMapPackageRealtimeAuth(url, auth) {
222
+ if (!auth || auth.kind !== "query-token")
223
+ return;
224
+ url.searchParams.set(auth.parameterName ?? "access_token", auth.token);
225
+ }
226
+ function resolveEventSourceUrl(input, url) {
227
+ if (input.startsWith("http://") || input.startsWith("https://"))
228
+ return url.toString();
229
+ return `${url.pathname}${url.search}`;
230
+ }
231
+ function isEventSourceClosed(source) {
232
+ return source.readyState === 2;
233
+ }
234
+ function unwrapRealtimeEnvelope(payload) {
235
+ if (!isRecord(payload))
236
+ throw new Error("MapPackage realtime message must be a JSON object.");
237
+ if (isRecord(payload.event))
238
+ return payload.event;
239
+ if (isRecord(payload.message))
240
+ return payload.message;
241
+ if (isRecord(payload.mapPackageWatch))
242
+ return payload.mapPackageWatch;
243
+ return payload;
244
+ }
245
+ function realtimeMessageBase(event) {
246
+ return {
247
+ ...(typeof event.channel === "string" ? { channel: event.channel } : {}),
248
+ ...(typeof event.packageId === "string" ? { packageId: event.packageId } : {}),
249
+ ...(typeof event.eventId === "string" ? { eventId: event.eventId } : {}),
250
+ ...(typeof event.sequence === "number" ? { sequence: event.sequence } : {}),
251
+ ...(typeof event.fingerprint === "string" ? { fingerprint: event.fingerprint } : {}),
252
+ ...(typeof event.updatedAt === "string" ? { updatedAt: event.updatedAt } : {}),
253
+ ...(typeof event.receivedAt === "string" ? { receivedAt: event.receivedAt } : {}),
254
+ ...(isCacheValidator(event.validator) ? { validator: event.validator } : {}),
255
+ };
256
+ }
257
+ function hasRealtimeUpdate(event) {
258
+ return isRecord(event.update) || isRecord(event.mapPackage) || "patch" in event || event.refetchRequired === true;
259
+ }
260
+ function decodeRealtimeUpdate(event) {
261
+ const update = isRecord(event.update) ? event.update : undefined;
262
+ const kind = typeof update?.kind === "string" ? update.kind : typeof update?.type === "string" ? update.type : undefined;
263
+ if (kind === "package" && isRecord(update?.mapPackage)) {
264
+ return { kind: "package", mapPackage: update.mapPackage };
265
+ }
266
+ if (kind === "patch" && update && "patch" in update) {
267
+ return {
268
+ kind: "patch",
269
+ patch: update.patch,
270
+ ...(typeof update.baseFingerprint === "string" ? { baseFingerprint: update.baseFingerprint } : {}),
271
+ };
272
+ }
273
+ if (kind === "refetch") {
274
+ return {
275
+ kind: "refetch",
276
+ ...(typeof update?.path === "string" ? { path: update.path } : {}),
277
+ ...(isCacheValidator(update?.validator) ? { validator: update.validator } : {}),
278
+ };
279
+ }
280
+ if (isRecord(event.mapPackage)) {
281
+ return { kind: "package", mapPackage: event.mapPackage };
282
+ }
283
+ if ("patch" in event) {
284
+ return {
285
+ kind: "patch",
286
+ patch: event.patch,
287
+ ...(typeof event.baseFingerprint === "string" ? { baseFingerprint: event.baseFingerprint } : {}),
288
+ };
289
+ }
290
+ if (event.refetchRequired === true || event.refetch === true) {
291
+ return {
292
+ kind: "refetch",
293
+ ...(typeof event.path === "string" ? { path: event.path } : {}),
294
+ ...(isCacheValidator(event.validator) ? { validator: event.validator } : {}),
295
+ };
296
+ }
297
+ throw new Error("MapPackage realtime update must include package, patch, or refetch payload.");
298
+ }
299
+ function normalizeAdvertisement(value) {
300
+ if (!isRecord(value))
301
+ return undefined;
302
+ const href = stringField(value, "href");
303
+ const url = stringField(value, "url");
304
+ const path = stringField(value, "path");
305
+ const transport = stringField(value, "transport") ?? (href || url || path ? "sse" : undefined);
306
+ if (!transport && !href && !url && !path)
307
+ return undefined;
308
+ return {
309
+ ...(stringField(value, "channel") ? { channel: stringField(value, "channel") } : {}),
310
+ ...(transport ? { transport } : {}),
311
+ ...(href ? { href } : {}),
312
+ ...(url ? { url } : {}),
313
+ ...(path ? { path } : {}),
314
+ ...(typeof value.withCredentials === "boolean" ? { withCredentials: value.withCredentials } : {}),
315
+ ...(value.fallback === "polling" || value.fallback === "none" ? { fallback: value.fallback } : {}),
316
+ ...(typeof value.staleAfterMs === "number" ? { staleAfterMs: value.staleAfterMs } : {}),
317
+ };
318
+ }
319
+ function normalizeLinkAdvertisement(value) {
320
+ if (!isRecord(value))
321
+ return undefined;
322
+ const rel = stringField(value, "rel");
323
+ if (rel !== "map-package-watch" && rel !== "map-package-realtime-watch" && rel !== "honua:map-package-watch") {
324
+ return undefined;
325
+ }
326
+ return normalizeAdvertisement({
327
+ ...value,
328
+ transport: stringField(value, "transport") ?? "sse",
329
+ href: stringField(value, "href") ?? stringField(value, "url"),
330
+ });
331
+ }
332
+ function valueAt(record, path) {
333
+ let current = record;
334
+ for (const segment of path) {
335
+ if (!isRecord(current))
336
+ return undefined;
337
+ current = current[segment];
338
+ }
339
+ return current;
340
+ }
341
+ function stringField(record, key) {
342
+ const value = record[key];
343
+ return typeof value === "string" && value.length > 0 ? value : undefined;
344
+ }
345
+ function isCacheValidator(value) {
346
+ return isRecord(value) && (typeof value.etag === "string" || typeof value.lastModified === "string");
347
+ }
348
+ function isRecord(value) {
349
+ return typeof value === "object" && value !== null && !Array.isArray(value);
350
+ }
@@ -0,0 +1,43 @@
1
+ import { type HonuaMapPackage } from "./map-package.js";
2
+ export type HonuaMapPackageDiagnosticSeverity = "error" | "warning";
3
+ export type HonuaMapPackageDiagnosticCode = "invalid-package" | "unsupported-format" | "missing-map-package-id" | "missing-source-bindings" | "missing-map-spec" | "invalid-map-spec" | "duplicate-source" | "missing-source-id" | "missing-source-locator" | "unsupported-protocol" | "missing-source" | "stale-package" | "expired-package" | "style-ref-missing-layer" | "style-ref-unresolved" | "style-ref-resolution-failed";
4
+ export interface HonuaMapPackageDiagnostic {
5
+ readonly code: HonuaMapPackageDiagnosticCode;
6
+ readonly severity: HonuaMapPackageDiagnosticSeverity;
7
+ readonly message: string;
8
+ readonly packageId?: string;
9
+ readonly path?: string;
10
+ readonly detail?: unknown;
11
+ }
12
+ export interface ValidateMapPackageOptions {
13
+ /** Wall-clock used for stale / expired diagnostics. Defaults to `Date.now()`. */
14
+ readonly now?: number | Date;
15
+ /** Emit a `stale-package` warning when `updatedAt` / `createdAt` is older than this many ms. */
16
+ readonly maxAgeMs?: number;
17
+ }
18
+ export interface ValidateMapPackageResult {
19
+ readonly mapPackage: HonuaMapPackage | undefined;
20
+ readonly diagnostics: readonly HonuaMapPackageDiagnostic[];
21
+ readonly valid: boolean;
22
+ }
23
+ /**
24
+ * Validate the server-produced `MapPackage` wire shape and runtime binding
25
+ * assumptions without throwing raw JSON/type errors. Diagnostics are
26
+ * stable-enough for hosts to show or log directly.
27
+ */
28
+ export declare function validateMapPackage(value: unknown, options?: ValidateMapPackageOptions): ValidateMapPackageResult;
29
+ export declare function hasMapPackageDiagnosticErrors(diagnostics: readonly HonuaMapPackageDiagnostic[]): boolean;
30
+ /**
31
+ * Compatibility bridge to the unified Studio validation envelope. The map
32
+ * family keeps {@link ValidateMapPackageResult} as its native result;
33
+ * {@link fromMapPackageValidation} and {@link toStudioValidationResponse}
34
+ * adapt it (and any other family result) into a
35
+ * `StudioPackageValidationResponse` without changing existing types. See
36
+ * `@honua/sdk-js/studio` for the full Studio contract surface.
37
+ *
38
+ * @experimental The Studio contract surface is not yet covered by the SDK's
39
+ * semver contract and may change in any minor release prior to `1.0.0`.
40
+ */
41
+ export { fromMapPackageValidation, toStudioValidationResponse } from "../studio/validation.js";
42
+ export type { StudioPackageDiagnostic, StudioPackageDiagnosticSeverity, StudioPackageValidationResponse, } from "../studio/validation.js";
43
+ //# sourceMappingURL=map-package-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-package-validation.d.ts","sourceRoot":"","sources":["../../../src/runtime/map-package-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAErF,MAAM,MAAM,iCAAiC,GAAG,OAAO,GAAG,SAAS,CAAC;AAEpE,MAAM,MAAM,6BAA6B,GACrC,iBAAiB,GACjB,oBAAoB,GACpB,wBAAwB,GACxB,yBAAyB,GACzB,kBAAkB,GAClB,kBAAkB,GAClB,kBAAkB,GAClB,mBAAmB,GACnB,wBAAwB,GACxB,sBAAsB,GACtB,gBAAgB,GAChB,eAAe,GACf,iBAAiB,GACjB,yBAAyB,GACzB,sBAAsB,GACtB,6BAA6B,CAAC;AAElC,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,6BAA6B,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,iCAAiC,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,iFAAiF;IACjF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,EAAE,eAAe,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,WAAW,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAgBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,yBAA8B,GAAG,wBAAwB,CA2HpH;AAED,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,SAAS,yBAAyB,EAAE,GAAG,OAAO,CAExG;AAkID;;;;;;;;;;GAUG;AACH,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC/F,YAAY,EACV,uBAAuB,EACvB,+BAA+B,EAC/B,+BAA+B,GAChC,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,269 @@
1
+ import { HONUA_MAP_PACKAGE_FORMAT_V1 } from "./map-package.js";
2
+ const SUPPORTED_SOURCE_PROTOCOLS = new Set([
3
+ "geoservices_feature_service",
4
+ "geoservices_map_service",
5
+ "ogc_features",
6
+ "ogc_maps",
7
+ "ogc_tiles",
8
+ "wfs",
9
+ "wms",
10
+ "wmts",
11
+ "odata",
12
+ "vector_tile",
13
+ "raster_tile",
14
+ ]);
15
+ /**
16
+ * Validate the server-produced `MapPackage` wire shape and runtime binding
17
+ * assumptions without throwing raw JSON/type errors. Diagnostics are
18
+ * stable-enough for hosts to show or log directly.
19
+ */
20
+ export function validateMapPackage(value, options = {}) {
21
+ const diagnostics = [];
22
+ if (!isRecord(value)) {
23
+ diagnostics.push({
24
+ code: "invalid-package",
25
+ severity: "error",
26
+ message: "MapPackage response must be a JSON object.",
27
+ });
28
+ return { mapPackage: undefined, diagnostics, valid: false };
29
+ }
30
+ const packageId = typeof value.mapPackageId === "string" ? value.mapPackageId : undefined;
31
+ const add = (diagnostic) => {
32
+ diagnostics.push({ ...(packageId ? { packageId } : {}), ...diagnostic });
33
+ };
34
+ if (!packageId) {
35
+ add({
36
+ code: "missing-map-package-id",
37
+ severity: "error",
38
+ message: "MapPackage.mapPackageId must be a non-empty string.",
39
+ path: "mapPackageId",
40
+ });
41
+ }
42
+ if (value.format !== HONUA_MAP_PACKAGE_FORMAT_V1) {
43
+ add({
44
+ code: "unsupported-format",
45
+ severity: "error",
46
+ message: `MapPackage.format must be "${HONUA_MAP_PACKAGE_FORMAT_V1}".`,
47
+ path: "format",
48
+ detail: { expected: HONUA_MAP_PACKAGE_FORMAT_V1, received: value.format },
49
+ });
50
+ }
51
+ const sourceIds = new Set();
52
+ const sourceBindings = value.sourceBindings;
53
+ if (!Array.isArray(sourceBindings)) {
54
+ add({
55
+ code: "missing-source-bindings",
56
+ severity: "error",
57
+ message: "MapPackage.sourceBindings must be an array.",
58
+ path: "sourceBindings",
59
+ });
60
+ }
61
+ else {
62
+ for (let i = 0; i < sourceBindings.length; i += 1) {
63
+ const binding = sourceBindings[i];
64
+ const path = `sourceBindings[${i}]`;
65
+ if (!isRecord(binding)) {
66
+ add({
67
+ code: "invalid-package",
68
+ severity: "error",
69
+ message: "MapPackage.sourceBindings entries must be objects.",
70
+ path,
71
+ });
72
+ continue;
73
+ }
74
+ const sourceId = typeof binding.sourceId === "string" && binding.sourceId.length > 0 ? binding.sourceId : "";
75
+ if (!sourceId) {
76
+ add({
77
+ code: "missing-source-id",
78
+ severity: "error",
79
+ message: "SourceBinding.sourceId must be a non-empty string.",
80
+ path: `${path}.sourceId`,
81
+ });
82
+ }
83
+ else if (sourceIds.has(sourceId)) {
84
+ add({
85
+ code: "duplicate-source",
86
+ severity: "error",
87
+ message: `SourceBinding sourceId "${sourceId}" is duplicated.`,
88
+ path: `${path}.sourceId`,
89
+ detail: { sourceId },
90
+ });
91
+ }
92
+ else {
93
+ sourceIds.add(sourceId);
94
+ }
95
+ const protocol = typeof binding.protocol === "string" ? binding.protocol : undefined;
96
+ if (!protocol || !SUPPORTED_SOURCE_PROTOCOLS.has(protocol)) {
97
+ add({
98
+ code: "unsupported-protocol",
99
+ severity: "error",
100
+ message: `SourceBinding "${sourceId || i}" uses unsupported protocol "${String(binding.protocol)}".`,
101
+ path: `${path}.protocol`,
102
+ detail: { sourceId, protocol: binding.protocol },
103
+ });
104
+ }
105
+ const locator = binding.locator;
106
+ if (!isRecord(locator) || typeof locator.url !== "string" || locator.url.length === 0) {
107
+ add({
108
+ code: "missing-source-locator",
109
+ severity: "error",
110
+ message: `SourceBinding "${sourceId || i}" must include locator.url.`,
111
+ path: `${path}.locator.url`,
112
+ detail: { sourceId, protocol },
113
+ });
114
+ }
115
+ }
116
+ }
117
+ const mapSpec = value.mapSpec;
118
+ if (!isRecord(mapSpec)) {
119
+ add({
120
+ code: "missing-map-spec",
121
+ severity: "error",
122
+ message: "MapPackage.mapSpec must be a MapLibre style object.",
123
+ path: "mapSpec",
124
+ });
125
+ }
126
+ else {
127
+ validateMapSpecSources(add, mapSpec, sourceIds);
128
+ validateStyleRefTargets(add, value, mapSpec);
129
+ }
130
+ validateLifecycle(add, value, options);
131
+ const valid = !hasMapPackageDiagnosticErrors(diagnostics);
132
+ return {
133
+ mapPackage: value,
134
+ diagnostics,
135
+ valid,
136
+ };
137
+ }
138
+ export function hasMapPackageDiagnosticErrors(diagnostics) {
139
+ return diagnostics.some((diagnostic) => diagnostic.severity === "error");
140
+ }
141
+ function validateMapSpecSources(add, mapSpec, sourceIds) {
142
+ const mapSpecSources = isRecord(mapSpec.sources) ? new Set(Object.keys(mapSpec.sources)) : new Set();
143
+ const layers = mapSpec.layers;
144
+ if (!Array.isArray(layers)) {
145
+ add({
146
+ code: "invalid-map-spec",
147
+ severity: "error",
148
+ message: "MapPackage.mapSpec.layers must be an array.",
149
+ path: "mapSpec.layers",
150
+ });
151
+ return;
152
+ }
153
+ for (let i = 0; i < layers.length; i += 1) {
154
+ const layer = layers[i];
155
+ if (!isRecord(layer)) {
156
+ add({
157
+ code: "invalid-map-spec",
158
+ severity: "error",
159
+ message: "MapPackage.mapSpec.layers entries must be objects.",
160
+ path: `mapSpec.layers[${i}]`,
161
+ });
162
+ continue;
163
+ }
164
+ if (typeof layer.source !== "string")
165
+ continue;
166
+ if (!sourceIds.has(layer.source) && !mapSpecSources.has(layer.source)) {
167
+ add({
168
+ code: "missing-source",
169
+ severity: "error",
170
+ message: `Layer "${String(layer.id ?? i)}" references missing source "${layer.source}".`,
171
+ path: `mapSpec.layers[${i}].source`,
172
+ detail: { layerId: layer.id, sourceId: layer.source },
173
+ });
174
+ }
175
+ }
176
+ }
177
+ function validateStyleRefTargets(add, pkg, mapSpec) {
178
+ if (!Array.isArray(pkg.styleRefs))
179
+ return;
180
+ const layerIds = new Set();
181
+ if (Array.isArray(mapSpec.layers)) {
182
+ for (const layer of mapSpec.layers) {
183
+ if (isRecord(layer) && typeof layer.id === "string")
184
+ layerIds.add(layer.id);
185
+ }
186
+ }
187
+ for (let i = 0; i < pkg.styleRefs.length; i += 1) {
188
+ const ref = pkg.styleRefs[i];
189
+ if (!isRecord(ref) || !isRecord(ref.body))
190
+ continue;
191
+ for (const layerId of Object.keys(ref.body)) {
192
+ if (layerIds.has(layerId))
193
+ continue;
194
+ add({
195
+ code: "style-ref-missing-layer",
196
+ severity: "warning",
197
+ message: `StyleRef "${String(ref.styleId ?? i)}" targets missing layer "${layerId}".`,
198
+ path: `styleRefs[${i}].body.${layerId}`,
199
+ detail: { styleId: ref.styleId, layerId },
200
+ });
201
+ }
202
+ }
203
+ }
204
+ function validateLifecycle(add, pkg, options) {
205
+ const nowMs = normalizeNowMs(options.now);
206
+ if (pkg.status === "Expired") {
207
+ add({
208
+ code: "expired-package",
209
+ severity: "error",
210
+ message: "MapPackage status is Expired.",
211
+ path: "status",
212
+ detail: { status: pkg.status },
213
+ });
214
+ }
215
+ const expiresAt = parseTimestampMs(pkg.expiresAt);
216
+ if (expiresAt !== undefined && expiresAt <= nowMs) {
217
+ add({
218
+ code: "expired-package",
219
+ severity: "error",
220
+ message: "MapPackage expiresAt is in the past.",
221
+ path: "expiresAt",
222
+ detail: { expiresAt: pkg.expiresAt },
223
+ });
224
+ }
225
+ if (options.maxAgeMs === undefined)
226
+ return;
227
+ const updatedAt = parseTimestampMs(pkg.updatedAt) ?? parseTimestampMs(pkg.createdAt);
228
+ if (updatedAt === undefined)
229
+ return;
230
+ if (nowMs - updatedAt > Math.max(0, Math.trunc(options.maxAgeMs))) {
231
+ add({
232
+ code: "stale-package",
233
+ severity: "warning",
234
+ message: "MapPackage is older than the configured freshness budget.",
235
+ path: pkg.updatedAt ? "updatedAt" : "createdAt",
236
+ detail: { ageMs: nowMs - updatedAt, maxAgeMs: options.maxAgeMs },
237
+ });
238
+ }
239
+ }
240
+ function normalizeNowMs(now) {
241
+ if (now instanceof Date)
242
+ return now.getTime();
243
+ if (typeof now === "number" && Number.isFinite(now))
244
+ return now;
245
+ return Date.now();
246
+ }
247
+ function parseTimestampMs(value) {
248
+ if (value instanceof Date)
249
+ return value.getTime();
250
+ if (typeof value !== "string" && typeof value !== "number")
251
+ return undefined;
252
+ const parsed = typeof value === "number" ? value : Date.parse(value);
253
+ return Number.isFinite(parsed) ? parsed : undefined;
254
+ }
255
+ function isRecord(value) {
256
+ return typeof value === "object" && value !== null && !Array.isArray(value);
257
+ }
258
+ /**
259
+ * Compatibility bridge to the unified Studio validation envelope. The map
260
+ * family keeps {@link ValidateMapPackageResult} as its native result;
261
+ * {@link fromMapPackageValidation} and {@link toStudioValidationResponse}
262
+ * adapt it (and any other family result) into a
263
+ * `StudioPackageValidationResponse` without changing existing types. See
264
+ * `@honua/sdk-js/studio` for the full Studio contract surface.
265
+ *
266
+ * @experimental The Studio contract surface is not yet covered by the SDK's
267
+ * semver contract and may change in any minor release prior to `1.0.0`.
268
+ */
269
+ export { fromMapPackageValidation, toStudioValidationResponse } from "../studio/validation.js";