@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.
- package/contract/discovery.d.ts +34 -0
- package/contract/discovery.d.ts.map +1 -1
- package/contract/index.d.ts +7 -5
- package/contract/index.d.ts.map +1 -1
- package/contract/index.js +3 -2
- package/contract/pmtiles.d.ts +10 -1
- package/contract/pmtiles.d.ts.map +1 -1
- package/contract/pmtiles.js +10 -2
- package/contract/protocol-module.d.ts +84 -9
- package/contract/protocol-module.d.ts.map +1 -1
- package/contract/query-filter-fes.d.ts +18 -0
- package/contract/query-filter-fes.d.ts.map +1 -0
- package/contract/query-filter-fes.js +122 -0
- package/contract/query-filter.d.ts +300 -0
- package/contract/query-filter.d.ts.map +1 -0
- package/contract/query-filter.js +883 -0
- package/contract/schema.d.ts +12 -0
- package/contract/schema.d.ts.map +1 -1
- package/contract/schema.js +34 -0
- package/contract/source-capability-support.d.ts.map +1 -1
- package/contract/source-capability-support.js +15 -3
- package/contract/source.d.ts +45 -25
- package/contract/source.d.ts.map +1 -1
- package/contract/source.js +719 -479
- package/contract/types.d.ts +87 -18
- package/contract/types.d.ts.map +1 -1
- package/contract/widget-source.d.ts.map +1 -1
- package/core/client.d.ts +45 -21
- package/core/client.d.ts.map +1 -1
- package/core/client.js +224 -46
- package/core/error-classifications.d.ts +6 -0
- package/core/error-classifications.d.ts.map +1 -1
- package/core/error-classifications.js +6 -0
- package/core/error-code-registry.d.ts +6 -0
- package/core/error-code-registry.d.ts.map +1 -1
- package/core/error-code-registry.js +6 -0
- package/core/error-envelope.js +2 -0
- package/core/errors.d.ts +1 -1
- package/core/errors.js +1 -1
- package/core/geoparquet-sql.d.ts +68 -4
- package/core/geoparquet-sql.d.ts.map +1 -1
- package/core/geoparquet-sql.js +325 -8
- package/core/odata-write-codec.d.ts.map +1 -1
- package/core/odata-write-codec.js +0 -1
- package/core/odata.d.ts +6 -0
- package/core/odata.d.ts.map +1 -1
- package/core/odata.js +6 -1
- package/core/ogc-processes.d.ts +182 -25
- package/core/ogc-processes.d.ts.map +1 -1
- package/core/ogc-processes.js +602 -30
- package/core/process-runner.d.ts +8 -1
- package/core/process-runner.d.ts.map +1 -1
- package/core/process-runner.js +1 -0
- package/core/protocol-transport.d.ts +2 -0
- package/core/protocol-transport.d.ts.map +1 -1
- package/core/stac.d.ts +31 -0
- package/core/stac.d.ts.map +1 -1
- package/core/stac.js +136 -19
- package/core/surfaces.d.ts.map +1 -1
- package/core/surfaces.js +273 -68
- package/core/types.d.ts +123 -9
- package/core/types.d.ts.map +1 -1
- package/core/wfs-axis-order.d.ts +18 -0
- package/core/wfs-axis-order.d.ts.map +1 -0
- package/core/wfs-axis-order.js +108 -0
- package/core/wfs-capabilities.d.ts +65 -24
- package/core/wfs-capabilities.d.ts.map +1 -1
- package/core/wfs-capabilities.js +237 -27
- package/core/wfs-filter.d.ts +26 -3
- package/core/wfs-filter.d.ts.map +1 -1
- package/core/wfs-filter.js +48 -53
- package/core/wfs-protocol-error.d.ts +12 -0
- package/core/wfs-protocol-error.d.ts.map +1 -0
- package/core/wfs-protocol-error.js +13 -0
- package/core/wfs.d.ts +53 -1
- package/core/wfs.d.ts.map +1 -1
- package/core/wfs.js +251 -29
- package/core/wms-feature-info.d.ts +92 -0
- package/core/wms-feature-info.d.ts.map +1 -0
- package/core/wms-feature-info.js +285 -0
- package/core/wms.d.ts +9 -0
- package/core/wms.d.ts.map +1 -1
- package/core/wms.js +17 -5
- package/esri-compat/event-bus.d.ts +20 -0
- package/esri-compat/event-bus.d.ts.map +1 -1
- package/esri-compat/feature-filter.d.ts +46 -1
- package/esri-compat/feature-filter.d.ts.map +1 -1
- package/esri-compat/feature-filter.js +49 -0
- package/esri-compat/geojson-layer.d.ts +4 -2
- package/esri-compat/geojson-layer.d.ts.map +1 -1
- package/esri-compat/geojson-layer.js +4 -2
- package/esri-compat/identity-manager.js +2 -2
- package/esri-compat/imagery-layer.d.ts +2 -1
- package/esri-compat/imagery-layer.d.ts.map +1 -1
- package/esri-compat/imagery-layer.js +2 -1
- package/esri-compat/layer-list.d.ts +8 -1
- package/esri-compat/layer-list.d.ts.map +1 -1
- package/esri-compat/layer-list.js +11 -4
- package/esri-compat/legend.d.ts.map +1 -1
- package/esri-compat/legend.js +1 -1
- package/esri-compat/locator.d.ts +297 -0
- package/esri-compat/locator.d.ts.map +1 -0
- package/esri-compat/locator.js +579 -0
- package/esri-compat/map-image-layer.d.ts.map +1 -1
- package/esri-compat/map-view.d.ts.map +1 -1
- package/esri-compat/map-view.js +1 -1
- package/esri-compat/scene-view.d.ts.map +1 -1
- package/esri-compat/time-slider.d.ts +29 -0
- package/esri-compat/time-slider.d.ts.map +1 -1
- package/esri-compat/time-slider.js +117 -0
- package/esri-compat/wfs-layer.d.ts +2 -1
- package/esri-compat/wfs-layer.d.ts.map +1 -1
- package/esri-compat/wfs-layer.js +2 -1
- package/esri-compat/widget-host.d.ts +42 -6
- package/esri-compat/widget-host.d.ts.map +1 -1
- package/esri-compat/widget-host.js +99 -10
- package/generated-app/projection.d.ts.map +1 -1
- package/generated-app/runtime.d.ts.map +1 -1
- package/map/data-to-map-bridge.d.ts +1 -1
- package/map/data-to-map-bridge.d.ts.map +1 -1
- package/map/data-to-map-bridge.js +1 -2
- package/map/honua-map.d.ts.map +1 -1
- package/map/honua-map.js +1 -1
- package/map/index.d.ts +2 -0
- package/map/index.d.ts.map +1 -1
- package/map/index.js +2 -0
- package/map/realtime-reconciliation-adapter.d.ts +98 -0
- package/map/realtime-reconciliation-adapter.d.ts.map +1 -0
- package/map/realtime-reconciliation-adapter.js +84 -0
- package/map/temporal-playback.d.ts +25 -0
- package/map/temporal-playback.d.ts.map +1 -1
- package/map/temporal-playback.js +29 -1
- package/package.json +4 -3
- package/query-planner/canonical-filter.d.ts +30 -0
- package/query-planner/canonical-filter.d.ts.map +1 -0
- package/query-planner/canonical-filter.js +30 -0
- package/query-planner/columnar-plan.d.ts +63 -0
- package/query-planner/columnar-plan.d.ts.map +1 -0
- package/query-planner/columnar-plan.js +94 -0
- package/query-planner/diagnostics.d.ts +3 -3
- package/query-planner/diagnostics.d.ts.map +1 -1
- package/query-planner/diagnostics.js +17 -4
- package/query-planner/duckdb.d.ts.map +1 -1
- package/query-planner/duckdb.js +16 -2
- package/query-planner/execution-context.d.ts.map +1 -1
- package/query-planner/execution-context.js +3 -1
- package/query-planner/executor.d.ts.map +1 -1
- package/query-planner/executor.js +7 -1
- package/query-planner/geoservices.d.ts.map +1 -1
- package/query-planner/geoservices.js +24 -5
- package/query-planner/grpc.d.ts.map +1 -1
- package/query-planner/grpc.js +29 -5
- package/query-planner/index.d.ts +20 -5
- package/query-planner/index.d.ts.map +1 -1
- package/query-planner/index.js +16 -3
- package/query-planner/ir.d.ts +6 -1
- package/query-planner/ir.d.ts.map +1 -1
- package/query-planner/ir.js +63 -1
- package/query-planner/odata-protocol-module.d.ts +54 -0
- package/query-planner/odata-protocol-module.d.ts.map +1 -0
- package/query-planner/odata-protocol-module.js +199 -0
- package/query-planner/odata-v1.d.ts +23 -0
- package/query-planner/odata-v1.d.ts.map +1 -0
- package/query-planner/odata-v1.js +202 -0
- package/query-planner/odata.d.ts +0 -3
- package/query-planner/odata.d.ts.map +1 -1
- package/query-planner/odata.js +0 -143
- package/query-planner/ogc-features.d.ts.map +1 -1
- package/query-planner/ogc-features.js +23 -1
- package/query-planner/planner.d.ts +2 -2
- package/query-planner/planner.d.ts.map +1 -1
- package/query-planner/planner.js +146 -27
- package/query-planner/representation.d.ts +59 -0
- package/query-planner/representation.d.ts.map +1 -0
- package/query-planner/representation.js +140 -0
- package/query-planner/types.d.ts +153 -3
- package/query-planner/types.d.ts.map +1 -1
- package/query-planner/wfs-protocol-module.d.ts +57 -0
- package/query-planner/wfs-protocol-module.d.ts.map +1 -0
- package/query-planner/wfs-protocol-module.js +731 -0
- package/query-planner/wfs-v1.d.ts +41 -0
- package/query-planner/wfs-v1.d.ts.map +1 -0
- package/query-planner/wfs-v1.js +366 -0
- package/query-planner/wfs.d.ts +1 -3
- package/query-planner/wfs.d.ts.map +1 -1
- package/query-planner/wfs.js +1 -70
- package/react/honua-map.d.ts +3 -1
- package/react/honua-map.d.ts.map +1 -1
- package/react/honua-map.js +11 -1
- package/react/hooks.d.ts +1 -1
- package/react/hooks.js +1 -1
- package/react/selection.d.ts.map +1 -1
- package/react/selection.js +0 -0
- package/react/use-mounted-source.d.ts +1 -1
- package/react/use-mounted-source.js +1 -1
- package/realtime/checkpoint-store.d.ts +206 -0
- package/realtime/checkpoint-store.d.ts.map +1 -0
- package/realtime/checkpoint-store.js +504 -0
- package/realtime/contract.d.ts +142 -0
- package/realtime/contract.d.ts.map +1 -0
- package/realtime/contract.js +154 -0
- package/realtime/exploration.d.ts +16 -0
- package/realtime/exploration.d.ts.map +1 -0
- package/realtime/exploration.js +32 -0
- package/realtime/honua-server.d.ts +131 -0
- package/realtime/honua-server.d.ts.map +1 -0
- package/realtime/honua-server.js +302 -0
- package/realtime/index.d.ts +39 -0
- package/realtime/index.d.ts.map +1 -0
- package/realtime/index.js +26 -0
- package/realtime/odata-delta.d.ts +114 -0
- package/realtime/odata-delta.d.ts.map +1 -0
- package/realtime/odata-delta.js +483 -0
- package/realtime/projections.d.ts +30 -0
- package/realtime/projections.d.ts.map +1 -0
- package/realtime/projections.js +51 -0
- package/realtime/reconciliation.d.ts +245 -0
- package/realtime/reconciliation.d.ts.map +1 -0
- package/realtime/reconciliation.js +377 -0
- package/realtime/reducer.d.ts +14 -0
- package/realtime/reducer.d.ts.map +1 -0
- package/realtime/reducer.js +351 -0
- package/realtime/resumable-transport.d.ts +111 -0
- package/realtime/resumable-transport.d.ts.map +1 -0
- package/realtime/resumable-transport.js +406 -0
- package/realtime/resumable.d.ts +104 -0
- package/realtime/resumable.d.ts.map +1 -0
- package/realtime/resumable.js +632 -0
- package/realtime/sse.d.ts +23 -0
- package/realtime/sse.d.ts.map +1 -0
- package/realtime/sse.js +147 -0
- package/realtime/store.d.ts +18 -0
- package/realtime/store.d.ts.map +1 -0
- package/realtime/store.js +63 -0
- package/realtime/types.d.ts +190 -0
- package/realtime/types.d.ts.map +1 -0
- package/realtime/types.js +10 -0
- package/realtime/websocket.d.ts +60 -0
- package/realtime/websocket.d.ts.map +1 -0
- package/realtime/websocket.js +157 -0
- package/realtime/wire.d.ts +28 -0
- package/realtime/wire.d.ts.map +1 -0
- package/realtime/wire.js +73 -0
- package/runtime/index.d.ts +6 -2
- package/runtime/index.d.ts.map +1 -1
- package/runtime/index.js +3 -1
- package/runtime/load-package.d.ts +24 -0
- package/runtime/load-package.d.ts.map +1 -1
- package/runtime/load-package.js +45 -1
- package/runtime/maplibre-renderer.d.ts +11 -0
- package/runtime/maplibre-renderer.d.ts.map +1 -1
- package/runtime/maplibre-renderer.js +32 -7
- package/runtime/offline-region-protocol.d.ts +73 -0
- package/runtime/offline-region-protocol.d.ts.map +1 -0
- package/runtime/offline-region-protocol.js +63 -0
- package/runtime/offline-region-style.d.ts +78 -0
- package/runtime/offline-region-style.d.ts.map +1 -0
- package/runtime/offline-region-style.js +147 -0
- package/runtime/pmtiles-protocol.d.ts +7 -8
- package/runtime/pmtiles-protocol.d.ts.map +1 -1
- package/runtime/pmtiles-protocol.js +19 -66
- package/runtime/protocol-registry.d.ts +55 -0
- package/runtime/protocol-registry.d.ts.map +1 -0
- package/runtime/protocol-registry.js +103 -0
- package/runtime/runtime.d.ts +2 -0
- package/runtime/runtime.d.ts.map +1 -1
- package/runtime/runtime.js +6 -1
- package/studio/index.d.ts +24 -7
- package/studio/index.d.ts.map +1 -1
- package/studio/index.js +21 -7
- package/studio/lifecycle-client.d.ts +164 -0
- package/studio/lifecycle-client.d.ts.map +1 -0
- package/studio/lifecycle-client.js +299 -0
- package/studio/lifecycle-errors.d.ts +91 -0
- package/studio/lifecycle-errors.d.ts.map +1 -0
- package/studio/lifecycle-errors.js +77 -0
- package/studio/lifecycle-types.d.ts +321 -0
- package/studio/lifecycle-types.d.ts.map +1 -0
- package/studio/lifecycle-types.js +22 -0
- package/webmap/convert-label.js +0 -1
- 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
|
-
|
|
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
|
-
|
|
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":"AAAA,MAAM,WAAW,WAAW,CAAC,QAAQ,GAAG,OAAO;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,mBAAmB,CAAC,QAAQ,GAAG,OAAO,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;AAE7F,MAAM,WAAW,uBAAuB;IACtC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,qEAAqE;AACrE,MAAM,WAAW,mBAAmB;IAClC,0BAA0B,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC3G,uBAAuB,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACvG,uBAAuB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5E,sBAAsB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,sBAAsB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAC3F,yBAAyB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9E,yBAAyB,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,qBAAqB,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,gCAAgC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,sCAAsC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,gCAAgC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,6CAA6C,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAC7G,kCAAkC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;KAAE,CAAC;IACzF,sCAAsC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,CAAC;IACpF,mCAAmC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7F,sCAAsC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,CAAC;IACpF,kCAAkC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE;YAAE,KAAK,EAAE,IAAI,CAAC;YAAC,GAAG,EAAE,IAAI,CAAA;SAAE,GAAG,SAAS,CAAA;KAAE,CAAC;
|
|
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:
|
|
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,
|
|
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
|
-
|
|
53
|
+
/** Mutable to match the ArcGIS declaration (`string[]`); see #1013. */
|
|
54
|
+
outFields: string[] | undefined;
|
|
54
55
|
objectIdField: string;
|
|
55
|
-
|
|
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":"AAAA,OAAO,EAAE,cAAc,EAAmD,MAAM,gBAAgB,CAAC;AAEjG,MAAM,WAAW,yBAAyB;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,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,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,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,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1C;AAED,qBAAa,kBAAkB;IAC7B,SAAgB,IAAI,EAAE,SAAS,CAAC;IACzB,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;
|
|
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
|
|
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
|
|
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
|
-
|
|
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;
|
|
1
|
+
{"version":3,"file":"imagery-layer.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/imagery-layer.ts"],"names":[],"mappings":"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"}
|