@honua/react 0.1.2-beta.0 → 0.1.4-beta.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 (281) hide show
  1. package/contract/discovery.d.ts +34 -0
  2. package/contract/discovery.d.ts.map +1 -1
  3. package/contract/index.d.ts +7 -5
  4. package/contract/index.d.ts.map +1 -1
  5. package/contract/index.js +3 -2
  6. package/contract/pmtiles.d.ts +10 -1
  7. package/contract/pmtiles.d.ts.map +1 -1
  8. package/contract/pmtiles.js +10 -2
  9. package/contract/protocol-module.d.ts +84 -9
  10. package/contract/protocol-module.d.ts.map +1 -1
  11. package/contract/query-filter-fes.d.ts +18 -0
  12. package/contract/query-filter-fes.d.ts.map +1 -0
  13. package/contract/query-filter-fes.js +122 -0
  14. package/contract/query-filter.d.ts +300 -0
  15. package/contract/query-filter.d.ts.map +1 -0
  16. package/contract/query-filter.js +883 -0
  17. package/contract/schema.d.ts +12 -0
  18. package/contract/schema.d.ts.map +1 -1
  19. package/contract/schema.js +34 -0
  20. package/contract/source-capability-support.d.ts.map +1 -1
  21. package/contract/source-capability-support.js +15 -3
  22. package/contract/source.d.ts +45 -25
  23. package/contract/source.d.ts.map +1 -1
  24. package/contract/source.js +719 -479
  25. package/contract/types.d.ts +87 -18
  26. package/contract/types.d.ts.map +1 -1
  27. package/contract/widget-source.d.ts.map +1 -1
  28. package/core/client.d.ts +45 -21
  29. package/core/client.d.ts.map +1 -1
  30. package/core/client.js +224 -46
  31. package/core/error-classifications.d.ts +6 -0
  32. package/core/error-classifications.d.ts.map +1 -1
  33. package/core/error-classifications.js +6 -0
  34. package/core/error-code-registry.d.ts +6 -0
  35. package/core/error-code-registry.d.ts.map +1 -1
  36. package/core/error-code-registry.js +6 -0
  37. package/core/error-envelope.js +2 -0
  38. package/core/errors.d.ts +1 -1
  39. package/core/errors.js +1 -1
  40. package/core/geoparquet-sql.d.ts +68 -4
  41. package/core/geoparquet-sql.d.ts.map +1 -1
  42. package/core/geoparquet-sql.js +325 -8
  43. package/core/odata-write-codec.d.ts.map +1 -1
  44. package/core/odata-write-codec.js +0 -1
  45. package/core/odata.d.ts +6 -0
  46. package/core/odata.d.ts.map +1 -1
  47. package/core/odata.js +6 -1
  48. package/core/ogc-processes.d.ts +182 -25
  49. package/core/ogc-processes.d.ts.map +1 -1
  50. package/core/ogc-processes.js +602 -30
  51. package/core/process-runner.d.ts +8 -1
  52. package/core/process-runner.d.ts.map +1 -1
  53. package/core/process-runner.js +1 -0
  54. package/core/protocol-transport.d.ts +2 -0
  55. package/core/protocol-transport.d.ts.map +1 -1
  56. package/core/stac.d.ts +31 -0
  57. package/core/stac.d.ts.map +1 -1
  58. package/core/stac.js +136 -19
  59. package/core/surfaces.d.ts.map +1 -1
  60. package/core/surfaces.js +273 -68
  61. package/core/types.d.ts +123 -9
  62. package/core/types.d.ts.map +1 -1
  63. package/core/wfs-axis-order.d.ts +18 -0
  64. package/core/wfs-axis-order.d.ts.map +1 -0
  65. package/core/wfs-axis-order.js +108 -0
  66. package/core/wfs-capabilities.d.ts +65 -24
  67. package/core/wfs-capabilities.d.ts.map +1 -1
  68. package/core/wfs-capabilities.js +237 -27
  69. package/core/wfs-filter.d.ts +26 -3
  70. package/core/wfs-filter.d.ts.map +1 -1
  71. package/core/wfs-filter.js +48 -53
  72. package/core/wfs-protocol-error.d.ts +12 -0
  73. package/core/wfs-protocol-error.d.ts.map +1 -0
  74. package/core/wfs-protocol-error.js +13 -0
  75. package/core/wfs.d.ts +53 -1
  76. package/core/wfs.d.ts.map +1 -1
  77. package/core/wfs.js +251 -29
  78. package/core/wms-feature-info.d.ts +92 -0
  79. package/core/wms-feature-info.d.ts.map +1 -0
  80. package/core/wms-feature-info.js +285 -0
  81. package/core/wms.d.ts +9 -0
  82. package/core/wms.d.ts.map +1 -1
  83. package/core/wms.js +17 -5
  84. package/esri-compat/event-bus.d.ts +20 -0
  85. package/esri-compat/event-bus.d.ts.map +1 -1
  86. package/esri-compat/feature-filter.d.ts +46 -1
  87. package/esri-compat/feature-filter.d.ts.map +1 -1
  88. package/esri-compat/feature-filter.js +49 -0
  89. package/esri-compat/geojson-layer.d.ts +4 -2
  90. package/esri-compat/geojson-layer.d.ts.map +1 -1
  91. package/esri-compat/geojson-layer.js +4 -2
  92. package/esri-compat/identity-manager.js +2 -2
  93. package/esri-compat/imagery-layer.d.ts +2 -1
  94. package/esri-compat/imagery-layer.d.ts.map +1 -1
  95. package/esri-compat/imagery-layer.js +2 -1
  96. package/esri-compat/layer-list.d.ts +8 -1
  97. package/esri-compat/layer-list.d.ts.map +1 -1
  98. package/esri-compat/layer-list.js +11 -4
  99. package/esri-compat/legend.d.ts.map +1 -1
  100. package/esri-compat/legend.js +1 -1
  101. package/esri-compat/locator.d.ts +297 -0
  102. package/esri-compat/locator.d.ts.map +1 -0
  103. package/esri-compat/locator.js +579 -0
  104. package/esri-compat/map-image-layer.d.ts.map +1 -1
  105. package/esri-compat/map-view.d.ts.map +1 -1
  106. package/esri-compat/map-view.js +1 -1
  107. package/esri-compat/scene-view.d.ts.map +1 -1
  108. package/esri-compat/time-slider.d.ts +29 -0
  109. package/esri-compat/time-slider.d.ts.map +1 -1
  110. package/esri-compat/time-slider.js +117 -0
  111. package/esri-compat/wfs-layer.d.ts +2 -1
  112. package/esri-compat/wfs-layer.d.ts.map +1 -1
  113. package/esri-compat/wfs-layer.js +2 -1
  114. package/esri-compat/widget-host.d.ts +42 -6
  115. package/esri-compat/widget-host.d.ts.map +1 -1
  116. package/esri-compat/widget-host.js +99 -10
  117. package/generated-app/projection.d.ts.map +1 -1
  118. package/generated-app/runtime.d.ts.map +1 -1
  119. package/map/data-to-map-bridge.d.ts +1 -1
  120. package/map/data-to-map-bridge.d.ts.map +1 -1
  121. package/map/data-to-map-bridge.js +1 -2
  122. package/map/honua-map.d.ts.map +1 -1
  123. package/map/honua-map.js +1 -1
  124. package/map/index.d.ts +2 -0
  125. package/map/index.d.ts.map +1 -1
  126. package/map/index.js +2 -0
  127. package/map/realtime-reconciliation-adapter.d.ts +98 -0
  128. package/map/realtime-reconciliation-adapter.d.ts.map +1 -0
  129. package/map/realtime-reconciliation-adapter.js +84 -0
  130. package/map/temporal-playback.d.ts +25 -0
  131. package/map/temporal-playback.d.ts.map +1 -1
  132. package/map/temporal-playback.js +29 -1
  133. package/package.json +4 -3
  134. package/query-planner/canonical-filter.d.ts +30 -0
  135. package/query-planner/canonical-filter.d.ts.map +1 -0
  136. package/query-planner/canonical-filter.js +30 -0
  137. package/query-planner/columnar-plan.d.ts +63 -0
  138. package/query-planner/columnar-plan.d.ts.map +1 -0
  139. package/query-planner/columnar-plan.js +94 -0
  140. package/query-planner/diagnostics.d.ts +3 -3
  141. package/query-planner/diagnostics.d.ts.map +1 -1
  142. package/query-planner/diagnostics.js +17 -4
  143. package/query-planner/duckdb.d.ts.map +1 -1
  144. package/query-planner/duckdb.js +16 -2
  145. package/query-planner/execution-context.d.ts.map +1 -1
  146. package/query-planner/execution-context.js +3 -1
  147. package/query-planner/executor.d.ts.map +1 -1
  148. package/query-planner/executor.js +7 -1
  149. package/query-planner/geoservices.d.ts.map +1 -1
  150. package/query-planner/geoservices.js +24 -5
  151. package/query-planner/grpc.d.ts.map +1 -1
  152. package/query-planner/grpc.js +29 -5
  153. package/query-planner/index.d.ts +20 -5
  154. package/query-planner/index.d.ts.map +1 -1
  155. package/query-planner/index.js +16 -3
  156. package/query-planner/ir.d.ts +6 -1
  157. package/query-planner/ir.d.ts.map +1 -1
  158. package/query-planner/ir.js +63 -1
  159. package/query-planner/odata-protocol-module.d.ts +54 -0
  160. package/query-planner/odata-protocol-module.d.ts.map +1 -0
  161. package/query-planner/odata-protocol-module.js +199 -0
  162. package/query-planner/odata-v1.d.ts +23 -0
  163. package/query-planner/odata-v1.d.ts.map +1 -0
  164. package/query-planner/odata-v1.js +202 -0
  165. package/query-planner/odata.d.ts +0 -3
  166. package/query-planner/odata.d.ts.map +1 -1
  167. package/query-planner/odata.js +0 -143
  168. package/query-planner/ogc-features.d.ts.map +1 -1
  169. package/query-planner/ogc-features.js +23 -1
  170. package/query-planner/planner.d.ts +2 -2
  171. package/query-planner/planner.d.ts.map +1 -1
  172. package/query-planner/planner.js +146 -27
  173. package/query-planner/representation.d.ts +59 -0
  174. package/query-planner/representation.d.ts.map +1 -0
  175. package/query-planner/representation.js +140 -0
  176. package/query-planner/types.d.ts +153 -3
  177. package/query-planner/types.d.ts.map +1 -1
  178. package/query-planner/wfs-protocol-module.d.ts +57 -0
  179. package/query-planner/wfs-protocol-module.d.ts.map +1 -0
  180. package/query-planner/wfs-protocol-module.js +731 -0
  181. package/query-planner/wfs-v1.d.ts +41 -0
  182. package/query-planner/wfs-v1.d.ts.map +1 -0
  183. package/query-planner/wfs-v1.js +366 -0
  184. package/query-planner/wfs.d.ts +1 -3
  185. package/query-planner/wfs.d.ts.map +1 -1
  186. package/query-planner/wfs.js +1 -70
  187. package/react/honua-map.d.ts +3 -1
  188. package/react/honua-map.d.ts.map +1 -1
  189. package/react/honua-map.js +11 -1
  190. package/react/hooks.d.ts +1 -1
  191. package/react/hooks.js +1 -1
  192. package/react/selection.d.ts.map +1 -1
  193. package/react/selection.js +0 -0
  194. package/react/use-mounted-source.d.ts +1 -1
  195. package/react/use-mounted-source.js +1 -1
  196. package/realtime/checkpoint-store.d.ts +206 -0
  197. package/realtime/checkpoint-store.d.ts.map +1 -0
  198. package/realtime/checkpoint-store.js +504 -0
  199. package/realtime/contract.d.ts +142 -0
  200. package/realtime/contract.d.ts.map +1 -0
  201. package/realtime/contract.js +154 -0
  202. package/realtime/exploration.d.ts +16 -0
  203. package/realtime/exploration.d.ts.map +1 -0
  204. package/realtime/exploration.js +32 -0
  205. package/realtime/honua-server.d.ts +131 -0
  206. package/realtime/honua-server.d.ts.map +1 -0
  207. package/realtime/honua-server.js +302 -0
  208. package/realtime/index.d.ts +39 -0
  209. package/realtime/index.d.ts.map +1 -0
  210. package/realtime/index.js +26 -0
  211. package/realtime/odata-delta.d.ts +114 -0
  212. package/realtime/odata-delta.d.ts.map +1 -0
  213. package/realtime/odata-delta.js +483 -0
  214. package/realtime/projections.d.ts +30 -0
  215. package/realtime/projections.d.ts.map +1 -0
  216. package/realtime/projections.js +51 -0
  217. package/realtime/reconciliation.d.ts +245 -0
  218. package/realtime/reconciliation.d.ts.map +1 -0
  219. package/realtime/reconciliation.js +377 -0
  220. package/realtime/reducer.d.ts +14 -0
  221. package/realtime/reducer.d.ts.map +1 -0
  222. package/realtime/reducer.js +351 -0
  223. package/realtime/resumable-transport.d.ts +111 -0
  224. package/realtime/resumable-transport.d.ts.map +1 -0
  225. package/realtime/resumable-transport.js +406 -0
  226. package/realtime/resumable.d.ts +104 -0
  227. package/realtime/resumable.d.ts.map +1 -0
  228. package/realtime/resumable.js +632 -0
  229. package/realtime/sse.d.ts +23 -0
  230. package/realtime/sse.d.ts.map +1 -0
  231. package/realtime/sse.js +147 -0
  232. package/realtime/store.d.ts +18 -0
  233. package/realtime/store.d.ts.map +1 -0
  234. package/realtime/store.js +63 -0
  235. package/realtime/types.d.ts +190 -0
  236. package/realtime/types.d.ts.map +1 -0
  237. package/realtime/types.js +10 -0
  238. package/realtime/websocket.d.ts +60 -0
  239. package/realtime/websocket.d.ts.map +1 -0
  240. package/realtime/websocket.js +157 -0
  241. package/realtime/wire.d.ts +28 -0
  242. package/realtime/wire.d.ts.map +1 -0
  243. package/realtime/wire.js +73 -0
  244. package/runtime/index.d.ts +6 -2
  245. package/runtime/index.d.ts.map +1 -1
  246. package/runtime/index.js +3 -1
  247. package/runtime/load-package.d.ts +24 -0
  248. package/runtime/load-package.d.ts.map +1 -1
  249. package/runtime/load-package.js +45 -1
  250. package/runtime/maplibre-renderer.d.ts +11 -0
  251. package/runtime/maplibre-renderer.d.ts.map +1 -1
  252. package/runtime/maplibre-renderer.js +32 -7
  253. package/runtime/offline-region-protocol.d.ts +73 -0
  254. package/runtime/offline-region-protocol.d.ts.map +1 -0
  255. package/runtime/offline-region-protocol.js +63 -0
  256. package/runtime/offline-region-style.d.ts +78 -0
  257. package/runtime/offline-region-style.d.ts.map +1 -0
  258. package/runtime/offline-region-style.js +147 -0
  259. package/runtime/pmtiles-protocol.d.ts +7 -8
  260. package/runtime/pmtiles-protocol.d.ts.map +1 -1
  261. package/runtime/pmtiles-protocol.js +19 -66
  262. package/runtime/protocol-registry.d.ts +55 -0
  263. package/runtime/protocol-registry.d.ts.map +1 -0
  264. package/runtime/protocol-registry.js +103 -0
  265. package/runtime/runtime.d.ts +2 -0
  266. package/runtime/runtime.d.ts.map +1 -1
  267. package/runtime/runtime.js +6 -1
  268. package/studio/index.d.ts +24 -7
  269. package/studio/index.d.ts.map +1 -1
  270. package/studio/index.js +21 -7
  271. package/studio/lifecycle-client.d.ts +164 -0
  272. package/studio/lifecycle-client.d.ts.map +1 -0
  273. package/studio/lifecycle-client.js +299 -0
  274. package/studio/lifecycle-errors.d.ts +91 -0
  275. package/studio/lifecycle-errors.d.ts.map +1 -0
  276. package/studio/lifecycle-errors.js +77 -0
  277. package/studio/lifecycle-types.d.ts +321 -0
  278. package/studio/lifecycle-types.d.ts.map +1 -0
  279. package/studio/lifecycle-types.js +22 -0
  280. package/webmap/convert-label.js +0 -1
  281. package/webmap/convert-symbol.d.ts.map +1 -1
