@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,531 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@honua/sdk-js/filter-registry` — shared filter / crossfilter registry.
|
|
3
|
+
*
|
|
4
|
+
* Protocol-neutral state container for map, chart, table, search, and control
|
|
5
|
+
* filters. Projection helpers translate active clauses into existing SDK
|
|
6
|
+
* query, linked-view, widget, runtime-style, and URL state.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { createFilterRegistry, projectFilterRegistryToQuery } from "@honua/sdk-js/filter-registry";
|
|
11
|
+
*
|
|
12
|
+
* const registry = createFilterRegistry();
|
|
13
|
+
* registry.set("status", { field: "STATUS", op: "=", value: "ACTIVE" });
|
|
14
|
+
* registry.set("severity", { field: "SEVERITY", op: ">=", value: 3 });
|
|
15
|
+
*
|
|
16
|
+
* const query = projectFilterRegistryToQuery(registry, { sourceId: "incidents" });
|
|
17
|
+
* const { features } = await dataset.source("incidents")!.queryAll(query);
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @packageDocumentation
|
|
21
|
+
*/
|
|
22
|
+
const SERVER_FILTER_PROTOCOLS = new Set([
|
|
23
|
+
"grpc",
|
|
24
|
+
"geoservices-feature-service",
|
|
25
|
+
"geoservices-map-service",
|
|
26
|
+
"ogc-features",
|
|
27
|
+
"wfs",
|
|
28
|
+
"odata",
|
|
29
|
+
]);
|
|
30
|
+
const FILTER_OWNER_KINDS = new Set([
|
|
31
|
+
"map",
|
|
32
|
+
"chart",
|
|
33
|
+
"table",
|
|
34
|
+
"search",
|
|
35
|
+
"control",
|
|
36
|
+
"component",
|
|
37
|
+
]);
|
|
38
|
+
const FILTER_LIFECYCLES = new Set(["persistent", "session", "transient"]);
|
|
39
|
+
const FILTER_EFFECTS = new Set(["filter", "crossfilter", "selection", "search", "spatial-mask"]);
|
|
40
|
+
const FILTER_OPERATORS = new Set([
|
|
41
|
+
"=",
|
|
42
|
+
"!=",
|
|
43
|
+
"<",
|
|
44
|
+
"<=",
|
|
45
|
+
">",
|
|
46
|
+
">=",
|
|
47
|
+
"in",
|
|
48
|
+
"not-in",
|
|
49
|
+
"between",
|
|
50
|
+
"like",
|
|
51
|
+
"is-null",
|
|
52
|
+
"is-not-null",
|
|
53
|
+
]);
|
|
54
|
+
const FILTER_FIELD_IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*$/;
|
|
55
|
+
/** Create an in-memory filter registry with owner-scoped mutation helpers. */
|
|
56
|
+
export function createFilterRegistry(options = {}) {
|
|
57
|
+
let clauses = normalizeClauses(options.initialClauses ?? []);
|
|
58
|
+
let snapshot = freezeSnapshot({ version: 1, clauses });
|
|
59
|
+
const listeners = new Set();
|
|
60
|
+
function publish(previous, changedIds) {
|
|
61
|
+
if (changedIds.size === 0)
|
|
62
|
+
return;
|
|
63
|
+
const event = { snapshot, previous, changedIds };
|
|
64
|
+
for (const listener of [...listeners])
|
|
65
|
+
listener(event);
|
|
66
|
+
}
|
|
67
|
+
function commit(nextClauses, changedIds) {
|
|
68
|
+
const previous = snapshot;
|
|
69
|
+
clauses = normalizeClauses(nextClauses);
|
|
70
|
+
snapshot = freezeSnapshot({ version: 1, clauses });
|
|
71
|
+
publish(previous, changedIds);
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
get snapshot() {
|
|
75
|
+
return snapshot;
|
|
76
|
+
},
|
|
77
|
+
upsert(clause) {
|
|
78
|
+
const byId = new Map(clauses.map((entry) => [entry.id, entry]));
|
|
79
|
+
const existing = byId.get(clause.id);
|
|
80
|
+
if (existing && valuesEqual(existing, clause))
|
|
81
|
+
return;
|
|
82
|
+
byId.set(clause.id, normalizeClause(clause));
|
|
83
|
+
commit([...byId.values()], new Set([clause.id]));
|
|
84
|
+
},
|
|
85
|
+
remove(id) {
|
|
86
|
+
if (!clauses.some((clause) => clause.id === id))
|
|
87
|
+
return;
|
|
88
|
+
commit(clauses.filter((clause) => clause.id !== id), new Set([id]));
|
|
89
|
+
},
|
|
90
|
+
clearOwner(owner) {
|
|
91
|
+
const changed = clauses.filter((clause) => ownerKey(clause.owner) === ownerKey(owner)).map((clause) => clause.id);
|
|
92
|
+
if (changed.length === 0)
|
|
93
|
+
return;
|
|
94
|
+
commit(clauses.filter((clause) => ownerKey(clause.owner) !== ownerKey(owner)), new Set(changed));
|
|
95
|
+
},
|
|
96
|
+
clearSource(sourceId) {
|
|
97
|
+
const changed = clauses
|
|
98
|
+
.filter((clause) => appliesExplicitlyToSource(clause, sourceId))
|
|
99
|
+
.map((clause) => clause.id);
|
|
100
|
+
if (changed.length === 0)
|
|
101
|
+
return;
|
|
102
|
+
commit(clauses.filter((clause) => !appliesExplicitlyToSource(clause, sourceId)), new Set(changed));
|
|
103
|
+
},
|
|
104
|
+
setEnabled(id, enabled) {
|
|
105
|
+
let changed = false;
|
|
106
|
+
const next = clauses.map((clause) => {
|
|
107
|
+
if (clause.id !== id || (clause.enabled ?? true) === enabled)
|
|
108
|
+
return clause;
|
|
109
|
+
changed = true;
|
|
110
|
+
return { ...clause, enabled };
|
|
111
|
+
});
|
|
112
|
+
if (changed)
|
|
113
|
+
commit(next, new Set([id]));
|
|
114
|
+
},
|
|
115
|
+
replace(nextSnapshot) {
|
|
116
|
+
if (nextSnapshot.version !== 1)
|
|
117
|
+
throw new Error(`Unsupported filter registry snapshot version ${nextSnapshot.version}`);
|
|
118
|
+
const next = normalizeClauses(nextSnapshot.clauses);
|
|
119
|
+
if (valuesEqual(clauses, next))
|
|
120
|
+
return;
|
|
121
|
+
const ids = new Set([...clauses.map((clause) => clause.id), ...next.map((clause) => clause.id)]);
|
|
122
|
+
commit(next, ids);
|
|
123
|
+
},
|
|
124
|
+
subscribe(listener) {
|
|
125
|
+
listeners.add(listener);
|
|
126
|
+
return () => listeners.delete(listener);
|
|
127
|
+
},
|
|
128
|
+
select(selector, listener, options = {}) {
|
|
129
|
+
const equals = options.equals ?? valuesEqual;
|
|
130
|
+
let current = selector(snapshot);
|
|
131
|
+
if (options.fireImmediately)
|
|
132
|
+
listener(current, undefined);
|
|
133
|
+
return this.subscribe((event) => {
|
|
134
|
+
const next = selector(event.snapshot);
|
|
135
|
+
if (equals(current, next))
|
|
136
|
+
return;
|
|
137
|
+
current = next;
|
|
138
|
+
listener(next, event);
|
|
139
|
+
});
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/** Return active clauses in deterministic id order, optionally source-scoped. */
|
|
144
|
+
export function selectActiveFilterClauses(snapshot, options = {}) {
|
|
145
|
+
return snapshot.clauses
|
|
146
|
+
.filter(isFilterClause)
|
|
147
|
+
.filter((clause) => (options.includeDisabled || (clause.enabled ?? true)) && appliesToSource(clause, options.sourceId))
|
|
148
|
+
.sort(compareClause);
|
|
149
|
+
}
|
|
150
|
+
/** Project active registry clauses into query/widget/linked-view/runtime state. */
|
|
151
|
+
export function projectFilterRegistryToQuery(snapshot, options = {}) {
|
|
152
|
+
const active = selectActiveFilterClauses(snapshot, options);
|
|
153
|
+
const filters = toProjectionFilters(active);
|
|
154
|
+
const linkedViewFilters = toLinkedViewFilters(active);
|
|
155
|
+
const where = compileWhere(active);
|
|
156
|
+
const spatialFilter = firstSpatialFilter(active);
|
|
157
|
+
const query = {
|
|
158
|
+
...(options.baseQuery ?? {}),
|
|
159
|
+
...(combineWhere(options.baseQuery?.where, where) ? { where: combineWhere(options.baseQuery?.where, where) } : {}),
|
|
160
|
+
...((options.baseQuery?.spatialFilter ?? spatialFilter)
|
|
161
|
+
? { spatialFilter: options.baseQuery?.spatialFilter ?? spatialFilter }
|
|
162
|
+
: {}),
|
|
163
|
+
};
|
|
164
|
+
const projection = {
|
|
165
|
+
filters,
|
|
166
|
+
...(spatialFilter ? { spatialFilter } : {}),
|
|
167
|
+
};
|
|
168
|
+
const linkedView = {
|
|
169
|
+
filters: linkedViewFilters,
|
|
170
|
+
...(spatialFilter ? { spatialFilter } : {}),
|
|
171
|
+
orderBy: (query.orderBy ?? []),
|
|
172
|
+
pagination: (query.pagination ?? {}),
|
|
173
|
+
...(query.outFields ? { outFields: query.outFields } : {}),
|
|
174
|
+
grouping: [],
|
|
175
|
+
...(query.aggregation ? { aggregation: query.aggregation } : {}),
|
|
176
|
+
selection: [],
|
|
177
|
+
};
|
|
178
|
+
const degraded = degradationFor(options.source, active);
|
|
179
|
+
return {
|
|
180
|
+
query,
|
|
181
|
+
...(where ? { where } : {}),
|
|
182
|
+
projection,
|
|
183
|
+
linkedView,
|
|
184
|
+
runtimeFilter: compileRuntimeStyleFilter(active),
|
|
185
|
+
...(degraded.length > 0 ? { degraded } : {}),
|
|
186
|
+
cacheKey: serializeFilterRegistry(snapshot, { sourceId: options.sourceId }),
|
|
187
|
+
cacheable: active.every((clause) => clause.cacheable !== false && clause.lifecycle !== "transient"),
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/** Project active clauses directly into a `WidgetSourceProjection`. */
|
|
191
|
+
export function projectFilterRegistryToWidgetProjection(snapshot, options = {}) {
|
|
192
|
+
const projection = projectFilterRegistryToQuery(snapshot, options).projection;
|
|
193
|
+
return projection;
|
|
194
|
+
}
|
|
195
|
+
/** Project active clauses into the linked-view projection consumed by existing helpers. */
|
|
196
|
+
export function projectFilterRegistryToLinkedView(snapshot, options = {}) {
|
|
197
|
+
return projectFilterRegistryToQuery(snapshot, options).linkedView;
|
|
198
|
+
}
|
|
199
|
+
/** Compile active field clauses into a MapLibre-compatible expression tree. */
|
|
200
|
+
export function compileRuntimeStyleFilter(clauses) {
|
|
201
|
+
const parts = clauses
|
|
202
|
+
.filter((clause) => (clause.enabled ?? true) && clause.field && clause.operator)
|
|
203
|
+
.map(compileRuntimeClause)
|
|
204
|
+
.filter((entry) => entry !== undefined);
|
|
205
|
+
if (parts.length === 0)
|
|
206
|
+
return undefined;
|
|
207
|
+
return parts.length === 1 ? parts[0] : ["all", ...parts];
|
|
208
|
+
}
|
|
209
|
+
/** Deterministic URL/cache serialization. Secret or large values are omitted. */
|
|
210
|
+
export function serializeFilterRegistry(snapshot, options = {}) {
|
|
211
|
+
const shareable = {
|
|
212
|
+
version: 1,
|
|
213
|
+
clauses: selectActiveFilterClauses(snapshot, options)
|
|
214
|
+
.filter((clause) => clause.lifecycle !== "transient")
|
|
215
|
+
.map(shareableClause),
|
|
216
|
+
};
|
|
217
|
+
return stableShareStringify(shareable);
|
|
218
|
+
}
|
|
219
|
+
/** Parse a registry serialization produced by `serializeFilterRegistry`. */
|
|
220
|
+
export function parseFilterRegistry(value) {
|
|
221
|
+
if (!value)
|
|
222
|
+
return freezeSnapshot({ version: 1, clauses: [] });
|
|
223
|
+
try {
|
|
224
|
+
const parsed = JSON.parse(value);
|
|
225
|
+
if (parsed.version !== 1 || !Array.isArray(parsed.clauses))
|
|
226
|
+
return freezeSnapshot({ version: 1, clauses: [] });
|
|
227
|
+
return freezeSnapshot({ version: 1, clauses: normalizeClauses(parsed.clauses.filter(isFilterClause)) });
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return freezeSnapshot({ version: 1, clauses: [] });
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
function toProjectionFilters(clauses) {
|
|
234
|
+
const out = {};
|
|
235
|
+
for (const clause of clauses) {
|
|
236
|
+
if (!clause.field || !clause.operator)
|
|
237
|
+
continue;
|
|
238
|
+
out[clause.id] = {
|
|
239
|
+
field: clause.field,
|
|
240
|
+
operator: clause.operator,
|
|
241
|
+
...(clause.value !== undefined ? { value: clause.value } : {}),
|
|
242
|
+
...(Array.isArray(clause.sourceScope) ? { appliesTo: clause.sourceScope } : {}),
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
return out;
|
|
246
|
+
}
|
|
247
|
+
function toLinkedViewFilters(clauses) {
|
|
248
|
+
const out = {};
|
|
249
|
+
for (const clause of clauses) {
|
|
250
|
+
if (!clause.field || !clause.operator)
|
|
251
|
+
continue;
|
|
252
|
+
out[clause.id] = {
|
|
253
|
+
field: clause.field,
|
|
254
|
+
operator: clause.operator,
|
|
255
|
+
...(clause.value !== undefined ? { value: clause.value } : {}),
|
|
256
|
+
...(Array.isArray(clause.sourceScope) ? { appliesTo: clause.sourceScope } : {}),
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
return out;
|
|
260
|
+
}
|
|
261
|
+
function compileWhere(clauses) {
|
|
262
|
+
const parts = clauses
|
|
263
|
+
.map(compileClauseWhere)
|
|
264
|
+
.filter((entry) => entry !== undefined)
|
|
265
|
+
.map((entry) => `(${entry})`);
|
|
266
|
+
return parts.length > 0 ? parts.join(" AND ") : undefined;
|
|
267
|
+
}
|
|
268
|
+
function compileClauseWhere(clause) {
|
|
269
|
+
if (!clause.field || !clause.operator)
|
|
270
|
+
return undefined;
|
|
271
|
+
const field = sqlIdentifier(clause.field);
|
|
272
|
+
if (!field)
|
|
273
|
+
return undefined;
|
|
274
|
+
switch (clause.operator) {
|
|
275
|
+
case "=":
|
|
276
|
+
return `${field} = ${literal(clause.value)}`;
|
|
277
|
+
case "!=":
|
|
278
|
+
return `${field} <> ${literal(clause.value)}`;
|
|
279
|
+
case "<":
|
|
280
|
+
case "<=":
|
|
281
|
+
case ">":
|
|
282
|
+
case ">=":
|
|
283
|
+
return `${field} ${clause.operator} ${literal(clause.value)}`;
|
|
284
|
+
case "in":
|
|
285
|
+
case "not-in":
|
|
286
|
+
if (!Array.isArray(clause.value) || clause.value.length === 0)
|
|
287
|
+
return undefined;
|
|
288
|
+
return `${field} ${clause.operator === "not-in" ? "NOT " : ""}IN (${clause.value.map(literal).join(", ")})`;
|
|
289
|
+
case "between":
|
|
290
|
+
if (!Array.isArray(clause.value) || clause.value.length < 2)
|
|
291
|
+
return undefined;
|
|
292
|
+
return `${field} BETWEEN ${literal(clause.value[0])} AND ${literal(clause.value[1])}`;
|
|
293
|
+
case "like":
|
|
294
|
+
return `${field} LIKE ${literal(clause.value)}`;
|
|
295
|
+
case "is-null":
|
|
296
|
+
return `${field} IS NULL`;
|
|
297
|
+
case "is-not-null":
|
|
298
|
+
return `${field} IS NOT NULL`;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
function compileRuntimeClause(clause) {
|
|
302
|
+
if (!clause.field || !clause.operator)
|
|
303
|
+
return undefined;
|
|
304
|
+
const get = ["get", clause.field];
|
|
305
|
+
switch (clause.operator) {
|
|
306
|
+
case "=":
|
|
307
|
+
return ["==", get, clause.value];
|
|
308
|
+
case "!=":
|
|
309
|
+
return ["!=", get, clause.value];
|
|
310
|
+
case "<":
|
|
311
|
+
case "<=":
|
|
312
|
+
case ">":
|
|
313
|
+
case ">=":
|
|
314
|
+
return [clause.operator, get, clause.value];
|
|
315
|
+
case "in":
|
|
316
|
+
return Array.isArray(clause.value) ? ["in", get, ["literal", clause.value]] : undefined;
|
|
317
|
+
case "not-in":
|
|
318
|
+
return Array.isArray(clause.value) ? ["!", ["in", get, ["literal", clause.value]]] : undefined;
|
|
319
|
+
case "is-null":
|
|
320
|
+
return ["==", get, null];
|
|
321
|
+
case "is-not-null":
|
|
322
|
+
return ["!=", get, null];
|
|
323
|
+
case "between":
|
|
324
|
+
if (!Array.isArray(clause.value) || clause.value.length < 2)
|
|
325
|
+
return undefined;
|
|
326
|
+
return ["all", [">=", get, clause.value[0]], ["<=", get, clause.value[1]]];
|
|
327
|
+
case "like":
|
|
328
|
+
return undefined;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
function degradationFor(source, clauses) {
|
|
332
|
+
if (!source || clauses.length === 0)
|
|
333
|
+
return [];
|
|
334
|
+
const fieldClauses = clauses.filter((clause) => clause.field && clause.operator);
|
|
335
|
+
if (fieldClauses.length === 0)
|
|
336
|
+
return [];
|
|
337
|
+
const canQuery = source.capabilities.has("query");
|
|
338
|
+
const canServerFilter = canQuery && (source.capabilities.has("sql") || SERVER_FILTER_PROTOCOLS.has(source.protocol));
|
|
339
|
+
if (canServerFilter)
|
|
340
|
+
return [];
|
|
341
|
+
return [
|
|
342
|
+
degradedReason("query", source, `Filter registry kept ${fieldClauses.length} field filter(s) for runtime/client evaluation because ${source.protocol} cannot apply them server-side.`),
|
|
343
|
+
];
|
|
344
|
+
}
|
|
345
|
+
function degradedReason(capability, source, reason) {
|
|
346
|
+
return { capability, protocol: source.protocol, sourceId: source.id, reason };
|
|
347
|
+
}
|
|
348
|
+
function firstSpatialFilter(clauses) {
|
|
349
|
+
for (const clause of clauses) {
|
|
350
|
+
if (clause.spatialScope?.filter)
|
|
351
|
+
return clause.spatialScope.filter;
|
|
352
|
+
if (clause.spatialScope?.extent) {
|
|
353
|
+
const extent = clause.spatialScope.extent;
|
|
354
|
+
return {
|
|
355
|
+
geometryType: "esriGeometryEnvelope",
|
|
356
|
+
geometry: { ...extent },
|
|
357
|
+
spatialRel: "esriSpatialRelIntersects",
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
return undefined;
|
|
362
|
+
}
|
|
363
|
+
function appliesToSource(clause, sourceId) {
|
|
364
|
+
if (!sourceId)
|
|
365
|
+
return true;
|
|
366
|
+
if (!clause.sourceScope || clause.sourceScope === "all")
|
|
367
|
+
return true;
|
|
368
|
+
return clause.sourceScope.includes(sourceId);
|
|
369
|
+
}
|
|
370
|
+
function appliesExplicitlyToSource(clause, sourceId) {
|
|
371
|
+
return Array.isArray(clause.sourceScope) && clause.sourceScope.includes(sourceId);
|
|
372
|
+
}
|
|
373
|
+
function shareableClause(clause) {
|
|
374
|
+
const normalized = normalizeClause(clause);
|
|
375
|
+
if (normalized.value === undefined)
|
|
376
|
+
return normalized;
|
|
377
|
+
const maxBytes = normalized.valuePolicy?.maxSerializedBytes ?? 2048;
|
|
378
|
+
const encoded = stableStringify(normalized.value);
|
|
379
|
+
if (normalized.valuePolicy?.secret || encoded.length > maxBytes) {
|
|
380
|
+
const { value: _value, ...withoutValue } = normalized;
|
|
381
|
+
return withoutValue;
|
|
382
|
+
}
|
|
383
|
+
return normalized;
|
|
384
|
+
}
|
|
385
|
+
function normalizeClauses(input) {
|
|
386
|
+
const byId = new Map();
|
|
387
|
+
for (const clause of input)
|
|
388
|
+
byId.set(clause.id, normalizeClause(clause));
|
|
389
|
+
return deepFreeze([...byId.values()].sort(compareClause));
|
|
390
|
+
}
|
|
391
|
+
function normalizeClause(clause) {
|
|
392
|
+
if (!isFilterClause(clause))
|
|
393
|
+
throw new Error("Invalid filter registry clause");
|
|
394
|
+
return deepFreeze({
|
|
395
|
+
id: clause.id,
|
|
396
|
+
owner: { kind: clause.owner.kind, id: clause.owner.id },
|
|
397
|
+
...(clause.field !== undefined ? { field: clause.field } : {}),
|
|
398
|
+
...(clause.operator !== undefined ? { operator: clause.operator } : {}),
|
|
399
|
+
...(clause.value !== undefined ? { value: cloneJsonLike(clause.value) } : {}),
|
|
400
|
+
...(clause.spatialScope !== undefined ? { spatialScope: cloneJsonLike(clause.spatialScope) } : {}),
|
|
401
|
+
enabled: clause.enabled ?? true,
|
|
402
|
+
lifecycle: clause.lifecycle ?? "session",
|
|
403
|
+
effect: clause.effect ?? (clause.spatialScope ? "spatial-mask" : "filter"),
|
|
404
|
+
sourceScope: cloneSourceScope(clause.sourceScope ?? "all"),
|
|
405
|
+
...(clause.cacheable !== undefined ? { cacheable: clause.cacheable } : {}),
|
|
406
|
+
...(clause.valuePolicy !== undefined ? { valuePolicy: cloneJsonLike(clause.valuePolicy) } : {}),
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
function compareClause(left, right) {
|
|
410
|
+
return left.id.localeCompare(right.id);
|
|
411
|
+
}
|
|
412
|
+
function ownerKey(owner) {
|
|
413
|
+
return `${owner.kind}:${owner.id}`;
|
|
414
|
+
}
|
|
415
|
+
function literal(value) {
|
|
416
|
+
if (value === null || value === undefined)
|
|
417
|
+
return "NULL";
|
|
418
|
+
if (typeof value === "number" || typeof value === "bigint")
|
|
419
|
+
return String(value);
|
|
420
|
+
if (typeof value === "boolean")
|
|
421
|
+
return value ? "TRUE" : "FALSE";
|
|
422
|
+
return `'${String(value).replace(/'/g, "''")}'`;
|
|
423
|
+
}
|
|
424
|
+
function sqlIdentifier(field) {
|
|
425
|
+
return FILTER_FIELD_IDENTIFIER.test(field) ? field : undefined;
|
|
426
|
+
}
|
|
427
|
+
function combineWhere(left, right) {
|
|
428
|
+
if (left && right)
|
|
429
|
+
return `(${left}) AND (${right})`;
|
|
430
|
+
return left || right || undefined;
|
|
431
|
+
}
|
|
432
|
+
function stableStringify(value) {
|
|
433
|
+
return JSON.stringify(sortJsonValue(value, false));
|
|
434
|
+
}
|
|
435
|
+
function stableShareStringify(value) {
|
|
436
|
+
return JSON.stringify(sortJsonValue(value, true));
|
|
437
|
+
}
|
|
438
|
+
function sortJsonValue(value, stripValuePolicy) {
|
|
439
|
+
if (Array.isArray(value))
|
|
440
|
+
return value.map((entry) => sortJsonValue(entry, stripValuePolicy));
|
|
441
|
+
if (!value || typeof value !== "object")
|
|
442
|
+
return value;
|
|
443
|
+
const out = {};
|
|
444
|
+
for (const key of Object.keys(value).sort()) {
|
|
445
|
+
if (stripValuePolicy && key === "valuePolicy")
|
|
446
|
+
continue;
|
|
447
|
+
out[key] = sortJsonValue(value[key], stripValuePolicy);
|
|
448
|
+
}
|
|
449
|
+
return out;
|
|
450
|
+
}
|
|
451
|
+
function valuesEqual(left, right) {
|
|
452
|
+
return stableStringify(left) === stableStringify(right);
|
|
453
|
+
}
|
|
454
|
+
function isFilterClause(value) {
|
|
455
|
+
if (!isRecord(value))
|
|
456
|
+
return false;
|
|
457
|
+
const record = value;
|
|
458
|
+
return (typeof record.id === "string" &&
|
|
459
|
+
record.id.length > 0 &&
|
|
460
|
+
isFilterRegistryOwner(record.owner) &&
|
|
461
|
+
validOptional(record.field, (field) => typeof field === "string" && FILTER_FIELD_IDENTIFIER.test(field)) &&
|
|
462
|
+
validOptional(record.operator, (operator) => typeof operator === "string" && FILTER_OPERATORS.has(operator)) &&
|
|
463
|
+
validOptional(record.sourceScope, isFilterSourceScope) &&
|
|
464
|
+
validOptional(record.lifecycle, (lifecycle) => typeof lifecycle === "string" && FILTER_LIFECYCLES.has(lifecycle)) &&
|
|
465
|
+
validOptional(record.effect, (effect) => typeof effect === "string" && FILTER_EFFECTS.has(effect)) &&
|
|
466
|
+
validOptional(record.enabled, (enabled) => typeof enabled === "boolean") &&
|
|
467
|
+
validOptional(record.cacheable, (cacheable) => typeof cacheable === "boolean") &&
|
|
468
|
+
validOptional(record.spatialScope, isRecord) &&
|
|
469
|
+
validOptional(record.valuePolicy, isFilterValuePolicy));
|
|
470
|
+
}
|
|
471
|
+
function isFilterRegistryOwner(value) {
|
|
472
|
+
if (!isRecord(value))
|
|
473
|
+
return false;
|
|
474
|
+
return (typeof value.kind === "string" &&
|
|
475
|
+
FILTER_OWNER_KINDS.has(value.kind) &&
|
|
476
|
+
typeof value.id === "string" &&
|
|
477
|
+
value.id.length > 0);
|
|
478
|
+
}
|
|
479
|
+
function isFilterSourceScope(value) {
|
|
480
|
+
return (value === "all" || (Array.isArray(value) && value.every((entry) => typeof entry === "string" && entry.length > 0)));
|
|
481
|
+
}
|
|
482
|
+
function isFilterValuePolicy(value) {
|
|
483
|
+
if (!isRecord(value))
|
|
484
|
+
return false;
|
|
485
|
+
return (validOptional(value.secret, (secret) => typeof secret === "boolean") &&
|
|
486
|
+
validOptional(value.maxSerializedBytes, (maxSerializedBytes) => typeof maxSerializedBytes === "number" && Number.isFinite(maxSerializedBytes)));
|
|
487
|
+
}
|
|
488
|
+
function validOptional(value, validate) {
|
|
489
|
+
return value === undefined || validate(value);
|
|
490
|
+
}
|
|
491
|
+
function cloneSourceScope(sourceScope) {
|
|
492
|
+
return Array.isArray(sourceScope) ? deepFreeze([...sourceScope]) : sourceScope;
|
|
493
|
+
}
|
|
494
|
+
function freezeSnapshot(snapshot) {
|
|
495
|
+
return deepFreeze(snapshot);
|
|
496
|
+
}
|
|
497
|
+
function cloneJsonLike(value) {
|
|
498
|
+
if (Array.isArray(value))
|
|
499
|
+
return value.map(cloneJsonLike);
|
|
500
|
+
if (value instanceof Date)
|
|
501
|
+
return new Date(value.getTime());
|
|
502
|
+
if (isPlainRecord(value)) {
|
|
503
|
+
const out = {};
|
|
504
|
+
for (const key of Object.keys(value))
|
|
505
|
+
out[key] = cloneJsonLike(value[key]);
|
|
506
|
+
return out;
|
|
507
|
+
}
|
|
508
|
+
return value;
|
|
509
|
+
}
|
|
510
|
+
function deepFreeze(value) {
|
|
511
|
+
if (!value || typeof value !== "object" || Object.isFrozen(value))
|
|
512
|
+
return value;
|
|
513
|
+
if (Array.isArray(value)) {
|
|
514
|
+
for (const entry of value)
|
|
515
|
+
deepFreeze(entry);
|
|
516
|
+
}
|
|
517
|
+
else {
|
|
518
|
+
for (const key of Object.keys(value))
|
|
519
|
+
deepFreeze(value[key]);
|
|
520
|
+
}
|
|
521
|
+
return Object.freeze(value);
|
|
522
|
+
}
|
|
523
|
+
function isRecord(value) {
|
|
524
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
525
|
+
}
|
|
526
|
+
function isPlainRecord(value) {
|
|
527
|
+
if (!isRecord(value))
|
|
528
|
+
return false;
|
|
529
|
+
const prototype = Object.getPrototypeOf(value);
|
|
530
|
+
return prototype === Object.prototype || prototype === null;
|
|
531
|
+
}
|