@honua/app-platform 0.0.20-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +11 -0
- package/app/index.d.ts +164 -0
- package/app/index.d.ts.map +1 -0
- package/app/index.js +424 -0
- package/app-controller/controller.d.ts +425 -0
- package/app-controller/controller.d.ts.map +1 -0
- package/app-controller/controller.js +1173 -0
- package/app-controller/index.d.ts +14 -0
- package/app-controller/index.d.ts.map +1 -0
- package/app-controller/index.js +12 -0
- package/app-workspace/index.d.ts +421 -0
- package/app-workspace/index.d.ts.map +1 -0
- package/app-workspace/index.js +722 -0
- package/collaboration/client.d.ts +40 -0
- package/collaboration/client.d.ts.map +1 -0
- package/collaboration/client.js +299 -0
- package/collaboration/errors.d.ts +15 -0
- package/collaboration/errors.d.ts.map +1 -0
- package/collaboration/errors.js +17 -0
- package/collaboration/fixture.d.ts +41 -0
- package/collaboration/fixture.d.ts.map +1 -0
- package/collaboration/fixture.js +362 -0
- package/collaboration/index.d.ts +18 -0
- package/collaboration/index.d.ts.map +1 -0
- package/collaboration/index.js +14 -0
- package/collaboration/types.d.ts +240 -0
- package/collaboration/types.d.ts.map +1 -0
- package/collaboration/types.js +1 -0
- package/contract/analytics-sources.d.ts +149 -0
- package/contract/analytics-sources.d.ts.map +1 -0
- package/contract/analytics-sources.js +235 -0
- package/contract/edit-session.d.ts +203 -0
- package/contract/edit-session.d.ts.map +1 -0
- package/contract/edit-session.js +760 -0
- package/contract/edit-sketch.d.ts +91 -0
- package/contract/edit-sketch.d.ts.map +1 -0
- package/contract/edit-sketch.js +281 -0
- package/contract/index.d.ts +63 -0
- package/contract/index.d.ts.map +1 -0
- package/contract/index.js +52 -0
- package/contract/jobs.d.ts +149 -0
- package/contract/jobs.d.ts.map +1 -0
- package/contract/jobs.js +40 -0
- package/contract/pmtiles.d.ts +162 -0
- package/contract/pmtiles.d.ts.map +1 -0
- package/contract/pmtiles.js +155 -0
- package/contract/source.d.ts +447 -0
- package/contract/source.d.ts.map +1 -0
- package/contract/source.js +3909 -0
- package/contract/spatial-aggregation.d.ts +336 -0
- package/contract/spatial-aggregation.d.ts.map +1 -0
- package/contract/spatial-aggregation.js +298 -0
- package/contract/temporal.d.ts +455 -0
- package/contract/temporal.d.ts.map +1 -0
- package/contract/temporal.js +146 -0
- package/contract/tiles.d.ts +370 -0
- package/contract/tiles.d.ts.map +1 -0
- package/contract/tiles.js +519 -0
- package/contract/types.d.ts +694 -0
- package/contract/types.d.ts.map +1 -0
- package/contract/types.js +183 -0
- package/contract/widget-source.d.ts +205 -0
- package/contract/widget-source.d.ts.map +1 -0
- package/contract/widget-source.js +1473 -0
- package/control-plane/client.d.ts +95 -0
- package/control-plane/client.d.ts.map +1 -0
- package/control-plane/client.js +374 -0
- package/control-plane/index.d.ts +18 -0
- package/control-plane/index.d.ts.map +1 -0
- package/control-plane/index.js +14 -0
- package/control-plane/types.d.ts +233 -0
- package/control-plane/types.d.ts.map +1 -0
- package/control-plane/types.js +7 -0
- package/controls/basemap-style-binding.d.ts +54 -0
- package/controls/basemap-style-binding.d.ts.map +1 -0
- package/controls/basemap-style-binding.js +199 -0
- package/controls/basemap-switcher.d.ts +95 -0
- package/controls/basemap-switcher.d.ts.map +1 -0
- package/controls/basemap-switcher.js +379 -0
- package/controls/element-utils.d.ts +48 -0
- package/controls/element-utils.d.ts.map +1 -0
- package/controls/element-utils.js +78 -0
- package/controls/index.d.ts +33 -0
- package/controls/index.d.ts.map +1 -0
- package/controls/index.js +30 -0
- package/controls/layer-list.d.ts +98 -0
- package/controls/layer-list.d.ts.map +1 -0
- package/controls/layer-list.js +375 -0
- package/controls/legend-derive.d.ts +53 -0
- package/controls/legend-derive.d.ts.map +1 -0
- package/controls/legend-derive.js +196 -0
- package/controls/legend.d.ts +104 -0
- package/controls/legend.d.ts.map +1 -0
- package/controls/legend.js +381 -0
- package/controls/swipe-control.d.ts +80 -0
- package/controls/swipe-control.d.ts.map +1 -0
- package/controls/swipe-control.js +368 -0
- package/controls/types.d.ts +227 -0
- package/controls/types.d.ts.map +1 -0
- package/controls/types.js +11 -0
- package/core/auth/client-credentials-provider.d.ts +51 -0
- package/core/auth/client-credentials-provider.d.ts.map +1 -0
- package/core/auth/client-credentials-provider.js +115 -0
- package/core/auth/credential-store.d.ts +52 -0
- package/core/auth/credential-store.d.ts.map +1 -0
- package/core/auth/credential-store.js +82 -0
- package/core/auth/index.d.ts +23 -0
- package/core/auth/index.d.ts.map +1 -0
- package/core/auth/index.js +20 -0
- package/core/auth/oauth2-provider.d.ts +114 -0
- package/core/auth/oauth2-provider.d.ts.map +1 -0
- package/core/auth/oauth2-provider.js +408 -0
- package/core/auth/pkce.d.ts +25 -0
- package/core/auth/pkce.d.ts.map +1 -0
- package/core/auth/pkce.js +46 -0
- package/core/auth/static-providers.d.ts +20 -0
- package/core/auth/static-providers.d.ts.map +1 -0
- package/core/auth/static-providers.js +26 -0
- package/core/auth/token-endpoint.d.ts +40 -0
- package/core/auth/token-endpoint.d.ts.map +1 -0
- package/core/auth/token-endpoint.js +133 -0
- package/core/auth/types.d.ts +144 -0
- package/core/auth/types.d.ts.map +1 -0
- package/core/auth/types.js +8 -0
- package/core/batch.d.ts +37 -0
- package/core/batch.d.ts.map +1 -0
- package/core/batch.js +79 -0
- package/core/cache-state.d.ts +79 -0
- package/core/cache-state.d.ts.map +1 -0
- package/core/cache-state.js +87 -0
- package/core/client.d.ts +607 -0
- package/core/client.d.ts.map +1 -0
- package/core/client.js +1716 -0
- package/core/compatibility.d.ts +18 -0
- package/core/compatibility.d.ts.map +1 -0
- package/core/compatibility.js +245 -0
- package/core/errors.d.ts +139 -0
- package/core/errors.d.ts.map +1 -0
- package/core/errors.js +176 -0
- package/core/esri-geojson.d.ts +66 -0
- package/core/esri-geojson.d.ts.map +1 -0
- package/core/esri-geojson.js +363 -0
- package/core/geoparquet-sql.d.ts +162 -0
- package/core/geoparquet-sql.d.ts.map +1 -0
- package/core/geoparquet-sql.js +333 -0
- package/core/geoservices.d.ts +34 -0
- package/core/geoservices.d.ts.map +1 -0
- package/core/geoservices.js +434 -0
- package/core/grpc-adapter.d.ts +23 -0
- package/core/grpc-adapter.d.ts.map +1 -0
- package/core/grpc-adapter.js +688 -0
- package/core/odata.d.ts +347 -0
- package/core/odata.d.ts.map +1 -0
- package/core/odata.js +913 -0
- package/core/ogc-conformance.d.ts +35 -0
- package/core/ogc-conformance.d.ts.map +1 -0
- package/core/ogc-conformance.js +134 -0
- package/core/ogc-endpoint-layout.d.ts +70 -0
- package/core/ogc-endpoint-layout.d.ts.map +1 -0
- package/core/ogc-endpoint-layout.js +173 -0
- package/core/ogc-features.d.ts +23 -0
- package/core/ogc-features.d.ts.map +1 -0
- package/core/ogc-features.js +129 -0
- package/core/ogc-maps.d.ts +49 -0
- package/core/ogc-maps.d.ts.map +1 -0
- package/core/ogc-maps.js +126 -0
- package/core/ogc-processes.d.ts +118 -0
- package/core/ogc-processes.d.ts.map +1 -0
- package/core/ogc-processes.js +423 -0
- package/core/ogc-records.d.ts +75 -0
- package/core/ogc-records.d.ts.map +1 -0
- package/core/ogc-records.js +251 -0
- package/core/ogc-tiles.d.ts +125 -0
- package/core/ogc-tiles.d.ts.map +1 -0
- package/core/ogc-tiles.js +183 -0
- package/core/path-utils.d.ts +69 -0
- package/core/path-utils.d.ts.map +1 -0
- package/core/path-utils.js +123 -0
- package/core/pbf-decoder.d.ts +39 -0
- package/core/pbf-decoder.d.ts.map +1 -0
- package/core/pbf-decoder.js +702 -0
- package/core/process-runner.d.ts +104 -0
- package/core/process-runner.d.ts.map +1 -0
- package/core/process-runner.js +315 -0
- package/core/protocol-transport.d.ts +76 -0
- package/core/protocol-transport.d.ts.map +1 -0
- package/core/protocol-transport.js +15 -0
- package/core/query-builder.d.ts +261 -0
- package/core/query-builder.d.ts.map +1 -0
- package/core/query-builder.js +538 -0
- package/core/request-pipeline.d.ts +88 -0
- package/core/request-pipeline.d.ts.map +1 -0
- package/core/request-pipeline.js +273 -0
- package/core/spatial-filter.d.ts +93 -0
- package/core/spatial-filter.d.ts.map +1 -0
- package/core/spatial-filter.js +153 -0
- package/core/stac-static.d.ts +51 -0
- package/core/stac-static.d.ts.map +1 -0
- package/core/stac-static.js +195 -0
- package/core/stac.d.ts +67 -0
- package/core/stac.d.ts.map +1 -0
- package/core/stac.js +259 -0
- package/core/surfaces.d.ts +540 -0
- package/core/surfaces.d.ts.map +1 -0
- package/core/surfaces.js +1964 -0
- package/core/terrain-elevation.d.ts +114 -0
- package/core/terrain-elevation.d.ts.map +1 -0
- package/core/terrain-elevation.js +150 -0
- package/core/types.d.ts +1404 -0
- package/core/types.d.ts.map +1 -0
- package/core/types.js +13 -0
- package/core/wfs-capabilities.d.ts +153 -0
- package/core/wfs-capabilities.d.ts.map +1 -0
- package/core/wfs-capabilities.js +490 -0
- package/core/wfs-filter.d.ts +118 -0
- package/core/wfs-filter.d.ts.map +1 -0
- package/core/wfs-filter.js +634 -0
- package/core/wfs.d.ts +232 -0
- package/core/wfs.d.ts.map +1 -0
- package/core/wfs.js +426 -0
- package/core/wire-shared.d.ts +32 -0
- package/core/wire-shared.d.ts.map +1 -0
- package/core/wire-shared.js +76 -0
- package/core/wms-axis.d.ts +36 -0
- package/core/wms-axis.d.ts.map +1 -0
- package/core/wms-axis.js +73 -0
- package/core/wms-capabilities.d.ts +110 -0
- package/core/wms-capabilities.d.ts.map +1 -0
- package/core/wms-capabilities.js +559 -0
- package/core/wms-types.d.ts +128 -0
- package/core/wms-types.d.ts.map +1 -0
- package/core/wms-types.js +32 -0
- package/core/wms.d.ts +144 -0
- package/core/wms.d.ts.map +1 -0
- package/core/wms.js +338 -0
- package/core/wmts-capabilities.d.ts +82 -0
- package/core/wmts-capabilities.d.ts.map +1 -0
- package/core/wmts-capabilities.js +402 -0
- package/core/wmts.d.ts +103 -0
- package/core/wmts.d.ts.map +1 -0
- package/core/wmts.js +332 -0
- package/core/xml-text.d.ts +20 -0
- package/core/xml-text.d.ts.map +1 -0
- package/core/xml-text.js +85 -0
- package/esri-compat/basemap-gallery.d.ts +38 -0
- package/esri-compat/basemap-gallery.d.ts.map +1 -0
- package/esri-compat/basemap-gallery.js +159 -0
- package/esri-compat/basemap-layer-list.d.ts +35 -0
- package/esri-compat/basemap-layer-list.d.ts.map +1 -0
- package/esri-compat/basemap-layer-list.js +139 -0
- package/esri-compat/basemap.d.ts +32 -0
- package/esri-compat/basemap.d.ts.map +1 -0
- package/esri-compat/basemap.js +84 -0
- package/esri-compat/bookmarks.d.ts +36 -0
- package/esri-compat/bookmarks.d.ts.map +1 -0
- package/esri-compat/bookmarks.js +108 -0
- package/esri-compat/class-breaks-renderer.d.ts +50 -0
- package/esri-compat/class-breaks-renderer.d.ts.map +1 -0
- package/esri-compat/class-breaks-renderer.js +164 -0
- package/esri-compat/color.d.ts +22 -0
- package/esri-compat/color.d.ts.map +1 -0
- package/esri-compat/color.js +106 -0
- package/esri-compat/controls.d.ts +174 -0
- package/esri-compat/controls.d.ts.map +1 -0
- package/esri-compat/controls.js +479 -0
- package/esri-compat/coordinate-conversion.d.ts +41 -0
- package/esri-compat/coordinate-conversion.d.ts.map +1 -0
- package/esri-compat/coordinate-conversion.js +125 -0
- package/esri-compat/directions.d.ts +45 -0
- package/esri-compat/directions.d.ts.map +1 -0
- package/esri-compat/directions.js +123 -0
- package/esri-compat/editor.d.ts +47 -0
- package/esri-compat/editor.d.ts.map +1 -0
- package/esri-compat/editor.js +170 -0
- package/esri-compat/esri-config.d.ts +16 -0
- package/esri-compat/esri-config.d.ts.map +1 -0
- package/esri-compat/esri-config.js +23 -0
- package/esri-compat/esri-request.d.ts +17 -0
- package/esri-compat/esri-request.d.ts.map +1 -0
- package/esri-compat/esri-request.js +127 -0
- package/esri-compat/event-bus.d.ts +106 -0
- package/esri-compat/event-bus.d.ts.map +1 -0
- package/esri-compat/event-bus.js +90 -0
- package/esri-compat/expand.d.ts +36 -0
- package/esri-compat/expand.d.ts.map +1 -0
- package/esri-compat/expand.js +97 -0
- package/esri-compat/extent.d.ts +43 -0
- package/esri-compat/extent.d.ts.map +1 -0
- package/esri-compat/extent.js +140 -0
- package/esri-compat/feature-filter.d.ts +55 -0
- package/esri-compat/feature-filter.d.ts.map +1 -0
- package/esri-compat/feature-filter.js +109 -0
- package/esri-compat/feature-form.d.ts +64 -0
- package/esri-compat/feature-form.d.ts.map +1 -0
- package/esri-compat/feature-form.js +137 -0
- package/esri-compat/feature-layer.d.ts +173 -0
- package/esri-compat/feature-layer.d.ts.map +1 -0
- package/esri-compat/feature-layer.js +661 -0
- package/esri-compat/feature-set.d.ts +32 -0
- package/esri-compat/feature-set.d.ts.map +1 -0
- package/esri-compat/feature-set.js +80 -0
- package/esri-compat/feature-table.d.ts +141 -0
- package/esri-compat/feature-table.d.ts.map +1 -0
- package/esri-compat/feature-table.js +500 -0
- package/esri-compat/feature-templates.d.ts +41 -0
- package/esri-compat/feature-templates.d.ts.map +1 -0
- package/esri-compat/feature-templates.js +97 -0
- package/esri-compat/feature.d.ts +33 -0
- package/esri-compat/feature.d.ts.map +1 -0
- package/esri-compat/feature.js +83 -0
- package/esri-compat/geojson-layer.d.ts +86 -0
- package/esri-compat/geojson-layer.d.ts.map +1 -0
- package/esri-compat/geojson-layer.js +191 -0
- package/esri-compat/geometry-engine.d.ts +107 -0
- package/esri-compat/geometry-engine.d.ts.map +1 -0
- package/esri-compat/geometry-engine.js +266 -0
- package/esri-compat/graphic.d.ts +46 -0
- package/esri-compat/graphic.d.ts.map +1 -0
- package/esri-compat/graphic.js +103 -0
- package/esri-compat/graphics-layer.d.ts +49 -0
- package/esri-compat/graphics-layer.d.ts.map +1 -0
- package/esri-compat/graphics-layer.js +185 -0
- package/esri-compat/group-layer.d.ts +48 -0
- package/esri-compat/group-layer.d.ts.map +1 -0
- package/esri-compat/group-layer.js +212 -0
- package/esri-compat/identify.d.ts +71 -0
- package/esri-compat/identify.d.ts.map +1 -0
- package/esri-compat/identify.js +299 -0
- package/esri-compat/identity-manager.d.ts +74 -0
- package/esri-compat/identity-manager.d.ts.map +1 -0
- package/esri-compat/identity-manager.js +245 -0
- package/esri-compat/imagery-layer.d.ts +78 -0
- package/esri-compat/imagery-layer.d.ts.map +1 -0
- package/esri-compat/imagery-layer.js +167 -0
- package/esri-compat/label-class.d.ts +31 -0
- package/esri-compat/label-class.d.ts.map +1 -0
- package/esri-compat/label-class.js +102 -0
- package/esri-compat/layer-list.d.ts +77 -0
- package/esri-compat/layer-list.d.ts.map +1 -0
- package/esri-compat/layer-list.js +342 -0
- package/esri-compat/legend.d.ts +53 -0
- package/esri-compat/legend.d.ts.map +1 -0
- package/esri-compat/legend.js +254 -0
- package/esri-compat/map-image-layer.d.ts +162 -0
- package/esri-compat/map-image-layer.d.ts.map +1 -0
- package/esri-compat/map-image-layer.js +709 -0
- package/esri-compat/map-view.d.ts +323 -0
- package/esri-compat/map-view.d.ts.map +1 -0
- package/esri-compat/map-view.js +1175 -0
- package/esri-compat/map.d.ts +47 -0
- package/esri-compat/map.d.ts.map +1 -0
- package/esri-compat/map.js +209 -0
- package/esri-compat/measurement-2d.d.ts +61 -0
- package/esri-compat/measurement-2d.d.ts.map +1 -0
- package/esri-compat/measurement-2d.js +184 -0
- package/esri-compat/measurement.d.ts +45 -0
- package/esri-compat/measurement.d.ts.map +1 -0
- package/esri-compat/measurement.js +193 -0
- package/esri-compat/oauth-info.d.ts +50 -0
- package/esri-compat/oauth-info.d.ts.map +1 -0
- package/esri-compat/oauth-info.js +142 -0
- package/esri-compat/picture-marker-symbol.d.ts +35 -0
- package/esri-compat/picture-marker-symbol.d.ts.map +1 -0
- package/esri-compat/picture-marker-symbol.js +126 -0
- package/esri-compat/point.d.ts +31 -0
- package/esri-compat/point.d.ts.map +1 -0
- package/esri-compat/point.js +102 -0
- package/esri-compat/polygon.d.ts +31 -0
- package/esri-compat/polygon.d.ts.map +1 -0
- package/esri-compat/polygon.js +107 -0
- package/esri-compat/polyline.d.ts +31 -0
- package/esri-compat/polyline.d.ts.map +1 -0
- package/esri-compat/polyline.js +107 -0
- package/esri-compat/popup-template.d.ts +55 -0
- package/esri-compat/popup-template.d.ts.map +1 -0
- package/esri-compat/popup-template.js +128 -0
- package/esri-compat/popup.d.ts +54 -0
- package/esri-compat/popup.d.ts.map +1 -0
- package/esri-compat/popup.js +312 -0
- package/esri-compat/print.d.ts +47 -0
- package/esri-compat/print.d.ts.map +1 -0
- package/esri-compat/print.js +105 -0
- package/esri-compat/query.d.ts +58 -0
- package/esri-compat/query.d.ts.map +1 -0
- package/esri-compat/query.js +128 -0
- package/esri-compat/reactive-utils.d.ts +24 -0
- package/esri-compat/reactive-utils.d.ts.map +1 -0
- package/esri-compat/reactive-utils.js +193 -0
- package/esri-compat/request.d.ts +41 -0
- package/esri-compat/request.d.ts.map +1 -0
- package/esri-compat/request.js +253 -0
- package/esri-compat/route-layer.d.ts +59 -0
- package/esri-compat/route-layer.d.ts.map +1 -0
- package/esri-compat/route-layer.js +223 -0
- package/esri-compat/route-task.d.ts +88 -0
- package/esri-compat/route-task.d.ts.map +1 -0
- package/esri-compat/route-task.js +225 -0
- package/esri-compat/scene-view.d.ts +41 -0
- package/esri-compat/scene-view.d.ts.map +1 -0
- package/esri-compat/scene-view.js +68 -0
- package/esri-compat/search.d.ts +112 -0
- package/esri-compat/search.d.ts.map +1 -0
- package/esri-compat/search.js +820 -0
- package/esri-compat/simple-fill-symbol.d.ts +27 -0
- package/esri-compat/simple-fill-symbol.d.ts.map +1 -0
- package/esri-compat/simple-fill-symbol.js +85 -0
- package/esri-compat/simple-line-symbol.d.ts +27 -0
- package/esri-compat/simple-line-symbol.d.ts.map +1 -0
- package/esri-compat/simple-line-symbol.js +85 -0
- package/esri-compat/simple-marker-symbol.d.ts +29 -0
- package/esri-compat/simple-marker-symbol.d.ts.map +1 -0
- package/esri-compat/simple-marker-symbol.js +92 -0
- package/esri-compat/simple-renderer.d.ts +29 -0
- package/esri-compat/simple-renderer.d.ts.map +1 -0
- package/esri-compat/simple-renderer.js +92 -0
- package/esri-compat/sketch.d.ts +64 -0
- package/esri-compat/sketch.d.ts.map +1 -0
- package/esri-compat/sketch.js +227 -0
- package/esri-compat/spatial-reference.d.ts +31 -0
- package/esri-compat/spatial-reference.d.ts.map +1 -0
- package/esri-compat/spatial-reference.js +102 -0
- package/esri-compat/swipe.d.ts +34 -0
- package/esri-compat/swipe.d.ts.map +1 -0
- package/esri-compat/swipe.js +93 -0
- package/esri-compat/table-list.d.ts +36 -0
- package/esri-compat/table-list.d.ts.map +1 -0
- package/esri-compat/table-list.js +126 -0
- package/esri-compat/text-symbol.d.ts +37 -0
- package/esri-compat/text-symbol.d.ts.map +1 -0
- package/esri-compat/text-symbol.js +123 -0
- package/esri-compat/tile-layer.d.ts +52 -0
- package/esri-compat/tile-layer.d.ts.map +1 -0
- package/esri-compat/tile-layer.js +168 -0
- package/esri-compat/time-slider.d.ts +70 -0
- package/esri-compat/time-slider.d.ts.map +1 -0
- package/esri-compat/time-slider.js +208 -0
- package/esri-compat/track.d.ts +51 -0
- package/esri-compat/track.d.ts.map +1 -0
- package/esri-compat/track.js +174 -0
- package/esri-compat/unique-value-renderer.d.ts +41 -0
- package/esri-compat/unique-value-renderer.d.ts.map +1 -0
- package/esri-compat/unique-value-renderer.js +127 -0
- package/esri-compat/url.d.ts +13 -0
- package/esri-compat/url.d.ts.map +1 -0
- package/esri-compat/url.js +68 -0
- package/esri-compat/vector-tile-layer.d.ts +47 -0
- package/esri-compat/vector-tile-layer.d.ts.map +1 -0
- package/esri-compat/vector-tile-layer.js +130 -0
- package/esri-compat/web-map.d.ts +14 -0
- package/esri-compat/web-map.d.ts.map +1 -0
- package/esri-compat/web-map.js +24 -0
- package/esri-compat/wfs-layer.d.ts +64 -0
- package/esri-compat/wfs-layer.d.ts.map +1 -0
- package/esri-compat/wfs-layer.js +145 -0
- package/esri-compat/wms-layer.d.ts +76 -0
- package/esri-compat/wms-layer.d.ts.map +1 -0
- package/esri-compat/wms-layer.js +157 -0
- package/exploration/context.d.ts +25 -0
- package/exploration/context.d.ts.map +1 -0
- package/exploration/context.js +396 -0
- package/exploration/index.d.ts +27 -0
- package/exploration/index.d.ts.map +1 -0
- package/exploration/index.js +24 -0
- package/exploration/presets.d.ts +27 -0
- package/exploration/presets.d.ts.map +1 -0
- package/exploration/presets.js +114 -0
- package/exploration/reducer.d.ts +23 -0
- package/exploration/reducer.d.ts.map +1 -0
- package/exploration/reducer.js +332 -0
- package/exploration/selection.d.ts +25 -0
- package/exploration/selection.d.ts.map +1 -0
- package/exploration/selection.js +34 -0
- package/exploration/selectors.d.ts +56 -0
- package/exploration/selectors.d.ts.map +1 -0
- package/exploration/selectors.js +110 -0
- package/exploration/types.d.ts +294 -0
- package/exploration/types.d.ts.map +1 -0
- package/exploration/types.js +33 -0
- package/expr/expression.d.ts +457 -0
- package/expr/expression.d.ts.map +1 -0
- package/expr/expression.js +663 -0
- package/expr/index.d.ts +32 -0
- package/expr/index.d.ts.map +1 -0
- package/expr/index.js +30 -0
- package/filter-registry/index.d.ts +145 -0
- package/filter-registry/index.d.ts.map +1 -0
- package/filter-registry/index.js +531 -0
- package/gen/honua/v1/feature_service_pb.d.ts +918 -0
- package/gen/honua/v1/feature_service_pb.d.ts.map +1 -0
- package/gen/honua/v1/feature_service_pb.js +375 -0
- package/generated-app/errors.d.ts +41 -0
- package/generated-app/errors.d.ts.map +1 -0
- package/generated-app/errors.js +41 -0
- package/generated-app/index.d.ts +17 -0
- package/generated-app/index.d.ts.map +1 -0
- package/generated-app/index.js +12 -0
- package/generated-app/manifest.d.ts +183 -0
- package/generated-app/manifest.d.ts.map +1 -0
- package/generated-app/manifest.js +14 -0
- package/generated-app/projection.d.ts +44 -0
- package/generated-app/projection.d.ts.map +1 -0
- package/generated-app/projection.js +234 -0
- package/generated-app/runtime.d.ts +215 -0
- package/generated-app/runtime.d.ts.map +1 -0
- package/generated-app/runtime.js +1196 -0
- package/geocoding/index.d.ts +106 -0
- package/geocoding/index.d.ts.map +1 -0
- package/geocoding/index.js +278 -0
- package/interactions/detail-model.d.ts +54 -0
- package/interactions/detail-model.d.ts.map +1 -0
- package/interactions/detail-model.js +105 -0
- package/interactions/exploration-bindings.d.ts +120 -0
- package/interactions/exploration-bindings.d.ts.map +1 -0
- package/interactions/exploration-bindings.js +218 -0
- package/interactions/feature-state.d.ts +144 -0
- package/interactions/feature-state.d.ts.map +1 -0
- package/interactions/feature-state.js +169 -0
- package/interactions/hit-test.d.ts +112 -0
- package/interactions/hit-test.d.ts.map +1 -0
- package/interactions/hit-test.js +291 -0
- package/interactions/index.d.ts +31 -0
- package/interactions/index.d.ts.map +1 -0
- package/interactions/index.js +24 -0
- package/interactions/share-state.d.ts +36 -0
- package/interactions/share-state.d.ts.map +1 -0
- package/interactions/share-state.js +123 -0
- package/map/feature-service-adapter.d.ts +138 -0
- package/map/feature-service-adapter.d.ts.map +1 -0
- package/map/feature-service-adapter.js +279 -0
- package/map/honua-map.d.ts +203 -0
- package/map/honua-map.d.ts.map +1 -0
- package/map/honua-map.js +347 -0
- package/map/index.d.ts +27 -0
- package/map/index.d.ts.map +1 -0
- package/map/index.js +22 -0
- package/map/maplibre-target.d.ts +103 -0
- package/map/maplibre-target.d.ts.map +1 -0
- package/map/maplibre-target.js +164 -0
- package/map/webmap-maplibre.d.ts +60 -0
- package/map/webmap-maplibre.d.ts.map +1 -0
- package/map/webmap-maplibre.js +212 -0
- package/operate/client.d.ts +94 -0
- package/operate/client.d.ts.map +1 -0
- package/operate/client.js +361 -0
- package/operate/index.d.ts +22 -0
- package/operate/index.d.ts.map +1 -0
- package/operate/index.js +19 -0
- package/operate/types.d.ts +397 -0
- package/operate/types.d.ts.map +1 -0
- package/operate/types.js +17 -0
- package/operator/client.d.ts +60 -0
- package/operator/client.d.ts.map +1 -0
- package/operator/client.js +20 -0
- package/operator/controllers/approval.d.ts +52 -0
- package/operator/controllers/approval.d.ts.map +1 -0
- package/operator/controllers/approval.js +123 -0
- package/operator/controllers/base.d.ts +27 -0
- package/operator/controllers/base.d.ts.map +1 -0
- package/operator/controllers/base.js +53 -0
- package/operator/controllers/builder-workspace.d.ts +55 -0
- package/operator/controllers/builder-workspace.d.ts.map +1 -0
- package/operator/controllers/builder-workspace.js +108 -0
- package/operator/controllers/chat.d.ts +61 -0
- package/operator/controllers/chat.d.ts.map +1 -0
- package/operator/controllers/chat.js +154 -0
- package/operator/controllers/clarification.d.ts +52 -0
- package/operator/controllers/clarification.d.ts.map +1 -0
- package/operator/controllers/clarification.js +121 -0
- package/operator/controllers/execution.d.ts +60 -0
- package/operator/controllers/execution.d.ts.map +1 -0
- package/operator/controllers/execution.js +286 -0
- package/operator/controllers/index.d.ts +23 -0
- package/operator/controllers/index.d.ts.map +1 -0
- package/operator/controllers/index.js +15 -0
- package/operator/controllers/map-workspace.d.ts +85 -0
- package/operator/controllers/map-workspace.d.ts.map +1 -0
- package/operator/controllers/map-workspace.js +296 -0
- package/operator/controllers/plan-review.d.ts +66 -0
- package/operator/controllers/plan-review.d.ts.map +1 -0
- package/operator/controllers/plan-review.js +124 -0
- package/operator/errors.d.ts +62 -0
- package/operator/errors.d.ts.map +1 -0
- package/operator/errors.js +75 -0
- package/operator/i18n/index.d.ts +10 -0
- package/operator/i18n/index.d.ts.map +1 -0
- package/operator/i18n/index.js +8 -0
- package/operator/i18n/messages.d.ts +19 -0
- package/operator/i18n/messages.d.ts.map +1 -0
- package/operator/i18n/messages.js +54 -0
- package/operator/index.d.ts +19 -0
- package/operator/index.d.ts.map +1 -0
- package/operator/index.js +15 -0
- package/operator/telemetry.d.ts +26 -0
- package/operator/telemetry.d.ts.map +1 -0
- package/operator/telemetry.js +9 -0
- package/operator/theming/index.d.ts +12 -0
- package/operator/theming/index.d.ts.map +1 -0
- package/operator/theming/index.js +9 -0
- package/operator/theming/provider.d.ts +27 -0
- package/operator/theming/provider.d.ts.map +1 -0
- package/operator/theming/provider.js +26 -0
- package/operator/theming/tokens.d.ts +28 -0
- package/operator/theming/tokens.d.ts.map +1 -0
- package/operator/theming/tokens.js +65 -0
- package/operator/workspace/events.d.ts +70 -0
- package/operator/workspace/events.d.ts.map +1 -0
- package/operator/workspace/events.js +9 -0
- package/operator/workspace/index.d.ts +12 -0
- package/operator/workspace/index.d.ts.map +1 -0
- package/operator/workspace/index.js +8 -0
- package/operator/workspace/types.d.ts +178 -0
- package/operator/workspace/types.d.ts.map +1 -0
- package/operator/workspace/types.js +47 -0
- package/operator/workspace/workspace.d.ts +58 -0
- package/operator/workspace/workspace.d.ts.map +1 -0
- package/operator/workspace/workspace.js +339 -0
- package/package.json +105 -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 +123 -0
- package/realtime/honua-server.d.ts.map +1 -0
- package/realtime/honua-server.js +188 -0
- package/realtime/index.d.ts +20 -0
- package/realtime/index.d.ts.map +1 -0
- package/realtime/index.js +14 -0
- package/realtime/projections.d.ts +30 -0
- package/realtime/projections.d.ts.map +1 -0
- package/realtime/projections.js +51 -0
- package/realtime/reducer.d.ts +14 -0
- package/realtime/reducer.d.ts.map +1 -0
- package/realtime/reducer.js +351 -0
- package/realtime/sse.d.ts +23 -0
- package/realtime/sse.d.ts.map +1 -0
- package/realtime/sse.js +143 -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/replica-sync/client.d.ts +32 -0
- package/replica-sync/client.d.ts.map +1 -0
- package/replica-sync/client.js +52 -0
- package/replica-sync/errors.d.ts +22 -0
- package/replica-sync/errors.d.ts.map +1 -0
- package/replica-sync/errors.js +29 -0
- package/replica-sync/fixture.d.ts +40 -0
- package/replica-sync/fixture.d.ts.map +1 -0
- package/replica-sync/fixture.js +364 -0
- package/replica-sync/index.d.ts +22 -0
- package/replica-sync/index.d.ts.map +1 -0
- package/replica-sync/index.js +17 -0
- package/replica-sync/types.d.ts +270 -0
- package/replica-sync/types.d.ts.map +1 -0
- package/replica-sync/types.js +13 -0
- package/runtime/diff.d.ts +31 -0
- package/runtime/diff.d.ts.map +1 -0
- package/runtime/diff.js +143 -0
- package/runtime/errors.d.ts +40 -0
- package/runtime/errors.d.ts.map +1 -0
- package/runtime/errors.js +35 -0
- package/runtime/index.d.ts +59 -0
- package/runtime/index.d.ts.map +1 -0
- package/runtime/index.js +40 -0
- package/runtime/legend.d.ts +23 -0
- package/runtime/legend.d.ts.map +1 -0
- package/runtime/legend.js +38 -0
- package/runtime/load-package.d.ts +125 -0
- package/runtime/load-package.d.ts.map +1 -0
- package/runtime/load-package.js +272 -0
- package/runtime/map-package-fetch.d.ts +107 -0
- package/runtime/map-package-fetch.d.ts.map +1 -0
- package/runtime/map-package-fetch.js +336 -0
- package/runtime/map-package-realtime.d.ts +169 -0
- package/runtime/map-package-realtime.d.ts.map +1 -0
- package/runtime/map-package-realtime.js +350 -0
- package/runtime/map-package-validation.d.ts +30 -0
- package/runtime/map-package-validation.d.ts.map +1 -0
- package/runtime/map-package-validation.js +257 -0
- package/runtime/map-package-watch.d.ts +78 -0
- package/runtime/map-package-watch.d.ts.map +1 -0
- package/runtime/map-package-watch.js +695 -0
- package/runtime/map-package.d.ts +167 -0
- package/runtime/map-package.d.ts.map +1 -0
- package/runtime/map-package.js +15 -0
- package/runtime/ogc-styles.d.ts +110 -0
- package/runtime/ogc-styles.d.ts.map +1 -0
- package/runtime/ogc-styles.js +195 -0
- package/runtime/pmtiles-protocol.d.ts +77 -0
- package/runtime/pmtiles-protocol.d.ts.map +1 -0
- package/runtime/pmtiles-protocol.js +120 -0
- package/runtime/popups.d.ts +62 -0
- package/runtime/popups.d.ts.map +1 -0
- package/runtime/popups.js +95 -0
- package/runtime/query-tiles.d.ts +217 -0
- package/runtime/query-tiles.d.ts.map +1 -0
- package/runtime/query-tiles.js +801 -0
- package/runtime/runtime.d.ts +243 -0
- package/runtime/runtime.d.ts.map +1 -0
- package/runtime/runtime.js +1147 -0
- package/runtime/source-bridge.d.ts +99 -0
- package/runtime/source-bridge.d.ts.map +1 -0
- package/runtime/source-bridge.js +428 -0
- package/runtime/style-compose.d.ts +46 -0
- package/runtime/style-compose.d.ts.map +1 -0
- package/runtime/style-compose.js +144 -0
- package/runtime/style-interactions.d.ts +141 -0
- package/runtime/style-interactions.d.ts.map +1 -0
- package/runtime/style-interactions.js +574 -0
- package/runtime/style-spec-validation.d.ts +23 -0
- package/runtime/style-spec-validation.d.ts.map +1 -0
- package/runtime/style-spec-validation.js +357 -0
- package/scene-workspace/analysis-widgets.d.ts +334 -0
- package/scene-workspace/analysis-widgets.d.ts.map +1 -0
- package/scene-workspace/analysis-widgets.js +424 -0
- package/scene-workspace/cesium-adapter.d.ts +438 -0
- package/scene-workspace/cesium-adapter.d.ts.map +1 -0
- package/scene-workspace/cesium-adapter.js +493 -0
- package/scene-workspace/index.d.ts +21 -0
- package/scene-workspace/index.d.ts.map +1 -0
- package/scene-workspace/index.js +14 -0
- package/scene-workspace/primitives.d.ts +162 -0
- package/scene-workspace/primitives.d.ts.map +1 -0
- package/scene-workspace/primitives.js +255 -0
- package/scene-workspace/scene-discovery.d.ts +196 -0
- package/scene-workspace/scene-discovery.d.ts.map +1 -0
- package/scene-workspace/scene-discovery.js +228 -0
- package/scene-workspace/scene-view.d.ts +209 -0
- package/scene-workspace/scene-view.d.ts.map +1 -0
- package/scene-workspace/scene-view.js +267 -0
- package/scene-workspace/types.d.ts +229 -0
- package/scene-workspace/types.d.ts.map +1 -0
- package/scene-workspace/types.js +23 -0
- package/scene-workspace/workspace.d.ts +13 -0
- package/scene-workspace/workspace.d.ts.map +1 -0
- package/scene-workspace/workspace.js +391 -0
- package/share/denial.d.ts +78 -0
- package/share/denial.d.ts.map +1 -0
- package/share/denial.js +61 -0
- package/share/embed-token.d.ts +71 -0
- package/share/embed-token.d.ts.map +1 -0
- package/share/embed-token.js +99 -0
- package/share/index.d.ts +35 -0
- package/share/index.d.ts.map +1 -0
- package/share/index.js +30 -0
- package/share/open-data.d.ts +114 -0
- package/share/open-data.d.ts.map +1 -0
- package/share/open-data.js +81 -0
- package/share/types.d.ts +163 -0
- package/share/types.d.ts.map +1 -0
- package/share/types.js +17 -0
- package/studio/capability-manifest.d.ts +285 -0
- package/studio/capability-manifest.d.ts.map +1 -0
- package/studio/capability-manifest.js +59 -0
- package/studio/chart-spec.d.ts +85 -0
- package/studio/chart-spec.d.ts.map +1 -0
- package/studio/chart-spec.js +106 -0
- package/studio/index.d.ts +34 -0
- package/studio/index.d.ts.map +1 -0
- package/studio/index.js +27 -0
- package/studio/provenance.d.ts +131 -0
- package/studio/provenance.d.ts.map +1 -0
- package/studio/provenance.js +39 -0
- package/studio/publish.d.ts +64 -0
- package/studio/publish.d.ts.map +1 -0
- package/studio/publish.js +13 -0
- package/studio/types.d.ts +278 -0
- package/studio/types.d.ts.map +1 -0
- package/studio/types.js +71 -0
- package/studio/validate.d.ts +45 -0
- package/studio/validate.d.ts.map +1 -0
- package/studio/validate.js +255 -0
- package/studio/validation.d.ts +112 -0
- package/studio/validation.d.ts.map +1 -0
- package/studio/validation.js +42 -0
- package/style/factory.d.ts +30 -0
- package/style/factory.d.ts.map +1 -0
- package/style/factory.js +61 -0
- package/style/index.d.ts +25 -0
- package/style/index.d.ts.map +1 -0
- package/style/index.js +24 -0
- package/style/specification.d.ts +203 -0
- package/style/specification.d.ts.map +1 -0
- package/style/specification.js +178 -0
- package/style/wms-wmts-resolvers.d.ts +38 -0
- package/style/wms-wmts-resolvers.d.ts.map +1 -0
- package/style/wms-wmts-resolvers.js +92 -0
- package/web-components/controller.d.ts +39 -0
- package/web-components/controller.d.ts.map +1 -0
- package/web-components/controller.js +640 -0
- package/web-components/elements.d.ts +210 -0
- package/web-components/elements.d.ts.map +1 -0
- package/web-components/elements.js +1651 -0
- package/web-components/index.d.ts +24 -0
- package/web-components/index.d.ts.map +1 -0
- package/web-components/index.js +22 -0
- package/web-components/maplibre-renderer.d.ts +22 -0
- package/web-components/maplibre-renderer.d.ts.map +1 -0
- package/web-components/maplibre-renderer.js +474 -0
- package/web-components/types.d.ts +397 -0
- package/web-components/types.d.ts.map +1 -0
- package/web-components/types.js +1 -0
- package/webmap/contract.d.ts +28 -0
- package/webmap/contract.d.ts.map +1 -0
- package/webmap/contract.js +130 -0
- package/webmap/convert-basemap.d.ts +17 -0
- package/webmap/convert-basemap.d.ts.map +1 -0
- package/webmap/convert-basemap.js +78 -0
- package/webmap/convert-extent.d.ts +17 -0
- package/webmap/convert-extent.d.ts.map +1 -0
- package/webmap/convert-extent.js +114 -0
- package/webmap/convert-label.d.ts +13 -0
- package/webmap/convert-label.d.ts.map +1 -0
- package/webmap/convert-label.js +125 -0
- package/webmap/convert-layer.d.ts +22 -0
- package/webmap/convert-layer.d.ts.map +1 -0
- package/webmap/convert-layer.js +181 -0
- package/webmap/convert-popup.d.ts +34 -0
- package/webmap/convert-popup.d.ts.map +1 -0
- package/webmap/convert-popup.js +68 -0
- package/webmap/convert-renderer.d.ts +17 -0
- package/webmap/convert-renderer.d.ts.map +1 -0
- package/webmap/convert-renderer.js +161 -0
- package/webmap/convert-symbol.d.ts +17 -0
- package/webmap/convert-symbol.d.ts.map +1 -0
- package/webmap/convert-symbol.js +122 -0
- package/webmap/index.d.ts +44 -0
- package/webmap/index.d.ts.map +1 -0
- package/webmap/index.js +33 -0
- package/webmap/parse.d.ts +25 -0
- package/webmap/parse.d.ts.map +1 -0
- package/webmap/parse.js +83 -0
- package/webmap/types.d.ts +264 -0
- package/webmap/types.d.ts.map +1 -0
- package/webmap/types.js +13 -0
- package/webmap/warnings.d.ts +30 -0
- package/webmap/warnings.d.ts.map +1 -0
- package/webmap/warnings.js +37 -0
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hand-rolled XML walker for the two WFS surfaces that the canonical adapter
|
|
3
|
+
* actually has to read: `wfs:WFS_Capabilities` (operation list, output formats
|
|
4
|
+
* by operation, advertised feature types, filter capabilities, stored-query
|
|
5
|
+
* names) and `ows:ExceptionReport` (turned into `HonuaWfsExceptionError`).
|
|
6
|
+
*
|
|
7
|
+
* Scope is intentionally narrow — never touches feature payloads, only
|
|
8
|
+
* metadata XML — so a hand-rolled walker beats pulling in a generic XML
|
|
9
|
+
* parser as a runtime dependency. The walker:
|
|
10
|
+
*
|
|
11
|
+
* - Refuses any document with `<!DOCTYPE …>` or `<!ENTITY …>` declarations.
|
|
12
|
+
* Stops XXE-class attacks before any property is read.
|
|
13
|
+
* - Is namespace-aware in the loose sense: it matches local element names
|
|
14
|
+
* (the suffix after `:`) and ignores prefixes, since WFS 2.0 uses several
|
|
15
|
+
* different prefix conventions in the wild.
|
|
16
|
+
* - Returns plain typed structs — no dependency on `xmldom`,
|
|
17
|
+
* `fast-xml-parser`, or other third-party libraries.
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
import { HonuaWfsExceptionError } from "./errors.js";
|
|
22
|
+
/**
|
|
23
|
+
* Parse a WFS `GetCapabilities` document. Throws when the document declares
|
|
24
|
+
* a DOCTYPE / ENTITY (XXE defense) or when the root element is not
|
|
25
|
+
* `WFS_Capabilities` / not parseable.
|
|
26
|
+
*/
|
|
27
|
+
export function parseWfsCapabilities(xml) {
|
|
28
|
+
const root = parseXml(xml);
|
|
29
|
+
if (root.local !== "WFS_Capabilities") {
|
|
30
|
+
if (root.local === "ExceptionReport") {
|
|
31
|
+
const report = parseExceptionFromRoot(root);
|
|
32
|
+
throw new HonuaWfsExceptionError(report.exceptionCode, report.message, report.locator);
|
|
33
|
+
}
|
|
34
|
+
throw new Error(`WFS GetCapabilities: expected <WFS_Capabilities>, got <${root.qname}>`);
|
|
35
|
+
}
|
|
36
|
+
const version = root.attributes.version;
|
|
37
|
+
const operationsList = findChild(root, "OperationsMetadata")
|
|
38
|
+
? findChildren(findChildOrThrow(root, "OperationsMetadata"), "Operation")
|
|
39
|
+
: [];
|
|
40
|
+
const operations = new Map();
|
|
41
|
+
const outputFormatsByOp = new Map();
|
|
42
|
+
for (const op of operationsList) {
|
|
43
|
+
const name = op.attributes.name;
|
|
44
|
+
if (!name)
|
|
45
|
+
continue;
|
|
46
|
+
const methods = [];
|
|
47
|
+
let getUrl;
|
|
48
|
+
let postUrl;
|
|
49
|
+
for (const dcp of findChildren(op, "DCP")) {
|
|
50
|
+
const http = findChild(dcp, "HTTP");
|
|
51
|
+
if (!http)
|
|
52
|
+
continue;
|
|
53
|
+
for (const method of http.children) {
|
|
54
|
+
// The XML walker strips the `xlink:` prefix, so the href attribute
|
|
55
|
+
// is keyed as `href`.
|
|
56
|
+
if (method.local === "Get") {
|
|
57
|
+
methods.push("GET");
|
|
58
|
+
if (getUrl === undefined && method.attributes.href)
|
|
59
|
+
getUrl = method.attributes.href;
|
|
60
|
+
}
|
|
61
|
+
if (method.local === "Post") {
|
|
62
|
+
methods.push("POST");
|
|
63
|
+
if (postUrl === undefined && method.attributes.href)
|
|
64
|
+
postUrl = method.attributes.href;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const outputFormats = [];
|
|
69
|
+
for (const param of findChildren(op, "Parameter")) {
|
|
70
|
+
if (param.attributes.name?.toLowerCase() !== "outputformat")
|
|
71
|
+
continue;
|
|
72
|
+
for (const allowed of findChildren(param, "AllowedValues")) {
|
|
73
|
+
for (const value of findChildren(allowed, "Value")) {
|
|
74
|
+
const text = value.text.trim();
|
|
75
|
+
if (text)
|
|
76
|
+
outputFormats.push(text.toLowerCase());
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Older WFS servers advertise output formats as direct <Value> children
|
|
80
|
+
// of <Parameter> instead of nested in <AllowedValues>.
|
|
81
|
+
for (const value of findChildren(param, "Value")) {
|
|
82
|
+
const text = value.text.trim();
|
|
83
|
+
if (text)
|
|
84
|
+
outputFormats.push(text.toLowerCase());
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
operations.set(name, {
|
|
88
|
+
name,
|
|
89
|
+
methods: [...new Set(methods)],
|
|
90
|
+
outputFormats,
|
|
91
|
+
...(getUrl !== undefined ? { getUrl } : {}),
|
|
92
|
+
...(postUrl !== undefined ? { postUrl } : {}),
|
|
93
|
+
});
|
|
94
|
+
outputFormatsByOp.set(name, outputFormats);
|
|
95
|
+
}
|
|
96
|
+
const featureTypeList = findChild(root, "FeatureTypeList");
|
|
97
|
+
const featureTypes = [];
|
|
98
|
+
if (featureTypeList) {
|
|
99
|
+
for (const ft of findChildren(featureTypeList, "FeatureType")) {
|
|
100
|
+
const nameNode = findChild(ft, "Name");
|
|
101
|
+
const titleNode = findChild(ft, "Title");
|
|
102
|
+
const defaultCrsNode = findChild(ft, "DefaultCRS") ?? findChild(ft, "DefaultSRS");
|
|
103
|
+
const bboxNode = findChild(ft, "WGS84BoundingBox");
|
|
104
|
+
const lowerCorner = bboxNode ? findChild(bboxNode, "LowerCorner") : undefined;
|
|
105
|
+
const upperCorner = bboxNode ? findChild(bboxNode, "UpperCorner") : undefined;
|
|
106
|
+
const entry = {
|
|
107
|
+
name: nameNode?.text.trim() ?? "",
|
|
108
|
+
};
|
|
109
|
+
if (titleNode?.text)
|
|
110
|
+
entry.title = titleNode.text.trim();
|
|
111
|
+
if (defaultCrsNode?.text)
|
|
112
|
+
entry.defaultCrs = defaultCrsNode.text.trim();
|
|
113
|
+
if (lowerCorner && upperCorner) {
|
|
114
|
+
const [xmin, ymin] = lowerCorner.text.trim().split(/\s+/).map(Number);
|
|
115
|
+
const [xmax, ymax] = upperCorner.text.trim().split(/\s+/).map(Number);
|
|
116
|
+
if (Number.isFinite(xmin) && Number.isFinite(ymin) && Number.isFinite(xmax) && Number.isFinite(ymax)) {
|
|
117
|
+
entry.wgs84BoundingBox = { xmin, ymin, xmax, ymax };
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (entry.name)
|
|
121
|
+
featureTypes.push(entry);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const filterCapabilities = parseFilterCapabilities(findChild(root, "Filter_Capabilities"));
|
|
125
|
+
const storedQueryNames = parseStoredQueryNames(root);
|
|
126
|
+
const snapshot = {
|
|
127
|
+
operations,
|
|
128
|
+
outputFormatsByOp,
|
|
129
|
+
featureTypes,
|
|
130
|
+
filterCapabilities,
|
|
131
|
+
storedQueryNames,
|
|
132
|
+
};
|
|
133
|
+
if (version)
|
|
134
|
+
snapshot.version = version;
|
|
135
|
+
return snapshot;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Parse an `ows:ExceptionReport` document into structured fields. Used when
|
|
139
|
+
* the client sees a non-200 response carrying an XML body or when a
|
|
140
|
+
* GetCapabilities call returns an ExceptionReport.
|
|
141
|
+
*/
|
|
142
|
+
export function parseWfsExceptionReport(xml) {
|
|
143
|
+
const root = parseXml(xml);
|
|
144
|
+
if (root.local !== "ExceptionReport") {
|
|
145
|
+
throw new Error(`WFS ExceptionReport: expected <ExceptionReport>, got <${root.qname}>`);
|
|
146
|
+
}
|
|
147
|
+
return parseExceptionFromRoot(root);
|
|
148
|
+
}
|
|
149
|
+
function parseExceptionFromRoot(root) {
|
|
150
|
+
const exception = findChild(root, "Exception");
|
|
151
|
+
if (!exception) {
|
|
152
|
+
return { exceptionCode: "UnknownException", message: "ExceptionReport without <Exception>" };
|
|
153
|
+
}
|
|
154
|
+
const code = exception.attributes.exceptionCode ?? "UnknownException";
|
|
155
|
+
const locator = exception.attributes.locator;
|
|
156
|
+
const text = findChild(exception, "ExceptionText");
|
|
157
|
+
const message = text ? text.text.trim() : "";
|
|
158
|
+
const out = {
|
|
159
|
+
exceptionCode: code,
|
|
160
|
+
message: message || code,
|
|
161
|
+
};
|
|
162
|
+
if (locator)
|
|
163
|
+
out.locator = locator;
|
|
164
|
+
return out;
|
|
165
|
+
}
|
|
166
|
+
function parseFilterCapabilities(node) {
|
|
167
|
+
if (!node) {
|
|
168
|
+
return { spatial: [], scalar: [], temporal: [] };
|
|
169
|
+
}
|
|
170
|
+
const spatial = [];
|
|
171
|
+
const scalar = [];
|
|
172
|
+
const temporal = [];
|
|
173
|
+
const spatialOps = findChild(findChild(node, "Spatial_Capabilities"), "SpatialOperators");
|
|
174
|
+
if (spatialOps) {
|
|
175
|
+
for (const op of findChildren(spatialOps, "SpatialOperator")) {
|
|
176
|
+
if (op.attributes.name)
|
|
177
|
+
spatial.push(op.attributes.name);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const scalarOps = findChild(findChild(node, "Scalar_Capabilities"), "ComparisonOperators");
|
|
181
|
+
if (scalarOps) {
|
|
182
|
+
for (const op of findChildren(scalarOps, "ComparisonOperator")) {
|
|
183
|
+
const text = op.text.trim();
|
|
184
|
+
if (text)
|
|
185
|
+
scalar.push(text);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const temporalOps = findChild(findChild(node, "Temporal_Capabilities"), "TemporalOperators");
|
|
189
|
+
if (temporalOps) {
|
|
190
|
+
for (const op of findChildren(temporalOps, "TemporalOperator")) {
|
|
191
|
+
if (op.attributes.name)
|
|
192
|
+
temporal.push(op.attributes.name);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return { spatial, scalar, temporal };
|
|
196
|
+
}
|
|
197
|
+
function parseStoredQueryNames(root) {
|
|
198
|
+
// `wfs:WFS_Capabilities` itself does not carry stored queries; they come
|
|
199
|
+
// back through a separate `ListStoredQueries` operation. Some servers do
|
|
200
|
+
// include a sibling `<wfs:StoredQueries>` block as an extension; capture
|
|
201
|
+
// names if present, otherwise return empty.
|
|
202
|
+
const stored = findChild(root, "StoredQueries");
|
|
203
|
+
if (!stored)
|
|
204
|
+
return [];
|
|
205
|
+
const ids = [];
|
|
206
|
+
for (const sq of findChildren(stored, "StoredQuery")) {
|
|
207
|
+
if (sq.attributes.id)
|
|
208
|
+
ids.push(sq.attributes.id);
|
|
209
|
+
}
|
|
210
|
+
return ids;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Parse the `ListStoredQueriesResponse` body — a flat list of
|
|
214
|
+
* `<wfs:StoredQuery id="...">` elements. Returned by `HonuaWfs.storedQueries()`.
|
|
215
|
+
*/
|
|
216
|
+
export function parseListStoredQueriesResponse(xml) {
|
|
217
|
+
const root = parseXml(xml);
|
|
218
|
+
if (root.local !== "ListStoredQueriesResponse") {
|
|
219
|
+
if (root.local === "ExceptionReport") {
|
|
220
|
+
const report = parseExceptionFromRoot(root);
|
|
221
|
+
throw new HonuaWfsExceptionError(report.exceptionCode, report.message, report.locator);
|
|
222
|
+
}
|
|
223
|
+
throw new Error(`WFS ListStoredQueries: expected <ListStoredQueriesResponse>, got <${root.qname}>`);
|
|
224
|
+
}
|
|
225
|
+
const ids = [];
|
|
226
|
+
for (const sq of findChildren(root, "StoredQuery")) {
|
|
227
|
+
if (sq.attributes.id)
|
|
228
|
+
ids.push(sq.attributes.id);
|
|
229
|
+
}
|
|
230
|
+
return ids;
|
|
231
|
+
}
|
|
232
|
+
export function parseWfsTransactionResponse(xml) {
|
|
233
|
+
const root = parseXml(xml);
|
|
234
|
+
if (root.local !== "TransactionResponse") {
|
|
235
|
+
if (root.local === "ExceptionReport") {
|
|
236
|
+
const report = parseExceptionFromRoot(root);
|
|
237
|
+
throw new HonuaWfsExceptionError(report.exceptionCode, report.message, report.locator);
|
|
238
|
+
}
|
|
239
|
+
throw new Error(`WFS Transaction: expected <TransactionResponse>, got <${root.qname}>`);
|
|
240
|
+
}
|
|
241
|
+
const summary = findChild(root, "TransactionSummary");
|
|
242
|
+
const totalInserted = summary ? parseIntOrZero(findChild(summary, "totalInserted")?.text) : 0;
|
|
243
|
+
const totalUpdated = summary ? parseIntOrZero(findChild(summary, "totalUpdated")?.text) : 0;
|
|
244
|
+
const totalDeleted = summary ? parseIntOrZero(findChild(summary, "totalDeleted")?.text) : 0;
|
|
245
|
+
const insertResultsNode = findChild(root, "InsertResults");
|
|
246
|
+
const insertResults = [];
|
|
247
|
+
if (insertResultsNode) {
|
|
248
|
+
for (const feature of findChildren(insertResultsNode, "Feature")) {
|
|
249
|
+
const handle = feature.attributes.handle;
|
|
250
|
+
const ids = [];
|
|
251
|
+
for (const ref of findChildren(feature, "ResourceId")) {
|
|
252
|
+
if (ref.attributes.rid)
|
|
253
|
+
ids.push(ref.attributes.rid);
|
|
254
|
+
}
|
|
255
|
+
// Older WFS implementations used `<ogc:FeatureId fid="...">`.
|
|
256
|
+
for (const ref of findChildren(feature, "FeatureId")) {
|
|
257
|
+
if (ref.attributes.fid)
|
|
258
|
+
ids.push(ref.attributes.fid);
|
|
259
|
+
}
|
|
260
|
+
const entry = { ids };
|
|
261
|
+
if (handle)
|
|
262
|
+
entry.handle = handle;
|
|
263
|
+
insertResults.push(entry);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return { totalInserted, totalUpdated, totalDeleted, insertResults };
|
|
267
|
+
}
|
|
268
|
+
function parseIntOrZero(value) {
|
|
269
|
+
if (!value)
|
|
270
|
+
return 0;
|
|
271
|
+
const n = Number(value.trim());
|
|
272
|
+
return Number.isFinite(n) ? Math.trunc(n) : 0;
|
|
273
|
+
}
|
|
274
|
+
// ── XML walker ───────────────────────────────────────────────
|
|
275
|
+
/**
|
|
276
|
+
* Parse a small, well-formed XML document into an in-memory tree. The walker
|
|
277
|
+
* intentionally does not try to be a full XML 1.0 parser — it covers the
|
|
278
|
+
* subset that WFS / OWS ExceptionReport / ListStoredQueries / Transaction
|
|
279
|
+
* documents actually emit.
|
|
280
|
+
*
|
|
281
|
+
* Hard-fail on `<!DOCTYPE` / `<!ENTITY` / `<!--` declarations involving
|
|
282
|
+
* external IDs to defend against XXE.
|
|
283
|
+
*/
|
|
284
|
+
export function parseXml(xml) {
|
|
285
|
+
if (typeof xml !== "string" || xml.length === 0) {
|
|
286
|
+
throw new Error("WFS XML parser: empty document");
|
|
287
|
+
}
|
|
288
|
+
// XXE / external-entity defense: refuse documents that declare a DOCTYPE
|
|
289
|
+
// (which is the only way to introduce ENTITY declarations in XML 1.0).
|
|
290
|
+
// This is intentionally strict — Honua's WFS surfaces never emit a
|
|
291
|
+
// DOCTYPE, and doing so on third-party servers does not unlock anything
|
|
292
|
+
// we want to read here.
|
|
293
|
+
const lower = xml.toLowerCase();
|
|
294
|
+
if (lower.includes("<!doctype") || lower.includes("<!entity")) {
|
|
295
|
+
throw new Error("WFS XML parser: DOCTYPE / ENTITY declarations are rejected");
|
|
296
|
+
}
|
|
297
|
+
const stripped = stripPrologAndComments(xml);
|
|
298
|
+
const len = stripped.length;
|
|
299
|
+
let i = 0;
|
|
300
|
+
const stack = [];
|
|
301
|
+
let root;
|
|
302
|
+
while (i < len) {
|
|
303
|
+
if (stripped[i] === "<") {
|
|
304
|
+
if (stripped.startsWith("<?", i)) {
|
|
305
|
+
const end = stripped.indexOf("?>", i + 2);
|
|
306
|
+
if (end === -1)
|
|
307
|
+
throw new Error("WFS XML parser: unterminated processing instruction");
|
|
308
|
+
i = end + 2;
|
|
309
|
+
continue;
|
|
310
|
+
}
|
|
311
|
+
if (stripped.startsWith("<!--", i)) {
|
|
312
|
+
const end = stripped.indexOf("-->", i + 4);
|
|
313
|
+
if (end === -1)
|
|
314
|
+
throw new Error("WFS XML parser: unterminated comment");
|
|
315
|
+
i = end + 3;
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
318
|
+
if (stripped.startsWith("<![CDATA[", i)) {
|
|
319
|
+
const end = stripped.indexOf("]]>", i + 9);
|
|
320
|
+
if (end === -1)
|
|
321
|
+
throw new Error("WFS XML parser: unterminated CDATA");
|
|
322
|
+
const text = stripped.slice(i + 9, end);
|
|
323
|
+
const top = stack[stack.length - 1];
|
|
324
|
+
if (top)
|
|
325
|
+
top.text += text;
|
|
326
|
+
i = end + 3;
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
// Closing tag.
|
|
330
|
+
if (stripped[i + 1] === "/") {
|
|
331
|
+
const end = stripped.indexOf(">", i + 2);
|
|
332
|
+
if (end === -1)
|
|
333
|
+
throw new Error("WFS XML parser: unterminated closing tag");
|
|
334
|
+
const closing = stripped.slice(i + 2, end).trim();
|
|
335
|
+
const top = stack[stack.length - 1];
|
|
336
|
+
if (!top)
|
|
337
|
+
throw new Error(`WFS XML parser: stray closing tag </${closing}>`);
|
|
338
|
+
if (top.qname !== closing) {
|
|
339
|
+
throw new Error(`WFS XML parser: mismatched closing tag </${closing}> (expected </${top.qname}>)`);
|
|
340
|
+
}
|
|
341
|
+
stack.pop();
|
|
342
|
+
i = end + 1;
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
// Opening (or self-closing) tag.
|
|
346
|
+
const end = findTagEnd(stripped, i);
|
|
347
|
+
if (end === -1)
|
|
348
|
+
throw new Error("WFS XML parser: unterminated opening tag");
|
|
349
|
+
const inner = stripped.slice(i + 1, end);
|
|
350
|
+
const selfClosing = inner.endsWith("/");
|
|
351
|
+
const tagBody = selfClosing ? inner.slice(0, -1).trim() : inner.trim();
|
|
352
|
+
const { name, attributes } = parseTagBody(tagBody);
|
|
353
|
+
const local = stripPrefix(name);
|
|
354
|
+
const node = {
|
|
355
|
+
local,
|
|
356
|
+
qname: name,
|
|
357
|
+
attributes,
|
|
358
|
+
children: [],
|
|
359
|
+
text: "",
|
|
360
|
+
};
|
|
361
|
+
const top = stack[stack.length - 1];
|
|
362
|
+
if (top)
|
|
363
|
+
top.children.push(node);
|
|
364
|
+
else if (root) {
|
|
365
|
+
throw new Error("WFS XML parser: multiple root elements");
|
|
366
|
+
}
|
|
367
|
+
else {
|
|
368
|
+
root = node;
|
|
369
|
+
}
|
|
370
|
+
if (!selfClosing)
|
|
371
|
+
stack.push(node);
|
|
372
|
+
i = end + 1;
|
|
373
|
+
continue;
|
|
374
|
+
}
|
|
375
|
+
// Text node — accumulate against the current top, decoding entities.
|
|
376
|
+
const next = stripped.indexOf("<", i);
|
|
377
|
+
const text = stripped.slice(i, next === -1 ? len : next);
|
|
378
|
+
const top = stack[stack.length - 1];
|
|
379
|
+
if (top)
|
|
380
|
+
top.text += decodeXmlEntities(text);
|
|
381
|
+
i = next === -1 ? len : next;
|
|
382
|
+
}
|
|
383
|
+
if (stack.length > 0) {
|
|
384
|
+
throw new Error(`WFS XML parser: unclosed element <${stack[stack.length - 1].qname}>`);
|
|
385
|
+
}
|
|
386
|
+
if (!root) {
|
|
387
|
+
throw new Error("WFS XML parser: no root element");
|
|
388
|
+
}
|
|
389
|
+
return root;
|
|
390
|
+
}
|
|
391
|
+
function stripPrologAndComments(xml) {
|
|
392
|
+
// Trim BOM and leading whitespace.
|
|
393
|
+
let out = xml;
|
|
394
|
+
if (out.charCodeAt(0) === 0xfeff)
|
|
395
|
+
out = out.slice(1);
|
|
396
|
+
return out.trim();
|
|
397
|
+
}
|
|
398
|
+
function findTagEnd(xml, start) {
|
|
399
|
+
// The tag body may contain attributes whose values are double- or single-quoted
|
|
400
|
+
// and could legitimately contain `>` characters. Track quote state.
|
|
401
|
+
let i = start + 1;
|
|
402
|
+
let quote;
|
|
403
|
+
while (i < xml.length) {
|
|
404
|
+
const ch = xml[i];
|
|
405
|
+
if (quote) {
|
|
406
|
+
if (ch === quote)
|
|
407
|
+
quote = undefined;
|
|
408
|
+
}
|
|
409
|
+
else if (ch === '"' || ch === "'") {
|
|
410
|
+
quote = ch;
|
|
411
|
+
}
|
|
412
|
+
else if (ch === ">") {
|
|
413
|
+
return i;
|
|
414
|
+
}
|
|
415
|
+
i += 1;
|
|
416
|
+
}
|
|
417
|
+
return -1;
|
|
418
|
+
}
|
|
419
|
+
function parseTagBody(body) {
|
|
420
|
+
const trimmed = body.trim();
|
|
421
|
+
if (!trimmed)
|
|
422
|
+
throw new Error("WFS XML parser: empty tag");
|
|
423
|
+
// Tag name runs to the first whitespace; attributes follow.
|
|
424
|
+
let i = 0;
|
|
425
|
+
while (i < trimmed.length && !/\s/.test(trimmed[i]))
|
|
426
|
+
i += 1;
|
|
427
|
+
const name = trimmed.slice(0, i);
|
|
428
|
+
if (!name)
|
|
429
|
+
throw new Error("WFS XML parser: missing tag name");
|
|
430
|
+
const attributes = {};
|
|
431
|
+
let j = i;
|
|
432
|
+
while (j < trimmed.length) {
|
|
433
|
+
while (j < trimmed.length && /\s/.test(trimmed[j]))
|
|
434
|
+
j += 1;
|
|
435
|
+
if (j >= trimmed.length)
|
|
436
|
+
break;
|
|
437
|
+
const eq = trimmed.indexOf("=", j);
|
|
438
|
+
if (eq === -1)
|
|
439
|
+
break;
|
|
440
|
+
const attrName = trimmed.slice(j, eq).trim();
|
|
441
|
+
let k = eq + 1;
|
|
442
|
+
while (k < trimmed.length && /\s/.test(trimmed[k]))
|
|
443
|
+
k += 1;
|
|
444
|
+
const quote = trimmed[k];
|
|
445
|
+
if (quote !== '"' && quote !== "'") {
|
|
446
|
+
throw new Error(`WFS XML parser: attribute "${attrName}" must be quoted`);
|
|
447
|
+
}
|
|
448
|
+
const close = trimmed.indexOf(quote, k + 1);
|
|
449
|
+
if (close === -1)
|
|
450
|
+
throw new Error(`WFS XML parser: unterminated attribute value for "${attrName}"`);
|
|
451
|
+
const rawValue = trimmed.slice(k + 1, close);
|
|
452
|
+
attributes[stripPrefix(attrName)] = decodeXmlEntities(rawValue);
|
|
453
|
+
j = close + 1;
|
|
454
|
+
}
|
|
455
|
+
return { name, attributes };
|
|
456
|
+
}
|
|
457
|
+
function stripPrefix(name) {
|
|
458
|
+
const idx = name.indexOf(":");
|
|
459
|
+
return idx === -1 ? name : name.slice(idx + 1);
|
|
460
|
+
}
|
|
461
|
+
function decodeXmlEntities(text) {
|
|
462
|
+
if (!text.includes("&"))
|
|
463
|
+
return text;
|
|
464
|
+
return text
|
|
465
|
+
.replaceAll("<", "<")
|
|
466
|
+
.replaceAll(">", ">")
|
|
467
|
+
.replaceAll(""", '"')
|
|
468
|
+
.replaceAll("'", "'")
|
|
469
|
+
.replaceAll("&", "&");
|
|
470
|
+
}
|
|
471
|
+
function findChild(node, local) {
|
|
472
|
+
if (!node)
|
|
473
|
+
return undefined;
|
|
474
|
+
for (const child of node.children) {
|
|
475
|
+
if (child.local === local)
|
|
476
|
+
return child;
|
|
477
|
+
}
|
|
478
|
+
return undefined;
|
|
479
|
+
}
|
|
480
|
+
function findChildOrThrow(node, local) {
|
|
481
|
+
const found = findChild(node, local);
|
|
482
|
+
if (!found)
|
|
483
|
+
throw new Error(`WFS XML parser: missing child <${local}> on <${node.qname}>`);
|
|
484
|
+
return found;
|
|
485
|
+
}
|
|
486
|
+
function findChildren(node, local) {
|
|
487
|
+
if (!node)
|
|
488
|
+
return [];
|
|
489
|
+
return node.children.filter((c) => c.local === local);
|
|
490
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FES 2.0 Filter Encoding emitter for the WFS adapter. Two responsibilities:
|
|
3
|
+
*
|
|
4
|
+
* - Compile the canonical `Query.where` SQL-92-ish expression into a small
|
|
5
|
+
* FES AST. The supported subset is documented in `docs/wfs.md` —
|
|
6
|
+
* comparison operators, `IN`, `BETWEEN`, `LIKE`, `IS NULL`, boolean
|
|
7
|
+
* combinators, parenthesization, and string / number literals. Anything
|
|
8
|
+
* richer (subqueries, function calls, vendor extensions) yields the
|
|
9
|
+
* sentinel `"unsupported"` so the caller throws
|
|
10
|
+
* `HonuaCapabilityNotSupportedError("query")` rather than ship a
|
|
11
|
+
* silent partial filter.
|
|
12
|
+
*
|
|
13
|
+
* - Translate `Query.spatialFilter` into a spatial FES predicate. Only the
|
|
14
|
+
* simple geometries the canonical surface emits are supported — envelope,
|
|
15
|
+
* point, polygon, polyline. Curves and surfaces are out of scope; callers
|
|
16
|
+
* that need them reach the wire through `Source.protocol("wfs")`.
|
|
17
|
+
*
|
|
18
|
+
* The emitter never reaches `fetch`; it returns plain strings the adapter
|
|
19
|
+
* splices into the URL (KVP `filter=`) or the POST body (`<fes:Filter>`).
|
|
20
|
+
*
|
|
21
|
+
* @module
|
|
22
|
+
*/
|
|
23
|
+
import type { SpatialFilter } from "./spatial-filter.js";
|
|
24
|
+
/**
|
|
25
|
+
* Sentinel used by the `where` compiler when the input contains a construct
|
|
26
|
+
* the FES emitter does not know how to translate. Callers should treat this
|
|
27
|
+
* as "fail the query" rather than "emit a partial filter".
|
|
28
|
+
*/
|
|
29
|
+
export declare const UNSUPPORTED_FES: "unsupported";
|
|
30
|
+
export type FesCompileResult = FesNode | typeof UNSUPPORTED_FES;
|
|
31
|
+
export type FesNode = {
|
|
32
|
+
kind: "and";
|
|
33
|
+
operands: readonly FesNode[];
|
|
34
|
+
} | {
|
|
35
|
+
kind: "or";
|
|
36
|
+
operands: readonly FesNode[];
|
|
37
|
+
} | {
|
|
38
|
+
kind: "not";
|
|
39
|
+
operand: FesNode;
|
|
40
|
+
} | {
|
|
41
|
+
kind: "compare";
|
|
42
|
+
op: FesCompareOp;
|
|
43
|
+
property: string;
|
|
44
|
+
value: FesLiteral;
|
|
45
|
+
} | {
|
|
46
|
+
kind: "between";
|
|
47
|
+
property: string;
|
|
48
|
+
lower: FesLiteral;
|
|
49
|
+
upper: FesLiteral;
|
|
50
|
+
} | {
|
|
51
|
+
kind: "in";
|
|
52
|
+
property: string;
|
|
53
|
+
values: readonly FesLiteral[];
|
|
54
|
+
} | {
|
|
55
|
+
kind: "like";
|
|
56
|
+
property: string;
|
|
57
|
+
pattern: string;
|
|
58
|
+
} | {
|
|
59
|
+
kind: "isNull";
|
|
60
|
+
property: string;
|
|
61
|
+
} | {
|
|
62
|
+
kind: "spatial";
|
|
63
|
+
op: FesSpatialOp;
|
|
64
|
+
property: string;
|
|
65
|
+
gml: string;
|
|
66
|
+
} | {
|
|
67
|
+
kind: "bbox";
|
|
68
|
+
property: string;
|
|
69
|
+
envelope: {
|
|
70
|
+
xmin: number;
|
|
71
|
+
ymin: number;
|
|
72
|
+
xmax: number;
|
|
73
|
+
ymax: number;
|
|
74
|
+
srsName?: string;
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
export type FesCompareOp = "=" | "<>" | "<" | "<=" | ">" | ">=";
|
|
78
|
+
export type FesSpatialOp = "Intersects" | "Within" | "Contains" | "Crosses" | "Disjoint" | "Touches" | "Overlaps" | "Equals";
|
|
79
|
+
export type FesLiteral = {
|
|
80
|
+
kind: "string";
|
|
81
|
+
value: string;
|
|
82
|
+
} | {
|
|
83
|
+
kind: "number";
|
|
84
|
+
value: number;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Compile a `Query.where` SQL-92 string into FES AST. Returns
|
|
88
|
+
* `UNSUPPORTED_FES` for inputs the emitter cannot translate; the adapter
|
|
89
|
+
* promotes this to `HonuaCapabilityNotSupportedError("query")`.
|
|
90
|
+
*/
|
|
91
|
+
export declare function compileWhere(input: string | undefined): FesCompileResult;
|
|
92
|
+
/**
|
|
93
|
+
* Compile the canonical `SpatialFilter` (Esri-flavored) into the FES spatial
|
|
94
|
+
* leaf the adapter splices into the request. Default geometry property
|
|
95
|
+
* name is `the_geom`; callers may override (some servers use `geometry`,
|
|
96
|
+
* `shape`, etc.).
|
|
97
|
+
*/
|
|
98
|
+
export declare function compileSpatialFilter(filter: SpatialFilter, options: {
|
|
99
|
+
geometryProperty: string;
|
|
100
|
+
srsName?: string;
|
|
101
|
+
}): FesCompileResult;
|
|
102
|
+
/**
|
|
103
|
+
* Serialize a list of FES nodes into a single `<fes:Filter>` element. Used
|
|
104
|
+
* for both the POST GetFeature body and (URL-encoded) the KVP `filter=`
|
|
105
|
+
* query parameter.
|
|
106
|
+
*
|
|
107
|
+
* The FES namespace prefix is always `fes` and is bound on the root
|
|
108
|
+
* `<fes:Filter>` element so the result is self-contained.
|
|
109
|
+
*/
|
|
110
|
+
export declare function serializeFes(nodes: readonly FesNode[], options?: {
|
|
111
|
+
typeName?: string;
|
|
112
|
+
}): string;
|
|
113
|
+
/**
|
|
114
|
+
* Convert a canonical `CanonicalFeature.geometry` (GeoJSON) into a GML 3.2
|
|
115
|
+
* fragment for `<wfs:Insert>` / `<wfs:Update>` payloads.
|
|
116
|
+
*/
|
|
117
|
+
export declare function geoJsonGeometryToGml(geometry: unknown, srsName: string | undefined): string | undefined;
|
|
118
|
+
//# sourceMappingURL=wfs-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wfs-filter.d.ts","sourceRoot":"","sources":["../../../src/core/wfs-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAG,aAAsB,CAAC;AAEtD,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,OAAO,eAAe,CAAC;AAEhE,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACpE;IACE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxF,CAAC;AAEN,MAAM,MAAM,YAAY,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;AAChE,MAAM,MAAM,YAAY,GACpB,YAAY,GACZ,QAAQ,GACR,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,GACT,UAAU,GACV,QAAQ,CAAC;AACb,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/F;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAcxE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD,gBAAgB,CAoClB;AA4ED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAS/F;AA2ID;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAqCvG"}
|