@reearth/core 0.0.7-alpha.6 → 0.0.7-alpha.61
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 +177 -0
- package/dist/core.js +70991 -60887
- package/dist/core.umd.cjs +666 -680
- package/dist/{index-DqatWUTw.js → index-CUJ6HGQn.js} +1021 -908
- package/dist/index.d.ts +157 -71
- package/package.json +88 -74
- package/src/Map/ClusteredLayers/index.tsx +1 -1
- package/src/Map/Geoid/index.tsx +68 -0
- package/src/Map/Geoid/types.ts +8 -0
- package/src/Map/Layer/hooks.ts +7 -4
- package/src/Map/Layer/index.tsx +3 -1
- package/src/Map/Layers/hooks.ts +35 -8
- package/src/Map/Layers/index.tsx +13 -2
- package/src/Map/Layers/keys.ts +1 -0
- package/src/Map/Sketch/hooks.ts +454 -411
- package/src/Map/Sketch/index.tsx +68 -21
- package/src/Map/Sketch/sketchMachine.ts +427 -102
- package/src/Map/Sketch/sketchMachine.typegen.ts +58 -1
- package/src/Map/Sketch/types.ts +10 -20
- package/src/Map/Sketch/usePluginSketchLayer.ts +105 -0
- package/src/Map/Sketch/useSketch.ts +558 -0
- package/src/Map/Sketch/useSketchFeature.ts +198 -0
- package/src/Map/SpatialId/constants.ts +21 -0
- package/src/Map/SpatialId/hooks.ts +448 -0
- package/src/Map/SpatialId/index.tsx +63 -0
- package/src/Map/SpatialId/types.ts +68 -0
- package/src/Map/SpatialId/utils.ts +65 -0
- package/src/Map/hooks.ts +54 -8
- package/src/Map/index.tsx +42 -9
- package/src/Map/ref.ts +32 -3
- package/src/Map/types/index.ts +39 -3
- package/src/Map/types/viewerProperty.ts +10 -0
- package/src/Map/useTimelineManager.ts +4 -10
- package/src/Map/utils.ts +1 -1
- package/src/Visualizer/Error.tsx +4 -1
- package/src/Visualizer/context.tsx +5 -5
- package/src/Visualizer/coreContext.tsx +3 -1
- package/src/Visualizer/hooks.ts +56 -22
- package/src/Visualizer/index.stories.tsx +15 -0
- package/src/Visualizer/index.tsx +25 -6
- package/src/Visualizer/useViewport.ts +1 -1
- package/src/engines/Cesium/Feature/Box/hooks/box.ts +4 -4
- package/src/engines/Cesium/Feature/Box/hooks/edge.ts +1 -1
- package/src/engines/Cesium/Feature/Box/hooks/side.ts +1 -1
- package/src/engines/Cesium/Feature/Box/utils.ts +6 -0
- package/src/engines/Cesium/Feature/Ellipse/index.stories.tsx +0 -1
- package/src/engines/Cesium/Feature/Frustum/getFieldOfView.ts +2 -0
- package/src/engines/Cesium/Feature/Frustum/index.stories.tsx +0 -1
- package/src/engines/Cesium/Feature/HeatMap/HeatmapMesh.tsx +1 -1
- package/src/engines/Cesium/Feature/Marker/index.tsx +1 -1
- package/src/engines/Cesium/Feature/Model/index.stories.tsx +1 -2
- package/src/engines/Cesium/Feature/Model/index.tsx +3 -3
- package/src/engines/Cesium/Feature/PhotoOverlay/hooks.ts +2 -2
- package/src/engines/Cesium/Feature/PhotoOverlay/index.tsx +3 -1
- package/src/engines/Cesium/Feature/Polygon/index.stories.tsx +0 -1
- package/src/engines/Cesium/Feature/Polygon/index.tsx +6 -4
- package/src/engines/Cesium/Feature/Raster/index.stories.tsx +0 -1
- package/src/engines/Cesium/Feature/Raster/mvt.ts +2 -1
- package/src/engines/Cesium/Feature/Resource/index.stories.tsx +0 -1
- package/src/engines/Cesium/Feature/Resource/index.tsx +1 -27
- package/src/engines/Cesium/Feature/Resource/utils.ts +86 -91
- package/src/engines/Cesium/Feature/Tileset/hooks.ts +136 -71
- package/src/engines/Cesium/Feature/Tileset/index.stories.tsx +0 -1
- package/src/engines/Cesium/Feature/Tileset/index.tsx +1 -1
- package/src/engines/Cesium/Feature/Tileset/useClippingBox.ts +2 -2
- package/src/engines/Cesium/Feature/Tileset/useDrawClipping.ts +2 -2
- package/src/engines/Cesium/Feature/context.ts +1 -0
- package/src/engines/Cesium/Feature/index.tsx +9 -5
- package/src/engines/Cesium/Feature/utils.tsx +20 -12
- package/src/engines/Cesium/PostProcesses/hbao/AmbientOcclusion.tsx +7 -4
- package/src/engines/Cesium/Sketch/ControlPoint.tsx +128 -24
- package/src/engines/Cesium/Sketch/ExtrudedControlPoints.tsx +70 -25
- package/src/engines/Cesium/Sketch/ExtrudedMeasurement.tsx +3 -1
- package/src/engines/Cesium/Sketch/ExtrudedPolygonEntity.tsx +14 -14
- package/src/engines/Cesium/Sketch/PolylineEntity.tsx +7 -4
- package/src/engines/Cesium/Sketch/SurfaceAddingPoints.tsx +60 -0
- package/src/engines/Cesium/Sketch/SurfaceControlPoints.tsx +126 -35
- package/src/engines/Cesium/Sketch/constants.ts +5 -0
- package/src/engines/Cesium/Sketch/index.tsx +68 -29
- package/src/engines/Cesium/SpatialId/CoordinateIndicator.tsx +28 -0
- package/src/engines/Cesium/SpatialId/SpatialIdSpace.tsx +33 -0
- package/src/engines/Cesium/SpatialId/VerticalSpaceIndicator.tsx +32 -0
- package/src/engines/Cesium/SpatialId/index.ts +3 -0
- package/src/engines/Cesium/common.ts +55 -18
- package/src/engines/Cesium/core/Clock.tsx +1 -1
- package/src/engines/Cesium/core/Globe/index.tsx +73 -0
- package/src/engines/Cesium/core/Globe/useTerrainProviderPromise.ts +79 -0
- package/src/engines/Cesium/core/Imagery.test.ts +29 -11
- package/src/engines/Cesium/core/Imagery.tsx +22 -6
- package/src/engines/Cesium/core/Indicator/Indicator.tsx +2 -2
- package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/JapanGSIOptimalBVmapLabelImagery.tsx +13 -6
- package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/JapanGSIOptimalBVmapLabelImageryLayer.tsx +2 -1
- package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/JapanGSIOptimalBVmapLabelImageryProvider.ts +3 -4
- package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/JapanGSIOptimalBVmapVectorMapLabel.tsx +14 -2
- package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/helpers.ts +1 -1
- package/src/engines/Cesium/core/labels/LabelImageryLayers.tsx +10 -1
- package/src/engines/Cesium/core/presets.ts +24 -28
- package/src/engines/Cesium/helpers/getGeometryFromEntity.ts +55 -0
- package/src/engines/Cesium/hooks/useCamera.ts +2 -2
- package/src/engines/Cesium/hooks/useCameraLimiter.ts +1 -1
- package/src/engines/Cesium/hooks/useEngineRef.ts +52 -5
- package/src/engines/Cesium/hooks/useExplicitRender.ts +2 -2
- package/src/engines/Cesium/hooks/useInstance.ts +1 -1
- package/src/engines/Cesium/hooks/useLayerDragDrop.ts +3 -3
- package/src/engines/Cesium/hooks/useLayerSelectWithRect.ts +2 -2
- package/src/engines/Cesium/hooks/useOverrideGlobeShader/useOverrideGlobeShader.ts +115 -67
- package/src/engines/Cesium/hooks/useViewerProperty.ts +1 -1
- package/src/engines/Cesium/hooks.ts +55 -14
- package/src/engines/Cesium/index.stories.tsx +0 -1
- package/src/engines/Cesium/index.tsx +20 -6
- package/src/engines/Cesium/pickMany.ts +2 -0
- package/src/engines/Cesium/types.ts +1 -1
- package/src/engines/Cesium/utils/mouse.ts +1 -1
- package/src/engines/Cesium/utils/utils.ts +1 -1
- package/src/mantle/atoms/compute.test.ts +4 -4
- package/src/mantle/atoms/compute.ts +8 -4
- package/src/mantle/compat/forward.ts +1 -1
- package/src/mantle/data/geojson.ts +53 -22
- package/src/mantle/data/georss.ts +2 -2
- package/src/mantle/data/gml.ts +2 -2
- package/src/mantle/data/gpx.ts +2 -2
- package/src/mantle/data/shapefile/parseZip.ts +1 -0
- package/src/mantle/evaluator/simple/expression/README.md +392 -0
- package/src/mantle/evaluator/simple/expression/expression.test.ts +137 -0
- package/src/mantle/evaluator/simple/expression/node.ts +10 -12
- package/src/mantle/evaluator/simple/expression/variableReplacer.test.ts +178 -0
- package/src/mantle/evaluator/simple/expression/variableReplacer.ts +24 -11
- package/src/mantle/types/appearance.ts +4 -2
- package/src/mantle/types/index.ts +3 -0
- package/src/{Visualizer → shared}/interactionMode.ts +3 -2
- package/src/test/setup.ts +1 -1
- package/src/test/utils.tsx +1 -1
- package/src/types/modules.d.ts +96 -0
- package/src/utils/StringMatcher.ts +1 -1
- package/src/utils/image.ts +2 -12
- package/src/utils/use-delayed-count.ts +1 -1
- package/src/utils/use-dnd/drop.ts +1 -1
- package/src/utils/util.ts +1 -1
- package/src/utils/value.ts +2 -2
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json +0 -1
- package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json +0 -1
- package/dist/cesium/Assets/Images/bing_maps_credit.png +0 -0
- package/dist/cesium/Assets/Images/cesium_credit.png +0 -0
- package/dist/cesium/Assets/Images/google_earth_credit.png +0 -0
- package/dist/cesium/Assets/Images/ion-credit.png +0 -0
- package/dist/cesium/Assets/Textures/LensFlare/DirtMask.jpg +0 -0
- package/dist/cesium/Assets/Textures/LensFlare/StarBurst.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg +0 -0
- package/dist/cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml +0 -14
- package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
- package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
- package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
- package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
- package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
- package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
- package/dist/cesium/Assets/Textures/maki/airfield.png +0 -0
- package/dist/cesium/Assets/Textures/maki/airport.png +0 -0
- package/dist/cesium/Assets/Textures/maki/alcohol-shop.png +0 -0
- package/dist/cesium/Assets/Textures/maki/america-football.png +0 -0
- package/dist/cesium/Assets/Textures/maki/art-gallery.png +0 -0
- package/dist/cesium/Assets/Textures/maki/bakery.png +0 -0
- package/dist/cesium/Assets/Textures/maki/bank.png +0 -0
- package/dist/cesium/Assets/Textures/maki/bar.png +0 -0
- package/dist/cesium/Assets/Textures/maki/baseball.png +0 -0
- package/dist/cesium/Assets/Textures/maki/basketball.png +0 -0
- package/dist/cesium/Assets/Textures/maki/beer.png +0 -0
- package/dist/cesium/Assets/Textures/maki/bicycle.png +0 -0
- package/dist/cesium/Assets/Textures/maki/building.png +0 -0
- package/dist/cesium/Assets/Textures/maki/bus.png +0 -0
- package/dist/cesium/Assets/Textures/maki/cafe.png +0 -0
- package/dist/cesium/Assets/Textures/maki/camera.png +0 -0
- package/dist/cesium/Assets/Textures/maki/campsite.png +0 -0
- package/dist/cesium/Assets/Textures/maki/car.png +0 -0
- package/dist/cesium/Assets/Textures/maki/cemetery.png +0 -0
- package/dist/cesium/Assets/Textures/maki/cesium.png +0 -0
- package/dist/cesium/Assets/Textures/maki/chemist.png +0 -0
- package/dist/cesium/Assets/Textures/maki/cinema.png +0 -0
- package/dist/cesium/Assets/Textures/maki/circle-stroked.png +0 -0
- package/dist/cesium/Assets/Textures/maki/circle.png +0 -0
- package/dist/cesium/Assets/Textures/maki/city.png +0 -0
- package/dist/cesium/Assets/Textures/maki/clothing-store.png +0 -0
- package/dist/cesium/Assets/Textures/maki/college.png +0 -0
- package/dist/cesium/Assets/Textures/maki/commercial.png +0 -0
- package/dist/cesium/Assets/Textures/maki/cricket.png +0 -0
- package/dist/cesium/Assets/Textures/maki/cross.png +0 -0
- package/dist/cesium/Assets/Textures/maki/dam.png +0 -0
- package/dist/cesium/Assets/Textures/maki/danger.png +0 -0
- package/dist/cesium/Assets/Textures/maki/disability.png +0 -0
- package/dist/cesium/Assets/Textures/maki/dog-park.png +0 -0
- package/dist/cesium/Assets/Textures/maki/embassy.png +0 -0
- package/dist/cesium/Assets/Textures/maki/emergency-telephone.png +0 -0
- package/dist/cesium/Assets/Textures/maki/entrance.png +0 -0
- package/dist/cesium/Assets/Textures/maki/farm.png +0 -0
- package/dist/cesium/Assets/Textures/maki/fast-food.png +0 -0
- package/dist/cesium/Assets/Textures/maki/ferry.png +0 -0
- package/dist/cesium/Assets/Textures/maki/fire-station.png +0 -0
- package/dist/cesium/Assets/Textures/maki/fuel.png +0 -0
- package/dist/cesium/Assets/Textures/maki/garden.png +0 -0
- package/dist/cesium/Assets/Textures/maki/gift.png +0 -0
- package/dist/cesium/Assets/Textures/maki/golf.png +0 -0
- package/dist/cesium/Assets/Textures/maki/grocery.png +0 -0
- package/dist/cesium/Assets/Textures/maki/hairdresser.png +0 -0
- package/dist/cesium/Assets/Textures/maki/harbor.png +0 -0
- package/dist/cesium/Assets/Textures/maki/heart.png +0 -0
- package/dist/cesium/Assets/Textures/maki/heliport.png +0 -0
- package/dist/cesium/Assets/Textures/maki/hospital.png +0 -0
- package/dist/cesium/Assets/Textures/maki/ice-cream.png +0 -0
- package/dist/cesium/Assets/Textures/maki/industrial.png +0 -0
- package/dist/cesium/Assets/Textures/maki/land-use.png +0 -0
- package/dist/cesium/Assets/Textures/maki/laundry.png +0 -0
- package/dist/cesium/Assets/Textures/maki/library.png +0 -0
- package/dist/cesium/Assets/Textures/maki/lighthouse.png +0 -0
- package/dist/cesium/Assets/Textures/maki/lodging.png +0 -0
- package/dist/cesium/Assets/Textures/maki/logging.png +0 -0
- package/dist/cesium/Assets/Textures/maki/london-underground.png +0 -0
- package/dist/cesium/Assets/Textures/maki/marker-stroked.png +0 -0
- package/dist/cesium/Assets/Textures/maki/marker.png +0 -0
- package/dist/cesium/Assets/Textures/maki/minefield.png +0 -0
- package/dist/cesium/Assets/Textures/maki/mobilephone.png +0 -0
- package/dist/cesium/Assets/Textures/maki/monument.png +0 -0
- package/dist/cesium/Assets/Textures/maki/museum.png +0 -0
- package/dist/cesium/Assets/Textures/maki/music.png +0 -0
- package/dist/cesium/Assets/Textures/maki/oil-well.png +0 -0
- package/dist/cesium/Assets/Textures/maki/park.png +0 -0
- package/dist/cesium/Assets/Textures/maki/park2.png +0 -0
- package/dist/cesium/Assets/Textures/maki/parking-garage.png +0 -0
- package/dist/cesium/Assets/Textures/maki/parking.png +0 -0
- package/dist/cesium/Assets/Textures/maki/pharmacy.png +0 -0
- package/dist/cesium/Assets/Textures/maki/pitch.png +0 -0
- package/dist/cesium/Assets/Textures/maki/place-of-worship.png +0 -0
- package/dist/cesium/Assets/Textures/maki/playground.png +0 -0
- package/dist/cesium/Assets/Textures/maki/police.png +0 -0
- package/dist/cesium/Assets/Textures/maki/polling-place.png +0 -0
- package/dist/cesium/Assets/Textures/maki/post.png +0 -0
- package/dist/cesium/Assets/Textures/maki/prison.png +0 -0
- package/dist/cesium/Assets/Textures/maki/rail-above.png +0 -0
- package/dist/cesium/Assets/Textures/maki/rail-light.png +0 -0
- package/dist/cesium/Assets/Textures/maki/rail-metro.png +0 -0
- package/dist/cesium/Assets/Textures/maki/rail-underground.png +0 -0
- package/dist/cesium/Assets/Textures/maki/rail.png +0 -0
- package/dist/cesium/Assets/Textures/maki/religious-christian.png +0 -0
- package/dist/cesium/Assets/Textures/maki/religious-jewish.png +0 -0
- package/dist/cesium/Assets/Textures/maki/religious-muslim.png +0 -0
- package/dist/cesium/Assets/Textures/maki/restaurant.png +0 -0
- package/dist/cesium/Assets/Textures/maki/roadblock.png +0 -0
- package/dist/cesium/Assets/Textures/maki/rocket.png +0 -0
- package/dist/cesium/Assets/Textures/maki/school.png +0 -0
- package/dist/cesium/Assets/Textures/maki/scooter.png +0 -0
- package/dist/cesium/Assets/Textures/maki/shop.png +0 -0
- package/dist/cesium/Assets/Textures/maki/skiing.png +0 -0
- package/dist/cesium/Assets/Textures/maki/slaughterhouse.png +0 -0
- package/dist/cesium/Assets/Textures/maki/soccer.png +0 -0
- package/dist/cesium/Assets/Textures/maki/square-stroked.png +0 -0
- package/dist/cesium/Assets/Textures/maki/square.png +0 -0
- package/dist/cesium/Assets/Textures/maki/star-stroked.png +0 -0
- package/dist/cesium/Assets/Textures/maki/star.png +0 -0
- package/dist/cesium/Assets/Textures/maki/suitcase.png +0 -0
- package/dist/cesium/Assets/Textures/maki/swimming.png +0 -0
- package/dist/cesium/Assets/Textures/maki/telephone.png +0 -0
- package/dist/cesium/Assets/Textures/maki/tennis.png +0 -0
- package/dist/cesium/Assets/Textures/maki/theatre.png +0 -0
- package/dist/cesium/Assets/Textures/maki/toilets.png +0 -0
- package/dist/cesium/Assets/Textures/maki/town-hall.png +0 -0
- package/dist/cesium/Assets/Textures/maki/town.png +0 -0
- package/dist/cesium/Assets/Textures/maki/triangle-stroked.png +0 -0
- package/dist/cesium/Assets/Textures/maki/triangle.png +0 -0
- package/dist/cesium/Assets/Textures/maki/village.png +0 -0
- package/dist/cesium/Assets/Textures/maki/warehouse.png +0 -0
- package/dist/cesium/Assets/Textures/maki/waste-basket.png +0 -0
- package/dist/cesium/Assets/Textures/maki/water.png +0 -0
- package/dist/cesium/Assets/Textures/maki/wetland.png +0 -0
- package/dist/cesium/Assets/Textures/maki/zoo.png +0 -0
- package/dist/cesium/Assets/Textures/moonSmall.jpg +0 -0
- package/dist/cesium/Assets/Textures/pin.svg +0 -1
- package/dist/cesium/Assets/Textures/waterNormals.jpg +0 -0
- package/dist/cesium/Assets/Textures/waterNormalsSmall.jpg +0 -0
- package/dist/cesium/Assets/approximateTerrainHeights.json +0 -1
- package/dist/cesium/ThirdParty/Workers/package.json +0 -1
- package/dist/cesium/ThirdParty/Workers/pako_deflate.min.js +0 -1
- package/dist/cesium/ThirdParty/Workers/pako_inflate.min.js +0 -1
- package/dist/cesium/ThirdParty/Workers/z-worker-pako.js +0 -1
- package/dist/cesium/ThirdParty/basis_transcoder.wasm +0 -0
- package/dist/cesium/ThirdParty/draco_decoder.wasm +0 -0
- package/dist/cesium/ThirdParty/google-earth-dbroot-parser.js +0 -1
- package/dist/cesium/Widgets/Animation/Animation.css +0 -127
- package/dist/cesium/Widgets/Animation/lighter.css +0 -70
- package/dist/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css +0 -108
- package/dist/cesium/Widgets/BaseLayerPicker/lighter.css +0 -22
- package/dist/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css +0 -102
- package/dist/cesium/Widgets/CesiumInspector/CesiumInspector.css +0 -113
- package/dist/cesium/Widgets/CesiumWidget/CesiumWidget.css +0 -124
- package/dist/cesium/Widgets/CesiumWidget/lighter.css +0 -14
- package/dist/cesium/Widgets/FullscreenButton/FullscreenButton.css +0 -8
- package/dist/cesium/Widgets/Geocoder/Geocoder.css +0 -70
- package/dist/cesium/Widgets/Geocoder/lighter.css +0 -17
- package/dist/cesium/Widgets/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorer.css +0 -27
- package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/bingAerial.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/bingRoads.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/blueMarble.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/earthAtNight.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/mapboxStreets.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/naturalEarthII.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/openStreetMap.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/sentinel-2.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/stamenToner.png +0 -0
- package/dist/cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png +0 -0
- package/dist/cesium/Widgets/Images/NavigationHelp/Mouse.svg +0 -84
- package/dist/cesium/Widgets/Images/NavigationHelp/MouseLeft.svg +0 -76
- package/dist/cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg +0 -76
- package/dist/cesium/Widgets/Images/NavigationHelp/MouseRight.svg +0 -76
- package/dist/cesium/Widgets/Images/NavigationHelp/Touch.svg +0 -120
- package/dist/cesium/Widgets/Images/NavigationHelp/TouchDrag.svg +0 -129
- package/dist/cesium/Widgets/Images/NavigationHelp/TouchRotate.svg +0 -76
- package/dist/cesium/Widgets/Images/NavigationHelp/TouchTilt.svg +0 -135
- package/dist/cesium/Widgets/Images/NavigationHelp/TouchZoom.svg +0 -74
- package/dist/cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png +0 -0
- package/dist/cesium/Widgets/Images/TerrainProviders/Ellipsoid.png +0 -0
- package/dist/cesium/Widgets/Images/TimelineIcons.png +0 -0
- package/dist/cesium/Widgets/Images/info-loading.gif +0 -0
- package/dist/cesium/Widgets/InfoBox/InfoBox.css +0 -92
- package/dist/cesium/Widgets/InfoBox/InfoBoxDescription.css +0 -178
- package/dist/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css +0 -93
- package/dist/cesium/Widgets/NavigationHelpButton/lighter.css +0 -38
- package/dist/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css +0 -15
- package/dist/cesium/Widgets/ProjectionPicker/ProjectionPicker.css +0 -38
- package/dist/cesium/Widgets/SceneModePicker/SceneModePicker.css +0 -56
- package/dist/cesium/Widgets/SelectionIndicator/SelectionIndicator.css +0 -20
- package/dist/cesium/Widgets/Timeline/Timeline.css +0 -103
- package/dist/cesium/Widgets/Timeline/lighter.css +0 -23
- package/dist/cesium/Widgets/VRButton/VRButton.css +0 -8
- package/dist/cesium/Widgets/Viewer/Viewer.css +0 -107
- package/dist/cesium/Widgets/VoxelInspector/VoxelInspector.css +0 -16
- package/dist/cesium/Widgets/lighter.css +0 -237
- package/dist/cesium/Widgets/lighterShared.css +0 -46
- package/dist/cesium/Widgets/shared.css +0 -103
- package/dist/cesium/Widgets/widgets.css +0 -1346
- package/dist/cesium/Workers/chunk-2YD5QWGR.js +0 -28
- package/dist/cesium/Workers/chunk-3T4KR75X.js +0 -26
- package/dist/cesium/Workers/chunk-46KFVW24.js +0 -26
- package/dist/cesium/Workers/chunk-4EI6PP43.js +0 -28
- package/dist/cesium/Workers/chunk-4RS52VIY.js +0 -26
- package/dist/cesium/Workers/chunk-4YLYA3DC.js +0 -26
- package/dist/cesium/Workers/chunk-5ENAGXBI.js +0 -26
- package/dist/cesium/Workers/chunk-5VIB3TI5.js +0 -26
- package/dist/cesium/Workers/chunk-6NGZLDFZ.js +0 -26
- package/dist/cesium/Workers/chunk-6RGNWVZ2.js +0 -27
- package/dist/cesium/Workers/chunk-7AZZVJ52.js +0 -26
- package/dist/cesium/Workers/chunk-AMXAQQEL.js +0 -26
- package/dist/cesium/Workers/chunk-AQW44ZPC.js +0 -26
- package/dist/cesium/Workers/chunk-CPCMDW6Z.js +0 -26
- package/dist/cesium/Workers/chunk-DNL2WDRL.js +0 -26
- package/dist/cesium/Workers/chunk-ERW7V247.js +0 -26
- package/dist/cesium/Workers/chunk-EYRIA4TP.js +0 -26
- package/dist/cesium/Workers/chunk-F7RQIJML.js +0 -26
- package/dist/cesium/Workers/chunk-FPZMU6QP.js +0 -26
- package/dist/cesium/Workers/chunk-FZDVQW7A.js +0 -26
- package/dist/cesium/Workers/chunk-GAZ2U4FO.js +0 -26
- package/dist/cesium/Workers/chunk-I44IOOT4.js +0 -26
- package/dist/cesium/Workers/chunk-IALXUAD4.js +0 -26
- package/dist/cesium/Workers/chunk-IXBUEUZL.js +0 -26
- package/dist/cesium/Workers/chunk-J3GCYV5K.js +0 -26
- package/dist/cesium/Workers/chunk-KGSZTFHZ.js +0 -26
- package/dist/cesium/Workers/chunk-KKKPU2CI.js +0 -26
- package/dist/cesium/Workers/chunk-KTEJE5KE.js +0 -26
- package/dist/cesium/Workers/chunk-KYZ3DYY6.js +0 -26
- package/dist/cesium/Workers/chunk-L2QG4MRI.js +0 -26
- package/dist/cesium/Workers/chunk-MCE3KFYN.js +0 -26
- package/dist/cesium/Workers/chunk-MMLDGXML.js +0 -26
- package/dist/cesium/Workers/chunk-MTBRPBDQ.js +0 -26
- package/dist/cesium/Workers/chunk-OKT6VBRK.js +0 -26
- package/dist/cesium/Workers/chunk-PHYDKLSY.js +0 -26
- package/dist/cesium/Workers/chunk-PWPX3224.js +0 -26
- package/dist/cesium/Workers/chunk-QHOVE6WG.js +0 -26
- package/dist/cesium/Workers/chunk-QJ6MBL22.js +0 -26
- package/dist/cesium/Workers/chunk-QKO6VIG2.js +0 -26
- package/dist/cesium/Workers/chunk-QVEE4QL2.js +0 -26
- package/dist/cesium/Workers/chunk-RXQOQZ7S.js +0 -26
- package/dist/cesium/Workers/chunk-S3ZKQKMM.js +0 -26
- package/dist/cesium/Workers/chunk-SFEUMZSK.js +0 -26
- package/dist/cesium/Workers/chunk-T75MW4X3.js +0 -26
- package/dist/cesium/Workers/chunk-TVO2A75R.js +0 -66
- package/dist/cesium/Workers/chunk-UHR36K45.js +0 -27
- package/dist/cesium/Workers/chunk-UKJCDZOR.js +0 -26
- package/dist/cesium/Workers/chunk-VKVIYER6.js +0 -26
- package/dist/cesium/Workers/chunk-VPIQWTRZ.js +0 -26
- package/dist/cesium/Workers/chunk-XSX5HRFC.js +0 -26
- package/dist/cesium/Workers/chunk-Z5WQQHSL.js +0 -26
- package/dist/cesium/Workers/chunk-Z7B2VEL5.js +0 -26
- package/dist/cesium/Workers/combineGeometry.js +0 -26
- package/dist/cesium/Workers/createBoxGeometry.js +0 -26
- package/dist/cesium/Workers/createBoxOutlineGeometry.js +0 -26
- package/dist/cesium/Workers/createCircleGeometry.js +0 -26
- package/dist/cesium/Workers/createCircleOutlineGeometry.js +0 -26
- package/dist/cesium/Workers/createCoplanarPolygonGeometry.js +0 -26
- package/dist/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +0 -26
- package/dist/cesium/Workers/createCorridorGeometry.js +0 -26
- package/dist/cesium/Workers/createCorridorOutlineGeometry.js +0 -26
- package/dist/cesium/Workers/createCylinderGeometry.js +0 -26
- package/dist/cesium/Workers/createCylinderOutlineGeometry.js +0 -26
- package/dist/cesium/Workers/createEllipseGeometry.js +0 -26
- package/dist/cesium/Workers/createEllipseOutlineGeometry.js +0 -26
- package/dist/cesium/Workers/createEllipsoidGeometry.js +0 -26
- package/dist/cesium/Workers/createEllipsoidOutlineGeometry.js +0 -26
- package/dist/cesium/Workers/createFrustumGeometry.js +0 -26
- package/dist/cesium/Workers/createFrustumOutlineGeometry.js +0 -26
- package/dist/cesium/Workers/createGeometry.js +0 -26
- package/dist/cesium/Workers/createGroundPolylineGeometry.js +0 -26
- package/dist/cesium/Workers/createPlaneGeometry.js +0 -26
- package/dist/cesium/Workers/createPlaneOutlineGeometry.js +0 -26
- package/dist/cesium/Workers/createPolygonGeometry.js +0 -26
- package/dist/cesium/Workers/createPolygonOutlineGeometry.js +0 -26
- package/dist/cesium/Workers/createPolylineGeometry.js +0 -26
- package/dist/cesium/Workers/createPolylineVolumeGeometry.js +0 -26
- package/dist/cesium/Workers/createPolylineVolumeOutlineGeometry.js +0 -26
- package/dist/cesium/Workers/createRectangleGeometry.js +0 -26
- package/dist/cesium/Workers/createRectangleOutlineGeometry.js +0 -26
- package/dist/cesium/Workers/createSimplePolylineGeometry.js +0 -26
- package/dist/cesium/Workers/createSphereGeometry.js +0 -26
- package/dist/cesium/Workers/createSphereOutlineGeometry.js +0 -26
- package/dist/cesium/Workers/createTaskProcessorWorker.js +0 -26
- package/dist/cesium/Workers/createVectorTileClampedPolylines.js +0 -26
- package/dist/cesium/Workers/createVectorTileGeometries.js +0 -26
- package/dist/cesium/Workers/createVectorTilePoints.js +0 -26
- package/dist/cesium/Workers/createVectorTilePolygons.js +0 -26
- package/dist/cesium/Workers/createVectorTilePolylines.js +0 -26
- package/dist/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +0 -26
- package/dist/cesium/Workers/createVerticesFromHeightmap.js +0 -26
- package/dist/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +0 -26
- package/dist/cesium/Workers/createWallGeometry.js +0 -26
- package/dist/cesium/Workers/createWallOutlineGeometry.js +0 -26
- package/dist/cesium/Workers/decodeDraco.js +0 -26
- package/dist/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +0 -26
- package/dist/cesium/Workers/decodeI3S.js +0 -26
- package/dist/cesium/Workers/transcodeKTX2.js +0 -56
- package/dist/cesium/Workers/transferTypedArrayTest.js +0 -26
- package/dist/cesium/Workers/upsampleQuantizedTerrainMesh.js +0 -26
- package/src/engines/Cesium/core/Globe.tsx +0 -104
- /package/src/{Visualizer → shared}/featureFlags.ts +0 -0
- /package/src/{Map/Sketch/utils.ts → utils/use-window-event.ts} +0 -0
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
# Expression Evaluator
|
|
2
|
+
|
|
3
|
+
A powerful expression evaluator for evaluating dynamic expressions with feature properties, supporting various operators, functions, and property access methods.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Basic Usage](#basic-usage)
|
|
8
|
+
- [Property Access](#property-access)
|
|
9
|
+
- [Operators](#operators)
|
|
10
|
+
- [Functions](#functions)
|
|
11
|
+
- [Data Types](#data-types)
|
|
12
|
+
- [Advanced Features](#advanced-features)
|
|
13
|
+
|
|
14
|
+
## Basic Usage
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import { Expression } from "./expression";
|
|
18
|
+
|
|
19
|
+
const feature = {
|
|
20
|
+
properties: {
|
|
21
|
+
height: 100,
|
|
22
|
+
name: "Building A",
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const expr = new Expression("${height} > 50", feature);
|
|
27
|
+
const result = expr.evaluate(); // true
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Property Access
|
|
31
|
+
|
|
32
|
+
### 1. Standard Property Names (No Spaces)
|
|
33
|
+
|
|
34
|
+
For properties without spaces or special characters, use the simple syntax:
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
${propertyName}
|
|
38
|
+
${height}
|
|
39
|
+
${temperature}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Example:**
|
|
43
|
+
```typescript
|
|
44
|
+
const feature = {
|
|
45
|
+
properties: {
|
|
46
|
+
height: 100,
|
|
47
|
+
width: 50,
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const expr = new Expression("${height} * ${width}", feature);
|
|
52
|
+
expr.evaluate(); // 5000
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 2. Quoted Property Names (With Spaces)
|
|
56
|
+
|
|
57
|
+
**✨ NEW:** For properties with spaces or special characters, wrap the property name in quotes:
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
${"property name"} // Double quotes (recommended)
|
|
61
|
+
${'property name'} // Single quotes
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Example:**
|
|
65
|
+
```typescript
|
|
66
|
+
const feature = {
|
|
67
|
+
properties: {
|
|
68
|
+
"user name": "Alice",
|
|
69
|
+
"user score": 95,
|
|
70
|
+
"email@address": "alice@example.com",
|
|
71
|
+
"user-info:age": 25,
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
// Access properties with spaces
|
|
76
|
+
const expr1 = new Expression('${"user name"}', feature);
|
|
77
|
+
expr1.evaluate(); // "Alice"
|
|
78
|
+
|
|
79
|
+
// Use in conditionals
|
|
80
|
+
const expr2 = new Expression('${"user score"} > 90 ? "Excellent" : "Good"', feature);
|
|
81
|
+
expr2.evaluate(); // "Excellent"
|
|
82
|
+
|
|
83
|
+
// Arithmetic operations
|
|
84
|
+
const expr3 = new Expression('${"user-info:age"} + 5', feature);
|
|
85
|
+
expr3.evaluate(); // 30
|
|
86
|
+
|
|
87
|
+
// Properties with special characters
|
|
88
|
+
const expr4 = new Expression('${"email@address"} !== ""', feature);
|
|
89
|
+
expr4.evaluate(); // true
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Supported Characters in Quoted Names:**
|
|
93
|
+
- Spaces: `${"user name"}`
|
|
94
|
+
- Hyphens: `${"user-info"}`
|
|
95
|
+
- Colons: `${"category:name"}`
|
|
96
|
+
- At signs: `${"email@domain"}`
|
|
97
|
+
- Any other special characters
|
|
98
|
+
|
|
99
|
+
### 3. Special Variables
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
${id} // Access feature.id
|
|
103
|
+
${rootProperties} // Access entire feature.properties object
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Example:**
|
|
107
|
+
```typescript
|
|
108
|
+
const feature = {
|
|
109
|
+
id: "feature-123",
|
|
110
|
+
properties: {
|
|
111
|
+
height: 100,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
const expr = new Expression('${id}', feature);
|
|
116
|
+
expr.evaluate(); // "feature-123"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Operators
|
|
120
|
+
|
|
121
|
+
### Comparison Operators
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
${height} > 50 // Greater than
|
|
125
|
+
${height} >= 50 // Greater than or equal
|
|
126
|
+
${height} < 100 // Less than
|
|
127
|
+
${height} <= 100 // Less than or equal
|
|
128
|
+
${height} === 50 // Strict equality
|
|
129
|
+
${height} !== 50 // Strict inequality
|
|
130
|
+
${height} == 50 // Loose equality (with type coercion)
|
|
131
|
+
${height} != 50 // Loose inequality
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Arithmetic Operators
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
${a} + ${b} // Addition
|
|
138
|
+
${a} - ${b} // Subtraction
|
|
139
|
+
${a} * ${b} // Multiplication
|
|
140
|
+
${a} / ${b} // Division
|
|
141
|
+
${a} % ${b} // Modulo
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Logical Operators
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
${a} && ${b} // Logical AND
|
|
148
|
+
${a} || ${b} // Logical OR
|
|
149
|
+
!${a} // Logical NOT
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Conditional (Ternary) Operator
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
${condition} ? ${trueValue} : ${falseValue}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**Example:**
|
|
159
|
+
```typescript
|
|
160
|
+
const expr = new Expression('${height} > 100 ? "Tall" : "Short"', feature);
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Functions
|
|
164
|
+
|
|
165
|
+
### Type Conversion Functions
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
Boolean(${value}) // Convert to boolean
|
|
169
|
+
Number(${value}) // Convert to number
|
|
170
|
+
String(${value}) // Convert to string
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Math Functions
|
|
174
|
+
|
|
175
|
+
```typescript
|
|
176
|
+
abs(${value}) // Absolute value
|
|
177
|
+
sqrt(${value}) // Square root
|
|
178
|
+
ceil(${value}) // Round up
|
|
179
|
+
floor(${value}) // Round down
|
|
180
|
+
round(${value}) // Round to nearest integer
|
|
181
|
+
sin(${value}) // Sine
|
|
182
|
+
cos(${value}) // Cosine
|
|
183
|
+
tan(${value}) // Tangent
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Utility Functions
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
isNaN(${value}) // Check if Not a Number
|
|
190
|
+
isFinite(${value}) // Check if finite number
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Color Functions
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
color("red") // Named color
|
|
197
|
+
color("#ff0000") // Hex color
|
|
198
|
+
color("#ff0000", 0.5) // Hex color with alpha
|
|
199
|
+
rgb(255, 0, 0) // RGB color
|
|
200
|
+
rgba(255, 0, 0, 0.5) // RGBA color
|
|
201
|
+
hsl(0, 100, 50) // HSL color
|
|
202
|
+
hsla(0, 100, 50, 0.5) // HSLA color
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**Example:**
|
|
206
|
+
```typescript
|
|
207
|
+
const expr = new Expression('${height} > 100 ? color("red") : color("blue")', feature);
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
## Data Types
|
|
211
|
+
|
|
212
|
+
### Supported Types
|
|
213
|
+
|
|
214
|
+
- **Numbers**: `42`, `3.14`, `Infinity`, `NaN`
|
|
215
|
+
- **Strings**: `"hello"`, `'world'`
|
|
216
|
+
- **Booleans**: `true`, `false`
|
|
217
|
+
- **Null**: `null`
|
|
218
|
+
- **Undefined**: `undefined`
|
|
219
|
+
- **Arrays**: `[1, 2, 3]`
|
|
220
|
+
- **Colors**: Result of color functions
|
|
221
|
+
|
|
222
|
+
### Constants
|
|
223
|
+
|
|
224
|
+
```typescript
|
|
225
|
+
Math.PI // 3.141592653589793
|
|
226
|
+
Math.E // 2.718281828459045
|
|
227
|
+
Number.POSITIVE_INFINITY
|
|
228
|
+
NaN
|
|
229
|
+
Infinity
|
|
230
|
+
undefined
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## Advanced Features
|
|
234
|
+
|
|
235
|
+
### String Interpolation
|
|
236
|
+
|
|
237
|
+
Within string literals, you can interpolate property values:
|
|
238
|
+
|
|
239
|
+
```typescript
|
|
240
|
+
"Hello, ${name}!"
|
|
241
|
+
"Height: ${height}m"
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
**Note:** String interpolation only supports simple property names (without spaces). For properties with spaces or special characters, use concatenation instead (see below).
|
|
245
|
+
|
|
246
|
+
**Example:**
|
|
247
|
+
```typescript
|
|
248
|
+
const feature = {
|
|
249
|
+
properties: {
|
|
250
|
+
name: "Building A",
|
|
251
|
+
height: 100,
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
const expr = new Expression('"Building: ${name}, Height: ${height}m"', feature);
|
|
256
|
+
expr.evaluate(); // "Building: Building A, Height: 100m"
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
**For properties with spaces, use concatenation:**
|
|
260
|
+
```typescript
|
|
261
|
+
const feature = {
|
|
262
|
+
properties: {
|
|
263
|
+
"building name": "Tower A",
|
|
264
|
+
floors: 30,
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
// Use concatenation with + operator
|
|
269
|
+
const expr = new Expression('${"building name"} + " has " + ${floors} + " floors"', feature);
|
|
270
|
+
expr.evaluate(); // "Tower A has 30 floors"
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Array Comparisons
|
|
274
|
+
|
|
275
|
+
The equality operators support checking if a value is in an array:
|
|
276
|
+
|
|
277
|
+
```typescript
|
|
278
|
+
${value} == [1, 2, 3] // Check if value is in array
|
|
279
|
+
${value} != [1, 2, 3] // Check if value is not in array
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
**Example:**
|
|
283
|
+
```typescript
|
|
284
|
+
const feature = {
|
|
285
|
+
properties: {
|
|
286
|
+
status: "active",
|
|
287
|
+
},
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
const expr = new Expression('${status} == ["active", "pending"]', feature);
|
|
291
|
+
expr.evaluate(); // true
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Defines (Variable Substitution)
|
|
295
|
+
|
|
296
|
+
You can define placeholder values that get substituted before evaluation:
|
|
297
|
+
|
|
298
|
+
```typescript
|
|
299
|
+
const defines = {
|
|
300
|
+
MAX_HEIGHT: "100",
|
|
301
|
+
MIN_HEIGHT: "10",
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
const expr = new Expression("${height} > ${MAX_HEIGHT}", feature, defines);
|
|
305
|
+
// Becomes: "${height} > 100"
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### Expression Caching
|
|
309
|
+
|
|
310
|
+
Expressions are cached automatically for better performance. To clear caches:
|
|
311
|
+
|
|
312
|
+
```typescript
|
|
313
|
+
import { clearExpressionCaches } from "./expression";
|
|
314
|
+
|
|
315
|
+
clearExpressionCaches(expressionString, feature, defines);
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
## Property Name Comparison
|
|
319
|
+
|
|
320
|
+
| Syntax | Use Case | Example |
|
|
321
|
+
|--------|----------|---------|
|
|
322
|
+
| `${name}` | Simple properties (no spaces) | `${height}`, `${temperature}` |
|
|
323
|
+
| `${"property name"}` | Properties with spaces/special chars | `${"user name"}`, `${"email@domain"}` |
|
|
324
|
+
| `${rootProperties}` | Access entire properties object | `${rootProperties["dynamic-key"]}` |
|
|
325
|
+
|
|
326
|
+
## Complete Example
|
|
327
|
+
|
|
328
|
+
```typescript
|
|
329
|
+
import { Expression } from "./expression";
|
|
330
|
+
|
|
331
|
+
const feature = {
|
|
332
|
+
id: "building-001",
|
|
333
|
+
properties: {
|
|
334
|
+
"building name": "Tower A",
|
|
335
|
+
"building height": 150,
|
|
336
|
+
"building color": "blue",
|
|
337
|
+
floors: 30,
|
|
338
|
+
status: "active",
|
|
339
|
+
"contact info": {
|
|
340
|
+
"email address": "info@tower-a.com",
|
|
341
|
+
},
|
|
342
|
+
},
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
// Simple comparison
|
|
346
|
+
const expr1 = new Expression('${"building height"} > 100', feature);
|
|
347
|
+
console.log(expr1.evaluate()); // true
|
|
348
|
+
|
|
349
|
+
// Conditional with color
|
|
350
|
+
const expr2 = new Expression(
|
|
351
|
+
'${"building height"} > 100 ? color("red") : color("green")',
|
|
352
|
+
feature
|
|
353
|
+
);
|
|
354
|
+
console.log(expr2.evaluate()); // #ff0000 (red)
|
|
355
|
+
|
|
356
|
+
// String concatenation (for properties with spaces)
|
|
357
|
+
const expr3 = new Expression(
|
|
358
|
+
'${"building name"} + " has " + ${floors} + " floors"',
|
|
359
|
+
feature
|
|
360
|
+
);
|
|
361
|
+
console.log(expr3.evaluate()); // "Tower A has 30 floors"
|
|
362
|
+
|
|
363
|
+
// Array membership check
|
|
364
|
+
const expr4 = new Expression(
|
|
365
|
+
'${status} == ["active", "pending"]',
|
|
366
|
+
feature
|
|
367
|
+
);
|
|
368
|
+
console.log(expr4.evaluate()); // true
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
## Migration Guide
|
|
372
|
+
|
|
373
|
+
### From Standard Syntax to Quoted Syntax
|
|
374
|
+
|
|
375
|
+
If you have properties with spaces, you need to update your expressions:
|
|
376
|
+
|
|
377
|
+
**Before (doesn't work):**
|
|
378
|
+
```typescript
|
|
379
|
+
${user name} // ❌ Fails: interpreted as two separate identifiers
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
**After (works):**
|
|
383
|
+
```typescript
|
|
384
|
+
${"user name"} // ✅ Works: quoted property name
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### Best Practices
|
|
388
|
+
|
|
389
|
+
1. **Use simple syntax** for properties without spaces: `${height}`
|
|
390
|
+
2. **Use quoted syntax** for properties with spaces: `${"user name"}`
|
|
391
|
+
3. **Prefer double quotes** for consistency: `${"property"}` instead of `${'property'}`
|
|
392
|
+
4. **Avoid special characters in property names** when possible to keep expressions simple
|
|
@@ -26,6 +26,14 @@ describe("replaceDefines", () => {
|
|
|
26
26
|
});
|
|
27
27
|
expect(result).toBe("(value1) + (value2)");
|
|
28
28
|
});
|
|
29
|
+
|
|
30
|
+
test("should handle Japanese text with multiple variables", () => {
|
|
31
|
+
const result = replaceDefines("${住所} (${人数}人)", {
|
|
32
|
+
住所: "東京都渋谷区",
|
|
33
|
+
人数: "5",
|
|
34
|
+
});
|
|
35
|
+
expect(result).toBe("(東京都渋谷区) ((5)人)");
|
|
36
|
+
});
|
|
29
37
|
});
|
|
30
38
|
|
|
31
39
|
describe("removeBackslashes", () => {
|
|
@@ -40,6 +48,135 @@ describe("removeBackslashes", () => {
|
|
|
40
48
|
});
|
|
41
49
|
});
|
|
42
50
|
|
|
51
|
+
describe("Expression evaluation", () => {
|
|
52
|
+
test("should evaluate Japanese expression with feature properties as string literal", () => {
|
|
53
|
+
const expressionString = '"${住所} (${人数}人)"';
|
|
54
|
+
const feature = {
|
|
55
|
+
properties: {
|
|
56
|
+
住所: "緑町",
|
|
57
|
+
人数: 2,
|
|
58
|
+
},
|
|
59
|
+
} as Feature;
|
|
60
|
+
|
|
61
|
+
const expression = new Expression(expressionString, feature);
|
|
62
|
+
const result = expression.evaluate();
|
|
63
|
+
|
|
64
|
+
expect(result).toBe("緑町 (2人)");
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test("should evaluate Japanese expression with two spaces - user observation", () => {
|
|
68
|
+
const expressionString = '"${住所} (${人数}人)"';
|
|
69
|
+
const feature = {
|
|
70
|
+
properties: {
|
|
71
|
+
住所: "緑町",
|
|
72
|
+
人数: 2,
|
|
73
|
+
},
|
|
74
|
+
} as Feature;
|
|
75
|
+
|
|
76
|
+
const expression = new Expression(expressionString, feature);
|
|
77
|
+
const result = expression.evaluate();
|
|
78
|
+
|
|
79
|
+
expect(result).toBe("緑町 (2人)");
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
test("should evaluate expression with multiple variables", () => {
|
|
83
|
+
const expressionString = '"${name}: ${住所} (${人数}人) - ${status}"';
|
|
84
|
+
const feature = {
|
|
85
|
+
properties: {
|
|
86
|
+
name: "太郎",
|
|
87
|
+
住所: "緑町",
|
|
88
|
+
人数: 2,
|
|
89
|
+
status: "完了",
|
|
90
|
+
},
|
|
91
|
+
} as Feature;
|
|
92
|
+
|
|
93
|
+
const expression = new Expression(expressionString, feature);
|
|
94
|
+
const result = expression.evaluate();
|
|
95
|
+
|
|
96
|
+
expect(result).toBe("太郎: 緑町 (2人) - 完了");
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
test("should evaluate Japanese expression without quotes - shows the issue", () => {
|
|
100
|
+
const expressionString = "${住所} (${人数}人)";
|
|
101
|
+
const feature = {
|
|
102
|
+
properties: {
|
|
103
|
+
住所: "緑町",
|
|
104
|
+
人数: 2,
|
|
105
|
+
},
|
|
106
|
+
} as Feature;
|
|
107
|
+
|
|
108
|
+
expect(() => {
|
|
109
|
+
const expression = new Expression(expressionString, feature);
|
|
110
|
+
expression.evaluate();
|
|
111
|
+
}).toThrow('Unexpected function call "czm_住所"');
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
test("should evaluate expression with quoted property names containing spaces", () => {
|
|
115
|
+
const expressionString = '${"user name"}';
|
|
116
|
+
const feature = {
|
|
117
|
+
properties: {
|
|
118
|
+
"user name": "Alice",
|
|
119
|
+
"user age": 25,
|
|
120
|
+
},
|
|
121
|
+
} as Feature;
|
|
122
|
+
|
|
123
|
+
const expression = new Expression(expressionString, feature);
|
|
124
|
+
const result = expression.evaluate();
|
|
125
|
+
|
|
126
|
+
expect(result).toBe("Alice");
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
test("should evaluate conditional expression with quoted property names", () => {
|
|
130
|
+
const expressionString = '${"user score"} > 50 ? "Pass" : "Fail"';
|
|
131
|
+
const feature1 = {
|
|
132
|
+
properties: {
|
|
133
|
+
"user score": 75,
|
|
134
|
+
},
|
|
135
|
+
} as Feature;
|
|
136
|
+
const feature2 = {
|
|
137
|
+
properties: {
|
|
138
|
+
"user score": 30,
|
|
139
|
+
},
|
|
140
|
+
} as Feature;
|
|
141
|
+
|
|
142
|
+
const expression1 = new Expression(expressionString, feature1);
|
|
143
|
+
const expression2 = new Expression(expressionString, feature2);
|
|
144
|
+
|
|
145
|
+
expect(expression1.evaluate()).toBe("Pass");
|
|
146
|
+
expect(expression2.evaluate()).toBe("Fail");
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
test("should evaluate arithmetic expression with quoted property names", () => {
|
|
150
|
+
const expressionString = '${"item price"} * ${"item quantity"}';
|
|
151
|
+
const feature = {
|
|
152
|
+
properties: {
|
|
153
|
+
"item price": 10.5,
|
|
154
|
+
"item quantity": 3,
|
|
155
|
+
},
|
|
156
|
+
} as Feature;
|
|
157
|
+
|
|
158
|
+
const expression = new Expression(expressionString, feature);
|
|
159
|
+
const result = expression.evaluate();
|
|
160
|
+
|
|
161
|
+
expect(result).toBe(31.5);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
test("should handle quoted property names with special characters", () => {
|
|
165
|
+
const expressionString = '${"user-info:name"} === "Bob Smith"';
|
|
166
|
+
const feature = {
|
|
167
|
+
properties: {
|
|
168
|
+
"user-info:name": "Bob Smith",
|
|
169
|
+
"email@address": "bob@example.com",
|
|
170
|
+
},
|
|
171
|
+
} as Feature;
|
|
172
|
+
|
|
173
|
+
const expression = new Expression(expressionString, feature);
|
|
174
|
+
const result = expression.evaluate();
|
|
175
|
+
|
|
176
|
+
expect(result).toBe(true);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
|
|
43
180
|
describe("expression caches", () => {
|
|
44
181
|
beforeEach(() => {
|
|
45
182
|
EXPRESSION_CACHES.clear();
|
|
@@ -175,18 +175,16 @@ export class Node {
|
|
|
175
175
|
}
|
|
176
176
|
_evaluateVariableString(feature?: Feature) {
|
|
177
177
|
const variableRegex = /\${(.*?)}/g;
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
property
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
match = variableRegex.exec(result);
|
|
189
|
-
}
|
|
178
|
+
const result = this._value.replace(
|
|
179
|
+
variableRegex,
|
|
180
|
+
(_placeholder: string, variableName: string) => {
|
|
181
|
+
let property = feature?.properties[variableName];
|
|
182
|
+
if (typeof property === "undefined") {
|
|
183
|
+
property = "";
|
|
184
|
+
}
|
|
185
|
+
return property;
|
|
186
|
+
},
|
|
187
|
+
);
|
|
190
188
|
return result;
|
|
191
189
|
}
|
|
192
190
|
_evaluateVariable(feature?: Feature) {
|