@honua/app-platform 0.1.2-beta.0 → 0.1.7-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/app/index.d.ts.map +1 -1
- package/app/index.js +4 -0
- package/collaboration/client.d.ts.map +1 -1
- package/connect-url-safety.d.ts +53 -0
- package/connect-url-safety.js +189 -0
- 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 +88 -19
- package/contract/types.d.ts.map +1 -1
- package/contract/types.js +4 -0
- package/contract/widget-source.d.ts.map +1 -1
- package/controls/basemap-switcher.d.ts +19 -11
- package/controls/basemap-switcher.d.ts.map +1 -1
- package/controls/basemap-switcher.js +58 -25
- package/controls/catalog.d.ts +105 -0
- package/controls/catalog.d.ts.map +1 -0
- package/controls/catalog.js +341 -0
- package/controls/element-utils.d.ts +9 -0
- package/controls/element-utils.d.ts.map +1 -1
- package/controls/element-utils.js +17 -0
- package/controls/index.d.ts +29 -8
- package/controls/index.d.ts.map +1 -1
- package/controls/index.js +26 -8
- package/controls/layer-list.d.ts +13 -5
- package/controls/layer-list.d.ts.map +1 -1
- package/controls/layer-list.js +72 -15
- package/controls/legend.d.ts +32 -5
- package/controls/legend.d.ts.map +1 -1
- package/controls/legend.js +95 -25
- package/controls/qualification.d.ts +152 -0
- package/controls/qualification.d.ts.map +1 -0
- package/controls/qualification.js +1265 -0
- package/controls/registry.d.ts +104 -0
- package/controls/registry.d.ts.map +1 -0
- package/controls/registry.js +150 -0
- package/controls/swipe-control.d.ts +6 -1
- package/controls/swipe-control.d.ts.map +1 -1
- package/controls/swipe-control.js +82 -20
- package/core/client.d.ts +51 -21
- package/core/client.d.ts.map +1 -1
- package/core/client.js +234 -54
- package/core/error-classifications.d.ts +23 -0
- package/core/error-classifications.d.ts.map +1 -1
- package/core/error-classifications.js +23 -0
- package/core/error-code-registry.d.ts +24 -1
- package/core/error-code-registry.d.ts.map +1 -1
- package/core/error-code-registry.js +23 -0
- package/core/error-envelope.js +2 -0
- package/core/errors.d.ts +2 -2
- package/core/errors.d.ts.map +1 -1
- package/core/errors.js +1 -1
- package/core/geoparquet-sql.d.ts +69 -5
- package/core/geoparquet-sql.d.ts.map +1 -1
- package/core/geoparquet-sql.js +327 -10
- 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 +32 -0
- package/core/stac.d.ts.map +1 -1
- package/core/stac.js +158 -23
- package/core/surfaces.d.ts.map +1 -1
- package/core/surfaces.js +273 -68
- package/core/types.d.ts +138 -11
- 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/interactions/declarative-contract.d.ts +149 -0
- package/interactions/declarative-contract.d.ts.map +1 -0
- package/interactions/declarative-contract.js +293 -0
- package/interactions/declarative.d.ts +198 -0
- package/interactions/declarative.d.ts.map +1 -0
- package/interactions/declarative.js +470 -0
- package/interactions/feature-state.d.ts +7 -0
- package/interactions/feature-state.d.ts.map +1 -1
- package/interactions/feature-state.js +10 -2
- 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/maplibre-target.js +1 -1
- 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/operator/workspace/workspace.d.ts.map +1 -1
- package/operator/workspace/workspace.js +0 -2
- 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/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/honua-server.d.ts +8 -0
- package/realtime/honua-server.d.ts.map +1 -1
- package/realtime/honua-server.js +123 -14
- package/realtime/index.d.ts +4 -0
- package/realtime/index.d.ts.map +1 -1
- package/realtime/index.js +2 -0
- package/realtime/reconciliation.d.ts +245 -0
- package/realtime/reconciliation.d.ts.map +1 -0
- package/realtime/reconciliation.js +377 -0
- package/realtime/resumable-transport.d.ts.map +1 -1
- package/realtime/sse.d.ts.map +1 -1
- package/realtime/sse.js +7 -1
- package/realtime/websocket.d.ts.map +1 -1
- package/realtime/wire.d.ts +2 -1
- package/realtime/wire.d.ts.map +1 -1
- package/realtime/wire.js +24 -8
- package/replica-sync/errors.d.ts +19 -1
- package/replica-sync/errors.d.ts.map +1 -1
- package/replica-sync/errors.js +16 -0
- package/replica-sync/geoservices.d.ts +260 -0
- package/replica-sync/geoservices.d.ts.map +1 -0
- package/replica-sync/geoservices.js +1093 -0
- package/replica-sync/index.d.ts +5 -1
- package/replica-sync/index.d.ts.map +1 -1
- package/replica-sync/index.js +3 -1
- package/replica-sync/transport-conformance.d.ts +58 -0
- package/replica-sync/transport-conformance.d.ts.map +1 -0
- package/replica-sync/transport-conformance.js +265 -0
- package/replica-sync/types.d.ts +22 -0
- package/replica-sync/types.d.ts.map +1 -1
- 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/runtime/style-compose.d.ts.map +1 -1
- package/runtime/style-compose.js +78 -9
- package/scene-workspace/analysis-widgets.d.ts +4 -2
- package/scene-workspace/analysis-widgets.d.ts.map +1 -1
- package/scene-workspace/analysis-widgets.js +4 -2
- package/scene-workspace/camera-correspondence.d.ts +151 -0
- package/scene-workspace/camera-correspondence.d.ts.map +1 -0
- package/scene-workspace/camera-correspondence.js +220 -0
- package/scene-workspace/cesium-adapter.d.ts +230 -29
- package/scene-workspace/cesium-adapter.d.ts.map +1 -1
- package/scene-workspace/cesium-adapter.js +741 -56
- package/scene-workspace/cesium-mount.d.ts +205 -0
- package/scene-workspace/cesium-mount.d.ts.map +1 -0
- package/scene-workspace/cesium-mount.js +392 -0
- package/scene-workspace/cesium-scene-owner.d.ts +160 -0
- package/scene-workspace/cesium-scene-owner.d.ts.map +1 -0
- package/scene-workspace/cesium-scene-owner.js +205 -0
- package/scene-workspace/cesium-state-sync.d.ts +101 -0
- package/scene-workspace/cesium-state-sync.d.ts.map +1 -0
- package/scene-workspace/cesium-state-sync.js +432 -0
- package/scene-workspace/cesium-time.d.ts +346 -0
- package/scene-workspace/cesium-time.d.ts.map +1 -0
- package/scene-workspace/cesium-time.js +403 -0
- package/scene-workspace/index.d.ts +42 -10
- package/scene-workspace/index.d.ts.map +1 -1
- package/scene-workspace/index.js +32 -7
- package/scene-workspace/maplibre-state-sync.d.ts +112 -0
- package/scene-workspace/maplibre-state-sync.d.ts.map +1 -0
- package/scene-workspace/maplibre-state-sync.js +400 -0
- package/scene-workspace/primitives.d.ts +237 -3
- package/scene-workspace/primitives.d.ts.map +1 -1
- package/scene-workspace/primitives.js +1087 -17
- package/scene-workspace/scene-discovery.d.ts +5 -2
- package/scene-workspace/scene-discovery.d.ts.map +1 -1
- package/scene-workspace/scene-discovery.js +5 -2
- package/scene-workspace/scene-view.d.ts +5 -2
- package/scene-workspace/scene-view.d.ts.map +1 -1
- package/scene-workspace/scene-view.js +5 -2
- package/scene-workspace/source-to-cesium.d.ts +141 -8
- package/scene-workspace/source-to-cesium.d.ts.map +1 -1
- package/scene-workspace/source-to-cesium.js +497 -72
- package/scene-workspace/state-sync-port-kit.d.ts +156 -0
- package/scene-workspace/state-sync-port-kit.d.ts.map +1 -0
- package/scene-workspace/state-sync-port-kit.js +319 -0
- package/scene-workspace/state-sync.d.ts +34 -1
- package/scene-workspace/state-sync.d.ts.map +1 -1
- package/scene-workspace/state-sync.js +48 -0
- package/scene-workspace/types.d.ts +8 -0
- package/scene-workspace/types.d.ts.map +1 -1
- package/scene-workspace/types.js +2 -0
- package/scene-workspace/workspace.d.ts +12 -1
- package/scene-workspace/workspace.d.ts.map +1 -1
- package/scene-workspace/workspace.js +13 -0
- 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/web-components/controller.d.ts.map +1 -1
- package/web-components/csp-styles.d.ts +6 -0
- package/web-components/csp-styles.d.ts.map +1 -0
- package/web-components/csp-styles.js +53 -0
- package/web-components/elements.d.ts +158 -2
- package/web-components/elements.d.ts.map +1 -1
- package/web-components/elements.js +1302 -215
- package/web-components/export-redaction.d.ts +252 -0
- package/web-components/export-redaction.d.ts.map +1 -0
- package/web-components/export-redaction.js +588 -0
- package/web-components/export.d.ts +417 -0
- package/web-components/export.d.ts.map +1 -0
- package/web-components/export.js +719 -0
- package/web-components/feature-editor-model.d.ts +265 -0
- package/web-components/feature-editor-model.d.ts.map +1 -0
- package/web-components/feature-editor-model.js +438 -0
- package/web-components/feature-editor-sketch.d.ts +125 -0
- package/web-components/feature-editor-sketch.d.ts.map +1 -0
- package/web-components/feature-editor-sketch.js +194 -0
- package/web-components/feature-editor-workflow.d.ts +286 -0
- package/web-components/feature-editor-workflow.d.ts.map +1 -0
- package/web-components/feature-editor-workflow.js +889 -0
- package/web-components/feature-editor.d.ts +83 -0
- package/web-components/feature-editor.d.ts.map +1 -0
- package/web-components/feature-editor.js +829 -0
- package/web-components/feature-table-engine.d.ts +465 -0
- package/web-components/feature-table-engine.d.ts.map +1 -0
- package/web-components/feature-table-engine.js +1360 -0
- package/web-components/feature-table-view.d.ts +95 -0
- package/web-components/feature-table-view.d.ts.map +1 -0
- package/web-components/feature-table-view.js +343 -0
- package/web-components/index.d.ts +34 -3
- package/web-components/index.d.ts.map +1 -1
- package/web-components/index.js +35 -2
- package/web-components/maplibre-renderer.d.ts.map +1 -1
- package/web-components/maplibre-renderer.js +13 -4
- package/web-components/measurement.d.ts +3 -1
- package/web-components/measurement.d.ts.map +1 -1
- package/web-components/measurement.js +62 -18
- package/web-components/time-slider.d.ts +122 -0
- package/web-components/time-slider.d.ts.map +1 -0
- package/web-components/time-slider.js +740 -0
- package/web-components/types.d.ts +310 -0
- package/web-components/types.d.ts.map +1 -1
- package/webmap/convert-label.js +0 -1
- package/webmap/convert-symbol.d.ts.map +1 -1
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
* equivalent minimal
|
|
10
10
|
* seam for a `Source.protocol(...)` escape-hatch adapter: discovery, the
|
|
11
11
|
* capability set it advertises for a descriptor, diagnostics, and
|
|
12
|
-
* disposal.
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
12
|
+
* disposal. Query-capable modules implement the atomic
|
|
13
|
+
* {@link QueryCapableProtocolModule} extension, whose deterministic `compile`
|
|
14
|
+
* and explicitly-authorized `execute` hooks are always present together.
|
|
15
|
+
* Tiles-only modules such as PMTiles implement only this base interface.
|
|
16
16
|
*
|
|
17
17
|
* This module has no dependency on `src/plugin` or any global registry: a
|
|
18
18
|
* `ProtocolModule` is a plain value object. SDK-internal `Source`
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
*
|
|
25
25
|
* @module
|
|
26
26
|
*/
|
|
27
|
-
import type { Capabilities, SourceDescriptor } from "./types.js";
|
|
27
|
+
import type { Capabilities, Protocol, Result, SourceDescriptor } from "./types.js";
|
|
28
28
|
/** Runtime environments a protocol module can execute in. Mirrors `RendererEnvironment`. */
|
|
29
29
|
export type ProtocolModuleEnvironment = "browser" | "node" | "worker";
|
|
30
30
|
/** Stable, protocol-neutral diagnostic exposed by one discovered module handle. */
|
|
@@ -35,6 +35,49 @@ export interface ProtocolModuleDiagnostic {
|
|
|
35
35
|
}
|
|
36
36
|
export interface ProtocolModuleDiscoverOptions {
|
|
37
37
|
readonly signal?: AbortSignal;
|
|
38
|
+
/**
|
|
39
|
+
* Stable structural authorization-scope identifiers bound to this handle.
|
|
40
|
+
* Tokens and credential values are prohibited; implementations retain only
|
|
41
|
+
* a secret-free derived identity.
|
|
42
|
+
*/
|
|
43
|
+
readonly authorizationScope?: readonly string[];
|
|
44
|
+
}
|
|
45
|
+
/** Canonical query-family operations a protocol module may compile and execute. */
|
|
46
|
+
export type ProtocolModuleQueryOperation = "query" | "queryAll" | "queryAggregate";
|
|
47
|
+
/**
|
|
48
|
+
* Type binding for one module's query seam.
|
|
49
|
+
*
|
|
50
|
+
* The compiler source identity is deliberately separate from
|
|
51
|
+
* {@link SourceDescriptor}: deterministic compilers receive a
|
|
52
|
+
* credential-free, serializable identity rather than a runtime descriptor
|
|
53
|
+
* or client. The execution query may carry runtime-only values such as an
|
|
54
|
+
* `AbortSignal`; those values never enter the compiled artifact.
|
|
55
|
+
*/
|
|
56
|
+
export interface ProtocolModuleQueryBinding {
|
|
57
|
+
readonly source: unknown;
|
|
58
|
+
readonly compileQuery: unknown;
|
|
59
|
+
readonly compiled: unknown;
|
|
60
|
+
readonly executeQuery: unknown;
|
|
61
|
+
}
|
|
62
|
+
/** Pure input to a protocol module's deterministic compiler. */
|
|
63
|
+
export interface ProtocolModuleQueryCompileInput<TSource = unknown, TQuery = unknown> {
|
|
64
|
+
readonly source: TSource;
|
|
65
|
+
readonly query: TQuery;
|
|
66
|
+
readonly operation: ProtocolModuleQueryOperation;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Runtime input to a protocol module executor.
|
|
70
|
+
*
|
|
71
|
+
* `compiled` is the inspectable, credential-free artifact. Runtime authority
|
|
72
|
+
* stays on the discovered handle and on dependencies explicitly injected into
|
|
73
|
+
* the module factory. `signal` is execution state and is never part of the
|
|
74
|
+
* artifact's deterministic identity.
|
|
75
|
+
*/
|
|
76
|
+
export interface ProtocolModuleQueryExecuteInput<TCompiled = unknown, TQuery = unknown> {
|
|
77
|
+
readonly compiled: TCompiled;
|
|
78
|
+
readonly query: TQuery;
|
|
79
|
+
readonly operation: ProtocolModuleQueryOperation;
|
|
80
|
+
readonly signal?: AbortSignal;
|
|
38
81
|
}
|
|
39
82
|
/**
|
|
40
83
|
* One discovered, disposable protocol-module handle bound to a source
|
|
@@ -42,9 +85,14 @@ export interface ProtocolModuleDiscoverOptions {
|
|
|
42
85
|
* returned by `Source.protocol(name)` (for example a `HonuaPmtilesArchive`),
|
|
43
86
|
* so migrating a built-in onto this seam never changes what callers observe
|
|
44
87
|
* through the existing escape hatch.
|
|
88
|
+
*
|
|
89
|
+
* `TProtocol` mirrors the descriptor kind a `ProtocolModule<TKind>` accepts
|
|
90
|
+
* (built-in `Protocol` by default, or `TKind | Protocol` when parameterized
|
|
91
|
+
* by `discover()` below) so a handle for a custom-kind descriptor carries
|
|
92
|
+
* that kind through rather than widening to `string`.
|
|
45
93
|
*/
|
|
46
|
-
export interface ProtocolModuleHandle<TAdapter = unknown> {
|
|
47
|
-
readonly descriptor: SourceDescriptor
|
|
94
|
+
export interface ProtocolModuleHandle<TAdapter = unknown, TProtocol extends string = Protocol> {
|
|
95
|
+
readonly descriptor: SourceDescriptor<TProtocol>;
|
|
48
96
|
readonly capabilities: Capabilities;
|
|
49
97
|
readonly adapter: TAdapter;
|
|
50
98
|
readonly diagnostics: readonly ProtocolModuleDiagnostic[];
|
|
@@ -58,13 +106,40 @@ export interface ProtocolModuleHandle<TAdapter = unknown> {
|
|
|
58
106
|
* (as PMTiles does — the archive itself is opened lazily on first
|
|
59
107
|
* `describe()`), or asynchronously for a module whose discovery is
|
|
60
108
|
* inherently a network round trip.
|
|
109
|
+
*
|
|
110
|
+
* `capabilities()`/`discover()` accept `SourceDescriptor<TKind | Protocol>`
|
|
111
|
+
* — the built-in `Protocol` union plus this module's own `TKind` — so a
|
|
112
|
+
* third-party module with a custom protocol id (e.g. the cloud-tiles fixture's
|
|
113
|
+
* `"cloud-tiles"`, `test/fixtures/plugins/cloud-tiles/protocol-module.ts`)
|
|
114
|
+
* can pass a descriptor typed to its own kind without an `as` cast, matching
|
|
115
|
+
* how `pmtilesProtocolModule()` (`src/contract/pmtiles.ts`) already accepts
|
|
116
|
+
* `SourceDescriptor<"pmtiles" | Protocol>`, i.e. `SourceDescriptor` (issue
|
|
117
|
+
* #671).
|
|
61
118
|
*/
|
|
62
119
|
export interface ProtocolModule<TKind extends string = string, TAdapter = unknown> {
|
|
63
120
|
readonly kind: TKind;
|
|
64
121
|
readonly environments: readonly ProtocolModuleEnvironment[];
|
|
65
122
|
readonly peer?: unknown;
|
|
66
123
|
/** Pure and synchronous: never performs I/O. */
|
|
67
|
-
capabilities(descriptor: SourceDescriptor): Capabilities;
|
|
68
|
-
discover(descriptor: SourceDescriptor
|
|
124
|
+
capabilities(descriptor: SourceDescriptor<TKind | Protocol>): Capabilities;
|
|
125
|
+
discover(descriptor: SourceDescriptor<TKind | Protocol>, options?: ProtocolModuleDiscoverOptions): ProtocolModuleHandle<TAdapter, TKind | Protocol> | Promise<ProtocolModuleHandle<TAdapter, TKind | Protocol>>;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Atomic query-capable extension of {@link ProtocolModule}.
|
|
129
|
+
*
|
|
130
|
+
* A module either implements this interface and therefore provides both
|
|
131
|
+
* hooks, or implements the discovery-only base interface and provides
|
|
132
|
+
* neither. Keeping the pair in a separate required interface prevents
|
|
133
|
+
* partially executable modules from satisfying the public contract.
|
|
134
|
+
*/
|
|
135
|
+
export interface QueryCapableProtocolModule<TKind extends string = string, TAdapter = unknown, TQueryBinding extends ProtocolModuleQueryBinding = ProtocolModuleQueryBinding> extends ProtocolModule<TKind, TAdapter> {
|
|
136
|
+
/** Deterministic, synchronous, and I/O-free query compiler. */
|
|
137
|
+
compile(input: ProtocolModuleQueryCompileInput<TQueryBinding["source"], TQueryBinding["compileQuery"]>): TQueryBinding["compiled"];
|
|
138
|
+
/**
|
|
139
|
+
* Explicitly-authorized executor paired with {@link compile}.
|
|
140
|
+
* Implementations execute only against the supplied discovered handle and
|
|
141
|
+
* must not consult or mutate an ambient registry.
|
|
142
|
+
*/
|
|
143
|
+
execute<TRecord = Record<string, unknown>>(handle: ProtocolModuleHandle<TAdapter, TKind | Protocol>, input: ProtocolModuleQueryExecuteInput<TQueryBinding["compiled"], TQueryBinding["executeQuery"]>): Promise<Result<TRecord>>;
|
|
69
144
|
}
|
|
70
145
|
//# sourceMappingURL=protocol-module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol-module.d.ts","sourceRoot":"","sources":["../../../src/contract/protocol-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"protocol-module.d.ts","sourceRoot":"","sources":["../../../src/contract/protocol-module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FES 2.0 lowering for the canonical typed filter.
|
|
3
|
+
*
|
|
4
|
+
* Split out of `query-filter.ts` so only WFS consumers pay for the FES/GML
|
|
5
|
+
* emitter: the GeoParquet, GeoServices, CQL2, and OData lowerings never reach
|
|
6
|
+
* this module's import graph.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { type FesNode } from "../core/wfs-filter.js";
|
|
11
|
+
import { type QueryFilterContext, type QueryFilterExpression } from "./query-filter.js";
|
|
12
|
+
/**
|
|
13
|
+
* Compile to the FES 2.0 AST the WFS adapter serializes. Spatial predicates
|
|
14
|
+
* name the feature type's geometry property, which the caller resolves (it is
|
|
15
|
+
* server-specific) and passes through `ctx.geometryProperty`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function compileQueryFilterToFes(filter: QueryFilterExpression, ctx: QueryFilterContext): FesNode;
|
|
18
|
+
//# sourceMappingURL=query-filter-fes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-filter-fes.d.ts","sourceRoot":"","sources":["../../../src/contract/query-filter-fes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAmB,KAAK,OAAO,EAAyC,MAAM,uBAAuB,CAAC;AAC7G,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAM3B,MAAM,mBAAmB,CAAC;AAkB3B;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,EAAE,kBAAkB,GAAG,OAAO,CA0EvG"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FES 2.0 lowering for the canonical typed filter.
|
|
3
|
+
*
|
|
4
|
+
* Split out of `query-filter.ts` so only WFS consumers pay for the FES/GML
|
|
5
|
+
* emitter: the GeoParquet, GeoServices, CQL2, and OData lowerings never reach
|
|
6
|
+
* this module's import graph.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { UNSUPPORTED_FES, compileSpatialFilter } from "../core/wfs-filter.js";
|
|
11
|
+
import { GEOSERVICES_SPATIAL_REL, assertQueryFilter, refuseQueryFilterConstruct, } from "./query-filter.js";
|
|
12
|
+
const FES_COMPARISON = {
|
|
13
|
+
eq: "=",
|
|
14
|
+
ne: "<>",
|
|
15
|
+
lt: "<",
|
|
16
|
+
lte: "<=",
|
|
17
|
+
gt: ">",
|
|
18
|
+
gte: ">=",
|
|
19
|
+
};
|
|
20
|
+
const FES_TEMPORAL = {
|
|
21
|
+
before: "Before",
|
|
22
|
+
after: "After",
|
|
23
|
+
during: "During",
|
|
24
|
+
"time-intersects": "AnyInteracts",
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Compile to the FES 2.0 AST the WFS adapter serializes. Spatial predicates
|
|
28
|
+
* name the feature type's geometry property, which the caller resolves (it is
|
|
29
|
+
* server-specific) and passes through `ctx.geometryProperty`.
|
|
30
|
+
*/
|
|
31
|
+
export function compileQueryFilterToFes(filter, ctx) {
|
|
32
|
+
assertQueryFilter(filter, ctx);
|
|
33
|
+
const emit = (node) => {
|
|
34
|
+
switch (node.kind) {
|
|
35
|
+
case "comparison": {
|
|
36
|
+
if (node.right.value === null) {
|
|
37
|
+
const isNull = { kind: "isNull", property: node.left.name };
|
|
38
|
+
if (node.operator === "eq")
|
|
39
|
+
return isNull;
|
|
40
|
+
if (node.operator === "ne")
|
|
41
|
+
return { kind: "not", operand: isNull };
|
|
42
|
+
return refuseQueryFilterConstruct(`filter.comparison.${node.operator}.null`, ctx);
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
kind: "compare",
|
|
46
|
+
op: FES_COMPARISON[node.operator],
|
|
47
|
+
property: node.left.name,
|
|
48
|
+
value: fesLiteral(node.right, ctx),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
case "list":
|
|
52
|
+
return {
|
|
53
|
+
kind: "in",
|
|
54
|
+
property: node.operand.name,
|
|
55
|
+
values: node.values.map((value) => fesLiteral(value, ctx)),
|
|
56
|
+
};
|
|
57
|
+
case "range":
|
|
58
|
+
return {
|
|
59
|
+
kind: "between",
|
|
60
|
+
property: node.operand.name,
|
|
61
|
+
lower: fesLiteral(node.lower, ctx),
|
|
62
|
+
upper: fesLiteral(node.upper, ctx),
|
|
63
|
+
};
|
|
64
|
+
case "null": {
|
|
65
|
+
const isNull = { kind: "isNull", property: node.operand.name };
|
|
66
|
+
return node.operator === "is-null" ? isNull : { kind: "not", operand: isNull };
|
|
67
|
+
}
|
|
68
|
+
case "pattern":
|
|
69
|
+
if (node.caseSensitive === false)
|
|
70
|
+
refuseQueryFilterConstruct("filter.pattern.case-insensitive", ctx);
|
|
71
|
+
return { kind: "like", property: node.operand.name, pattern: node.pattern };
|
|
72
|
+
case "spatial": {
|
|
73
|
+
const property = node.property ?? ctx.geometryProperty;
|
|
74
|
+
if (property === undefined)
|
|
75
|
+
refuseQueryFilterConstruct("filter.spatial.geometry-property", ctx);
|
|
76
|
+
const compiled = compileSpatialFilter({
|
|
77
|
+
geometry: node.geometry.geometry,
|
|
78
|
+
geometryType: node.geometry.geometryType,
|
|
79
|
+
spatialRel: fesSpatialRel(node.operator, ctx),
|
|
80
|
+
}, { geometryProperty: property });
|
|
81
|
+
if (compiled === UNSUPPORTED_FES)
|
|
82
|
+
refuseQueryFilterConstruct(`filter.spatial.${node.operator}`, ctx);
|
|
83
|
+
return compiled;
|
|
84
|
+
}
|
|
85
|
+
case "temporal": {
|
|
86
|
+
const value = node.value;
|
|
87
|
+
const time = value.valueType === "instant" ? { instant: value.value } : { start: value.value[0], end: value.value[1] };
|
|
88
|
+
return {
|
|
89
|
+
kind: "temporal",
|
|
90
|
+
op: FES_TEMPORAL[node.operator],
|
|
91
|
+
property: node.operand.name,
|
|
92
|
+
time,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
case "boolean":
|
|
96
|
+
return node.operator === "and"
|
|
97
|
+
? { kind: "and", operands: node.args.map(emit) }
|
|
98
|
+
: { kind: "or", operands: node.args.map(emit) };
|
|
99
|
+
case "not":
|
|
100
|
+
return { kind: "not", operand: emit(node.arg) };
|
|
101
|
+
default:
|
|
102
|
+
return refuseQueryFilterConstruct("filter.node", ctx);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
return emit(filter);
|
|
106
|
+
}
|
|
107
|
+
function fesSpatialRel(operator, ctx) {
|
|
108
|
+
const rel = GEOSERVICES_SPATIAL_REL[operator];
|
|
109
|
+
if (!rel)
|
|
110
|
+
refuseQueryFilterConstruct(`filter.spatial.${operator}`, ctx);
|
|
111
|
+
return rel;
|
|
112
|
+
}
|
|
113
|
+
function fesLiteral(node, ctx) {
|
|
114
|
+
const value = node.value;
|
|
115
|
+
if (typeof value === "number")
|
|
116
|
+
return { kind: "number", value };
|
|
117
|
+
if (typeof value === "string")
|
|
118
|
+
return { kind: "string", value };
|
|
119
|
+
if (typeof value === "boolean")
|
|
120
|
+
return { kind: "string", value: value ? "true" : "false" };
|
|
121
|
+
return refuseQueryFilterConstruct("filter.literal.null", ctx);
|
|
122
|
+
}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical typed query filter — the protocol-neutral semantic filter AST that
|
|
3
|
+
* `Source.query()` accepts on the stable surface, plus the per-protocol
|
|
4
|
+
* compilers that lower it onto each wire dialect.
|
|
5
|
+
*
|
|
6
|
+
* The AST mirrors the experimental `/query-planner` semantic filter (comparison,
|
|
7
|
+
* list, range, null, pattern, spatial, temporal, boolean composition) with two
|
|
8
|
+
* deliberate contract-layer differences:
|
|
9
|
+
*
|
|
10
|
+
* - Spatial predicates carry the same canonical geometry value the rest of the
|
|
11
|
+
* contract uses (`SpatialFilter`-shaped `geometry` + `geometryType`, produced
|
|
12
|
+
* by `envelope()` / `point()` / `polygon()`), so a filter composes with
|
|
13
|
+
* `Query.spatialFilter` without a second geometry vocabulary.
|
|
14
|
+
* - Compilation is schema-free. The planner's semantic compilers verify a
|
|
15
|
+
* `SourceSchemaV2` before emitting; the canonical surface has no verified
|
|
16
|
+
* schema at query time, so literals are typed by the value the caller wrote.
|
|
17
|
+
*
|
|
18
|
+
* Every compiler in this module fails closed: a construct the target protocol
|
|
19
|
+
* cannot express exactly throws `HonuaCapabilityNotSupportedError` naming the
|
|
20
|
+
* construct and the protocol. Nothing is silently dropped and nothing is
|
|
21
|
+
* silently widened; a widening that is genuinely safe (the GeoParquet bbox
|
|
22
|
+
* reduction) is reported through `Result.degraded` by its adapter.
|
|
23
|
+
*
|
|
24
|
+
* @module
|
|
25
|
+
*/
|
|
26
|
+
import type { SpatialFilter } from "../core/spatial-filter.js";
|
|
27
|
+
import type { EsriGeometryType, EsriSpatialRel } from "../core/types.js";
|
|
28
|
+
/** Literal values a canonical filter may compare against. */
|
|
29
|
+
export type QueryFilterScalar = string | number | boolean | null;
|
|
30
|
+
/** Reference to a source field (attribute, geometry, or temporal column). */
|
|
31
|
+
export interface QueryFilterPropertyNode {
|
|
32
|
+
readonly kind: "property";
|
|
33
|
+
readonly name: string;
|
|
34
|
+
}
|
|
35
|
+
/** Scalar literal operand. */
|
|
36
|
+
export interface QueryFilterLiteralNode {
|
|
37
|
+
readonly kind: "literal";
|
|
38
|
+
readonly value: QueryFilterScalar;
|
|
39
|
+
}
|
|
40
|
+
export type QueryFilterComparisonOperator = "eq" | "ne" | "lt" | "lte" | "gt" | "gte";
|
|
41
|
+
export interface QueryFilterComparisonNode {
|
|
42
|
+
readonly kind: "comparison";
|
|
43
|
+
readonly operator: QueryFilterComparisonOperator;
|
|
44
|
+
readonly left: QueryFilterPropertyNode;
|
|
45
|
+
readonly right: QueryFilterLiteralNode;
|
|
46
|
+
}
|
|
47
|
+
export interface QueryFilterListNode {
|
|
48
|
+
readonly kind: "list";
|
|
49
|
+
readonly operator: "in";
|
|
50
|
+
readonly operand: QueryFilterPropertyNode;
|
|
51
|
+
readonly values: readonly QueryFilterLiteralNode[];
|
|
52
|
+
}
|
|
53
|
+
export interface QueryFilterRangeNode {
|
|
54
|
+
readonly kind: "range";
|
|
55
|
+
readonly operator: "between";
|
|
56
|
+
readonly operand: QueryFilterPropertyNode;
|
|
57
|
+
readonly lower: QueryFilterLiteralNode;
|
|
58
|
+
readonly upper: QueryFilterLiteralNode;
|
|
59
|
+
}
|
|
60
|
+
export interface QueryFilterNullNode {
|
|
61
|
+
readonly kind: "null";
|
|
62
|
+
readonly operator: "is-null" | "is-not-null";
|
|
63
|
+
readonly operand: QueryFilterPropertyNode;
|
|
64
|
+
}
|
|
65
|
+
export interface QueryFilterPatternNode {
|
|
66
|
+
readonly kind: "pattern";
|
|
67
|
+
readonly operator: "like";
|
|
68
|
+
readonly operand: QueryFilterPropertyNode;
|
|
69
|
+
/** SQL-style pattern using `%` (any run) and `_` (single character). */
|
|
70
|
+
readonly pattern: string;
|
|
71
|
+
/** Defaults to `true`. `false` requests a case-insensitive match. */
|
|
72
|
+
readonly caseSensitive?: boolean;
|
|
73
|
+
}
|
|
74
|
+
/** Protocol-neutral spatial predicates. */
|
|
75
|
+
export type QueryFilterSpatialPredicate = "intersects" | "contains" | "within" | "crosses" | "touches" | "overlaps" | "bbox-intersects";
|
|
76
|
+
/** Canonical geometry operand: the value the spatial-filter builders emit. */
|
|
77
|
+
export interface QueryFilterGeometryOperand {
|
|
78
|
+
readonly geometry: Record<string, unknown>;
|
|
79
|
+
readonly geometryType: EsriGeometryType;
|
|
80
|
+
}
|
|
81
|
+
export interface QueryFilterSpatialNode {
|
|
82
|
+
readonly kind: "spatial";
|
|
83
|
+
readonly operator: QueryFilterSpatialPredicate;
|
|
84
|
+
readonly geometry: QueryFilterGeometryOperand;
|
|
85
|
+
/**
|
|
86
|
+
* Geometry property to test. Optional for sources with a single primary
|
|
87
|
+
* geometry (GeoServices, OGC, GeoParquet); the WFS / OData compilers resolve
|
|
88
|
+
* it from the adapter when omitted.
|
|
89
|
+
*/
|
|
90
|
+
readonly property?: string;
|
|
91
|
+
}
|
|
92
|
+
export type QueryFilterTemporalPredicate = "before" | "after" | "during" | "time-intersects";
|
|
93
|
+
/** RFC 3339 instant, or an inclusive `[start, end]` interval of instants. */
|
|
94
|
+
export type QueryFilterTemporalLiteralNode = {
|
|
95
|
+
readonly kind: "temporal-literal";
|
|
96
|
+
readonly valueType: "instant";
|
|
97
|
+
readonly value: string;
|
|
98
|
+
} | {
|
|
99
|
+
readonly kind: "temporal-literal";
|
|
100
|
+
readonly valueType: "interval";
|
|
101
|
+
readonly value: readonly [string, string];
|
|
102
|
+
};
|
|
103
|
+
export interface QueryFilterTemporalNode {
|
|
104
|
+
readonly kind: "temporal";
|
|
105
|
+
readonly operator: QueryFilterTemporalPredicate;
|
|
106
|
+
readonly operand: QueryFilterPropertyNode;
|
|
107
|
+
readonly value: QueryFilterTemporalLiteralNode;
|
|
108
|
+
}
|
|
109
|
+
export interface QueryFilterBooleanNode {
|
|
110
|
+
readonly kind: "boolean";
|
|
111
|
+
readonly operator: "and" | "or";
|
|
112
|
+
readonly args: readonly QueryFilterExpression[];
|
|
113
|
+
}
|
|
114
|
+
export interface QueryFilterNotNode {
|
|
115
|
+
readonly kind: "not";
|
|
116
|
+
readonly arg: QueryFilterExpression;
|
|
117
|
+
}
|
|
118
|
+
/** The canonical typed filter accepted by `Query.filter`. */
|
|
119
|
+
export type QueryFilterExpression = QueryFilterComparisonNode | QueryFilterListNode | QueryFilterRangeNode | QueryFilterNullNode | QueryFilterPatternNode | QueryFilterSpatialNode | QueryFilterTemporalNode | QueryFilterBooleanNode | QueryFilterNotNode;
|
|
120
|
+
/**
|
|
121
|
+
* Canonical temporal filter accepted by `Query.temporalFilter`.
|
|
122
|
+
*
|
|
123
|
+
* Without `field` the filter targets the source's own time dimension and
|
|
124
|
+
* compiles to the protocol's time parameter (GeoServices `time=`, OGC / STAC
|
|
125
|
+
* `datetime=`). With `field` it compiles to an explicit temporal predicate on
|
|
126
|
+
* that column, which is the only form OData, WFS, and DuckDB can express.
|
|
127
|
+
* `null` on either interval bound means "open ended".
|
|
128
|
+
*/
|
|
129
|
+
export type QueryTemporalFilter = {
|
|
130
|
+
readonly kind: "instant";
|
|
131
|
+
readonly instant: string;
|
|
132
|
+
readonly field?: string;
|
|
133
|
+
} | {
|
|
134
|
+
readonly kind: "interval";
|
|
135
|
+
readonly start: string | null;
|
|
136
|
+
readonly end: string | null;
|
|
137
|
+
readonly field?: string;
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* Ergonomic constructors for {@link QueryFilterExpression}. Every helper returns
|
|
141
|
+
* plain data, so a filter can equally be written as an object literal, stored as
|
|
142
|
+
* JSON, or produced by the experimental semantic builder.
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```ts
|
|
146
|
+
* import { envelope, queryFilter } from "@honua/sdk-js";
|
|
147
|
+
*
|
|
148
|
+
* const filter = queryFilter.and(
|
|
149
|
+
* queryFilter.eq("STATUS", "open"),
|
|
150
|
+
* queryFilter.gt("SEVERITY", 3),
|
|
151
|
+
* queryFilter.spatial("intersects", envelope(-158.5, 21.2, -157.6, 21.7)),
|
|
152
|
+
* );
|
|
153
|
+
* ```
|
|
154
|
+
*/
|
|
155
|
+
export declare const queryFilter: Readonly<{
|
|
156
|
+
eq: (field: string, value: QueryFilterScalar) => QueryFilterComparisonNode;
|
|
157
|
+
ne: (field: string, value: QueryFilterScalar) => QueryFilterComparisonNode;
|
|
158
|
+
lt: (field: string, value: QueryFilterScalar) => QueryFilterComparisonNode;
|
|
159
|
+
lte: (field: string, value: QueryFilterScalar) => QueryFilterComparisonNode;
|
|
160
|
+
gt: (field: string, value: QueryFilterScalar) => QueryFilterComparisonNode;
|
|
161
|
+
gte: (field: string, value: QueryFilterScalar) => QueryFilterComparisonNode;
|
|
162
|
+
isIn: (field: string, values: readonly QueryFilterScalar[]) => QueryFilterListNode;
|
|
163
|
+
between: (field: string, lower: QueryFilterScalar, upper: QueryFilterScalar) => QueryFilterRangeNode;
|
|
164
|
+
isNull: (field: string) => QueryFilterNullNode;
|
|
165
|
+
isNotNull: (field: string) => QueryFilterNullNode;
|
|
166
|
+
like: (field: string, pattern: string, options?: {
|
|
167
|
+
caseSensitive?: boolean;
|
|
168
|
+
}) => QueryFilterPatternNode;
|
|
169
|
+
spatial: (operator: QueryFilterSpatialPredicate, geometry: QueryFilterGeometryOperand, options?: {
|
|
170
|
+
property?: string;
|
|
171
|
+
}) => QueryFilterSpatialNode;
|
|
172
|
+
before: (field: string, instant: string) => QueryFilterTemporalNode;
|
|
173
|
+
after: (field: string, instant: string) => QueryFilterTemporalNode;
|
|
174
|
+
during: (field: string, start: string, end: string) => QueryFilterTemporalNode;
|
|
175
|
+
timeIntersects: (field: string, start: string, end: string) => QueryFilterTemporalNode;
|
|
176
|
+
and: (...args: readonly QueryFilterExpression[]) => QueryFilterBooleanNode;
|
|
177
|
+
or: (...args: readonly QueryFilterExpression[]) => QueryFilterBooleanNode;
|
|
178
|
+
not: (arg: QueryFilterExpression) => QueryFilterNotNode;
|
|
179
|
+
}>;
|
|
180
|
+
/** Structural bounds mirroring the semantic planner's parser limits. */
|
|
181
|
+
export declare const MAX_QUERY_FILTER_DEPTH = 32;
|
|
182
|
+
export declare const MAX_QUERY_FILTER_NODES = 512;
|
|
183
|
+
/**
|
|
184
|
+
* Boolean, comparison, and set operators a filter can name. Mirrors the
|
|
185
|
+
* `filterOperators` vocabulary of `CapabilityConstraints` so a capability
|
|
186
|
+
* profile's allow list can gate the canonical AST without translation.
|
|
187
|
+
*/
|
|
188
|
+
export type QueryFilterOperatorId = QueryFilterComparisonOperator | "in" | "between" | "is-null" | "is-not-null" | "like" | "and" | "or" | "not" | QueryFilterSpatialPredicate | QueryFilterTemporalPredicate;
|
|
189
|
+
/** Compilation identity used to name a refusal. */
|
|
190
|
+
export interface QueryFilterContext {
|
|
191
|
+
/** Wire protocol the filter is being compiled for. */
|
|
192
|
+
readonly protocol: string;
|
|
193
|
+
/** Source id, when the compile is bound to one. */
|
|
194
|
+
readonly sourceId?: string;
|
|
195
|
+
/** Geometry property name, when the dialect must reference it explicitly. */
|
|
196
|
+
readonly geometryProperty?: string;
|
|
197
|
+
/**
|
|
198
|
+
* Operator allow list evaluated for this source. When present, an operator
|
|
199
|
+
* outside it is refused even if the protocol could express it — the source's
|
|
200
|
+
* own capability evidence is narrower than its protocol's grammar.
|
|
201
|
+
*/
|
|
202
|
+
readonly supportedFilterOperators?: readonly QueryFilterOperatorId[];
|
|
203
|
+
/** Optional per-source predicate allow list from the capability profile. */
|
|
204
|
+
readonly supportedSpatialPredicates?: readonly QueryFilterSpatialPredicate[];
|
|
205
|
+
/** Optional per-source temporal predicate allow list from the capability profile. */
|
|
206
|
+
readonly supportedTemporalPredicates?: readonly QueryFilterTemporalPredicate[];
|
|
207
|
+
/**
|
|
208
|
+
* Where the allow lists came from. `capability-profile` marks a refusal as
|
|
209
|
+
* source-evidence-driven rather than protocol-driven, which the error context
|
|
210
|
+
* carries so callers can tell "this server cannot" from "this protocol
|
|
211
|
+
* cannot".
|
|
212
|
+
*/
|
|
213
|
+
readonly constraintSource?: "capability-profile" | "protocol-default";
|
|
214
|
+
}
|
|
215
|
+
/** Fail closed, naming the construct and the protocol that cannot express it. */
|
|
216
|
+
export declare function refuseQueryFilterConstruct(construct: string, ctx: QueryFilterContext): never;
|
|
217
|
+
/**
|
|
218
|
+
* Narrow the evaluated `CapabilityConstraints` of one capability into the
|
|
219
|
+
* allow lists this compiler understands.
|
|
220
|
+
*
|
|
221
|
+
* Vocabularies that the canonical AST cannot name (distance predicates,
|
|
222
|
+
* extension identifiers) are dropped rather than translated, which fails closed
|
|
223
|
+
* by construction: a profile that advertises only constructs outside the AST
|
|
224
|
+
* yields an empty allow list, and every node of that kind is refused. Omitted
|
|
225
|
+
* constraint arrays stay `undefined` — "the evidence says nothing", not "the
|
|
226
|
+
* source supports nothing".
|
|
227
|
+
*/
|
|
228
|
+
export declare function queryFilterConstraints(constraints: {
|
|
229
|
+
readonly filterOperators?: readonly string[];
|
|
230
|
+
readonly spatialPredicates?: readonly string[];
|
|
231
|
+
readonly temporalPredicates?: readonly string[];
|
|
232
|
+
}): Pick<QueryFilterContext, "supportedFilterOperators" | "supportedSpatialPredicates" | "supportedTemporalPredicates">;
|
|
233
|
+
/**
|
|
234
|
+
* Validate a caller-supplied filter before any dialect sees it. Rejects
|
|
235
|
+
* malformed nodes, unbounded nesting, and identifiers that are not plain
|
|
236
|
+
* source field names (the only identifiers every dialect can quote safely).
|
|
237
|
+
*/
|
|
238
|
+
export declare function assertQueryFilter(filter: QueryFilterExpression, ctx: QueryFilterContext): void;
|
|
239
|
+
/** Validate `Query.temporalFilter` independently of the filter AST. */
|
|
240
|
+
export declare function assertTemporalFilter(temporal: QueryTemporalFilter, ctx: QueryFilterContext): void;
|
|
241
|
+
/**
|
|
242
|
+
* Lower a field-bound `Query.temporalFilter` into a filter node so every
|
|
243
|
+
* dialect compiles temporal intent through the same path. Returns `undefined`
|
|
244
|
+
* when the filter targets the source's own time dimension (no `field`), which
|
|
245
|
+
* the protocol time parameter carries instead.
|
|
246
|
+
*/
|
|
247
|
+
export declare function temporalFilterToExpression(temporal: QueryTemporalFilter, ctx: QueryFilterContext): QueryFilterExpression | undefined;
|
|
248
|
+
/** Combine a filter and a lowered temporal predicate into one expression. */
|
|
249
|
+
export declare function andQueryFilters(...parts: readonly (QueryFilterExpression | undefined)[]): QueryFilterExpression | undefined;
|
|
250
|
+
/** GeoServices carries the spatial predicate as request params, not as SQL. */
|
|
251
|
+
export interface CompiledSql92Filter {
|
|
252
|
+
readonly where?: string;
|
|
253
|
+
readonly spatialFilter?: SpatialFilter;
|
|
254
|
+
}
|
|
255
|
+
/** Esri spatial relationships the canonical predicates map onto. @internal */
|
|
256
|
+
export declare const GEOSERVICES_SPATIAL_REL: Record<QueryFilterSpatialPredicate, EsriSpatialRel | undefined>;
|
|
257
|
+
/**
|
|
258
|
+
* Compile to the GeoServices `where` clause plus (at most one) spatial request
|
|
259
|
+
* parameter set. GeoServices expresses exactly one geometry per `query`
|
|
260
|
+
* request, and only conjunctively, so a spatial predicate nested inside `OR` /
|
|
261
|
+
* `NOT` or a second spatial predicate is refused rather than approximated.
|
|
262
|
+
*/
|
|
263
|
+
export declare function compileQueryFilterToSql92(filter: QueryFilterExpression, ctx: QueryFilterContext): CompiledSql92Filter;
|
|
264
|
+
/** True when a filter references geometry anywhere in its tree. */
|
|
265
|
+
export declare function queryFilterHasSpatial(filter: QueryFilterExpression): boolean;
|
|
266
|
+
/** Emitted SQL plus whether a spatial predicate was reduced to its bbox. */
|
|
267
|
+
export interface CompiledDuckDbFilter {
|
|
268
|
+
readonly sql: string;
|
|
269
|
+
readonly bboxApproximated: boolean;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Compile to a DuckDB `WHERE` fragment. Spatial predicates are emitted through
|
|
273
|
+
* `emitSpatial`, which the GeoParquet driver supplies (it owns the geometry
|
|
274
|
+
* column, its encoding, and the bbox reduction that `Result.degraded` reports).
|
|
275
|
+
*/
|
|
276
|
+
export declare function compileQueryFilterToDuckDbSql(filter: QueryFilterExpression, ctx: QueryFilterContext, emitSpatial: (node: QueryFilterSpatialNode) => {
|
|
277
|
+
readonly sql: string;
|
|
278
|
+
readonly bboxApproximated: boolean;
|
|
279
|
+
}): CompiledDuckDbFilter;
|
|
280
|
+
/**
|
|
281
|
+
* Compile to CQL2 text (OGC API — Features Part 3 / STAC filter extension).
|
|
282
|
+
* `geometryToWkt` is injected so the WKT writer stays in the OData module that
|
|
283
|
+
* already owns it instead of being duplicated here.
|
|
284
|
+
*/
|
|
285
|
+
export declare function compileQueryFilterToCql2Text(filter: QueryFilterExpression, ctx: QueryFilterContext, geometryToWkt: (geometry: Record<string, unknown>, geometryType: string) => string): string;
|
|
286
|
+
/**
|
|
287
|
+
* Compile to an OData `$filter` expression. Spatial predicates are emitted
|
|
288
|
+
* through `emitSpatial` so the adapter's `$metadata`-aware geometry column and
|
|
289
|
+
* SRID resolution stay in one place.
|
|
290
|
+
*/
|
|
291
|
+
export declare function compileQueryFilterToOData(filter: QueryFilterExpression, ctx: QueryFilterContext, emitSpatial: (node: QueryFilterSpatialNode) => string): string;
|
|
292
|
+
/**
|
|
293
|
+
* GeoServices `time=` value. Instants serialize as epoch milliseconds and
|
|
294
|
+
* intervals as `start,end`; an open bound serializes as `null`, which the
|
|
295
|
+
* FeatureServer `time` parameter defines as "unbounded on that side".
|
|
296
|
+
*/
|
|
297
|
+
export declare function compileTemporalFilterToGeoServicesTime(temporal: QueryTemporalFilter, ctx: QueryFilterContext): string;
|
|
298
|
+
/** OGC / STAC `datetime=` value (RFC 3339 instant or `start/end` interval). */
|
|
299
|
+
export declare function compileTemporalFilterToOgcDatetime(temporal: QueryTemporalFilter, ctx: QueryFilterContext): string;
|
|
300
|
+
//# sourceMappingURL=query-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-filter.d.ts","sourceRoot":"","sources":["../../../src/contract/query-filter.ts"],"names":[],"mappings":"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"}
|