diff --git a/.docker/Dockerfile b/.docker/Dockerfile
index 85540dee..81ef2e47 100644
--- a/.docker/Dockerfile
+++ b/.docker/Dockerfile
@@ -243,13 +243,6 @@ export GZ_SIM_SYSTEM_PLUGIN_PATH=\$HOME/ardupilot_gazebo/build:\$GZ_SIM_SYSTEM_P
# Add ardupilot_gazebo models and worlds
export GZ_SIM_RESOURCE_PATH=\$HOME/ardupilot_gazebo/models:\$HOME/ardupilot_gazebo/worlds:\$GZ_SIM_RESOURCE_PATH
-
-# Add blue models and worlds
-BLUE_DESCRIPTION=\$USER_WORKSPACE/src/blue/blue_description
-export GZ_SIM_RESOURCE_PATH=\$BLUE_DESCRIPTION/gazebo/models:\$BLUE_DESCRIPTION/gazebo/worlds:\$GZ_SIM_RESOURCE_PATH
-
-# Add blue meshes
-export GZ_SIM_RESOURCE_PATH=\$BLUE_DESCRIPTION/meshes:\$GZ_SIM_RESOURCE_PATH
EOT
FROM desktop AS desktop-nvidia
diff --git a/.docker/compose/nouveau-desktop.yaml b/.docker/compose/nouveau-desktop.yaml
index f18588de..d7ccecac 100644
--- a/.docker/compose/nouveau-desktop.yaml
+++ b/.docker/compose/nouveau-desktop.yaml
@@ -1,4 +1,3 @@
-version: "3"
services:
blue:
image: ghcr.io/robotic-decision-making-lab/blue:rolling-desktop
diff --git a/.docker/compose/nvidia-desktop.yaml b/.docker/compose/nvidia-desktop.yaml
index da240d51..86526f43 100644
--- a/.docker/compose/nvidia-desktop.yaml
+++ b/.docker/compose/nvidia-desktop.yaml
@@ -1,4 +1,3 @@
-version: "3"
services:
blue:
image: ghcr.io/robotic-decision-making-lab/blue:rolling-desktop-nvidia
diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml
index 22ba1977..bd903c86 100644
--- a/.github/workflows/docker.yaml
+++ b/.github/workflows/docker.yaml
@@ -99,7 +99,7 @@ jobs:
- if: github.event_name == 'push'
name: Build and push (non PR)
- uses: docker/bake-action@v5.7.0
+ uses: docker/bake-action@v5.10.0
env:
BLUE_ROS_DISTRO: ${{ matrix.ROS_DISTRO }}
BLUE_GITHUB_REPO: ${{ steps.lowercase-repo.outputs.repository }}
@@ -119,7 +119,7 @@ jobs:
# Pull request builds are not cached; and only built for AMD64
- if: github.event_name == 'pull_request'
name: Build and push (PR)
- uses: docker/bake-action@v5.7.0
+ uses: docker/bake-action@v5.10.0
env:
BLUE_ROS_DISTRO: ${{ matrix.ROS_DISTRO }}
BLUE_GITHUB_REPO: ${{ steps.lowercase-repo.outputs.repository }}
diff --git a/blue_bringup/launch/bluerov2/bluerov2.launch.yaml b/blue_bringup/launch/bluerov2/bluerov2.launch.yaml
index b57e0937..7781fd27 100644
--- a/blue_bringup/launch/bluerov2/bluerov2.launch.yaml
+++ b/blue_bringup/launch/bluerov2/bluerov2.launch.yaml
@@ -39,7 +39,7 @@ launch:
- arg:
name: gazebo_world_file
- default: $(find-pkg-share blue_description)/gazebo/worlds/$(var model_name)_underwater.world
+ default: $(find-pkg-share blue_description)/gazebo/worlds/underwater.world
- arg:
name: mavros_file
@@ -122,4 +122,4 @@ launch:
file: $(find-pkg-share blue_bringup)/launch/$(var model_name)/thrusters.launch.yaml
- include:
- file: $(find-pkg-share mobile_to_maritime)/launch/tf.launch.yaml
+ file: $(find-pkg-share message_transforms)/launch/tf.launch.yaml
diff --git a/blue_bringup/launch/bluerov2_heavy/bluerov2_heavy.launch.yaml b/blue_bringup/launch/bluerov2_heavy/bluerov2_heavy.launch.yaml
index 93897099..8d8f8de7 100644
--- a/blue_bringup/launch/bluerov2_heavy/bluerov2_heavy.launch.yaml
+++ b/blue_bringup/launch/bluerov2_heavy/bluerov2_heavy.launch.yaml
@@ -39,7 +39,7 @@ launch:
- arg:
name: gazebo_world_file
- default: $(find-pkg-share blue_description)/gazebo/worlds/$(var model_name)_underwater.world
+ default: $(find-pkg-share blue_description)/gazebo/worlds/underwater.world
- arg:
name: mavros_file
@@ -122,4 +122,4 @@ launch:
file: $(find-pkg-share blue_bringup)/launch/$(var model_name)/thrusters.launch.yaml
- include:
- file: $(find-pkg-share mobile_to_maritime)/launch/tf.launch.yaml
+ file: $(find-pkg-share message_transforms)/launch/tf.launch.yaml
diff --git a/blue_bringup/launch/bluerov2_heavy_reach/bluerov2_heavy_reach.launch.yaml b/blue_bringup/launch/bluerov2_heavy_reach/bluerov2_heavy_reach.launch.yaml
index d16e459b..1464a0a8 100644
--- a/blue_bringup/launch/bluerov2_heavy_reach/bluerov2_heavy_reach.launch.yaml
+++ b/blue_bringup/launch/bluerov2_heavy_reach/bluerov2_heavy_reach.launch.yaml
@@ -39,7 +39,7 @@ launch:
- arg:
name: gazebo_world_file
- default: $(find-pkg-share blue_description)/gazebo/worlds/$(var model_name)_underwater.world
+ default: $(find-pkg-share blue_description)/gazebo/worlds/underwater.world
- arg:
name: mavros_file
@@ -122,4 +122,4 @@ launch:
file: $(find-pkg-share blue_bringup)/launch/$(var model_name)/thrusters.launch.yaml
- include:
- file: $(find-pkg-share mobile_to_maritime)/launch/tf.launch.yaml
+ file: $(find-pkg-share message_transforms)/launch/tf.launch.yaml
diff --git a/blue_demos/control_integration/config/transforms.yaml b/blue_demos/control_integration/config/transforms.yaml
new file mode 100644
index 00000000..6f562a34
--- /dev/null
+++ b/blue_demos/control_integration/config/transforms.yaml
@@ -0,0 +1,11 @@
+/control_integration/message_transforms:
+ ros__parameters:
+
+ incoming_topics:
+ - /mavros/local_position/velocity_body
+
+ transforms:
+ /mavros/local_position/velocity_body:
+ outgoing_topic: /integral_sliding_mode_controller/system_state
+ message_type: geometry_msgs/msg/TwistStamped
+ frame_id: base_link_fsd
diff --git a/blue_demos/control_integration/launch/bluerov2_controllers.launch.py b/blue_demos/control_integration/launch/bluerov2_controllers.launch.py
index b4e6d059..e37dc412 100644
--- a/blue_demos/control_integration/launch/bluerov2_controllers.launch.py
+++ b/blue_demos/control_integration/launch/bluerov2_controllers.launch.py
@@ -19,9 +19,14 @@
# THE SOFTWARE.
from launch import LaunchDescription
-from launch.actions import DeclareLaunchArgument, RegisterEventHandler
+from launch.actions import (
+ DeclareLaunchArgument,
+ IncludeLaunchDescription,
+ RegisterEventHandler,
+)
from launch.event_handlers import OnProcessExit
-from launch.substitutions import PathJoinSubstitution
+from launch.launch_description_sources import PythonLaunchDescriptionSource
+from launch.substitutions import PathJoinSubstitution, TextSubstitution
from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageShare
@@ -48,18 +53,27 @@ def generate_launch_description() -> LaunchDescription:
]
# The ISMC expects state information to be provided in the FSD frame
- mobile_to_maritime_velocity_state = Node(
- package="mobile_to_maritime",
- executable="mobile_twist_stamped_to_maritime_twist",
- name="velocity_state_transform",
- parameters=[
- {
- "in_topic": "/mavros/local_position/velocity_body",
- "out_topic": "/integral_sliding_mode_controller/system_state",
- "qos_reliability": "best_effort",
- "qos_durability": "volatile",
- }
- ],
+ message_transformer = IncludeLaunchDescription(
+ PythonLaunchDescriptionSource(
+ PathJoinSubstitution(
+ [
+ FindPackageShare("message_transforms"),
+ "launch",
+ "message_transforms.launch.py",
+ ]
+ )
+ ),
+ launch_arguments={
+ "parameters_file": PathJoinSubstitution(
+ [
+ FindPackageShare("blue_demos"),
+ "control_integration",
+ "config",
+ "transforms.yaml",
+ ]
+ ),
+ "ns": TextSubstitution(text="control_integration"),
+ }.items(),
)
controller_manager = Node(
@@ -151,7 +165,7 @@ def generate_launch_description() -> LaunchDescription:
return LaunchDescription(
[
*args,
- mobile_to_maritime_velocity_state,
+ message_transformer,
controller_manager,
*delay_thruster_spawners,
delay_tam_controller_spawner_after_thruster_controller_spawners,
diff --git a/blue_demos/control_integration/launch/bluerov2_heavy_controllers.launch.py b/blue_demos/control_integration/launch/bluerov2_heavy_controllers.launch.py
index 5e367672..3f6ab9a9 100644
--- a/blue_demos/control_integration/launch/bluerov2_heavy_controllers.launch.py
+++ b/blue_demos/control_integration/launch/bluerov2_heavy_controllers.launch.py
@@ -19,9 +19,14 @@
# THE SOFTWARE.
from launch import LaunchDescription
-from launch.actions import DeclareLaunchArgument, RegisterEventHandler
+from launch.actions import (
+ DeclareLaunchArgument,
+ IncludeLaunchDescription,
+ RegisterEventHandler,
+)
from launch.event_handlers import OnProcessExit
-from launch.substitutions import PathJoinSubstitution
+from launch.launch_description_sources import PythonLaunchDescriptionSource
+from launch.substitutions import PathJoinSubstitution, TextSubstitution
from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageShare
@@ -47,18 +52,27 @@ def generate_launch_description() -> LaunchDescription:
]
# The ISMC expects state information to be provided in the FSD frame
- mobile_to_maritime_velocity_state = Node(
- package="mobile_to_maritime",
- executable="mobile_twist_stamped_to_maritime_twist",
- name="velocity_state_transform",
- parameters=[
- {
- "in_topic": "/mavros/local_position/velocity_body",
- "out_topic": "/integral_sliding_mode_controller/system_state",
- "qos_reliability": "best_effort",
- "qos_durability": "volatile",
- }
- ],
+ message_transformer = IncludeLaunchDescription(
+ PythonLaunchDescriptionSource(
+ PathJoinSubstitution(
+ [
+ FindPackageShare("message_transforms"),
+ "launch",
+ "message_transforms.launch.py",
+ ]
+ )
+ ),
+ launch_arguments={
+ "parameters_file": PathJoinSubstitution(
+ [
+ FindPackageShare("blue_demos"),
+ "control_integration",
+ "config",
+ "transforms.yaml",
+ ]
+ ),
+ "ns": TextSubstitution(text="control_integration"),
+ }.items(),
)
controller_manager = Node(
@@ -150,7 +164,7 @@ def generate_launch_description() -> LaunchDescription:
return LaunchDescription(
[
*args,
- mobile_to_maritime_velocity_state,
+ message_transformer,
controller_manager,
*delay_thruster_spawners,
delay_tam_controller_spawner_after_thruster_controller_spawners,
diff --git a/blue_demos/teleoperation/config/joy_teleop.yaml b/blue_demos/teleoperation/config/joy_teleop.yaml
index c1d3dd7a..aa19c8b6 100644
--- a/blue_demos/teleoperation/config/joy_teleop.yaml
+++ b/blue_demos/teleoperation/config/joy_teleop.yaml
@@ -8,7 +8,7 @@ joy_teleop:
manual_control:
type: topic
interface_type: geometry_msgs/msg/Twist
- topic_name: cmd_vel
+ topic_name: /cmd_vel
deadman_axes: [2]
axis_mappings:
linear-x:
diff --git a/blue_demos/teleoperation/config/transforms.yaml b/blue_demos/teleoperation/config/transforms.yaml
new file mode 100644
index 00000000..00c04540
--- /dev/null
+++ b/blue_demos/teleoperation/config/transforms.yaml
@@ -0,0 +1,10 @@
+message_transforms:
+ ros__parameters:
+
+ incoming_topics:
+ - /cmd_vel
+
+ transforms:
+ /cmd_vel:
+ outgoing_topic: /integral_sliding_mode_controller/reference
+ message_type: geometry_msgs/msg/Twist
diff --git a/blue_demos/teleoperation/launch/joy_teleop.launch.yaml b/blue_demos/teleoperation/launch/joy_teleop.launch.yaml
index 34598461..966f3620 100644
--- a/blue_demos/teleoperation/launch/joy_teleop.launch.yaml
+++ b/blue_demos/teleoperation/launch/joy_teleop.launch.yaml
@@ -5,8 +5,8 @@ launch:
default: $(find-pkg-share blue_demos)/teleoperation/config/joy_teleop.yaml
- arg:
- name: use_maritime
- default: "true"
+ name: transforms_file
+ default: $(find-pkg-share blue_demos)/teleoperation/config/transforms.yaml
- node:
pkg: joy_linux
@@ -22,12 +22,8 @@ launch:
param:
- from: $(var joy_file)
- - node:
- pkg: mobile_to_maritime
- exec: mobile_twist_to_maritime_twist
- param:
- - name: in_topic
- value: cmd_vel
- - name: out_topic
- value: /integral_sliding_mode_controller/reference
- if: $(var use_maritime)
+ - include:
+ file: $(find-pkg-share message_transforms)/launch/message_transforms.launch.py
+ arg:
+ - name: parameters_file
+ value: $(var transforms_file)
diff --git a/blue_description/CMakeLists.txt b/blue_description/CMakeLists.txt
index de084cee..cc68f270 100644
--- a/blue_description/CMakeLists.txt
+++ b/blue_description/CMakeLists.txt
@@ -8,4 +8,6 @@ install(
DESTINATION share/blue_description
)
+ament_environment_hooks("${CMAKE_CURRENT_SOURCE_DIR}/hooks/hooks.dsv.in")
+
ament_package()
diff --git a/blue_description/gazebo/worlds/bluerov2_heavy_underwater.world b/blue_description/gazebo/worlds/bluerov2_heavy_underwater.world
deleted file mode 100644
index 715d1171..00000000
--- a/blue_description/gazebo/worlds/bluerov2_heavy_underwater.world
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1000
-
- 0
- 1
-
-
- bluerov2_heavy
-
-
-
- https://fuel.gazebosim.org/1.0/OpenRobotics/models/Sun
-
-
-
- model://sand_heightmap
- 0 7 -10 0 0 0
-
-
-
-
diff --git a/blue_description/gazebo/worlds/bluerov2_underwater.world b/blue_description/gazebo/worlds/bluerov2_underwater.world
deleted file mode 100644
index c1d7ce12..00000000
--- a/blue_description/gazebo/worlds/bluerov2_underwater.world
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1000
-
- 0
- 1
-
-
- bluerov2
-
-
-
- https://fuel.gazebosim.org/1.0/OpenRobotics/models/Sun
-
-
-
- model://sand_heightmap
- 0 7 -10 0 0 0
-
-
-
-
diff --git a/blue_description/gazebo/worlds/bluerov2_heavy_reach_underwater.world b/blue_description/gazebo/worlds/underwater.world
similarity index 65%
rename from blue_description/gazebo/worlds/bluerov2_heavy_reach_underwater.world
rename to blue_description/gazebo/worlds/underwater.world
index 4d908b1e..22e75d54 100644
--- a/blue_description/gazebo/worlds/bluerov2_heavy_reach_underwater.world
+++ b/blue_description/gazebo/worlds/underwater.world
@@ -1,6 +1,6 @@
-
+
1
- bluerov2_heavy_reach
@@ -43,5 +42,26 @@
0 7 -10 0 0 0
+
+
+ https://fuel.gazebosim.org/1.0/OpenRobotics/models/Coast Water
+
+ 0 0 0 0 0 0
+
+
+
+ 1.0 1.0 1.0
+ 0.8 0.8 0.8
+
+
+
+
+ 50 0 150 0 0 0
+ 1 1 1 1
+ .1 .1 .1 1
+ 0.3 0.3 -1
+ false
+
+
diff --git a/blue_description/hooks/hooks.dsv.in b/blue_description/hooks/hooks.dsv.in
new file mode 100644
index 00000000..9e0cfbd7
--- /dev/null
+++ b/blue_description/hooks/hooks.dsv.in
@@ -0,0 +1,2 @@
+prepend-non-duplicate;GZ_SIM_RESOURCE_PATH;@CMAKE_INSTALL_PREFIX@/share/@PROJECT_NAME@/gazebo/models
+prepend-non-duplicate;GZ_SIM_RESOURCE_PATH;@CMAKE_INSTALL_PREFIX@/share/@PROJECT_NAME@/gazebo/worlds
diff --git a/docs/docs/tutorials/teleop.mdx b/docs/docs/tutorials/teleop.mdx
index f2e1796a..6e468a91 100644
--- a/docs/docs/tutorials/teleop.mdx
+++ b/docs/docs/tutorials/teleop.mdx
@@ -51,10 +51,17 @@ Docker as described in the [installation instructions](/installation).
[REP-105](https://ros.org/reps/rep-0105.html); however, the launched ISMC
adheres to the maritime conventions recorded in [REP-156](https://github.com/ros-infrastructure/rep/pull/398).
To convert the velocity commands to the appropriate convention, run the
- following `mobile_to_maritime` message filter in a new terminal:
+ `message_transforms` node in a new terminal:
```bash
- ros2 run mobile_to_maritime mobile_twist_to_maritime_twist --ros-args -p in_topic:=/cmd_vel -p out_topic:=/integral_sliding_mode_controller/reference
+ ros2 launch message_transforms message_transforms.launch.py parameters_file:=
+ ```
+
+ where `` should be replaced with the path to the
+ `transforms.yaml` file in the `blue_demos` package, e.g.,
+
+ ```bash
+ ros2 launch message_transforms message_transforms.launch.py parameters_file:=./blue_demos/teleoperation/config/transforms.yaml
```
5. You should now be able to teleoperate the BlueROV2 using your keyboard.
diff --git a/docs/package-lock.json b/docs/package-lock.json
index 9a29d9d2..f1241005 100644
--- a/docs/package-lock.json
+++ b/docs/package-lock.json
@@ -5127,10 +5127,9 @@
}
},
"node_modules/body-parser": {
- "version": "1.20.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
- "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
- "license": "MIT",
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
"dependencies": {
"bytes": "3.1.2",
"content-type": "~1.0.5",
@@ -5140,7 +5139,7 @@
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
- "qs": "6.11.0",
+ "qs": "6.13.0",
"raw-body": "2.5.2",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
@@ -5154,7 +5153,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -5163,7 +5161,6 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
@@ -5172,7 +5169,6 @@
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
@@ -5183,8 +5179,7 @@
"node_modules/body-parser/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "license": "MIT"
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/bonjour-service": {
"version": "1.2.1",
@@ -5867,7 +5862,6 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
- "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -5879,10 +5873,9 @@
"license": "MIT"
},
"node_modules/cookie": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
- "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
- "license": "MIT",
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
"engines": {
"node": ">= 0.6"
}
@@ -7138,7 +7131,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -7156,7 +7148,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
- "license": "MIT",
"engines": {
"node": ">= 0.8",
"npm": "1.2.8000 || >= 1.4.16"
@@ -7409,8 +7400,7 @@
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
- "license": "MIT"
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"node_modules/electron-to-chromium": {
"version": "1.5.6",
@@ -7456,10 +7446,9 @@
}
},
"node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
- "license": "MIT",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
"engines": {
"node": ">= 0.8"
}
@@ -8395,7 +8384,6 @@
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
- "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -8451,37 +8439,36 @@
}
},
"node_modules/express": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
- "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
- "license": "MIT",
+ "version": "4.21.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
+ "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
- "body-parser": "1.20.2",
+ "body-parser": "1.20.3",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
- "cookie": "0.6.0",
+ "cookie": "0.7.1",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
- "finalhandler": "1.2.0",
+ "finalhandler": "1.3.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
- "merge-descriptors": "1.0.1",
+ "merge-descriptors": "1.0.3",
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
+ "path-to-regexp": "0.1.10",
"proxy-addr": "~2.0.7",
- "qs": "6.11.0",
+ "qs": "6.13.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
- "send": "0.18.0",
- "serve-static": "1.15.0",
+ "send": "0.19.0",
+ "serve-static": "1.16.2",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"type-is": "~1.6.18",
@@ -8520,10 +8507,9 @@
"license": "MIT"
},
"node_modules/express/node_modules/path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
- "license": "MIT"
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
+ "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w=="
},
"node_modules/express/node_modules/range-parser": {
"version": "1.2.1",
@@ -8723,13 +8709,12 @@
}
},
"node_modules/finalhandler": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
- "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
- "license": "MIT",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
"dependencies": {
"debug": "2.6.9",
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
@@ -8744,7 +8729,6 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
@@ -8752,8 +8736,7 @@
"node_modules/finalhandler/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "license": "MIT"
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/find-cache-dir": {
"version": "4.0.0",
@@ -8990,7 +8973,6 @@
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
- "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -9938,7 +9920,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
- "license": "MIT",
"dependencies": {
"depd": "2.0.0",
"inherits": "2.0.4",
@@ -9971,10 +9952,9 @@
}
},
"node_modules/http-proxy-middleware": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
- "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
- "license": "MIT",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz",
+ "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==",
"dependencies": {
"@types/http-proxy": "^1.17.8",
"http-proxy": "^1.18.1",
@@ -11775,7 +11755,6 @@
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
- "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -11793,10 +11772,12 @@
}
},
"node_modules/merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
- "license": "MIT"
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
"node_modules/merge-stream": {
"version": "2.0.0",
@@ -11814,10 +11795,9 @@
}
},
"node_modules/mermaid": {
- "version": "10.9.1",
- "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.9.1.tgz",
- "integrity": "sha512-Mx45Obds5W1UkW1nv/7dHRsbfMM1aOKA2+Pxs/IGHNonygDHwmng8xTHyS9z4KWVi0rbko8gjiBmuwwXQ7tiNA==",
- "license": "MIT",
+ "version": "10.9.3",
+ "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.9.3.tgz",
+ "integrity": "sha512-V80X1isSEvAewIL3xhmz/rVmc27CVljcsbWxkxlWJWY/1kQa4XOABqpDl2qQLGKzpKm6WbTfUEKImBlUfFYArw==",
"dependencies": {
"@braintree/sanitize-url": "^6.0.1",
"@types/d3-scale": "^4.0.3",
@@ -11828,7 +11808,7 @@
"d3-sankey": "^0.12.3",
"dagre-d3-es": "7.0.10",
"dayjs": "^1.11.7",
- "dompurify": "^3.0.5",
+ "dompurify": "^3.0.5 <3.1.7",
"elkjs": "^0.9.0",
"katex": "^0.16.9",
"khroma": "^2.0.0",
@@ -14081,7 +14061,6 @@
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "license": "MIT",
"bin": {
"mime": "cli.js"
},
@@ -14504,7 +14483,6 @@
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
- "license": "MIT",
"dependencies": {
"ee-first": "1.1.1"
},
@@ -15822,12 +15800,11 @@
}
},
"node_modules/qs": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
- "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
- "license": "BSD-3-Clause",
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
"dependencies": {
- "side-channel": "^1.0.4"
+ "side-channel": "^1.0.6"
},
"engines": {
"node": ">=0.6"
@@ -15899,7 +15876,6 @@
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
- "license": "MIT",
"dependencies": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
@@ -15914,7 +15890,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -15923,7 +15898,6 @@
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
@@ -17048,10 +17022,9 @@
}
},
"node_modules/send": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
- "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
- "license": "MIT",
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
"dependencies": {
"debug": "2.6.9",
"depd": "2.0.0",
@@ -17075,7 +17048,6 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
@@ -17083,20 +17055,25 @@
"node_modules/send/node_modules/debug/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "license": "MIT"
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/send/node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
"node_modules/send/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
"node_modules/send/node_modules/range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -17211,15 +17188,14 @@
}
},
"node_modules/serve-static": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
- "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
- "license": "MIT",
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
"dependencies": {
- "encodeurl": "~1.0.2",
+ "encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
- "send": "0.18.0"
+ "send": "0.19.0"
},
"engines": {
"node": ">= 0.8.0"
@@ -17261,8 +17237,7 @@
"node_modules/setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
- "license": "ISC"
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
"node_modules/shallow-clone": {
"version": "3.0.1",
@@ -17557,7 +17532,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -18073,7 +18047,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "license": "MIT",
"engines": {
"node": ">=0.6"
}
@@ -18178,7 +18151,6 @@
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "license": "MIT",
"dependencies": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
@@ -18191,7 +18163,6 @@
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -18200,7 +18171,6 @@
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
},
@@ -18521,7 +18491,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
- "license": "MIT",
"engines": {
"node": ">= 0.8"
}