@@ -0,0 +1,285 @@
1
+ /**
2
+ * Capabilities-driven WMS 1.3 `GetFeatureInfo` execution.
3
+ *
4
+ * The first-party path in `wms.ts` addresses Honua Server's
5
+ * `/rest/services/{id}/MapServer/WMS` alias by service id. This module
6
+ * generalizes the same wire request so it can also be issued against the
7
+ * DCP operation URL a third-party `GetCapabilities` advertises, reusing the
8
+ * shared KVP serializer (and therefore the shared WMS 1.3 axis-order rule)
9
+ * rather than restating it.
10
+ *
11
+ * Everything here is fail-closed. A format the canonical `Result` contract
12
+ * cannot represent is never selected, a CRS whose WMS 1.3 axis order the SDK
13
+ * cannot prove is never sent, and a response body that does not decode into
14
+ * features raises `HonuaCapabilityNotSupportedError` instead of degrading into
15
+ * a silently empty result.
16
+ *
17
+ * @module
18
+ */
19
+ import { parseCapabilitiesXml } from "./capabilities-xml.js";
20
+ import { HonuaCapabilityNotSupportedError } from "./errors.js";
21
+ import { parseEpsgCode } from "./wms-axis.js";
22
+ import { serializeWmsFeatureInfoParams } from "./wms.js";
23
+ /**
24
+ * Response ceiling for a point `GetFeatureInfo`. The request renders a 1×1
25
+ * image, so a conformant answer is small; the bound keeps a hostile or
26
+ * misconfigured server from turning identify-on-click into an unbounded read.
27
+ */
28
+ export const WMS_FEATURE_INFO_MAX_RESPONSE_BYTES = 1024 * 1024;
29
+ /**
30
+ * `INFO_FORMAT` values the canonical adapter can project into
31
+ * `Result.features`, most preferred first. GeoJSON/JSON keeps geometry and
32
+ * typed attribute values; GML is the interoperable fallback that MapServer and
33
+ * GeoServer deployments advertise when JSON output is not installed.
34
+ *
35
+ * Unstructured `text/plain` and `text/html` are deliberately absent: their
36
+ * bodies are template-defined per deployment, so projecting them into canonical
37
+ * features would mean inventing structure. Sources whose only advertised info
38
+ * formats are unstructured keep `query` disabled and stay reachable through the
39
+ * protocol escape hatch.
40
+ */
41
+ const WMS_FEATURE_INFO_JSON_FORMATS = [
42
+ "application/geo+json",
43
+ "application/vnd.geo+json",
44
+ "application/json",
45
+ "application/json;subtype=geojson",
46
+ "geojson",
47
+ "json",
48
+ ];
49
+ const WMS_FEATURE_INFO_GML_FORMATS = [
50
+ "application/vnd.ogc.gml",
51
+ "application/vnd.ogc.gml/3.1.1",
52
+ "application/gml+xml",
53
+ "application/gml+xml;version=3.2",
54
+ "text/xml;subtype=gml/3.1.1",
55
+ "text/xml;subtype=gml/3.2",
56
+ "text/xml;subtype=gml/3.2.1",
57
+ "text/xml",
58
+ "application/xml",
59
+ "gml",
60
+ ];
61
+ function normalizeFormat(value) {
62
+ return value.replace(/\s+/g, "").toLowerCase();
63
+ }
64
+ /**
65
+ * Classify one advertised `INFO_FORMAT`. Returns `undefined` when the format
66
+ * carries no structure the canonical contract can project.
67
+ */
68
+ export function classifyWmsFeatureInfoFormat(format) {
69
+ const normalized = normalizeFormat(format);
70
+ if (WMS_FEATURE_INFO_JSON_FORMATS.includes(normalized))
71
+ return "json";
72
+ if (WMS_FEATURE_INFO_GML_FORMATS.includes(normalized))
73
+ return "gml";
74
+ return undefined;
75
+ }
76
+ /**
77
+ * Pick the `INFO_FORMAT` the canonical adapter should request from the formats
78
+ * a service advertises for `GetFeatureInfo`. JSON families win over GML; within
79
+ * a family the SDK's preference order decides, not the server's ordering, so
80
+ * the selection is deterministic across deployments.
81
+ */
82
+ export function selectWmsFeatureInfoFormat(advertised) {
83
+ for (const [kind, preference] of [
84
+ ["json", WMS_FEATURE_INFO_JSON_FORMATS],
85
+ ["gml", WMS_FEATURE_INFO_GML_FORMATS],
86
+ ]) {
87
+ for (const candidate of preference) {
88
+ const match = advertised.find((value) => normalizeFormat(value) === candidate);
89
+ if (match)
90
+ return Object.freeze({ kind, format: match });
91
+ }
92
+ }
93
+ return undefined;
94
+ }
95
+ function classifyWmsQueryCrs(code) {
96
+ const upper = code.toUpperCase();
97
+ if (upper === "CRS:84" || upper.includes("CRS84"))
98
+ return "crs84";
99
+ const epsg = parseEpsgCode(code);
100
+ if (epsg === 4326)
101
+ return "epsg4326";
102
+ if (epsg === 3857)
103
+ return "epsg3857";
104
+ return undefined;
105
+ }
106
+ /**
107
+ * Filter a layer's advertised CRS list down to the identifiers a point
108
+ * `GetFeatureInfo` may use, preserving the advertised spelling and order.
109
+ */
110
+ export function reviewedWmsQueryCrs(advertised) {
111
+ const seen = new Set();
112
+ const reviewed = [];
113
+ for (const code of advertised) {
114
+ if (seen.has(code) || classifyWmsQueryCrs(code) === undefined)
115
+ continue;
116
+ seen.add(code);
117
+ reviewed.push(code);
118
+ }
119
+ return Object.freeze(reviewed);
120
+ }
121
+ /**
122
+ * Resolve the CRS a canonical query should put on the wire.
123
+ *
124
+ * The requested code comes from the spatial filter geometry (defaulting to
125
+ * `CRS:84`). An exact advertised spelling always wins. `CRS:84` and `EPSG:4326`
126
+ * are interchangeable *inputs* — both describe the same canonical `(x, y)` =
127
+ * `(lon, lat)` point and differ only in the wire axis order, which the shared
128
+ * serializer applies for whichever spelling is chosen — so a request in one is
129
+ * satisfied by the other when only that one is advertised. Anything else
130
+ * returns `undefined` so the caller can fail closed.
131
+ */
132
+ export function resolveWmsQueryCrs(reviewed, requested) {
133
+ const requestedKind = classifyWmsQueryCrs(requested);
134
+ if (requestedKind === undefined)
135
+ return undefined;
136
+ const exact = reviewed.find((code) => code.toUpperCase() === requested.toUpperCase());
137
+ if (exact)
138
+ return exact;
139
+ const sameKind = reviewed.find((code) => classifyWmsQueryCrs(code) === requestedKind);
140
+ if (sameKind)
141
+ return sameKind;
142
+ if (requestedKind === "crs84" || requestedKind === "epsg4326") {
143
+ const interchangeable = requestedKind === "crs84" ? "epsg4326" : "crs84";
144
+ return reviewed.find((code) => classifyWmsQueryCrs(code) === interchangeable);
145
+ }
146
+ return undefined;
147
+ }
148
+ /**
149
+ * Issue a `GetFeatureInfo` against the capabilities-advertised operation URL
150
+ * and project the response into canonical typed features.
151
+ *
152
+ * Vendor query state already present on the advertised URL (tenant selectors,
153
+ * map identifiers) is preserved; the WMS KVP names are overwritten so a
154
+ * capabilities document cannot pin a stale `BBOX` or `INFO_FORMAT`.
155
+ */
156
+ export async function executeWmsFeatureInfo(transport, options) {
157
+ const infoFormat = options.request.infoFormat ?? options.binding.format;
158
+ const kind = classifyWmsFeatureInfoFormat(infoFormat);
159
+ if (kind === undefined) {
160
+ throw new HonuaCapabilityNotSupportedError("query", "wms", `${options.sourceId} (GetFeatureInfo format "${infoFormat}" cannot be projected into canonical features)`);
161
+ }
162
+ const url = new URL(options.binding.url);
163
+ for (const [name, value] of serializeWmsFeatureInfoParams({ ...options.request, infoFormat })) {
164
+ url.searchParams.set(name, value);
165
+ }
166
+ const { text, contentType } = await transport.requestText("GET", url.toString(), {
167
+ accept: infoFormat,
168
+ maxResponseBytes: WMS_FEATURE_INFO_MAX_RESPONSE_BYTES,
169
+ ...(options.request.signal ? { signal: options.request.signal } : {}),
170
+ });
171
+ return decodeWmsFeatureInfoBody(text, contentType, kind, options.sourceId);
172
+ }
173
+ /**
174
+ * Project a decoded `GetFeatureInfo` body into canonical typed features.
175
+ * `kind` is the negotiated decoder family; the observed `contentType` only
176
+ * narrows a JSON negotiation that the server answered with XML (a common
177
+ * shape for OGC `ServiceExceptionReport` bodies returned with HTTP 200).
178
+ */
179
+ export function decodeWmsFeatureInfoBody(text, contentType, kind, sourceId) {
180
+ const body = text.trim();
181
+ if (body.length === 0)
182
+ return Object.freeze([]);
183
+ if (kind === "json" && !/xml/i.test(contentType)) {
184
+ let parsed;
185
+ try {
186
+ parsed = JSON.parse(body);
187
+ }
188
+ catch {
189
+ throw unprojectableResponse(sourceId, "the JSON body could not be parsed");
190
+ }
191
+ return extractJsonFeatureInfoFeatures(parsed);
192
+ }
193
+ return extractGmlFeatureInfoFeatures(body, sourceId);
194
+ }
195
+ function unprojectableResponse(sourceId, detail) {
196
+ return new HonuaCapabilityNotSupportedError("query", "wms", `${sourceId} (GetFeatureInfo returned ${detail})`);
197
+ }
198
+ /**
199
+ * Decode a GeoJSON `FeatureCollection` or a Honua `FeatureInfoResponse`
200
+ * envelope. Mirrors the first-party JSON decoder so both wire paths produce the
201
+ * same canonical shape.
202
+ */
203
+ function extractJsonFeatureInfoFeatures(parsed) {
204
+ if (!parsed || typeof parsed !== "object")
205
+ return Object.freeze([]);
206
+ const raw = parsed.features;
207
+ const features = Array.isArray(raw) ? raw : [];
208
+ const out = [];
209
+ for (const entry of features) {
210
+ if (!entry || typeof entry !== "object")
211
+ continue;
212
+ const feature = entry;
213
+ out.push({
214
+ attributes: (feature.attributes ?? feature.properties ?? {}),
215
+ geometry: feature.geometry ?? null,
216
+ });
217
+ }
218
+ return Object.freeze(out);
219
+ }
220
+ /** Property elements every GML feature carries that are not user attributes. */
221
+ const GML_NON_ATTRIBUTE_PROPERTIES = new Set(["boundedBy", "extent"]);
222
+ /**
223
+ * Project a GML `GetFeatureInfo` body into canonical typed features.
224
+ *
225
+ * Only the two container shapes the specification and the dominant server
226
+ * implementations produce are recognized: `gml:featureMember` /
227
+ * `gml:featureMembers` (GeoServer, deegree, QGIS Server) and MapServer's
228
+ * `msGMLOutput` layer wrapper. Each feature contributes its leaf property
229
+ * elements as attributes; complex properties (geometry, nested objects) are
230
+ * skipped rather than flattened, and `geometry` stays `null` because
231
+ * GetFeatureInfo answers a point the caller already holds.
232
+ */
233
+ function extractGmlFeatureInfoFeatures(xml, sourceId) {
234
+ let root;
235
+ try {
236
+ root = parseCapabilitiesXml(xml, "WMS");
237
+ }
238
+ catch {
239
+ throw unprojectableResponse(sourceId, "a GML body that is not well-formed XML");
240
+ }
241
+ if (root.localName === "ServiceExceptionReport" || root.localName === "ExceptionReport") {
242
+ throw unprojectableResponse(sourceId, "an OGC exception report");
243
+ }
244
+ const featureNodes = collectGmlFeatureNodes(root);
245
+ if (featureNodes === undefined) {
246
+ throw unprojectableResponse(sourceId, "a GML body with no recognized feature container");
247
+ }
248
+ return Object.freeze(featureNodes.map((node) => ({ attributes: gmlFeatureAttributes(node), geometry: null })));
249
+ }
250
+ function collectGmlFeatureNodes(root) {
251
+ const members = [];
252
+ let sawContainer = false;
253
+ const stack = [root];
254
+ while (stack.length > 0) {
255
+ const node = stack.pop();
256
+ if (node.localName === "featureMember" || node.localName === "featureMembers") {
257
+ sawContainer = true;
258
+ members.push(...node.children);
259
+ continue;
260
+ }
261
+ stack.push(...node.children);
262
+ }
263
+ if (sawContainer)
264
+ return members;
265
+ if (root.localName === "msGMLOutput") {
266
+ // MapServer wraps each queried layer in `<{layer}_layer>` and each hit in
267
+ // `<{layer}_feature>`.
268
+ return root.children.flatMap((layer) => layer.children.filter((child) => child.localName.endsWith("_feature")));
269
+ }
270
+ return undefined;
271
+ }
272
+ function gmlFeatureAttributes(feature) {
273
+ const attributes = {};
274
+ for (const property of feature.children) {
275
+ if (GML_NON_ATTRIBUTE_PROPERTIES.has(property.localName))
276
+ continue;
277
+ if (property.children.length > 0)
278
+ continue;
279
+ const value = property.text.trim();
280
+ if (Object.hasOwn(attributes, property.localName))
281
+ continue;
282
+ attributes[property.localName] = value;
283
+ }
284
+ return attributes;
285
+ }
package/core/wms.d.ts CHANGED
@@ -131,6 +131,15 @@ export declare function getWmsMap(transport: HonuaProtocolTransport, request: {
131
131
  export declare function getWmsFeatureInfo<T = Record<string, unknown>>(transport: HonuaProtocolTransport, request: {
132
132
  serviceId: string;
133
133
  } & WmsFeatureInfoRequest): Promise<HonuaWmsFeatureInfoResponse<T>>;
134
+ /**
135
+ * Serialize the WMS 1.3.0 KVP for a `GetFeatureInfo` request, including the
136
+ * authority-defined `BBOX` axis order for the requested CRS.
137
+ *
138
+ * Shared by the Honua service-id path above and the capabilities-driven
139
+ * third-party path (`wms-feature-info.ts`) so both emit byte-identical query
140
+ * state and only differ in which URL receives it.
141
+ */
142
+ export declare function serializeWmsFeatureInfoParams(request: WmsFeatureInfoRequest): URLSearchParams;
134
143
  /**
135
144
  * Fetch a WMS `GetLegendGraphic`. honua-server does not implement
136
145
  * GetLegendGraphic today; callers should branch on
package/core/wms.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wms.d.ts","sourceRoot":"","sources":["../../../src/core/wms.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wms.d.ts","sourceRoot":"","sources":["../../../src/core/wms.ts"],"names":[],"mappings":"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"}
package/core/wms.js CHANGED
@@ -226,19 +226,31 @@ export async function getWmsMap(transport, request) {
226
226
  * raw payload behind the protocol escape hatch.
227
227
  */
228
228
  export async function getWmsFeatureInfo(transport, request) {
229
+ const params = serializeWmsFeatureInfoParams(request);
230
+ const infoFormat = params.get("INFO_FORMAT");
231
+ const path = `${wmsBasePath(request.serviceId)}?${params.toString()}`;
232
+ const response = await transport.requestBytes("GET", path, infoFormat, undefined, request.signal);
233
+ return decodeWmsFeatureInfoResponse(response.bytes, response.contentType, infoFormat);
234
+ }
235
+ /**
236
+ * Serialize the WMS 1.3.0 KVP for a `GetFeatureInfo` request, including the
237
+ * authority-defined `BBOX` axis order for the requested CRS.
238
+ *
239
+ * Shared by the Honua service-id path above and the capabilities-driven
240
+ * third-party path (`wms-feature-info.ts`) so both emit byte-identical query
241
+ * state and only differ in which URL receives it.
242
+ */
243
+ export function serializeWmsFeatureInfoParams(request) {
229
244
  const params = serializeWmsMapParams(request);
230
245
  params.set("REQUEST", "GetFeatureInfo");
231
246
  params.set("QUERY_LAYERS", request.queryLayers.join(","));
232
247
  params.set("I", String(Math.trunc(request.i)));
233
248
  params.set("J", String(Math.trunc(request.j)));
234
- const infoFormat = request.infoFormat ?? "application/json";
235
- params.set("INFO_FORMAT", infoFormat);
249
+ params.set("INFO_FORMAT", request.infoFormat ?? "application/json");
236
250
  if (request.featureCount !== undefined) {
237
251
  params.set("FEATURE_COUNT", String(Math.trunc(request.featureCount)));
238
252
  }
239
- const path = `${wmsBasePath(request.serviceId)}?${params.toString()}`;
240
- const response = await transport.requestBytes("GET", path, infoFormat, undefined, request.signal);
241
- return decodeWmsFeatureInfoResponse(response.bytes, response.contentType, infoFormat);
253
+ return params;
242
254
  }
243
255
  /**
244
256
  * Fetch a WMS `GetLegendGraphic`. honua-server does not implement
@@ -87,6 +87,26 @@ export interface CompatEventPayloads {
87
87
  end: Date;
88
88
  } | undefined;
89
89
  };
90
+ /**
91
+ * Emitted the first time a compat widget shim tries to mount its delegated
92
+ * web component while no widget kit is registered (see
93
+ * `esri-compat/widget-host.ts`). Without a kit the shims stay
94
+ * state-model-only and their `container` renders nothing, so this is the
95
+ * machine-readable half of the one-time `console.warn` the host emits.
96
+ *
97
+ * Subscribe before constructing widgets: the diagnostic fires once per
98
+ * runtime and re-arms only when `registerHonuaWidgetKit` is called again.
99
+ */
100
+ "widget-kit.missing": {
101
+ /** Delegation tag the shim failed to mount (e.g. `honua-legend`). */
102
+ tagName: string;
103
+ /** The API the application must call to fix this. */
104
+ api: "registerHonuaWidgetKit";
105
+ /** Documentation entry describing the required registration step. */
106
+ docs: string;
107
+ /** The same human-readable text written to `console.warn`. */
108
+ message: string;
109
+ };
90
110
  }
91
111
  export declare class CompatEventBus {
92
112
  private readonly listenersByType;
@@ -1 +1 @@
1
- {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/event-bus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/event-bus.ts"],"names":[],"mappings":"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"}
@@ -33,9 +33,44 @@ export type FeatureFilterLoadStatusCompat = "loaded";
33
33
  export interface FeatureFilterHandleCompat {
34
34
  remove(): void;
35
35
  }
36
+ /**
37
+ * ArcGIS-shaped `FeatureFilter` properties, for handing a compat filter to an
38
+ * ArcGIS construct that has not been migrated.
39
+ *
40
+ * `objectIds` is narrowed to ArcGIS's `number[]` here, which is exactly the
41
+ * narrowing {@link FeatureFilterCompat.toEsriProperties} has to prove.
42
+ */
43
+ export interface FeatureFilterEsriProperties {
44
+ where?: string;
45
+ objectIds?: number[];
46
+ geometry?: FeatureFilterGeometryCompat;
47
+ spatialRelationship: FeatureFilterSpatialRelationshipCompat;
48
+ distance?: number;
49
+ units?: string;
50
+ timeExtent?: {
51
+ start?: Date | number | null;
52
+ end?: Date | number | null;
53
+ };
54
+ }
55
+ /**
56
+ * ArcGIS `FeatureFilter` shim.
57
+ *
58
+ * **Documented divergence — `objectIds` element type (#1013).** ArcGIS
59
+ * declares `objectIds: number[]`. This shim declares
60
+ * `Array<number | string>`: Honua's non-Esri sources (OGC API Features,
61
+ * GeoJSON, STAC) carry string feature ids, and narrowing the property to
62
+ * `number` would make the shim unable to hold ids it has to round-trip
63
+ * through `queryFeatures` / `queryObjectIds`. The array itself is mutable, as
64
+ * ArcGIS declares it — `filter.objectIds.push(id)` is honored, because the
65
+ * array the shim stores is the array it evaluates.
66
+ *
67
+ * Use {@link FeatureFilterCompat.toEsriProperties} to project the filter onto
68
+ * the exact ArcGIS shape; it fails loudly rather than silently dropping an id
69
+ * ArcGIS cannot represent. See `docs/migration-punch-list.md`.
70
+ */
36
71
  export declare class FeatureFilterCompat {
37
72
  where: string | null;
38
- objectIds: ReadonlyArray<number | string> | null;
73
+ objectIds: Array<number | string> | null;
39
74
  geometry: FeatureFilterGeometryCompat | null;
40
75
  spatialRelationship: FeatureFilterSpatialRelationshipCompat;
41
76
  distance: number | undefined;
@@ -49,6 +84,16 @@ export declare class FeatureFilterCompat {
49
84
  watch(propertyName: string, listener: (value: unknown) => void): FeatureFilterHandleCompat;
50
85
  clone(): FeatureFilterCompat;
51
86
  update(patch: FeatureFilterCompatOptions): FeatureFilterCompat;
87
+ /**
88
+ * Project this filter onto the ArcGIS `FeatureFilterProperties` shape so a
89
+ * partially migrated app can hand it to an un-migrated `@arcgis/core`
90
+ * construct (#1013 REQ-003).
91
+ *
92
+ * Throws when `objectIds` holds an id ArcGIS cannot represent: ArcGIS object
93
+ * ids are numbers, and quietly dropping or coercing a string id would hand
94
+ * back a filter that selects a different set of features than this one.
95
+ */
96
+ toEsriProperties(): FeatureFilterEsriProperties;
52
97
  toJSON(): Record<string, unknown>;
53
98
  private notifyWatchers;
54
99
  }
@@ -1 +1 @@
1
- {"version":3,"file":"feature-filter.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/feature-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA4B,MAAM,gBAAgB,CAAC;AAE1E,MAAM,WAAW,2BAA2B;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACrB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3D;AAED,MAAM,MAAM,sCAAsC,GAC9C,YAAY,GACZ,UAAU,GACV,SAAS,GACT,UAAU,GACV,qBAAqB,GACrB,kBAAkB,GAClB,UAAU,GACV,SAAS,GACT,QAAQ,GACR,UAAU,CAAC;AAEf,MAAM,MAAM,6BAA6B,GACrC;IAAE,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAA;CAAE,GAC5D,IAAI,GACJ,SAAS,CAAC;AAEd,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,EAAE,2BAA2B,GAAG,IAAI,CAAC;IAC9C,mBAAmB,CAAC,EAAE,sCAAsC,CAAC;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,6BAA6B,CAAC;IAC3C,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,MAAM,6BAA6B,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,yBAAyB;IACxC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,qBAAa,mBAAmB;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC;IACjD,QAAQ,EAAE,2BAA2B,GAAG,IAAI,CAAC;IAC7C,mBAAmB,EAAE,sCAAsC,CAAC;IAC5D,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,UAAU,EAAE,6BAA6B,CAAC;IACjD,SAAgB,MAAM,EAAE,IAAI,CAAC;IAC7B,SAAgB,UAAU,EAAE,6BAA6B,CAAC;IAC1D,SAAgB,QAAQ,EAAE,cAAc,CAAC;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;gBAEzD,OAAO,GAAE,0BAA+B;IAcpD,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,yBAAyB;IAc1F,KAAK,IAAI,mBAAmB;IAa5B,MAAM,CAAC,KAAK,EAAE,0BAA0B,GAAG,mBAAmB;IAiC9D,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAYxC,OAAO,CAAC,cAAc;CAOvB"}
1
+ {"version":3,"file":"feature-filter.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/feature-filter.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,20 @@
1
1
  import { CompatEventBus, safeInvokeCompatListener } from "./event-bus.js";
2
+ /**
3
+ * ArcGIS `FeatureFilter` shim.
4
+ *
5
+ * **Documented divergence — `objectIds` element type (#1013).** ArcGIS
6
+ * declares `objectIds: number[]`. This shim declares
7
+ * `Array<number | string>`: Honua's non-Esri sources (OGC API Features,
8
+ * GeoJSON, STAC) carry string feature ids, and narrowing the property to
9
+ * `number` would make the shim unable to hold ids it has to round-trip
10
+ * through `queryFeatures` / `queryObjectIds`. The array itself is mutable, as
11
+ * ArcGIS declares it — `filter.objectIds.push(id)` is honored, because the
12
+ * array the shim stores is the array it evaluates.
13
+ *
14
+ * Use {@link FeatureFilterCompat.toEsriProperties} to project the filter onto
15
+ * the exact ArcGIS shape; it fails loudly rather than silently dropping an id
16
+ * ArcGIS cannot represent. See `docs/migration-punch-list.md`.
17
+ */
2
18
  export class FeatureFilterCompat {
3
19
  where;
4
20
  objectIds;
@@ -81,6 +97,39 @@ export class FeatureFilterCompat {
81
97
  this.eventBus.emit("feature-filter.updated", { filter: this.toJSON() }, this);
82
98
  return this;
83
99
  }
100
+ /**
101
+ * Project this filter onto the ArcGIS `FeatureFilterProperties` shape so a
102
+ * partially migrated app can hand it to an un-migrated `@arcgis/core`
103
+ * construct (#1013 REQ-003).
104
+ *
105
+ * Throws when `objectIds` holds an id ArcGIS cannot represent: ArcGIS object
106
+ * ids are numbers, and quietly dropping or coercing a string id would hand
107
+ * back a filter that selects a different set of features than this one.
108
+ */
109
+ toEsriProperties() {
110
+ const properties = {
111
+ spatialRelationship: this.spatialRelationship,
112
+ };
113
+ if (this.where != null)
114
+ properties.where = this.where;
115
+ if (this.objectIds != null) {
116
+ const unrepresentable = this.objectIds.filter((objectId) => typeof objectId !== "number" || !Number.isFinite(objectId));
117
+ if (unrepresentable.length > 0) {
118
+ const rendered = unrepresentable.map((objectId) => JSON.stringify(objectId)).join(", ");
119
+ throw new Error(`FeatureFilterCompat.toEsriProperties cannot represent non-numeric object ids as ArcGIS number[]: ${rendered}.`);
120
+ }
121
+ properties.objectIds = this.objectIds;
122
+ }
123
+ if (this.geometry != null)
124
+ properties.geometry = this.geometry;
125
+ if (this.distance !== undefined)
126
+ properties.distance = this.distance;
127
+ if (this.units !== undefined)
128
+ properties.units = this.units;
129
+ if (this.timeExtent != null)
130
+ properties.timeExtent = this.timeExtent;
131
+ return properties;
132
+ }
84
133
  toJSON() {
85
134
  const json = {};
86
135
  if (this.where != null)
@@ -50,9 +50,11 @@ export declare class GeoJSONLayerCompat {
50
50
  listMode: string;
51
51
  renderer: unknown;
52
52
  popupTemplate: unknown;
53
- outFields: ReadonlyArray<string> | undefined;
53
+ /** Mutable to match the ArcGIS declaration (`string[]`); see #1013. */
54
+ outFields: string[] | undefined;
54
55
  objectIdField: string;
55
- fields: ReadonlyArray<{
56
+ /** Mutable to match the ArcGIS declaration (`Field[]`); see #1013. */
57
+ fields: Array<{
56
58
  name: string;
57
59
  alias?: string;
58
60
  type?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"geojson-layer.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/geojson-layer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"geojson-layer.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/geojson-layer.ts"],"names":[],"mappings":"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"}
@@ -11,8 +11,10 @@ export class GeoJSONLayerCompat {
11
11
  listMode;
12
12
  renderer;
13
13
  popupTemplate;
14
+ /** Mutable to match the ArcGIS declaration (`string[]`); see #1013. */
14
15
  outFields;
15
16
  objectIdField;
17
+ /** Mutable to match the ArcGIS declaration (`Field[]`); see #1013. */
16
18
  fields;
17
19
  geometryType;
18
20
  spatialReference;
@@ -34,9 +36,9 @@ export class GeoJSONLayerCompat {
34
36
  this.listMode = options.listMode ?? "show";
35
37
  this.renderer = options.renderer;
36
38
  this.popupTemplate = options.popupTemplate;
37
- this.outFields = options.outFields;
39
+ this.outFields = options.outFields === undefined ? undefined : [...options.outFields];
38
40
  this.objectIdField = options.objectIdField ?? "OBJECTID";
39
- this.fields = options.fields ?? [];
41
+ this.fields = options.fields === undefined ? [] : [...options.fields];
40
42
  this.geometryType = options.geometryType;
41
43
  this.spatialReference = options.spatialReference ?? { wkid: 4326 };
42
44
  this.loaded = false;
@@ -105,7 +105,7 @@ class IdentityManagerCompatStore {
105
105
  if (!engine) {
106
106
  return this.checkSignInStatus(url);
107
107
  }
108
- const credential = await this.resolveThroughEngine(engine, url);
108
+ const credential = await this.resolveThroughEngine(engine);
109
109
  this.registerToken(credential);
110
110
  return { ...credential };
111
111
  }
@@ -137,7 +137,7 @@ class IdentityManagerCompatStore {
137
137
  }
138
138
  return undefined;
139
139
  }
140
- async resolveThroughEngine(bound, url) {
140
+ async resolveThroughEngine(bound) {
141
141
  const context = { reason: "initial", forceRefresh: false };
142
142
  let credentials;
143
143
  try {
@@ -50,7 +50,8 @@ export declare class ImageryLayerCompat {
50
50
  listMode: string;
51
51
  format: string;
52
52
  pixelType: string | undefined;
53
- bandIds: ReadonlyArray<number> | undefined;
53
+ /** Mutable to match the ArcGIS declaration (`number[]`); see #1013. */
54
+ bandIds: number[] | undefined;
54
55
  renderingRule: Record<string, unknown> | undefined;
55
56
  mosaicRule: Record<string, unknown> | undefined;
56
57
  loaded: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"imagery-layer.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/imagery-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAmD,MAAM,gBAAgB,CAAC;AAGjG,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,MAAM,4BAA4B,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE1F,MAAM,WAAW,wBAAwB;IACvC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;IAChD,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,qBAAa,kBAAkB;IAC7B,SAAgB,IAAI,EAAE,SAAS,CAAC;IAChC,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,SAAgB,SAAS,EAAE,MAAM,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACnD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAChD,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,4BAA4B,CAAC;IACzC,QAAQ,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAClD,SAAgB,QAAQ,EAAE,cAAc,CAAC;IAEzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;IAC5E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;gBAEzD,OAAO,EAAE,yBAAyB;IAyBxC,IAAI,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAqBnC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAMjF,WAAW,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC;IAajE,QAAQ,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,OAAO,CAAC;IAQhE,YAAY,CAAC,OAAO,GAAE,wBAA6B,GAAG,OAAO,CAAC,OAAO,CAAC;IAU5E,OAAO,IAAI,IAAI;IAUf,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,wBAAwB;IAczF,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,wBAAwB;IAkBnF,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAMrC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMjC,OAAO,IAAI,IAAI;IAMtB,OAAO,CAAC,cAAc;CAKvB"}
1
+ {"version":3,"file":"imagery-layer.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/imagery-layer.ts"],"names":[],"mappings":"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"}