From 7e5d20138655ae75bafc74e1d7ab8e418d6c1c9e Mon Sep 17 00:00:00 2001 From: dieriba Date: Fri, 7 Nov 2025 17:31:29 +0100 Subject: [PATCH 01/35] first commit --- ...200000_add_queue_mode_to_triggers.down.sql | 33 ++ ...06200000_add_queue_mode_to_triggers.up.sql | 37 ++ backend/windmill-api/openapi.yaml | 40 ++ backend/windmill-api/src/lib.rs | 1 + backend/windmill-api/src/triggers/handler.rs | 13 +- .../windmill-api/src/triggers/http/handler.rs | 34 +- backend/windmill-api/src/triggers/listener.rs | 26 +- backend/windmill-api/src/triggers/mod.rs | 7 +- .../windmill-api/src/triggers/mqtt/handler.rs | 16 +- .../src/triggers/postgres/handler.rs | 17 +- .../src/triggers/trigger_helpers.rs | 490 +++++++++++++++++- .../src/triggers/websocket/handler.rs | 16 +- 12 files changed, 687 insertions(+), 43 deletions(-) create mode 100644 backend/migrations/20251106200000_add_queue_mode_to_triggers.down.sql create mode 100644 backend/migrations/20251106200000_add_queue_mode_to_triggers.up.sql diff --git a/backend/migrations/20251106200000_add_queue_mode_to_triggers.down.sql b/backend/migrations/20251106200000_add_queue_mode_to_triggers.down.sql new file mode 100644 index 0000000000000..7f5272169a199 --- /dev/null +++ b/backend/migrations/20251106200000_add_queue_mode_to_triggers.down.sql @@ -0,0 +1,33 @@ +-- Add down migration script here +DROP INDEX IF EXISTS idx_websocket_trigger_suspend_number; +DROP INDEX IF EXISTS idx_sqs_trigger_suspend_number; +DROP INDEX IF EXISTS idx_postgres_trigger_suspend_number; +DROP INDEX IF EXISTS idx_nats_trigger_suspend_number; +DROP INDEX IF EXISTS idx_mqtt_trigger_suspend_number; +DROP INDEX IF EXISTS idx_kafka_trigger_suspend_number; +DROP INDEX IF EXISTS idx_http_trigger_suspend_number; +DROP INDEX IF EXISTS idx_gcp_trigger_suspend_number; + +ALTER TABLE websocket_trigger +DROP COLUMN IF EXISTS suspend_number; + +ALTER TABLE sqs_trigger +DROP COLUMN IF EXISTS suspend_number; + +ALTER TABLE postgres_trigger +DROP COLUMN IF EXISTS suspend_number; + +ALTER TABLE nats_trigger +DROP COLUMN IF EXISTS suspend_number; + +ALTER TABLE mqtt_trigger +DROP COLUMN IF EXISTS suspend_number; + +ALTER TABLE kafka_trigger +DROP COLUMN IF EXISTS suspend_number; + +ALTER TABLE http_trigger +DROP COLUMN IF EXISTS suspend_number; + +ALTER TABLE gcp_trigger +DROP COLUMN IF EXISTS suspend_number; \ No newline at end of file diff --git a/backend/migrations/20251106200000_add_queue_mode_to_triggers.up.sql b/backend/migrations/20251106200000_add_queue_mode_to_triggers.up.sql new file mode 100644 index 0000000000000..99678f0c5a0e9 --- /dev/null +++ b/backend/migrations/20251106200000_add_queue_mode_to_triggers.up.sql @@ -0,0 +1,37 @@ +-- Add up migration script here +ALTER TABLE gcp_trigger +ADD COLUMN suspend_number INTEGER NULL; + +ALTER TABLE http_trigger +ADD COLUMN suspend_number INTEGER NULL; + +ALTER TABLE kafka_trigger +ADD COLUMN suspend_number INTEGER NULL; + +ALTER TABLE mqtt_trigger +ADD COLUMN suspend_number INTEGER NULL; + +ALTER TABLE nats_trigger +ADD COLUMN suspend_number INTEGER NULL; + +ALTER TABLE postgres_trigger +ADD COLUMN suspend_number INTEGER NULL; + +ALTER TABLE sqs_trigger +ADD COLUMN suspend_number INTEGER NULL; + +ALTER TABLE websocket_trigger +ADD COLUMN suspend_number INTEGER NULL; + +ALTER TABLE email_trigger +ADD COLUMN suspend_number INTEGER NULL; + +CREATE INDEX idx_gcp_trigger_suspend_number ON gcp_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; +CREATE INDEX idx_http_trigger_suspend_number ON http_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; +CREATE INDEX idx_kafka_trigger_suspend_number ON kafka_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; +CREATE INDEX idx_mqtt_trigger_suspend_number ON mqtt_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; +CREATE INDEX idx_nats_trigger_suspend_number ON nats_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; +CREATE INDEX idx_postgres_trigger_suspend_number ON postgres_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; +CREATE INDEX idx_sqs_trigger_suspend_number ON sqs_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; +CREATE INDEX idx_websocket_trigger_suspend_number ON websocket_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; +CREATE INDEX idx_email_trigger_suspend_number ON email_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; \ No newline at end of file diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 6251954fdd47e..3fc7fc07888a9 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -16967,6 +16967,10 @@ components: format: date-time is_flow: type: boolean + queue_mode: + type: boolean + default: false + description: If true, queue jobs with suspend functionality instead of immediate execution required: - path - script_path @@ -17209,6 +17213,10 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" + queue_mode: + type: boolean + default: false + description: If true, queue jobs with suspend functionality instead of immediate execution required: - path @@ -17270,6 +17278,10 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" + queue_mode: + type: boolean + default: false + description: If true, queue jobs with suspend functionality instead of immediate execution required: - path - script_path @@ -17403,6 +17415,10 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" + queue_mode: + type: boolean + default: false + description: If true, queue jobs with suspend functionality instead of immediate execution required: - path @@ -17592,6 +17608,10 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" + queue_mode: + type: boolean + default: false + description: If true, queue jobs with suspend functionality instead of immediate execution required: - path - script_path @@ -17877,6 +17897,10 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" + queue_mode: + type: boolean + default: false + description: If true, queue jobs with suspend functionality instead of immediate execution required: - queue_url - aws_resource_path @@ -18054,6 +18078,10 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" + queue_mode: + type: boolean + default: false + description: If true, queue jobs with suspend functionality instead of immediate execution required: - path - script_path @@ -18155,6 +18183,10 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" + queue_mode: + type: boolean + default: false + description: If true, queue jobs with suspend functionality instead of immediate execution required: - path @@ -18264,6 +18296,10 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" + queue_mode: + type: boolean + default: false + description: If true, queue jobs with suspend functionality instead of immediate execution required: - path @@ -18347,6 +18383,10 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" + queue_mode: + type: boolean + default: false + description: If true, queue jobs with suspend functionality instead of immediate execution required: - path diff --git a/backend/windmill-api/src/lib.rs b/backend/windmill-api/src/lib.rs index 802f6f03532b9..41fc34e0e6fe3 100644 --- a/backend/windmill-api/src/lib.rs +++ b/backend/windmill-api/src/lib.rs @@ -475,6 +475,7 @@ pub async fn run_server( ) .nest("/variables", variables::workspaced_service()) .nest("/workspaces", workspaces::workspaced_service()) + .nest("/queue", triggers::trigger_helpers::queue_management_service()) .nest("/oidc", oidc_oss::workspaced_service()) .nest("/openapi", { #[cfg(feature = "http_trigger")] diff --git a/backend/windmill-api/src/triggers/handler.rs b/backend/windmill-api/src/triggers/handler.rs index 0e22ea2f34eff..06c8ba32bb1c9 100644 --- a/backend/windmill-api/src/triggers/handler.rs +++ b/backend/windmill-api/src/triggers/handler.rs @@ -1,6 +1,6 @@ use crate::{ db::ApiAuthed, - triggers::{StandardTriggerQuery, TriggerData}, + triggers::{trigger_helpers::get_suspend_number_for_queue_mode, StandardTriggerQuery, TriggerData}, }; use async_trait::async_trait; use serde::{de::DeserializeOwned, Deserialize, Serialize}; @@ -99,6 +99,7 @@ pub trait TriggerCrud: Send + Sync + 'static { authed: &ApiAuthed, w_id: &str, trigger: TriggerData, + suspend_number: Option, ) -> Result<()>; async fn update_trigger( @@ -109,6 +110,7 @@ pub trait TriggerCrud: Send + Sync + 'static { workspace_id: &str, path: &str, trigger: TriggerData, + suspend_number: Option, ) -> Result<()>; async fn test_connection( @@ -151,6 +153,7 @@ pub trait TriggerCrud: Send + Sync + 'static { } fields.extend_from_slice(&["error_handler_path", "error_handler_args", "retry"]); + fields.extend_from_slice(&["suspend_number"]); fields.extend_from_slice(Self::ADDITIONAL_SELECT_FIELDS); let sql = format!( @@ -303,6 +306,7 @@ pub trait TriggerCrud: Send + Sync + 'static { } fields.extend_from_slice(&["error_handler_path", "error_handler_args", "retry"]); + fields.extend_from_slice(&["suspend_number"]); fields.extend_from_slice(Self::ADDITIONAL_SELECT_FIELDS); let mut sqlb = SqlBuilder::select_from(Self::TABLE_NAME); @@ -389,9 +393,10 @@ async fn create_trigger( let mut tx = user_db.begin(&authed).await?; let new_path = new_trigger.base.path.clone(); + let suspend_number = get_suspend_number_for_queue_mode(new_trigger.base.queue_mode); handler - .create_trigger(&db, &mut *tx, &authed, &workspace_id, new_trigger) + .create_trigger(&db, &mut *tx, &authed, &workspace_id, new_trigger, suspend_number) .await?; audit_log( @@ -482,8 +487,10 @@ async fn update_trigger( let mut tx = user_db.begin(&authed).await?; let new_path = edit_trigger.base.path.to_string(); + let suspend_number = get_suspend_number_for_queue_mode(edit_trigger.base.queue_mode); + handler - .update_trigger(&db, &mut *tx, &authed, &workspace_id, path, edit_trigger) + .update_trigger(&db, &mut *tx, &authed, &workspace_id, path, edit_trigger, suspend_number) .await?; audit_log( diff --git a/backend/windmill-api/src/triggers/http/handler.rs b/backend/windmill-api/src/triggers/http/handler.rs index 5d8898f121f2f..24f97b104d1e8 100644 --- a/backend/windmill-api/src/triggers/http/handler.rs +++ b/backend/windmill-api/src/triggers/http/handler.rs @@ -13,7 +13,7 @@ use crate::{ RouteExists, ROUTE_PATH_KEY_RE, VALID_ROUTE_PATH_RE, }, trigger_helpers::{ - get_runnable_format, trigger_runnable, trigger_runnable_and_wait_for_result, + get_runnable_format, get_suspend_number_for_queue_mode, trigger_runnable, trigger_runnable_and_wait_for_result, trigger_runnable_inner, RunnableId, }, Trigger, TriggerCrud, TriggerData, @@ -176,6 +176,7 @@ pub async fn insert_new_trigger_into_db( w_id: &str, trigger: &TriggerData, route_path_key: &str, + suspend_number: Option, ) -> Result<()> { require_admin(authed.is_admin, &authed.username)?; @@ -206,10 +207,11 @@ pub async fn insert_new_trigger_into_db( is_static_website, error_handler_path, error_handler_args, - retry + retry, + suspend_number ) VALUES ( - $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, now(), $19, $20, $21, $22 + $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, now(), $19, $20, $21, $22, $23 ) "#, w_id, @@ -233,7 +235,8 @@ pub async fn insert_new_trigger_into_db( trigger.config.is_static_website, trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, - trigger.error_handling.retry as _ + trigger.error_handling.retry as _, + suspend_number ) .execute(&mut *tx) .await?; @@ -279,7 +282,8 @@ pub async fn create_many_http_triggers( let mut tx = user_db.begin(&authed).await?; for (new_http_trigger, route_path_key) in new_http_triggers.iter().zip(route_path_keys.iter()) { - insert_new_trigger_into_db(&authed, &mut tx, &w_id, new_http_trigger, route_path_key) + let suspend_number = get_suspend_number_for_queue_mode(new_http_trigger.base.queue_mode); + insert_new_trigger_into_db(&authed, &mut tx, &w_id, new_http_trigger, route_path_key, suspend_number) .await .map_err(|err| error_wrapper(&new_http_trigger.config.route_path, err))?; @@ -434,10 +438,11 @@ impl TriggerCrud for HttpTrigger { authed: &ApiAuthed, w_id: &str, trigger: TriggerData, + suspend_number: Option, ) -> Result<()> { let route_path_key = check_if_route_exist(db, &trigger.config, &w_id, None).await?; - insert_new_trigger_into_db(authed, tx, w_id, &trigger, &route_path_key).await?; + insert_new_trigger_into_db(authed, tx, w_id, &trigger, &route_path_key, suspend_number).await?; increase_trigger_version(tx).await?; @@ -452,6 +457,7 @@ impl TriggerCrud for HttpTrigger { workspace_id: &str, path: &str, trigger: TriggerData, + suspend_number: Option, ) -> Result<()> { if authed.is_admin { if trigger.config.route_path.is_empty() { @@ -494,10 +500,11 @@ impl TriggerCrud for HttpTrigger { is_static_website = $18, error_handler_path = $19, error_handler_args = $20, - retry = $21 + retry = $21, + suspend_number = $22 WHERE - workspace_id = $22 AND - path = $23 + workspace_id = $23 AND + path = $24 "#, route_path, &route_path_key, @@ -520,6 +527,7 @@ impl TriggerCrud for HttpTrigger { trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, trigger.error_handling.retry as _, + suspend_number, workspace_id, path, ) @@ -551,10 +559,11 @@ impl TriggerCrud for HttpTrigger { is_static_website = $15, error_handler_path = $16, error_handler_args = $17, - retry = $18 + retry = $18, + suspend_number = $19 WHERE - workspace_id = $19 AND - path = $20 + workspace_id = $20 AND + path = $21 "#, trigger.config.wrap_body, trigger.config.raw_string, @@ -574,6 +583,7 @@ impl TriggerCrud for HttpTrigger { trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, trigger.error_handling.retry as _, + suspend_number, workspace_id, path, ) diff --git a/backend/windmill-api/src/triggers/listener.rs b/backend/windmill-api/src/triggers/listener.rs index 431c4313f94e0..08fc6029eb4b7 100644 --- a/backend/windmill-api/src/triggers/listener.rs +++ b/backend/windmill-api/src/triggers/listener.rs @@ -27,6 +27,18 @@ use windmill_common::{ DB, INSTANCE_NAME, }; +const BASE_TRIGGER_FIELDS: [&'static str; 9] = [ + "workspace_id", + "path", + "script_path", + "is_flow", + "edited_by", + "email", + "edited_at", + "extra_perms", + "suspend_number", +]; + #[allow(unused)] #[async_trait] pub trait Listener: TriggerCrud + TriggerJobArgs { @@ -60,16 +72,7 @@ pub trait Listener: TriggerCrud + TriggerJobArgs { &self, db: &DB, ) -> Result>> { - let mut fields = vec![ - "workspace_id", - "path", - "script_path", - "is_flow", - "edited_by", - "email", - "edited_at", - "extra_perms", - ]; + let mut fields = Vec::from(BASE_TRIGGER_FIELDS); if Self::SUPPORTS_SERVER_STATE { fields.extend_from_slice(&["enabled", "server_id", "last_server_ping", "error"]); @@ -106,6 +109,7 @@ pub trait Listener: TriggerCrud + TriggerJobArgs { trigger_config: trigger.config, error_handling: Some(trigger.error_handling), trigger_mode: true, + suspend_number: trigger.base.suspend_number, }) .collect_vec(); @@ -155,6 +159,7 @@ pub trait Listener: TriggerCrud + TriggerJobArgs { trigger_mode: false, is_flow: capture.is_flow, error_handling: None, + suspend_number: None, }) .collect_vec(); @@ -809,6 +814,7 @@ pub struct ListeningTrigger { pub script_path: String, pub trigger_mode: bool, pub error_handling: Option, + pub suspend_number: Option, } impl ListeningTrigger { diff --git a/backend/windmill-api/src/triggers/mod.rs b/backend/windmill-api/src/triggers/mod.rs index 9a7f22e3e5d72..73cab193bd6dd 100644 --- a/backend/windmill-api/src/triggers/mod.rs +++ b/backend/windmill-api/src/triggers/mod.rs @@ -52,6 +52,8 @@ pub struct BaseTrigger { pub email: String, pub edited_at: DateTime, pub extra_perms: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub suspend_number: Option, } #[derive(Debug, FromRow, Clone, Serialize, Deserialize)] @@ -98,8 +100,10 @@ where T: for<'r> FromRow<'r, sqlx::postgres::PgRow>, { fn from_row(row: &sqlx::postgres::PgRow) -> std::result::Result { + let base = BaseTrigger::from_row(row)?; + Ok(Trigger { - base: BaseTrigger::from_row(row)?, + base, config: T::from_row(row)?, server_state: ServerState::from_row(row).ok(), error_handling: TriggerErrorHandling::from_row(row)?, @@ -113,6 +117,7 @@ pub struct BaseTriggerData { pub script_path: String, pub is_flow: bool, pub enabled: Option, + pub queue_mode: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/backend/windmill-api/src/triggers/mqtt/handler.rs b/backend/windmill-api/src/triggers/mqtt/handler.rs index d8e314a8368a2..cdd2093c07bcc 100644 --- a/backend/windmill-api/src/triggers/mqtt/handler.rs +++ b/backend/windmill-api/src/triggers/mqtt/handler.rs @@ -73,6 +73,7 @@ impl TriggerCrud for MqttTrigger { authed: &ApiAuthed, w_id: &str, trigger: TriggerData, + suspend_number: Option, ) -> Result<()> { let subscribe_topics = trigger .config @@ -101,10 +102,11 @@ impl TriggerCrud for MqttTrigger { edited_by, error_handler_path, error_handler_args, - retry + retry, + suspend_number ) VALUES ( - $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16 + $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17 )"#, trigger.config.mqtt_resource_path, subscribe_topics.as_slice() as &[SqlxJson], @@ -121,7 +123,8 @@ impl TriggerCrud for MqttTrigger { authed.username, trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, - trigger.error_handling.retry as _ + trigger.error_handling.retry as _, + suspend_number ) .execute(tx) .await?; @@ -137,6 +140,7 @@ impl TriggerCrud for MqttTrigger { workspace_id: &str, path: &str, trigger: TriggerData, + suspend_number: Option, ) -> Result<()> { let subscribe_topics = trigger .config @@ -169,7 +173,8 @@ impl TriggerCrud for MqttTrigger { server_id = NULL, error_handler_path = $14, error_handler_args = $15, - retry = $16 + retry = $16, + suspend_number = $17 WHERE workspace_id = $12 AND path = $13 @@ -189,7 +194,8 @@ impl TriggerCrud for MqttTrigger { path, trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, - trigger.error_handling.retry as _ + trigger.error_handling.retry as _, + suspend_number ) .execute(tx) .await?; diff --git a/backend/windmill-api/src/triggers/postgres/handler.rs b/backend/windmill-api/src/triggers/postgres/handler.rs index 5dce0345c6b33..f0156fdd727b0 100644 --- a/backend/windmill-api/src/triggers/postgres/handler.rs +++ b/backend/windmill-api/src/triggers/postgres/handler.rs @@ -64,7 +64,6 @@ impl TriggerCrud for PostgresTrigger { DeployedObject::PostgresTrigger { path } } - async fn create_trigger( &self, db: &DB, @@ -72,6 +71,7 @@ impl TriggerCrud for PostgresTrigger { authed: &ApiAuthed, w_id: &str, trigger: TriggerData, + suspend_number: Option, ) -> Result<()> { let Self::TriggerConfigRequest { postgres_resource_path, @@ -127,9 +127,10 @@ impl TriggerCrud for PostgresTrigger { edited_at, error_handler_path, error_handler_args, - retry + retry, + suspend_number ) VALUES ( - $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, now(), $11, $12, $13 + $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, now(), $11, $12, $13, $14 ) "#, w_id, @@ -144,7 +145,8 @@ impl TriggerCrud for PostgresTrigger { authed.email, trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, - trigger.error_handling.retry as _ + trigger.error_handling.retry as _, + suspend_number ) .execute(tx) .await?; @@ -159,6 +161,7 @@ impl TriggerCrud for PostgresTrigger { w_id: &str, path: &str, trigger: TriggerData, + suspend_number: Option, ) -> Result<()> { let Self::TriggerConfigRequest { replication_slot_name, @@ -228,7 +231,8 @@ impl TriggerCrud for PostgresTrigger { error = NULL, error_handler_path = $11, error_handler_args = $12, - retry = $13 + retry = $13, + suspend_number = $14 WHERE workspace_id = $9 AND path = $10 "#, @@ -244,7 +248,8 @@ impl TriggerCrud for PostgresTrigger { path, trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, - trigger.error_handling.retry as _ + trigger.error_handling.retry as _, + suspend_number ) .execute(tx) .await?; diff --git a/backend/windmill-api/src/triggers/trigger_helpers.rs b/backend/windmill-api/src/triggers/trigger_helpers.rs index 7deaf6dc1d3b0..ae8a73f847b8a 100644 --- a/backend/windmill-api/src/triggers/trigger_helpers.rs +++ b/backend/windmill-api/src/triggers/trigger_helpers.rs @@ -1,7 +1,7 @@ use anyhow::Context; use axum::response::IntoResponse; use http::StatusCode; -use serde::Deserialize; +use serde::{Deserialize, Serialize}; use serde_json::value::RawValue; use sqlx::types::Json; use std::collections::HashMap; @@ -876,3 +876,491 @@ async fn trigger_script_with_retry_and_error_handler( Ok((uuid, delete_after_use)) } + +// Queue mode and suspend number utilities + +/// Generates a random suspend number for queue mode (always > 100) +pub fn generate_trigger_suspend_number() -> i32 { + use rand::Rng; + let mut rng = rand::rng(); + // Generate number between 101 and 999999 to stay well above the reserved range + rng.random_range(101..1000000) +} + +/// Generates suspend number based on queue_mode setting +/// Returns Some(suspend_number) if queue_mode is true, None otherwise +pub fn get_suspend_number_for_queue_mode(queue_mode: Option) -> Option { + if queue_mode.unwrap_or(false) { + Some(generate_trigger_suspend_number()) + } else { + None + } +} + +/// Updates the suspend number for a trigger in the database +pub async fn update_trigger_suspend_number( + db: &DB, + workspace_id: &str, + trigger_path: &str, + trigger_type: &str, + suspend_number: i32, +) -> Result<()> { + match trigger_type { + "postgres" => { + sqlx::query( + "UPDATE postgres_trigger SET suspend_number = $1 WHERE workspace_id = $2 AND path = $3" + ) + .bind(suspend_number) + .bind(workspace_id) + .bind(trigger_path) + .execute(db) + .await?; + } + "websocket" => { + sqlx::query( + "UPDATE websocket_trigger SET suspend_number = $1 WHERE workspace_id = $2 AND path = $3" + ) + .bind(suspend_number) + .bind(workspace_id) + .bind(trigger_path) + .execute(db) + .await?; + } + "http" => { + sqlx::query( + "UPDATE http_trigger SET suspend_number = $1 WHERE workspace_id = $2 AND path = $3" + ) + .bind(suspend_number) + .bind(workspace_id) + .bind(trigger_path) + .execute(db) + .await?; + } + "mqtt" => { + sqlx::query( + "UPDATE mqtt_trigger SET suspend_number = $1 WHERE workspace_id = $2 AND path = $3" + ) + .bind(suspend_number) + .bind(workspace_id) + .bind(trigger_path) + .execute(db) + .await?; + } + _ => { + return Err(windmill_common::error::Error::BadRequest(format!( + "Unsupported trigger type for queue mode: {}", + trigger_type + ))); + } + } + + Ok(()) +} + +/// Gets all suspended jobs for a specific suspend number +pub async fn get_jobs_by_suspend_number( + db: &DB, + workspace_id: &str, + suspend_number: i32, +) -> Result> { + let job_ids = sqlx::query_scalar!( + "SELECT id FROM v2_job_queue WHERE workspace_id = $1 AND suspend = $2 ORDER BY created_at ASC", + workspace_id, + suspend_number + ) + .fetch_all(db) + .await?; + + Ok(job_ids) +} + +/// Resumes all jobs with a specific suspend number +pub async fn resume_suspended_jobs( + db: &DB, + workspace_id: &str, + suspend_number: i32, +) -> Result { + let result = sqlx::query!( + "UPDATE v2_job_queue SET suspend = 0, suspend_until = NULL WHERE workspace_id = $1 AND suspend = $2", + workspace_id, + suspend_number + ) + .execute(db) + .await?; + + Ok(result.rows_affected() as i64) +} + +/// Cancels all jobs with a specific suspend number +pub async fn cancel_suspended_jobs( + db: &DB, + workspace_id: &str, + suspend_number: i32, + canceled_by: &str, + cancel_reason: &str, +) -> Result { + let result = sqlx::query!( + r#" + UPDATE v2_job_queue + SET canceled_by = $3, canceled_reason = $4, running = false + WHERE workspace_id = $1 AND suspend = $2 + "#, + workspace_id, + suspend_number, + canceled_by, + cancel_reason + ) + .execute(db) + .await?; + + Ok(result.rows_affected() as i64) +} + +/// Wrapper function that handles queue mode logic for trigger execution +pub async fn trigger_runnable_with_queue_mode( + db: &DB, + user_db: Option, + authed: ApiAuthed, + workspace_id: &str, + runnable_path: &str, + is_flow: bool, + args: PushArgsOwned, + retry: Option<&sqlx::types::Json>, + error_handler_path: Option<&str>, + error_handler_args: Option<&sqlx::types::Json>>, + trigger_path: String, + queue_mode: bool, + suspend_number: Option, + trigger_type: &str, + job_id: Option, +) -> Result { + if queue_mode { + // Generate suspend number if not provided + let suspend_num = suspend_number.unwrap_or_else(|| generate_trigger_suspend_number()); + + // Update trigger with the suspend number if needed + update_trigger_suspend_number(db, workspace_id, &trigger_path, trigger_type, suspend_num).await?; + + // Execute the runnable with suspend mode + let uuid = trigger_runnable_with_suspend( + db, + user_db, + authed, + workspace_id, + runnable_path, + is_flow, + args, + retry, + error_handler_path, + error_handler_args, + trigger_path, + suspend_num, + job_id, + ).await?; + + Ok(uuid) + } else { + // Execute normally without suspend + let (uuid, _, _) = trigger_runnable_inner( + db, + user_db, + authed, + workspace_id, + runnable_path, + is_flow, + args, + retry, + error_handler_path, + error_handler_args, + trigger_path, + job_id, + ).await?; + + Ok(uuid) + } +} + +/// Executes a runnable with suspend functionality for queue mode +async fn trigger_runnable_with_suspend( + db: &DB, + user_db: Option, + authed: ApiAuthed, + workspace_id: &str, + runnable_path: &str, + is_flow: bool, + args: PushArgsOwned, + retry: Option<&sqlx::types::Json>, + error_handler_path: Option<&str>, + error_handler_args: Option<&sqlx::types::Json>>, + trigger_path: String, + suspend_number: i32, + job_id: Option, +) -> Result { + if is_flow { + // For flows, use direct queue push with suspend number + use windmill_queue::{push, PushIsolationLevel}; + use windmill_common::users::username_to_permissioned_as; + use windmill_common::db::UserDbWithAuthed; + use windmill_common::get_latest_flow_version_info_for_path; + + let user_db = user_db.unwrap_or_else(|| UserDB::new(db.clone())); + let db_authed = UserDbWithAuthed { db: user_db.clone(), authed: &authed.to_authed_ref() }; + + // Get flow information + let FlowVersionInfo { version, .. } = + get_latest_flow_version_info_for_path(Some(db_authed), &db, workspace_id, runnable_path, false).await?; + + let (email, permissioned_as, push_authed, tx) = ( + authed.email.as_str(), + username_to_permissioned_as(&authed.username), + Some(authed.clone().into()), + PushIsolationLevel::Isolated(user_db, authed.clone().into()), + ); + + let push_args = windmill_queue::PushArgs { args: &args.args, extra: args.extra }; + + // Create flow job payload with suspend number + let flow_payload = windmill_common::jobs::JobPayload::Flow { + path: runnable_path.to_string(), + version: version, + dedicated_worker: None, + apply_preprocessor: false, + }; + + let (uuid, tx) = push( + db, + tx, + workspace_id, + flow_payload, + push_args, + authed.display_username(), + email, + permissioned_as, + authed.token_prefix.as_deref(), + None, + None, + None, + None, + None, + job_id, + false, + false, + None, + true, + None, + None, + None, + Some(suspend_number as i16), // Set the suspend number (convert to i16) + push_authed.as_ref(), + false, + None, + None, + ).await?; + + tx.commit().await?; + Ok(uuid) + } else { + // For scripts, create suspended job manually using queue push + use windmill_queue::{push, PushIsolationLevel}; + use windmill_common::users::username_to_permissioned_as; + use windmill_common::jobs::script_path_to_payload; + use crate::jobs::check_tag_available_for_workspace; + use windmill_common::db::UserDbWithAuthed; + + let error_handler_args = error_handler_args.map(|args| { + args.0 + .iter() + .map(|(key, value)| (key.to_owned(), to_raw_value(&value))) + .collect::>>() + }); + + let user_db = user_db.unwrap_or_else(|| UserDB::new(db.clone())); + let db_authed = UserDbWithAuthed { db: user_db.clone(), authed: &authed.to_authed_ref() }; + let (job_payload, tag, _delete_after_use, timeout, on_behalf_of) = + script_path_to_payload(runnable_path, Some(db_authed), db.clone(), workspace_id, Some(false)).await?; + + check_tag_available_for_workspace(db, workspace_id, &tag, &authed).await?; + + let (email, permissioned_as, push_authed, tx) = + if let Some(on_behalf_of) = on_behalf_of.as_ref() { + ( + on_behalf_of.email.as_str(), + on_behalf_of.permissioned_as.clone(), + None, + PushIsolationLevel::IsolatedRoot(db.clone()), + ) + } else { + ( + authed.email.as_str(), + username_to_permissioned_as(&authed.username), + Some(authed.clone().into()), + PushIsolationLevel::Isolated(user_db, authed.clone().into()), + ) + }; + + let push_args = windmill_queue::PushArgs { args: &args.args, extra: args.extra }; + + // Create job payload for script execution with retry and error handling + let retryable_job_payload = match job_payload { + windmill_common::jobs::JobPayload::ScriptHash { + hash, + path, + custom_concurrency_key, + concurrent_limit, + concurrency_time_window_s, + custom_debounce_key, + debounce_delay_s, + cache_ttl, + priority, + apply_preprocessor, + .. + } => windmill_common::jobs::JobPayload::SingleStepFlow { + path, + hash: Some(hash), + flow_version: None, + args: HashMap::from(&push_args), + retry: retry.map(|r| r.0.clone()), + error_handler_path: error_handler_path.map(|s| s.to_string()), + error_handler_args, + skip_handler: None, + custom_concurrency_key, + concurrent_limit, + concurrency_time_window_s, + cache_ttl, + priority, + tag_override: tag.clone(), + apply_preprocessor, + trigger_path: Some(trigger_path), + custom_debounce_key, + debounce_delay_s, + }, + _ => { + return Err(windmill_common::error::Error::internal_err(format!( + "Unsupported job payload for suspended execution" + ))) + } + }; + + let (uuid, tx) = push( + db, + tx, + workspace_id, + retryable_job_payload, + push_args, + authed.display_username(), + email, + permissioned_as, + authed.token_prefix.as_deref(), + None, + None, + None, + None, + None, + job_id, + false, + false, + None, + true, + tag, + timeout, + None, + Some(suspend_number as i16), // Set the suspend number (convert to i16) + push_authed.as_ref(), + false, + None, + None, + ).await?; + + tx.commit().await?; + Ok(uuid) + } +} + +// API endpoint structures for queue management +#[derive(Debug, Deserialize, Serialize)] +pub struct QueuedJobsResponse { + pub job_ids: Vec, + pub count: usize, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct ResumeJobsRequest { + pub suspend_number: i32, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct CancelJobsRequest { + pub suspend_number: i32, + pub cancel_reason: Option, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct JobsOperationResponse { + pub affected_jobs: i64, + pub message: String, +} + +// API endpoint handlers for queue management +use axum::{ + extract::{Path, Query}, + routing::{get, post}, + Extension, Router, +}; + +/// API endpoint to list all queued jobs for a specific suspend number +pub async fn list_queued_jobs( + _authed: crate::db::ApiAuthed, + Extension(db): Extension, + Path(workspace_id): Path, + Query(query): Query, +) -> windmill_common::error::JsonResult { + let job_ids = get_jobs_by_suspend_number(&db, &workspace_id, query.suspend_number).await?; + let count = job_ids.len(); + + Ok(axum::Json(QueuedJobsResponse { job_ids, count })) +} + +/// API endpoint to resume all jobs with a specific suspend number +pub async fn resume_queued_jobs( + _authed: crate::db::ApiAuthed, + Extension(db): Extension, + Path(workspace_id): Path, + axum::Json(request): axum::Json, +) -> windmill_common::error::JsonResult { + let affected_jobs = resume_suspended_jobs(&db, &workspace_id, request.suspend_number).await?; + + Ok(axum::Json(JobsOperationResponse { + affected_jobs, + message: format!("Resumed {} queued jobs with suspend number {}", affected_jobs, request.suspend_number), + })) +} + +/// API endpoint to cancel all jobs with a specific suspend number +pub async fn cancel_queued_jobs( + authed: crate::db::ApiAuthed, + Extension(db): Extension, + Path(workspace_id): Path, + axum::Json(request): axum::Json, +) -> windmill_common::error::JsonResult { + let cancel_reason = request.cancel_reason.unwrap_or_else(|| "Canceled by user".to_string()); + let affected_jobs = cancel_suspended_jobs( + &db, + &workspace_id, + request.suspend_number, + &authed.username, + &cancel_reason + ).await?; + + Ok(axum::Json(JobsOperationResponse { + affected_jobs, + message: format!("Canceled {} queued jobs with suspend number {}", affected_jobs, request.suspend_number), + })) +} + +/// Creates the queue management service router +pub fn queue_management_service() -> Router { + Router::new() + .route("/list/:workspace_id", get(list_queued_jobs)) + .route("/resume/:workspace_id", post(resume_queued_jobs)) + .route("/cancel/:workspace_id", post(cancel_queued_jobs)) +} diff --git a/backend/windmill-api/src/triggers/websocket/handler.rs b/backend/windmill-api/src/triggers/websocket/handler.rs index 510f6e97aeaf1..f1c39b720f4b4 100644 --- a/backend/windmill-api/src/triggers/websocket/handler.rs +++ b/backend/windmill-api/src/triggers/websocket/handler.rs @@ -79,6 +79,7 @@ impl TriggerCrud for WebsocketTrigger { authed: &ApiAuthed, w_id: &str, trigger: TriggerData, + suspend_number: Option, ) -> Result<()> { let filters = trigger .config @@ -112,9 +113,10 @@ impl TriggerCrud for WebsocketTrigger { edited_at, error_handler_path, error_handler_args, - retry + retry, + suspend_number ) VALUES ( - $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, now(), $14, $15, $16 + $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, now(), $14, $15, $16, $17 ) "#, w_id, @@ -135,7 +137,8 @@ impl TriggerCrud for WebsocketTrigger { authed.email, trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, - trigger.error_handling.retry as _ + trigger.error_handling.retry as _, + suspend_number ) .execute(&mut *tx) .await?; @@ -150,6 +153,7 @@ impl TriggerCrud for WebsocketTrigger { w_id: &str, path: &str, trigger: TriggerData, + suspend_number: Option, ) -> Result<()> { let filters = trigger .config @@ -187,7 +191,8 @@ impl TriggerCrud for WebsocketTrigger { error = NULL, error_handler_path = $14, error_handler_args = $15, - retry = $16 + retry = $16, + suspend_number = $17 WHERE workspace_id = $12 AND path = $13 ", @@ -210,7 +215,8 @@ impl TriggerCrud for WebsocketTrigger { path, trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, - trigger.error_handling.retry as _ + trigger.error_handling.retry as _, + suspend_number ) .execute(&mut *tx) .await?; From 727c55a39739485de41cf56dd393acd14819687c Mon Sep 17 00:00:00 2001 From: dieriba Date: Wed, 12 Nov 2025 11:58:38 +0100 Subject: [PATCH 02/35] base --- backend/tests/common/mod.rs | 1 + backend/tests/relative_imports.rs | 6 + backend/windmill-api/openapi.yaml | 46 +- backend/windmill-api/src/apps.rs | 3 + backend/windmill-api/src/flows.rs | 2 + backend/windmill-api/src/jobs.rs | 214 +++++++++ backend/windmill-api/src/lib.rs | 1 - backend/windmill-api/src/scripts.rs | 1 + backend/windmill-api/src/triggers/handler.rs | 33 +- .../windmill-api/src/triggers/http/handler.rs | 24 +- backend/windmill-api/src/triggers/http/mod.rs | 4 +- backend/windmill-api/src/triggers/listener.rs | 1 + backend/windmill-api/src/triggers/mod.rs | 5 +- .../src/triggers/trigger_helpers.rs | 433 ++++-------------- .../src/triggers/websocket/listener.rs | 2 + backend/windmill-queue/src/jobs.rs | 12 +- backend/windmill-queue/src/schedule.rs | 1 + backend/windmill-worker/src/ai/tools.rs | 1 + backend/windmill-worker/src/worker.rs | 5 +- backend/windmill-worker/src/worker_flow.rs | 1 + .../windmill-worker/src/worker_lockfiles.rs | 1 + frontend/package-lock.json | 163 ++----- .../triggers/TriggerStateToggle.svelte | 219 +++++++++ .../triggers/gcp/GcpTriggerEditorInner.svelte | 8 + .../src/lib/components/triggers/gcp/utils.ts | 1 + 25 files changed, 677 insertions(+), 511 deletions(-) create mode 100644 frontend/src/lib/components/triggers/TriggerStateToggle.svelte diff --git a/backend/tests/common/mod.rs b/backend/tests/common/mod.rs index 40a9980a96877..129fd86d63b94 100644 --- a/backend/tests/common/mod.rs +++ b/backend/tests/common/mod.rs @@ -208,6 +208,7 @@ impl RunJob { false, None, debounce_job_id_o, + None, ) .await .expect("push has to succeed"); diff --git a/backend/tests/relative_imports.rs b/backend/tests/relative_imports.rs index 2de18732b4fb3..4779856c870b7 100644 --- a/backend/tests/relative_imports.rs +++ b/backend/tests/relative_imports.rs @@ -862,6 +862,7 @@ def main(): false, None, None, + None, ) .await .unwrap(); @@ -1021,6 +1022,7 @@ def main(): false, None, debounce_job_id_o, + None, ) .await .unwrap(); @@ -1198,6 +1200,7 @@ def main(): false, None, debounce_job_id_o, + None ) .await .unwrap(); @@ -1705,6 +1708,7 @@ WHERE false, None, None, + None ) .await .unwrap(); @@ -1844,6 +1848,7 @@ WHERE false, None, None, + None, ) .await .unwrap(); @@ -2274,6 +2279,7 @@ WHERE false, None, None, + None, ) .await .unwrap(); diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 7deb9bbeefcc4..866a39566c73d 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -16967,10 +16967,8 @@ components: format: date-time is_flow: type: boolean - queue_mode: - type: boolean - default: false - description: If true, queue jobs with suspend functionality instead of immediate execution + suspend_number: + type: number required: - path - script_path @@ -17213,9 +17211,9 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" - queue_mode: + active_mode: type: boolean - default: false + default: true description: If true, queue jobs with suspend functionality instead of immediate execution required: @@ -17278,9 +17276,9 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" - queue_mode: + active_mode: type: boolean - default: false + default: true description: If true, queue jobs with suspend functionality instead of immediate execution required: - path @@ -17415,9 +17413,9 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" - queue_mode: + active_mode: type: boolean - default: false + default: true description: If true, queue jobs with suspend functionality instead of immediate execution required: @@ -17608,9 +17606,9 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" - queue_mode: + active_mode: type: boolean - default: false + default: true description: If true, queue jobs with suspend functionality instead of immediate execution required: - path @@ -17761,6 +17759,8 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" + active_mode: + type: boolean required: - path - script_path @@ -17897,10 +17897,10 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" - queue_mode: + active_mode: type: boolean - default: false - description: If true, queue jobs with suspend functionality instead of immediate execution + default: true + description: If false, queue jobs with suspend functionality instead of immediate execution required: - queue_url - aws_resource_path @@ -18078,9 +18078,9 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" - queue_mode: + active_mode: type: boolean - default: false + default: true description: If true, queue jobs with suspend functionality instead of immediate execution required: - path @@ -18183,9 +18183,9 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" - queue_mode: + active_mode: type: boolean - default: false + default: true description: If true, queue jobs with suspend functionality instead of immediate execution required: @@ -18296,9 +18296,9 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" - queue_mode: + active_mode: type: boolean - default: false + default: true description: If true, queue jobs with suspend functionality instead of immediate execution required: @@ -18383,9 +18383,9 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" - queue_mode: + active_mode: type: boolean - default: false + default: true description: If true, queue jobs with suspend functionality instead of immediate execution required: diff --git a/backend/windmill-api/src/apps.rs b/backend/windmill-api/src/apps.rs index b669f5e9a90f7..a8fe8ce82bc88 100644 --- a/backend/windmill-api/src/apps.rs +++ b/backend/windmill-api/src/apps.rs @@ -1241,6 +1241,7 @@ async fn create_app_internal<'a>( false, None, None, + None ) .await?; tracing::info!("Pushed app dependency job {}", dependency_job_uuid); @@ -1630,6 +1631,7 @@ async fn update_app_internal<'a>( false, None, None, + None ) .await?; tracing::info!("Pushed app dependency job {}", dependency_job_uuid); @@ -1949,6 +1951,7 @@ async fn execute_component( false, end_user_email, None, + None ) .await?; tx.commit().await?; diff --git a/backend/windmill-api/src/flows.rs b/backend/windmill-api/src/flows.rs index 9952ca1ddd656..ebc09952b5d90 100644 --- a/backend/windmill-api/src/flows.rs +++ b/backend/windmill-api/src/flows.rs @@ -562,6 +562,7 @@ async fn create_flow( false, None, None, + None ) .await?; @@ -1025,6 +1026,7 @@ async fn update_flow( false, None, None, + None ) .await?; diff --git a/backend/windmill-api/src/jobs.rs b/backend/windmill-api/src/jobs.rs index d006c2ec159dd..b5c613b3db71b 100644 --- a/backend/windmill-api/src/jobs.rs +++ b/backend/windmill-api/src/jobs.rs @@ -291,6 +291,22 @@ pub fn workspaced_service() -> Router { "/send_email_with_instance_smtp", post(send_email_with_instance_smtp), ) + .route( + "/resume_suspended/:job_id/:resume_id", + post(resume_suspended_job_auth), + ) + .route( + "/cancel_suspended/:job_id/:resume_id", + post(cancel_suspended_job_auth), + ) + .route( + "/resume_suspended_batch/:suspend_number", + post(resume_suspended_batch_auth), + ) + .route( + "/cancel_suspended_batch/:suspend_number", + post(cancel_suspended_batch_auth), + ) } pub fn workspace_unauthed_service() -> Router { @@ -4078,6 +4094,7 @@ pub async fn run_flow_by_path_inner( false, None, None, + None, ) .await?; @@ -4195,6 +4212,7 @@ pub async fn restart_flow( false, None, None, + None, ) .await?; tx.commit().await?; @@ -4304,6 +4322,7 @@ pub async fn run_script_by_path_inner( false, None, None, + None, ) .await?; tx.commit().await?; @@ -4461,6 +4480,7 @@ pub async fn run_workflow_as_code( false, None, None, + None, ) .await?; @@ -5005,6 +5025,7 @@ pub async fn run_wait_result_job_by_path_get( false, None, None, + None, ) .await?; tx.commit().await?; @@ -5159,6 +5180,7 @@ pub async fn run_wait_result_script_by_path_internal( false, None, None, + None, ) .await?; tx.commit().await?; @@ -5281,6 +5303,7 @@ pub async fn run_wait_result_script_by_hash( false, None, None, + None, ) .await?; tx.commit().await?; @@ -5594,6 +5617,7 @@ pub async fn run_wait_result_flow_by_path_internal( false, None, None, + None, ) .await?; @@ -5688,6 +5712,7 @@ async fn run_preview_script( false, None, None, + None, ) .await?; tx.commit().await?; @@ -5808,6 +5833,7 @@ async fn run_bundle_preview_script( false, None, None, + None, ) .await?; job_id = Some(uuid); @@ -5947,6 +5973,7 @@ async fn run_dependencies_job( false, None, None, + None, ) .await?; tx.commit().await?; @@ -6016,6 +6043,7 @@ async fn run_flow_dependencies_job( false, None, None, + None, ) .await?; tx.commit().await?; @@ -6361,6 +6389,7 @@ async fn run_preview_flow_job( false, None, None, + None, ) .await?; tx.commit().await?; @@ -6538,6 +6567,7 @@ async fn run_dynamic_select( false, None, None, + None, ) .await?; tx.commit().await?; @@ -6671,6 +6701,7 @@ pub async fn run_job_by_hash_inner( false, None, None, + None, ) .await?; tx.commit().await?; @@ -8112,3 +8143,186 @@ async fn delete_completed_job<'a>( ) .await; } + +pub async fn resume_suspended_job_auth( + authed: ApiAuthed, + Extension(db): Extension, + Path((w_id, job_id, suspend_number)): Path<(String, Uuid, i32)>, +) -> error::Result { + let mut tx: Transaction<'_, Postgres> = db.begin().await?; + + let rows_affected = sqlx::query!( + "UPDATE v2_job_queue SET suspend = NULL WHERE id = $1 AND workspace_id = $2 AND suspend = $3", + job_id, + w_id, + suspend_number + ) + .execute(&mut *tx) + .await? + .rows_affected(); + + if rows_affected == 0 { + return Err( + anyhow::anyhow!("No suspended job found with this job_id and suspend_number").into(), + ); + } + + audit_log( + &mut *tx, + &authed, + "jobs.suspend_resume", + ActionKind::Update, + &w_id, + Some( + &serde_json::json!({ + "approved": true, + "job_id": job_id, + "suspend_number": suspend_number, + "details": format!("Resumed by {}", &authed.username) + }) + .to_string(), + ), + None, + ) + .await?; + tx.commit().await?; + Ok(StatusCode::OK) +} + +pub async fn cancel_suspended_job_auth( + authed: ApiAuthed, + Extension(db): Extension, + Path((w_id, job_id, suspend_number)): Path<(String, Uuid, i32)>, +) -> error::Result { + let mut tx: Transaction<'_, Postgres> = db.begin().await?; + + audit_log( + &mut *tx, + &authed, + "jobs.suspend_cancel", + ActionKind::Delete, + &w_id, + Some( + &serde_json::json!({ + "job_id": job_id, + "suspend_number": suspend_number, + "details": format!("Cancelled and deleted by {}", &authed.username) + }) + .to_string(), + ), + None, + ) + .await?; + tx.commit().await?; + Ok(StatusCode::OK) +} +pub async fn resume_suspended_batch_auth( + authed: ApiAuthed, + Extension(db): Extension, + Path((w_id, suspend_number)): Path<(String, i32)>, +) -> error::Result { + let mut tx: Transaction<'_, Postgres> = db.begin().await?; + + let rows_affected = sqlx::query!( + "UPDATE v2_job_queue SET suspend = NULL WHERE workspace_id = $1 AND suspend = $2", + w_id, + suspend_number + ) + .execute(&mut *tx) + .await? + .rows_affected(); + + if rows_affected == 0 { + return Err(anyhow::anyhow!("No suspended jobs found with this suspend number").into()); + } + + audit_log( + &mut *tx, + &authed, + "jobs.suspend_resume_batch", + ActionKind::Update, + &w_id, + Some( + &serde_json::json!({ + "approved": true, + "suspend_number": suspend_number, + "job_count": rows_affected, + "details": format!("Batch resumed {} jobs by {}", rows_affected, &authed.username) + }) + .to_string(), + ), + None, + ) + .await?; + tx.commit().await?; + Ok(StatusCode::OK) +} + +pub async fn cancel_suspended_batch_auth( + authed: ApiAuthed, + Extension(db): Extension, + Path((w_id, suspend_number)): Path<(String, i32)>, +) -> error::Result { + let mut tx: Transaction<'_, Postgres> = db.begin().await?; + + let suspended_jobs = sqlx::query!( + "SELECT id FROM v2_job_queue WHERE workspace_id = $1 AND suspend = $2", + w_id, + suspend_number + ) + .fetch_all(&mut *tx) + .await?; + + if suspended_jobs.is_empty() { + return Err(anyhow::anyhow!("No suspended jobs found with this suspend number").into()); + } + + let job_count = suspended_jobs.len(); + + sqlx::query!( + "DELETE FROM v2_job_queue WHERE workspace_id = $1 AND suspend = $2", + w_id, + suspend_number + ) + .execute(&mut *tx) + .await?; + + for job in suspended_jobs.iter() { + sqlx::query!( + "DELETE FROM v2_job WHERE id = $1 AND workspace_id = $2", + job.id, + w_id + ) + .execute(&mut *tx) + .await?; + + // Delete related job_perms if exists + sqlx::query!( + "DELETE FROM job_perms WHERE job_id = $1 AND workspace_id = $2", + job.id, + w_id + ) + .execute(&mut *tx) + .await?; + } + + audit_log( + &mut *tx, + &authed, + "jobs.suspend_cancel_batch", + ActionKind::Delete, + &w_id, + Some( + &serde_json::json!({ + "suspend_number": suspend_number, + "job_count": job_count, + "details": format!("Batch cancelled and deleted {} jobs by {}", job_count, &authed.username) + }) + .to_string(), + ), + None, + ) + .await?; + tx.commit().await?; + Ok(StatusCode::OK) +} diff --git a/backend/windmill-api/src/lib.rs b/backend/windmill-api/src/lib.rs index 41fc34e0e6fe3..802f6f03532b9 100644 --- a/backend/windmill-api/src/lib.rs +++ b/backend/windmill-api/src/lib.rs @@ -475,7 +475,6 @@ pub async fn run_server( ) .nest("/variables", variables::workspaced_service()) .nest("/workspaces", workspaces::workspaced_service()) - .nest("/queue", triggers::trigger_helpers::queue_management_service()) .nest("/oidc", oidc_oss::workspaced_service()) .nest("/openapi", { #[cfg(feature = "http_trigger")] diff --git a/backend/windmill-api/src/scripts.rs b/backend/windmill-api/src/scripts.rs index a639c58f6e611..82c8864fe32f7 100644 --- a/backend/windmill-api/src/scripts.rs +++ b/backend/windmill-api/src/scripts.rs @@ -1022,6 +1022,7 @@ async fn create_script_internal<'c>( false, None, None, + None, ) .await?; Ok((hash, new_tx, None)) diff --git a/backend/windmill-api/src/triggers/handler.rs b/backend/windmill-api/src/triggers/handler.rs index 06c8ba32bb1c9..058f994f3a3ce 100644 --- a/backend/windmill-api/src/triggers/handler.rs +++ b/backend/windmill-api/src/triggers/handler.rs @@ -1,6 +1,8 @@ use crate::{ db::ApiAuthed, - triggers::{trigger_helpers::get_suspend_number_for_queue_mode, StandardTriggerQuery, TriggerData}, + triggers::{ + trigger_helpers::get_suspend_number_for_unactive_mode, StandardTriggerQuery, TriggerData, + }, }; use async_trait::async_trait; use serde::{de::DeserializeOwned, Deserialize, Serialize}; @@ -146,6 +148,7 @@ pub trait TriggerCrud: Send + Sync + 'static { "email", "edited_at", "extra_perms", + "suspend_number", ]; if Self::SUPPORTS_SERVER_STATE { @@ -153,7 +156,6 @@ pub trait TriggerCrud: Send + Sync + 'static { } fields.extend_from_slice(&["error_handler_path", "error_handler_args", "retry"]); - fields.extend_from_slice(&["suspend_number"]); fields.extend_from_slice(Self::ADDITIONAL_SELECT_FIELDS); let sql = format!( @@ -299,6 +301,7 @@ pub trait TriggerCrud: Send + Sync + 'static { "email", "edited_at", "extra_perms", + "suspend_number", ]; if Self::SUPPORTS_SERVER_STATE { @@ -306,7 +309,6 @@ pub trait TriggerCrud: Send + Sync + 'static { } fields.extend_from_slice(&["error_handler_path", "error_handler_args", "retry"]); - fields.extend_from_slice(&["suspend_number"]); fields.extend_from_slice(Self::ADDITIONAL_SELECT_FIELDS); let mut sqlb = SqlBuilder::select_from(Self::TABLE_NAME); @@ -393,10 +395,17 @@ async fn create_trigger( let mut tx = user_db.begin(&authed).await?; let new_path = new_trigger.base.path.clone(); - let suspend_number = get_suspend_number_for_queue_mode(new_trigger.base.queue_mode); + let suspend_number = get_suspend_number_for_unactive_mode(new_trigger.base.active_mode); handler - .create_trigger(&db, &mut *tx, &authed, &workspace_id, new_trigger, suspend_number) + .create_trigger( + &db, + &mut *tx, + &authed, + &workspace_id, + new_trigger, + suspend_number, + ) .await?; audit_log( @@ -487,10 +496,18 @@ async fn update_trigger( let mut tx = user_db.begin(&authed).await?; let new_path = edit_trigger.base.path.to_string(); - let suspend_number = get_suspend_number_for_queue_mode(edit_trigger.base.queue_mode); - + let suspend_number = get_suspend_number_for_unactive_mode(edit_trigger.base.active_mode); + handler - .update_trigger(&db, &mut *tx, &authed, &workspace_id, path, edit_trigger, suspend_number) + .update_trigger( + &db, + &mut *tx, + &authed, + &workspace_id, + path, + edit_trigger, + suspend_number, + ) .await?; audit_log( diff --git a/backend/windmill-api/src/triggers/http/handler.rs b/backend/windmill-api/src/triggers/http/handler.rs index 24f97b104d1e8..8b8b34594f1bb 100644 --- a/backend/windmill-api/src/triggers/http/handler.rs +++ b/backend/windmill-api/src/triggers/http/handler.rs @@ -13,8 +13,8 @@ use crate::{ RouteExists, ROUTE_PATH_KEY_RE, VALID_ROUTE_PATH_RE, }, trigger_helpers::{ - get_runnable_format, get_suspend_number_for_queue_mode, trigger_runnable, trigger_runnable_and_wait_for_result, - trigger_runnable_inner, RunnableId, + get_runnable_format, get_suspend_number_for_unactive_mode, trigger_runnable, + trigger_runnable_and_wait_for_result, trigger_runnable_inner, RunnableId, }, Trigger, TriggerCrud, TriggerData, }, @@ -282,10 +282,18 @@ pub async fn create_many_http_triggers( let mut tx = user_db.begin(&authed).await?; for (new_http_trigger, route_path_key) in new_http_triggers.iter().zip(route_path_keys.iter()) { - let suspend_number = get_suspend_number_for_queue_mode(new_http_trigger.base.queue_mode); - insert_new_trigger_into_db(&authed, &mut tx, &w_id, new_http_trigger, route_path_key, suspend_number) - .await - .map_err(|err| error_wrapper(&new_http_trigger.config.route_path, err))?; + let suspend_number = + get_suspend_number_for_unactive_mode(new_http_trigger.base.active_mode); + insert_new_trigger_into_db( + &authed, + &mut tx, + &w_id, + new_http_trigger, + route_path_key, + suspend_number, + ) + .await + .map_err(|err| error_wrapper(&new_http_trigger.config.route_path, err))?; audit_log( &mut *tx, @@ -442,7 +450,8 @@ impl TriggerCrud for HttpTrigger { ) -> Result<()> { let route_path_key = check_if_route_exist(db, &trigger.config, &w_id, None).await?; - insert_new_trigger_into_db(authed, tx, w_id, &trigger, &route_path_key, suspend_number).await?; + insert_new_trigger_into_db(authed, tx, w_id, &trigger, &route_path_key, suspend_number) + .await?; increase_trigger_version(tx).await?; @@ -1118,6 +1127,7 @@ async fn route_job( trigger.error_handler_args.as_ref(), format!("http_trigger/{}", trigger.path), None, + None, ) .await .map_err(|e| e.into_response()), diff --git a/backend/windmill-api/src/triggers/http/mod.rs b/backend/windmill-api/src/triggers/http/mod.rs index 55844e0fb1296..446dad7728697 100644 --- a/backend/windmill-api/src/triggers/http/mod.rs +++ b/backend/windmill-api/src/triggers/http/mod.rs @@ -48,6 +48,7 @@ pub struct TriggerRoute { error_handler_path: Option, error_handler_args: Option>>, retry: Option>, + suspend_number: Option, } pub struct RoutersCache { @@ -257,7 +258,8 @@ pub async fn refresh_routers(db: &DB) -> Result<(bool, RwLockReadGuard<'_, Route is_static_website, error_handler_path, error_handler_args as "error_handler_args: _", - retry as "retry: _" + retry as "retry: _", + suspend_number FROM http_trigger WHERE diff --git a/backend/windmill-api/src/triggers/listener.rs b/backend/windmill-api/src/triggers/listener.rs index 08fc6029eb4b7..dfd9b5f5ea0cf 100644 --- a/backend/windmill-api/src/triggers/listener.rs +++ b/backend/windmill-api/src/triggers/listener.rs @@ -520,6 +520,7 @@ pub trait Listener: TriggerCrud + TriggerJobArgs { error_handler_args, format!("{}_trigger/{}", Self::TRIGGER_KIND, listening_trigger.path), None, + listening_trigger.suspend_number, ) .await?; diff --git a/backend/windmill-api/src/triggers/mod.rs b/backend/windmill-api/src/triggers/mod.rs index 73cab193bd6dd..af81442bc3490 100644 --- a/backend/windmill-api/src/triggers/mod.rs +++ b/backend/windmill-api/src/triggers/mod.rs @@ -52,8 +52,7 @@ pub struct BaseTrigger { pub email: String, pub edited_at: DateTime, pub extra_perms: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub suspend_number: Option, + pub suspend_number: Option } #[derive(Debug, FromRow, Clone, Serialize, Deserialize)] @@ -117,7 +116,7 @@ pub struct BaseTriggerData { pub script_path: String, pub is_flow: bool, pub enabled: Option, - pub queue_mode: Option, + pub active_mode: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/backend/windmill-api/src/triggers/trigger_helpers.rs b/backend/windmill-api/src/triggers/trigger_helpers.rs index ae8a73f847b8a..64a4af44c8924 100644 --- a/backend/windmill-api/src/triggers/trigger_helpers.rs +++ b/backend/windmill-api/src/triggers/trigger_helpers.rs @@ -1,11 +1,12 @@ use anyhow::Context; use axum::response::IntoResponse; +use chrono::{TimeZone, Utc}; use http::StatusCode; -use serde::{Deserialize, Serialize}; +use serde::Deserialize; use serde_json::value::RawValue; use sqlx::types::Json; -use std::collections::HashMap; use std::future::Future; +use std::{collections::HashMap, i32}; use uuid::Uuid; use windmill_common::{ db::{UserDB, UserDbWithAuthed}, @@ -554,22 +555,46 @@ pub async fn trigger_runnable( error_handler_args: Option<&sqlx::types::Json>>, trigger_path: String, job_id: Option, + suspend_number: Option, ) -> Result { - let (uuid, _, _) = trigger_runnable_inner( - db, - user_db, - authed, - workspace_id, - runnable_path, - is_flow, - args, - retry, - error_handler_path, - error_handler_args, - trigger_path, - job_id, - ) - .await?; + let uuid = match suspend_number { + Some(suspend_number) => { + trigger_runnable_with_suspend( + db, + user_db, + authed, + workspace_id, + runnable_path, + is_flow, + args, + retry, + error_handler_path, + error_handler_args, + trigger_path, + job_id, + suspend_number, + ) + .await? + } + _ => { + trigger_runnable_inner( + db, + user_db, + authed, + workspace_id, + runnable_path, + is_flow, + args, + retry, + error_handler_path, + error_handler_args, + trigger_path, + job_id, + ) + .await? + .0 + } + }; Ok((StatusCode::CREATED, uuid.to_string()).into_response()) } @@ -870,6 +895,7 @@ async fn trigger_script_with_retry_and_error_handler( false, None, None, + None, ) .await?; tx.commit().await?; @@ -877,210 +903,19 @@ async fn trigger_script_with_retry_and_error_handler( Ok((uuid, delete_after_use)) } -// Queue mode and suspend number utilities - -/// Generates a random suspend number for queue mode (always > 100) pub fn generate_trigger_suspend_number() -> i32 { use rand::Rng; let mut rng = rand::rng(); - // Generate number between 101 and 999999 to stay well above the reserved range - rng.random_range(101..1000000) -} - -/// Generates suspend number based on queue_mode setting -/// Returns Some(suspend_number) if queue_mode is true, None otherwise -pub fn get_suspend_number_for_queue_mode(queue_mode: Option) -> Option { - if queue_mode.unwrap_or(false) { - Some(generate_trigger_suspend_number()) - } else { - None - } + rng.random_range(101..i32::MAX) } -/// Updates the suspend number for a trigger in the database -pub async fn update_trigger_suspend_number( - db: &DB, - workspace_id: &str, - trigger_path: &str, - trigger_type: &str, - suspend_number: i32, -) -> Result<()> { - match trigger_type { - "postgres" => { - sqlx::query( - "UPDATE postgres_trigger SET suspend_number = $1 WHERE workspace_id = $2 AND path = $3" - ) - .bind(suspend_number) - .bind(workspace_id) - .bind(trigger_path) - .execute(db) - .await?; - } - "websocket" => { - sqlx::query( - "UPDATE websocket_trigger SET suspend_number = $1 WHERE workspace_id = $2 AND path = $3" - ) - .bind(suspend_number) - .bind(workspace_id) - .bind(trigger_path) - .execute(db) - .await?; - } - "http" => { - sqlx::query( - "UPDATE http_trigger SET suspend_number = $1 WHERE workspace_id = $2 AND path = $3" - ) - .bind(suspend_number) - .bind(workspace_id) - .bind(trigger_path) - .execute(db) - .await?; - } - "mqtt" => { - sqlx::query( - "UPDATE mqtt_trigger SET suspend_number = $1 WHERE workspace_id = $2 AND path = $3" - ) - .bind(suspend_number) - .bind(workspace_id) - .bind(trigger_path) - .execute(db) - .await?; - } - _ => { - return Err(windmill_common::error::Error::BadRequest(format!( - "Unsupported trigger type for queue mode: {}", - trigger_type - ))); - } - } - - Ok(()) -} - -/// Gets all suspended jobs for a specific suspend number -pub async fn get_jobs_by_suspend_number( - db: &DB, - workspace_id: &str, - suspend_number: i32, -) -> Result> { - let job_ids = sqlx::query_scalar!( - "SELECT id FROM v2_job_queue WHERE workspace_id = $1 AND suspend = $2 ORDER BY created_at ASC", - workspace_id, - suspend_number - ) - .fetch_all(db) - .await?; - - Ok(job_ids) -} - -/// Resumes all jobs with a specific suspend number -pub async fn resume_suspended_jobs( - db: &DB, - workspace_id: &str, - suspend_number: i32, -) -> Result { - let result = sqlx::query!( - "UPDATE v2_job_queue SET suspend = 0, suspend_until = NULL WHERE workspace_id = $1 AND suspend = $2", - workspace_id, - suspend_number - ) - .execute(db) - .await?; - - Ok(result.rows_affected() as i64) -} - -/// Cancels all jobs with a specific suspend number -pub async fn cancel_suspended_jobs( - db: &DB, - workspace_id: &str, - suspend_number: i32, - canceled_by: &str, - cancel_reason: &str, -) -> Result { - let result = sqlx::query!( - r#" - UPDATE v2_job_queue - SET canceled_by = $3, canceled_reason = $4, running = false - WHERE workspace_id = $1 AND suspend = $2 - "#, - workspace_id, - suspend_number, - canceled_by, - cancel_reason - ) - .execute(db) - .await?; - - Ok(result.rows_affected() as i64) -} - -/// Wrapper function that handles queue mode logic for trigger execution -pub async fn trigger_runnable_with_queue_mode( - db: &DB, - user_db: Option, - authed: ApiAuthed, - workspace_id: &str, - runnable_path: &str, - is_flow: bool, - args: PushArgsOwned, - retry: Option<&sqlx::types::Json>, - error_handler_path: Option<&str>, - error_handler_args: Option<&sqlx::types::Json>>, - trigger_path: String, - queue_mode: bool, - suspend_number: Option, - trigger_type: &str, - job_id: Option, -) -> Result { - if queue_mode { - // Generate suspend number if not provided - let suspend_num = suspend_number.unwrap_or_else(|| generate_trigger_suspend_number()); - - // Update trigger with the suspend number if needed - update_trigger_suspend_number(db, workspace_id, &trigger_path, trigger_type, suspend_num).await?; - - // Execute the runnable with suspend mode - let uuid = trigger_runnable_with_suspend( - db, - user_db, - authed, - workspace_id, - runnable_path, - is_flow, - args, - retry, - error_handler_path, - error_handler_args, - trigger_path, - suspend_num, - job_id, - ).await?; - - Ok(uuid) - } else { - // Execute normally without suspend - let (uuid, _, _) = trigger_runnable_inner( - db, - user_db, - authed, - workspace_id, - runnable_path, - is_flow, - args, - retry, - error_handler_path, - error_handler_args, - trigger_path, - job_id, - ).await?; - - Ok(uuid) +pub fn get_suspend_number_for_unactive_mode(active_mode: Option) -> Option { + if let Some(false) = active_mode { + return Some(generate_trigger_suspend_number()); } + None } -/// Executes a runnable with suspend functionality for queue mode async fn trigger_runnable_with_suspend( db: &DB, user_db: Option, @@ -1093,40 +928,39 @@ async fn trigger_runnable_with_suspend( error_handler_path: Option<&str>, error_handler_args: Option<&sqlx::types::Json>>, trigger_path: String, - suspend_number: i32, job_id: Option, + suspend_number: i32, ) -> Result { + let far_future_utc = Utc.with_ymd_and_hms(9999, 12, 31, 23, 59, 59).unwrap(); if is_flow { - // For flows, use direct queue push with suspend number - use windmill_queue::{push, PushIsolationLevel}; - use windmill_common::users::username_to_permissioned_as; - use windmill_common::db::UserDbWithAuthed; - use windmill_common::get_latest_flow_version_info_for_path; - let user_db = user_db.unwrap_or_else(|| UserDB::new(db.clone())); let db_authed = UserDbWithAuthed { db: user_db.clone(), authed: &authed.to_authed_ref() }; - - // Get flow information - let FlowVersionInfo { version, .. } = - get_latest_flow_version_info_for_path(Some(db_authed), &db, workspace_id, runnable_path, false).await?; - + + let FlowVersionInfo { version, .. } = get_latest_flow_version_info_for_path( + Some(db_authed), + &db, + workspace_id, + runnable_path, + false, + ) + .await?; + let (email, permissioned_as, push_authed, tx) = ( authed.email.as_str(), username_to_permissioned_as(&authed.username), Some(authed.clone().into()), PushIsolationLevel::Isolated(user_db, authed.clone().into()), ); - + let push_args = windmill_queue::PushArgs { args: &args.args, extra: args.extra }; - - // Create flow job payload with suspend number + let flow_payload = windmill_common::jobs::JobPayload::Flow { path: runnable_path.to_string(), version: version, dedicated_worker: None, apply_preprocessor: false, }; - + let (uuid, tx) = push( db, tx, @@ -1137,7 +971,7 @@ async fn trigger_runnable_with_suspend( email, permissioned_as, authed.token_prefix.as_deref(), - None, + Some(far_future_utc), None, None, None, @@ -1150,37 +984,44 @@ async fn trigger_runnable_with_suspend( None, None, None, - Some(suspend_number as i16), // Set the suspend number (convert to i16) + None, push_authed.as_ref(), false, None, None, - ).await?; - + Some(suspend_number), + ) + .await?; + tx.commit().await?; Ok(uuid) } else { - // For scripts, create suspended job manually using queue push - use windmill_queue::{push, PushIsolationLevel}; - use windmill_common::users::username_to_permissioned_as; - use windmill_common::jobs::script_path_to_payload; use crate::jobs::check_tag_available_for_workspace; use windmill_common::db::UserDbWithAuthed; - + use windmill_common::jobs::script_path_to_payload; + use windmill_common::users::username_to_permissioned_as; + use windmill_queue::{push, PushIsolationLevel}; + let error_handler_args = error_handler_args.map(|args| { args.0 .iter() .map(|(key, value)| (key.to_owned(), to_raw_value(&value))) .collect::>>() }); - + let user_db = user_db.unwrap_or_else(|| UserDB::new(db.clone())); let db_authed = UserDbWithAuthed { db: user_db.clone(), authed: &authed.to_authed_ref() }; - let (job_payload, tag, _delete_after_use, timeout, on_behalf_of) = - script_path_to_payload(runnable_path, Some(db_authed), db.clone(), workspace_id, Some(false)).await?; - + let (job_payload, tag, _delete_after_use, timeout, on_behalf_of) = script_path_to_payload( + runnable_path, + Some(db_authed), + db.clone(), + workspace_id, + Some(false), + ) + .await?; + check_tag_available_for_workspace(db, workspace_id, &tag, &authed).await?; - + let (email, permissioned_as, push_authed, tx) = if let Some(on_behalf_of) = on_behalf_of.as_ref() { ( @@ -1197,10 +1038,9 @@ async fn trigger_runnable_with_suspend( PushIsolationLevel::Isolated(user_db, authed.clone().into()), ) }; - + let push_args = windmill_queue::PushArgs { args: &args.args, extra: args.extra }; - - // Create job payload for script execution with retry and error handling + let retryable_job_payload = match job_payload { windmill_common::jobs::JobPayload::ScriptHash { hash, @@ -1240,7 +1080,7 @@ async fn trigger_runnable_with_suspend( ))) } }; - + let (uuid, tx) = push( db, tx, @@ -1251,7 +1091,7 @@ async fn trigger_runnable_with_suspend( email, permissioned_as, authed.token_prefix.as_deref(), - None, + Some(far_future_utc), None, None, None, @@ -1264,103 +1104,16 @@ async fn trigger_runnable_with_suspend( tag, timeout, None, - Some(suspend_number as i16), // Set the suspend number (convert to i16) + None, push_authed.as_ref(), false, None, None, - ).await?; - + Some(suspend_number), + ) + .await?; + tx.commit().await?; Ok(uuid) } } - -// API endpoint structures for queue management -#[derive(Debug, Deserialize, Serialize)] -pub struct QueuedJobsResponse { - pub job_ids: Vec, - pub count: usize, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct ResumeJobsRequest { - pub suspend_number: i32, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct CancelJobsRequest { - pub suspend_number: i32, - pub cancel_reason: Option, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct JobsOperationResponse { - pub affected_jobs: i64, - pub message: String, -} - -// API endpoint handlers for queue management -use axum::{ - extract::{Path, Query}, - routing::{get, post}, - Extension, Router, -}; - -/// API endpoint to list all queued jobs for a specific suspend number -pub async fn list_queued_jobs( - _authed: crate::db::ApiAuthed, - Extension(db): Extension, - Path(workspace_id): Path, - Query(query): Query, -) -> windmill_common::error::JsonResult { - let job_ids = get_jobs_by_suspend_number(&db, &workspace_id, query.suspend_number).await?; - let count = job_ids.len(); - - Ok(axum::Json(QueuedJobsResponse { job_ids, count })) -} - -/// API endpoint to resume all jobs with a specific suspend number -pub async fn resume_queued_jobs( - _authed: crate::db::ApiAuthed, - Extension(db): Extension, - Path(workspace_id): Path, - axum::Json(request): axum::Json, -) -> windmill_common::error::JsonResult { - let affected_jobs = resume_suspended_jobs(&db, &workspace_id, request.suspend_number).await?; - - Ok(axum::Json(JobsOperationResponse { - affected_jobs, - message: format!("Resumed {} queued jobs with suspend number {}", affected_jobs, request.suspend_number), - })) -} - -/// API endpoint to cancel all jobs with a specific suspend number -pub async fn cancel_queued_jobs( - authed: crate::db::ApiAuthed, - Extension(db): Extension, - Path(workspace_id): Path, - axum::Json(request): axum::Json, -) -> windmill_common::error::JsonResult { - let cancel_reason = request.cancel_reason.unwrap_or_else(|| "Canceled by user".to_string()); - let affected_jobs = cancel_suspended_jobs( - &db, - &workspace_id, - request.suspend_number, - &authed.username, - &cancel_reason - ).await?; - - Ok(axum::Json(JobsOperationResponse { - affected_jobs, - message: format!("Canceled {} queued jobs with suspend number {}", affected_jobs, request.suspend_number), - })) -} - -/// Creates the queue management service router -pub fn queue_management_service() -> Router { - Router::new() - .route("/list/:workspace_id", get(list_queued_jobs)) - .route("/resume/:workspace_id", post(resume_queued_jobs)) - .route("/cancel/:workspace_id", post(cancel_queued_jobs)) -} diff --git a/backend/windmill-api/src/triggers/websocket/listener.rs b/backend/windmill-api/src/triggers/websocket/listener.rs index bfecaf479d1c0..65f693d352683 100644 --- a/backend/windmill-api/src/triggers/websocket/listener.rs +++ b/backend/windmill-api/src/triggers/websocket/listener.rs @@ -332,6 +332,7 @@ impl Listener for WebsocketTrigger { trigger_config, script_path, error_handling, + suspend_number, .. } = listening_trigger; @@ -428,6 +429,7 @@ impl Listener for WebsocketTrigger { error_handler_args, format!("websocket_trigger/{}", listening_trigger.path), None, + *suspend_number ) .await?; } diff --git a/backend/windmill-queue/src/jobs.rs b/backend/windmill-queue/src/jobs.rs index a6370163d6cc5..2b20db4129919 100644 --- a/backend/windmill-queue/src/jobs.rs +++ b/backend/windmill-queue/src/jobs.rs @@ -470,6 +470,7 @@ pub async fn push_init_job<'c>( false, None, None, + None, ) .await?; inner_tx.commit().await?; @@ -528,6 +529,7 @@ pub async fn push_periodic_bash_job<'c>( false, None, None, + None, ) .await?; inner_tx.commit().await?; @@ -1373,6 +1375,7 @@ async fn restart_job_if_perpetual_inner( false, None, None, + None, ) .await?; tx.commit().await?; @@ -1923,6 +1926,7 @@ pub async fn push_error_handler<'a, 'c, T: Serialize + Send + Sync>( false, None, None, + None, ) .await?; tx.commit().await?; @@ -3604,6 +3608,7 @@ pub async fn push<'c, 'd>( // If we know there is already a debounce job, we can use this for debouncing. // NOTE: Only works with dependency jobs triggered by relative imports debounce_job_id_o: Option, + suspend_number: Option, // If provided, job will be created as suspended with this number ) -> Result<(Uuid, Transaction<'c, Postgres>), Error> { #[cfg(feature = "cloud")] if *CLOUD_HOSTED { @@ -3784,7 +3789,7 @@ pub async fn push<'c, 'd>( } } } - + println!("Suspend number: {:#?}", suspend_number.as_ref()); let mut preprocessed = None; #[allow(unused)] let ( @@ -5035,8 +5040,8 @@ pub async fn push<'c, 'd>( ON CONFLICT (job_id) DO UPDATE SET email = EXCLUDED.email, username = EXCLUDED.username, is_admin = EXCLUDED.is_admin, is_operator = EXCLUDED.is_operator, folders = EXCLUDED.folders, groups = EXCLUDED.groups, workspace_id = EXCLUDED.workspace_id, end_user_email = EXCLUDED.end_user_email ) INSERT INTO v2_job_queue - (workspace_id, id, running, scheduled_for, started_at, tag, priority) - VALUES ($2, $1, $28, COALESCE($29, now()), CASE WHEN $27 OR $40 THEN now() END, $30, $31)", + (workspace_id, id, running, scheduled_for, started_at, tag, priority, suspend) + VALUES ($2, $1, $28, COALESCE($29, now()), CASE WHEN $27 OR $40 THEN now() END, $30, $31, $42)", job_id, workspace_id, raw_code, @@ -5082,6 +5087,7 @@ pub async fn push<'c, 'd>( trigger_kind as Option, running, end_user_email, + suspend_number.unwrap_or(0), ) .execute(&mut *tx) .warn_after_seconds(1) diff --git a/backend/windmill-queue/src/schedule.rs b/backend/windmill-queue/src/schedule.rs index aed22e3f28a70..59952f448e265 100644 --- a/backend/windmill-queue/src/schedule.rs +++ b/backend/windmill-queue/src/schedule.rs @@ -503,6 +503,7 @@ pub async fn push_scheduled_job<'c>( false, None, None, + None, ) .warn_after_seconds_with_sql(1, "push in push_scheduled_job".to_string()) .await?; diff --git a/backend/windmill-worker/src/ai/tools.rs b/backend/windmill-worker/src/ai/tools.rs index 243a67fb4ed07..2cc6c1da1a05f 100644 --- a/backend/windmill-worker/src/ai/tools.rs +++ b/backend/windmill-worker/src/ai/tools.rs @@ -471,6 +471,7 @@ async fn execute_windmill_tool( true, None, None, + None, ) .await?; diff --git a/backend/windmill-worker/src/worker.rs b/backend/windmill-worker/src/worker.rs index c457dc534341a..0de82b9e4d01c 100644 --- a/backend/windmill-worker/src/worker.rs +++ b/backend/windmill-worker/src/worker.rs @@ -826,7 +826,6 @@ pub fn start_interactive_worker_shell( Connection::Sql(db) => { let common_worker_prefix = retrieve_common_worker_prefix(&worker_name); let query = ("".to_string(), make_pull_query(&[common_worker_prefix])); - #[cfg(feature = "benchmark")] let mut bench = windmill_common::bench::BenchmarkIter::new(); let job = pull( @@ -860,10 +859,12 @@ pub fn start_interactive_worker_shell( } }; + + match pulled_job { Ok(Some(job)) => { tracing::debug!(worker = %worker_name, hostname = %hostname, "started handling of job {}", job.id); - + println!("{:#?}", &job); let job_dir = create_job_dir(&worker_dir, job.id).await; #[cfg(feature = "benchmark")] let mut bench = windmill_common::bench::BenchmarkIter::new(); diff --git a/backend/windmill-worker/src/worker_flow.rs b/backend/windmill-worker/src/worker_flow.rs index f9f8709f5c5b5..4ddab750cff46 100644 --- a/backend/windmill-worker/src/worker_flow.rs +++ b/backend/windmill-worker/src/worker_flow.rs @@ -3303,6 +3303,7 @@ async fn push_next_flow_job( false, None, None, + None, ) .warn_after_seconds(2) .await?; diff --git a/backend/windmill-worker/src/worker_lockfiles.rs b/backend/windmill-worker/src/worker_lockfiles.rs index 44b68948a761f..0b840884f57b8 100644 --- a/backend/windmill-worker/src/worker_lockfiles.rs +++ b/backend/windmill-worker/src/worker_lockfiles.rs @@ -670,6 +670,7 @@ pub async fn trigger_dependents_to_recompute_dependencies( false, None, debounce_job_id_o, + None, ) .await?; diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2055f79b82f1a..84faba58275c3 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -256,7 +256,6 @@ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", @@ -272,7 +271,6 @@ "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.9.0" } @@ -1854,7 +1852,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": "^14 || ^16 || >=18" }, @@ -2364,6 +2361,7 @@ "integrity": "sha512-Jer+M7DgIwT5IHfTayb4Iw/fkkxWNmC/mqn/nMh9JrbPbkxmyabfLQnhJ+JDn5HK77f84j34lubO3iqFtYAfMg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@floating-ui/core": "^1.3.1", "@floating-ui/dom": "^1.4.5", @@ -2492,6 +2490,7 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "license": "MIT", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -2837,6 +2836,7 @@ "integrity": "sha512-7TSvMrCdmig5TMyYDW876C5FljhA0wlGixtvASCiqUqtLfmyEEpaysXjC7GhR5mWcGRrCGF+L2Bl1eEaW1wTCA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@standard-schema/spec": "^1.0.0", "@sveltejs/acorn-typescript": "^1.0.5", @@ -2914,6 +2914,7 @@ "integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", "debug": "^4.4.1", @@ -3402,8 +3403,7 @@ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/ms": { "version": "2.1.0", @@ -3416,8 +3416,7 @@ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/semver": { "version": "7.7.1", @@ -3487,6 +3486,7 @@ "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", @@ -3754,6 +3754,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3807,6 +3808,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -3962,7 +3964,6 @@ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -3973,7 +3974,6 @@ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -4066,8 +4066,7 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -4194,6 +4193,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.9", "caniuse-lite": "^1.0.30001746", @@ -4391,7 +4391,6 @@ "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "camelcase": "^6.3.0", "map-obj": "^4.1.0", @@ -4411,7 +4410,6 @@ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10" }, @@ -4425,7 +4423,6 @@ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10" }, @@ -4439,7 +4436,6 @@ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "license": "(MIT OR CC0-1.0)", - "peer": true, "engines": { "node": ">=10" }, @@ -4538,6 +4534,7 @@ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz", "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==", "license": "MIT", + "peer": true, "dependencies": { "@kurkle/color": "^0.3.0" }, @@ -4728,7 +4725,6 @@ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", @@ -4793,7 +4789,6 @@ "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12 || >=16" } @@ -5059,6 +5054,7 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", + "peer": true, "engines": { "node": ">=12" } @@ -5112,6 +5108,7 @@ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.21.0" }, @@ -5152,7 +5149,6 @@ "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10" }, @@ -5166,7 +5162,6 @@ "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" @@ -5184,7 +5179,6 @@ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -5195,7 +5189,6 @@ "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -5653,7 +5646,6 @@ "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "is-arrayish": "^0.2.1" } @@ -5734,6 +5726,7 @@ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -6249,7 +6242,6 @@ "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 4.9.1" } @@ -6709,7 +6701,6 @@ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "global-prefix": "^3.0.0" }, @@ -6723,7 +6714,6 @@ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -6739,7 +6729,6 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "license": "ISC", - "peer": true, "dependencies": { "isexe": "^2.0.0" }, @@ -6789,8 +6778,7 @@ "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/gopd": { "version": "1.2.0", @@ -6816,6 +6804,7 @@ "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz", "integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==", "license": "MIT", + "peer": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -6874,7 +6863,6 @@ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6" } @@ -7096,7 +7084,6 @@ "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", - "peer": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -7110,7 +7097,6 @@ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", - "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -7123,8 +7109,7 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/html-tags": { "version": "3.3.1", @@ -7132,7 +7117,6 @@ "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" }, @@ -7216,7 +7200,6 @@ "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -7237,7 +7220,6 @@ "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -7309,8 +7291,7 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/is-binary-path": { "version": "2.1.0", @@ -7415,7 +7396,6 @@ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -7426,7 +7406,6 @@ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -7525,8 +7504,7 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", @@ -7562,8 +7540,7 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "1.0.0", @@ -7609,7 +7586,6 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -8188,8 +8164,7 @@ "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/lodash.uniq": { "version": "4.5.0", @@ -8258,7 +8233,6 @@ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" }, @@ -8309,7 +8283,6 @@ "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true, "license": "MIT", - "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -8550,7 +8523,6 @@ "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/minimist": "^1.2.2", "camelcase-keys": "^7.0.0", @@ -8578,7 +8550,6 @@ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "license": "(MIT OR CC0-1.0)", - "peer": true, "engines": { "node": ">=10" }, @@ -9249,7 +9220,6 @@ "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", @@ -9328,6 +9298,7 @@ "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-editor-api/-/monaco-vscode-editor-api-21.6.0.tgz", "integrity": "sha512-YTxKRHe9d4TvyEzWIqLpJXLyZyO4xFlLgrkgHoWBpomm6gIuwaRJJRpapBZf24oG8AhkniZSPg2iv/84M+ho6g==", "license": "MIT", + "peer": true, "dependencies": { "@codingame/monaco-vscode-5452e2b7-9081-5f95-839b-4ab3544ce28f-common": "21.6.0", "@codingame/monaco-vscode-api": "21.6.0" @@ -9583,7 +9554,6 @@ "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -9911,7 +9881,6 @@ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -10223,6 +10192,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -10411,6 +10381,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" @@ -10800,8 +10771,7 @@ "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/postcss-safe-parser": { "version": "6.0.0", @@ -10976,6 +10946,7 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -11264,7 +11235,6 @@ "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^3.0.2", @@ -11284,7 +11254,6 @@ "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "find-up": "^5.0.0", "read-pkg": "^6.0.0", @@ -11303,7 +11272,6 @@ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "license": "(MIT OR CC0-1.0)", - "peer": true, "engines": { "node": ">=10" }, @@ -11317,7 +11285,6 @@ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "license": "(MIT OR CC0-1.0)", - "peer": true, "engines": { "node": ">=10" }, @@ -11360,7 +11327,6 @@ "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "indent-string": "^5.0.0", "strip-indent": "^4.0.0" @@ -11836,7 +11802,6 @@ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -11913,7 +11878,6 @@ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -11924,8 +11888,7 @@ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, - "license": "CC-BY-3.0", - "peer": true + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", @@ -11933,7 +11896,6 @@ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -11944,8 +11906,7 @@ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true, - "license": "CC0-1.0", - "peer": true + "license": "CC0-1.0" }, "node_modules/string_decoder": { "version": "1.3.0", @@ -12018,7 +11979,6 @@ "integrity": "sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -12044,8 +12004,7 @@ "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", "dev": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/style-to-object": { "version": "0.4.4", @@ -12094,7 +12053,6 @@ "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@csstools/css-parser-algorithms": "^2.3.1", "@csstools/css-tokenizer": "^2.2.0", @@ -12177,7 +12135,6 @@ } ], "license": "MIT-0", - "peer": true, "engines": { "node": "^14 || ^16 || >=18" }, @@ -12191,7 +12148,6 @@ "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "flat-cache": "^3.2.0" }, @@ -12204,8 +12160,7 @@ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/stylelint/node_modules/postcss-selector-parser": { "version": "6.1.2", @@ -12228,7 +12183,6 @@ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -12339,7 +12293,6 @@ "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -12369,6 +12322,7 @@ "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.39.12.tgz", "integrity": "sha512-CEzwxFuEycokU8K8CE/OuwVbmei+ivu2HvBGYIdASfMa1hCRSNr4RRkzNSvbAvu6h+BOig2CsZTAEY+WKvwZpA==", "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", @@ -12464,21 +12418,6 @@ } } }, - "node_modules/svelte-check/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/svelte-eslint-parser": { "version": "0.43.0", "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.43.0.tgz", @@ -12681,8 +12620,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", - "dev": true, - "peer": true + "dev": true }, "node_modules/svgo": { "version": "3.3.2", @@ -12733,7 +12671,6 @@ "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -12761,6 +12698,7 @@ "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -12996,6 +12934,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -13048,7 +12987,6 @@ "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -13147,6 +13085,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13361,7 +13300,6 @@ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -13416,6 +13354,7 @@ "integrity": "sha512-cK6tCmZyEC0KRAcXTjQ+ara+wkqmaE7WUoI0ZfZzDuvaRaZ3mtvbhTJc4cH+PjKRok++++Z1bZZaNlf3+SnnGA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@oxc-project/runtime": "0.92.0", "fdir": "^6.5.0", @@ -13528,6 +13467,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -13927,7 +13867,6 @@ "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "license": "ISC", - "peer": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" @@ -13936,29 +13875,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/xml-utils": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.10.2.tgz", @@ -14117,7 +14033,6 @@ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", - "peer": true, "engines": { "node": ">=10" } @@ -14127,6 +14042,7 @@ "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.27.tgz", "integrity": "sha512-OIDwaflOaq4wC6YlPBy2L6ceKeKuF7DeTxx+jPzv1FHn9tCZ0ZwSRnUBxD05E3yed46fv/FWJbvR+Ud7x0L7zw==", "license": "MIT", + "peer": true, "dependencies": { "lib0": "^0.2.99" }, @@ -14169,6 +14085,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/frontend/src/lib/components/triggers/TriggerStateToggle.svelte b/frontend/src/lib/components/triggers/TriggerStateToggle.svelte new file mode 100644 index 0000000000000..c4338e64ff881 --- /dev/null +++ b/frontend/src/lib/components/triggers/TriggerStateToggle.svelte @@ -0,0 +1,219 @@ + + + + +{#if shouldShowModal} + +
+ {#if loading} +
+
+ Loading queued jobs... +
+ {:else if error} +
+ {error} +
+ {:else if queuedJobs.length === 0} +
No queued jobs found for this trigger.
+ {:else} +
+
+

Queued Jobs ({queuedJobs.length})

+

Click on any job to view details

+
+ + +
+ +
+
Status
+
Started
+
Duration
+
Path
+
Triggered by
+
+
+ + +
+ {#each queuedJobs as job} +
+ { + // Handle job selection - navigate to job details or show modal + window.open(`/run/${job.id}?workspace=${workspace}`, '_blank') + }} + /> +
+ {/each} +
+
+
+ +
+

+ You are switching this trigger from inactive to active mode. What would you like to do + with the {queuedJobs.length} queued job{queuedJobs.length === 1 ? '' : 's'}? +

+
+ {/if} + +
+ + + {#if !loading && !error && queuedJobs.length > 0} + + + + {/if} +
+
+
+{/if} diff --git a/frontend/src/lib/components/triggers/gcp/GcpTriggerEditorInner.svelte b/frontend/src/lib/components/triggers/gcp/GcpTriggerEditorInner.svelte index 83b04b5de64f2..2ed0f802ec61d 100644 --- a/frontend/src/lib/components/triggers/gcp/GcpTriggerEditorInner.svelte +++ b/frontend/src/lib/components/triggers/gcp/GcpTriggerEditorInner.svelte @@ -29,6 +29,7 @@ import TriggerRetriesAndErrorHandler from '../TriggerRetriesAndErrorHandler.svelte' import Subsection from '$lib/components/Subsection.svelte' import Toggle from '$lib/components/Toggle.svelte' + import TriggerStateToggle from '../TriggerStateToggle.svelte' let drawer: Drawer | undefined = $state(undefined) let initialPath = $state('') @@ -60,6 +61,8 @@ let error_handler_path: string | undefined = $state() let error_handler_args: Record = $state({}) let retry: Retry | undefined = $state() + let active_mode = $state(true) + let suspend_number: number | undefined let { useDrawer = true, description = undefined, @@ -188,6 +191,8 @@ can_write = canWrite(cfg?.path, cfg?.extra_perms, $userStore) error_handler_path = cfg?.error_handler_path error_handler_args = cfg?.error_handler_args ?? {} + active_mode = cfg?.suspend_number ? false : true + suspend_number = cfg?.suspend_number retry = cfg?.retry auto_acknowledge_msg = cfg?.auto_acknowledge_msg ?? true ack_deadline = cfg?.ack_deadline @@ -216,6 +221,7 @@ function getGcpConfig() { return { + active_mode, gcp_resource_path, subscription_mode, subscription_id, @@ -391,6 +397,8 @@ {/if} + + {/if} Date: Wed, 12 Nov 2025 17:17:31 +0100 Subject: [PATCH 03/35] ok --- backend/windmill-api/openapi.yaml | 57 ++++++ backend/windmill-api/src/jobs.rs | 176 ++++++++++++++++++ .../src/triggers/email/handler_oss.rs | 2 + backend/windmill-api/src/triggers/handler.rs | 27 ++- .../windmill-api/src/triggers/http/handler.rs | 37 +++- backend/windmill-api/src/triggers/mod.rs | 3 +- .../src/triggers/trigger_helpers.rs | 12 -- .../src/triggers/websocket/listener.rs | 37 ++-- .../lib/components/common/modal/Modal2.svelte | 2 +- .../triggers/TriggerStateToggle.svelte | 69 ++++--- .../email/EmailTriggerEditorInner.svelte | 10 +- .../triggers/gcp/GcpTriggerEditorInner.svelte | 2 +- .../triggers/http/RouteEditorInner.svelte | 10 +- .../kafka/KafkaTriggerEditorInner.svelte | 10 +- .../mqtt/MqttTriggerEditorInner.svelte | 10 +- .../nats/NatsTriggerEditorInner.svelte | 10 +- .../PostgresTriggerEditorInner.svelte | 10 +- .../triggers/sqs/SqsTriggerEditorInner.svelte | 10 +- .../WebsocketTriggerEditorInner.svelte | 10 +- 19 files changed, 420 insertions(+), 84 deletions(-) diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 866a39566c73d..6b2ef97bc45d4 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -8348,6 +8348,63 @@ paths: items: type: string + /w/{workspace}/jobs/queue/resume_suspended: + post: + summary: resume all suspended jobs with the given suspend number + operationId: resumeSuspendedJobs + tags: + - job + parameters: + - $ref: "#/components/parameters/WorkspaceId" + requestBody: + description: suspend number of the jobs to resume + required: true + content: + application/json: + schema: + type: object + properties: + suspend_number: + type: integer + description: the suspend number of jobs to resume + required: + - suspend_number + responses: + "200": + content: + application/json: + schema: + type: string + + /w/{workspace}/jobs/queue/cancel_suspended: + post: + summary: cancel all suspended jobs with the given suspend number + operationId: cancelSuspendedJobs + tags: + - job + parameters: + - $ref: "#/components/parameters/WorkspaceId" + requestBody: + description: suspend number of the jobs to cancel + required: true + content: + application/json: + schema: + type: object + properties: + suspend_number: + type: integer + description: the suspend number of jobs to cancel + required: + - suspend_number + responses: + "200": + description: confirmation message + content: + application/json: + schema: + type: string + /w/{workspace}/jobs/completed/list: get: summary: list all completed jobs diff --git a/backend/windmill-api/src/jobs.rs b/backend/windmill-api/src/jobs.rs index b5c613b3db71b..1a0c013539ef0 100644 --- a/backend/windmill-api/src/jobs.rs +++ b/backend/windmill-api/src/jobs.rs @@ -15,6 +15,7 @@ use futures::{StreamExt, TryFutureExt}; use http::{HeaderMap, HeaderName}; use itertools::Itertools; use quick_cache::sync::Cache; +use rand::SeedableRng; use serde_json::value::RawValue; use serde_json::Value; use sqlx::Pool; @@ -106,6 +107,56 @@ use windmill_queue::{ use crate::flow_conversations; use windmill_common::flow_conversations::MessageType; +pub async fn generate_unique_suspend_number( + db: &Pool, + workspace_id: &str, +) -> error::Result { + use rand::Rng; + + let mut rng = rand::rngs::StdRng::from_os_rng(); + let mut attempts = 0; + let max_attempts = 10; + + loop { + attempts += 1; + if attempts > max_attempts { + return Err(error::Error::InternalErr(format!( + "Failed to generate unique suspend number after {} attempts", + max_attempts + ))); + } + + let suspend_number = rng.random_range(101..i32::MAX); + + let exists = sqlx::query_scalar!( + "SELECT EXISTS(SELECT 1 FROM v2_job_queue WHERE workspace_id = $1 AND suspend = $2)", + workspace_id, + suspend_number + ) + .fetch_one(db) + .await? + .unwrap_or(false); + + if !exists { + return Ok(suspend_number); + } + } +} + +pub async fn get_suspend_number_for_unactive_mode( + db: &Pool, + workspace_id: &str, + active_mode: Option, +) -> error::Result> { + if let Some(false) = active_mode { + Ok(Some( + generate_unique_suspend_number(db, workspace_id).await?, + )) + } else { + Ok(None) + } +} + pub fn workspaced_service() -> Router { let cors = CorsLayer::new() .allow_methods([http::Method::GET, http::Method::POST]) @@ -237,6 +288,8 @@ pub fn workspaced_service() -> Router { .route("/queue/position/:timestamp", get(get_queue_position)) .route("/queue/scheduled_for/:id", get(get_scheduled_for)) .route("/queue/cancel_selection", post(cancel_selection)) + .route("/queue/resume_suspended", post(resume_suspended_jobs)) + .route("/queue/cancel_suspended", post(cancel_suspended_jobs)) .route("/completed/count", get(count_completed_jobs)) .route("/completed/count_jobs", get(count_completed_jobs_detail)) .route( @@ -2176,6 +2229,129 @@ async fn cancel_selection( .await } +#[derive(Deserialize)] +pub struct ResumeSuspendedJobsRequest { + suspend_number: i32, +} + +async fn resume_suspended_jobs( + authed: ApiAuthed, + Extension(user_db): Extension, + Path(w_id): Path, + Json(request): Json, +) -> error::JsonResult { + require_admin(authed.is_admin, &authed.username)?; + + let mut tx = user_db.begin(&authed).await?; + + sqlx::query!( + r#" + WITH jobs_to_resume AS ( + SELECT + jq.id + FROM + v2_job_queue jq + INNER JOIN v2_job j ON j.id = jq.id + WHERE + j.workspace_id = $1 AND + jq.suspend = $2 AND + jq.canceled_by IS NULL + ) + UPDATE + v2_job_queue + SET + suspend = 0, + scheduled_for = NOW() + WHERE + id IN (SELECT id FROM jobs_to_resume) + "#, + w_id, + request.suspend_number + ) + .fetch_all(&mut *tx) + .await?; + + audit_log( + &mut *tx, + &authed, + "jobs.resume_suspended", + ActionKind::Update, + &w_id, + Some(&format!("suspend_number:{}", request.suspend_number)), + None, + ) + .await?; + + tx.commit().await?; + + Ok(Json(format!( + "Resumed all suspended workspace jobs for suspend number: {}", + request.suspend_number + ))) +} + +#[derive(Deserialize)] +pub struct CancelSuspendedJobsRequest { + suspend_number: i32, +} + +async fn cancel_suspended_jobs( + authed: ApiAuthed, + Extension(user_db): Extension, + Path(w_id): Path, + Json(request): Json, +) -> error::JsonResult { + require_admin(authed.is_admin, &authed.username)?; + + let mut tx = user_db.begin(&authed).await?; + + sqlx::query!( + r#" + WITH jobs_to_cancel AS ( + SELECT + jq.id + FROM + v2_job_queue jq + INNER JOIN v2_job j ON j.id = jq.id + WHERE + j.workspace_id = $1 AND + jq.suspend = $2 AND + jq.canceled_by IS NULL + ) + UPDATE + v2_job_queue + SET + canceled_by = $3, + canceled_reason = 'Canceled all suspended jobs with suspend number' + WHERE + id IN (SELECT id FROM jobs_to_cancel) + "#, + w_id, + request.suspend_number, + authed.username + ) + .fetch_all(&mut *tx) + .await?; + + audit_log( + &mut *tx, + &authed, + "jobs.cancel_suspended", + ActionKind::Delete, + &w_id, + Some(&format!("suspend_number:{}", request.suspend_number)), + None, + ) + .await?; + + tx.commit().await?; + + Ok(Json(format!( + "Canceled all suspended workspace jobs for suspend number: {}", + request.suspend_number + ))) +} + async fn list_filtered_job_uuids( authed: ApiAuthed, Extension(db): Extension, diff --git a/backend/windmill-api/src/triggers/email/handler_oss.rs b/backend/windmill-api/src/triggers/email/handler_oss.rs index 2f3a318bdd922..363f515f40c77 100644 --- a/backend/windmill-api/src/triggers/email/handler_oss.rs +++ b/backend/windmill-api/src/triggers/email/handler_oss.rs @@ -46,6 +46,7 @@ impl TriggerCrud for EmailTrigger { _authed: &ApiAuthed, _w_id: &str, _trigger: TriggerData, + _suspend_number: Option, ) -> Result<()> { Err(Error::BadRequest( "Email triggers are not available in open source version".to_string(), @@ -60,6 +61,7 @@ impl TriggerCrud for EmailTrigger { _workspace_id: &str, _path: &str, _trigger: TriggerData, + _suspend_number: Option, ) -> Result<()> { Err(Error::BadRequest( "Email triggers are not available in open source version".to_string(), diff --git a/backend/windmill-api/src/triggers/handler.rs b/backend/windmill-api/src/triggers/handler.rs index 058f994f3a3ce..6005e27c31f49 100644 --- a/backend/windmill-api/src/triggers/handler.rs +++ b/backend/windmill-api/src/triggers/handler.rs @@ -1,8 +1,7 @@ use crate::{ db::ApiAuthed, - triggers::{ - trigger_helpers::get_suspend_number_for_unactive_mode, StandardTriggerQuery, TriggerData, - }, + jobs::generate_unique_suspend_number, + triggers::{StandardTriggerQuery, TriggerData}, }; use async_trait::async_trait; use serde::{de::DeserializeOwned, Deserialize, Serialize}; @@ -365,6 +364,20 @@ pub fn trigger_routes() -> Router { router } +pub async fn get_suspend_number_for_inactive_mode( + db: &DB, + workspace_id: &str, + active_mode: Option, +) -> Result> { + if let Some(false) = active_mode { + Ok(Some( + generate_unique_suspend_number(db, workspace_id).await?, + )) + } else { + Ok(None) + } +} + async fn create_trigger( Extension(handler): Extension>, authed: ApiAuthed, @@ -395,7 +408,9 @@ async fn create_trigger( let mut tx = user_db.begin(&authed).await?; let new_path = new_trigger.base.path.clone(); - let suspend_number = get_suspend_number_for_unactive_mode(new_trigger.base.active_mode); + let suspend_number = + get_suspend_number_for_inactive_mode(&db, &workspace_id, new_trigger.base.active_mode) + .await?; handler .create_trigger( @@ -496,7 +511,9 @@ async fn update_trigger( let mut tx = user_db.begin(&authed).await?; let new_path = edit_trigger.base.path.to_string(); - let suspend_number = get_suspend_number_for_unactive_mode(edit_trigger.base.active_mode); + let suspend_number = + get_suspend_number_for_inactive_mode(&db, &workspace_id, edit_trigger.base.active_mode) + .await?; handler .update_trigger( diff --git a/backend/windmill-api/src/triggers/http/handler.rs b/backend/windmill-api/src/triggers/http/handler.rs index 8b8b34594f1bb..8b67c02ae1927 100644 --- a/backend/windmill-api/src/triggers/http/handler.rs +++ b/backend/windmill-api/src/triggers/http/handler.rs @@ -8,13 +8,14 @@ use crate::{ jobs::start_job_update_sse_stream, resources::try_get_resource_from_db_as, triggers::{ + handler::get_suspend_number_for_inactive_mode, http::{ refresh_routers, validate_authentication_method, HttpConfig, HttpConfigRequest, RouteExists, ROUTE_PATH_KEY_RE, VALID_ROUTE_PATH_RE, }, trigger_helpers::{ - get_runnable_format, get_suspend_number_for_unactive_mode, trigger_runnable, - trigger_runnable_and_wait_for_result, trigger_runnable_inner, RunnableId, + get_runnable_format, trigger_runnable, trigger_runnable_and_wait_for_result, + trigger_runnable_inner, RunnableId, }, Trigger, TriggerCrud, TriggerData, }, @@ -283,7 +284,8 @@ pub async fn create_many_http_triggers( for (new_http_trigger, route_path_key) in new_http_triggers.iter().zip(route_path_keys.iter()) { let suspend_number = - get_suspend_number_for_unactive_mode(new_http_trigger.base.active_mode); + get_suspend_number_for_inactive_mode(&db, &w_id, new_http_trigger.base.active_mode) + .await?; insert_new_trigger_into_db( &authed, &mut tx, @@ -1052,6 +1054,35 @@ async fn route_job( ) .map_err(|e| e.into_response())?; + if let Some(suspend_number) = trigger.suspend_number { + let _ = trigger_runnable( + &db, + Some(user_db), + authed, + &trigger.workspace_id, + &trigger.script_path, + trigger.is_flow, + args, + trigger.retry.as_ref(), + trigger.error_handler_path.as_deref(), + trigger.error_handler_args.as_ref(), + format!("http_trigger/{}", trigger.path), + None, + Some(suspend_number), + ) + .await + .map_err(|e| e.into_response())?; + + return Ok(( + StatusCode::OK, + format!( + "Trigger: {} in inactive mode, incoming request has been queued", + &trigger.path + ), + ) + .into_response()); + } + // Handle execution based on the execution mode match trigger.request_type { RequestType::SyncSse => { diff --git a/backend/windmill-api/src/triggers/mod.rs b/backend/windmill-api/src/triggers/mod.rs index af81442bc3490..509837bb709ed 100644 --- a/backend/windmill-api/src/triggers/mod.rs +++ b/backend/windmill-api/src/triggers/mod.rs @@ -52,7 +52,7 @@ pub struct BaseTrigger { pub email: String, pub edited_at: DateTime, pub extra_perms: Option, - pub suspend_number: Option + pub suspend_number: Option, } #[derive(Debug, FromRow, Clone, Serialize, Deserialize)] @@ -117,6 +117,7 @@ pub struct BaseTriggerData { pub is_flow: bool, pub enabled: Option, pub active_mode: Option, + pub process_queued_jobs: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/backend/windmill-api/src/triggers/trigger_helpers.rs b/backend/windmill-api/src/triggers/trigger_helpers.rs index 64a4af44c8924..bee69f516ebc8 100644 --- a/backend/windmill-api/src/triggers/trigger_helpers.rs +++ b/backend/windmill-api/src/triggers/trigger_helpers.rs @@ -903,18 +903,6 @@ async fn trigger_script_with_retry_and_error_handler( Ok((uuid, delete_after_use)) } -pub fn generate_trigger_suspend_number() -> i32 { - use rand::Rng; - let mut rng = rand::rng(); - rng.random_range(101..i32::MAX) -} - -pub fn get_suspend_number_for_unactive_mode(active_mode: Option) -> Option { - if let Some(false) = active_mode { - return Some(generate_trigger_suspend_number()); - } - None -} async fn trigger_runnable_with_suspend( db: &DB, diff --git a/backend/windmill-api/src/triggers/websocket/listener.rs b/backend/windmill-api/src/triggers/websocket/listener.rs index 65f693d352683..ed9c4b6d674d4 100644 --- a/backend/windmill-api/src/triggers/websocket/listener.rs +++ b/backend/windmill-api/src/triggers/websocket/listener.rs @@ -365,7 +365,25 @@ impl Listener for WebsocketTrigger { ), None => (None, None, None), }; - if let Some(ReturnMessageChannels { send_message_tx, mut killpill_rx }) = extra { + + if suspend_number.is_some() || extra.is_none() { + trigger_runnable( + db, + None, + authed, + &workspace_id, + &script_path, + *is_flow, + args, + retry, + error_handler_path, + error_handler_args, + format!("websocket_trigger/{}", listening_trigger.path), + None, + *suspend_number, + ) + .await?; + } else if let Some(ReturnMessageChannels { send_message_tx, mut killpill_rx }) = extra { let db_ = db.clone(); let url = url.to_owned(); let script_path = script_path.to_owned(); @@ -415,23 +433,6 @@ impl Listener for WebsocketTrigger { }; tokio::spawn(handle_response_f); - } else { - trigger_runnable( - db, - None, - authed, - &workspace_id, - &script_path, - *is_flow, - args, - retry, - error_handler_path, - error_handler_args, - format!("websocket_trigger/{}", listening_trigger.path), - None, - *suspend_number - ) - .await?; } Ok(()) diff --git a/frontend/src/lib/components/common/modal/Modal2.svelte b/frontend/src/lib/components/common/modal/Modal2.svelte index cecadb18b332a..0fbefa59bed78 100644 --- a/frontend/src/lib/components/common/modal/Modal2.svelte +++ b/frontend/src/lib/components/common/modal/Modal2.svelte @@ -50,7 +50,7 @@ {#if isOpen}
diff --git a/frontend/src/lib/components/triggers/TriggerStateToggle.svelte b/frontend/src/lib/components/triggers/TriggerStateToggle.svelte index c4338e64ff881..a7ca694b6e9b2 100644 --- a/frontend/src/lib/components/triggers/TriggerStateToggle.svelte +++ b/frontend/src/lib/components/triggers/TriggerStateToggle.svelte @@ -7,23 +7,23 @@ import { workspaceStore } from '$lib/stores' import RunRow from '../runs/RunRow.svelte' import '../runs/runs-grid.css' + import { sendUserToast } from '$lib/toast' type Props = { active_mode: boolean suspendNumber?: number triggerPath?: string - onRunSuspendedJobs?: (data: { suspendNumber: number; jobIds: string[] }) => void } - let { active_mode = $bindable(), suspendNumber, onRunSuspendedJobs }: Props = $props() + let { active_mode = $bindable(), suspendNumber }: Props = $props() - let wasInUnactiveMode = $state(!active_mode) + let wasInInactiveMode = $state(!active_mode) let shouldShowModal = $state(false) $effect(() => { - if (active_mode && wasInUnactiveMode && suspendNumber !== undefined) { + if (active_mode && wasInInactiveMode && suspendNumber !== undefined) { shouldShowModal = true } else if (!active_mode) { - wasInUnactiveMode = true + wasInInactiveMode = true shouldShowModal = false } }) @@ -32,7 +32,6 @@ let error = $state(null) let processingAction = $state(false) let workspace = $workspaceStore! - let selectedJobIds = $state([]) let containerWidth = $state(1000) $effect(() => { if (shouldShowModal && suspendNumber !== undefined) { @@ -63,59 +62,60 @@ } async function runAllJobs() { - if (queuedJobs.length === 0) return + if (queuedJobs.length === 0 || !suspendNumber) return processingAction = true error = null try { - if (onRunSuspendedJobs && suspendNumber !== undefined) { - onRunSuspendedJobs({ suspendNumber, jobIds: queuedJobs.map((j) => j.id) }) - } - - closeModal() + const resumedJobs = await JobService.resumeSuspendedJobs({ + workspace, + requestBody: { + suspend_number: suspendNumber + } + }) + sendUserToast(resumedJobs) } catch (e) { error = `Failed to run jobs: ${e}` console.error('Failed to run jobs:', e) } finally { processingAction = false + + closeModal() } } async function discardAllJobs() { - if (queuedJobs.length === 0) return + if (queuedJobs.length === 0 || !suspendNumber) return processingAction = true error = null try { - const jobIds = queuedJobs.map((job) => job.id) - await JobService.cancelSelection({ + await JobService.cancelSuspendedJobs({ workspace, - requestBody: jobIds + requestBody: { + suspend_number: suspendNumber + } }) - closeModal() + sendUserToast(`Successfully canceled all jobs with suspend number: ${suspendNumber}`) } catch (e) { error = `Failed to discard jobs: ${e}` console.error('Failed to discard jobs:', e) } finally { processingAction = false + closeModal() } } function closeModal() { - wasInUnactiveMode = false + wasInInactiveMode = false shouldShowModal = false } - - function cancelToggle() { - active_mode = false - closeModal() - } - + {#if shouldShowModal} -
+
{#if loading}
{:else if queuedJobs.length === 0} -
No queued jobs found for this trigger.
+
+
+
No queued jobs found
+
This trigger has no jobs waiting to be processed.
+
+
{:else}
-

Queued Jobs ({queuedJobs.length})

+

Queued Jobs ({queuedJobs.length})

Click on any job to view details

-
-
@@ -159,7 +164,6 @@
-
{#each queuedJobs as job}
@@ -169,7 +173,6 @@ showTag={false} activeLabel={null} on:select={() => { - // Handle job selection - navigate to job details or show modal window.open(`/run/${job.id}?workspace=${workspace}`, '_blank') }} /> @@ -188,10 +191,6 @@ {/if}
- - {#if !loading && !error && queuedJobs.length > 0}
+ + {/if} = $state({}) let retry: Retry | undefined = $state() + let active_mode = $state(true) + let suspend_number: number | undefined = $state(undefined) const isValid = $derived( !!kafkaResourcePath && @@ -188,6 +191,8 @@ error_handler_args = cfg?.error_handler_args ?? {} retry = cfg?.retry errorHandlerSelected = getHandlerType(error_handler_path ?? '') + active_mode = cfg?.suspend_number ? false : true + suspend_number = cfg?.suspend_number } async function loadTrigger(defaultConfig?: Record): Promise { @@ -215,7 +220,8 @@ extra_perms: extra_perms, error_handler_path, error_handler_args, - retry + retry, + active_mode } } @@ -382,6 +388,8 @@ {/if}
+ + {/if} = $state({}) let retry: Retry | undefined = $state() + let active_mode = $state(true) + let suspend_number: number | undefined = $state(undefined) let optionTabSelected: 'connection_options' | 'error_handler' | 'retries' = $state('connection_options') @@ -202,6 +205,8 @@ error_handler_args = cfg?.error_handler_args ?? {} retry = cfg?.retry errorHandlerSelected = getHandlerType(error_handler_path ?? '') + active_mode = cfg?.suspend_number ? false : true + suspend_number = cfg?.suspend_number activateV5Options.topic_alias_maximum = Boolean(v5_config.topic_alias_maximum) activateV5Options.session_expiry_interval = Boolean(v5_config.session_expiry_interval) } catch (error) { @@ -240,7 +245,8 @@ is_flow, error_handler_path, error_handler_args, - retry + retry, + active_mode } } @@ -417,6 +423,8 @@ {/if} + + = $state({}) let retry: Retry | undefined = $state() + let active_mode = $state(true) + let suspend_number: number | undefined = $state(undefined) const saveDisabled = $derived( pathError != '' || emptyString(script_path) || !can_write || !isValid @@ -190,6 +193,8 @@ error_handler_args = cfg?.error_handler_args ?? {} retry = cfg?.retry errorHandlerSelected = getHandlerType(error_handler_path ?? '') + active_mode = cfg?.suspend_number ? false : true + suspend_number = cfg?.suspend_number } async function loadTrigger(defaultConfig?: Record): Promise { @@ -218,7 +223,8 @@ use_jetstream: natsCfg.use_jetstream, error_handler_path, error_handler_args, - retry + retry, + active_mode } } @@ -398,6 +404,8 @@ {/if} + + = $state({}) let retry: Retry | undefined = $state() + let active_mode = $state(true) + let suspend_number: number | undefined = $state(undefined) const errorMessage = $derived.by(() => { if (relations && relations.length > 0) { @@ -299,7 +302,8 @@ : undefined, error_handler_path, error_handler_args, - retry + retry, + active_mode } return cfg } @@ -320,6 +324,8 @@ error_handler_args = cfg?.error_handler_args ?? {} retry = cfg?.retry errorHandlerSelected = getHandlerType(error_handler_path ?? '') + active_mode = cfg?.suspend_number ? false : true + suspend_number = cfg?.suspend_number } async function loadTrigger(defaultConfig?: Record): Promise { @@ -575,6 +581,8 @@
{/if} + +
{#snippet badge()} {#if isEditor} diff --git a/frontend/src/lib/components/triggers/sqs/SqsTriggerEditorInner.svelte b/frontend/src/lib/components/triggers/sqs/SqsTriggerEditorInner.svelte index 26553ec08079e..ddcdace721b22 100644 --- a/frontend/src/lib/components/triggers/sqs/SqsTriggerEditorInner.svelte +++ b/frontend/src/lib/components/triggers/sqs/SqsTriggerEditorInner.svelte @@ -24,6 +24,7 @@ import Tabs from '$lib/components/common/tabs/Tabs.svelte' import Tab from '$lib/components/common/tabs/Tab.svelte' import TriggerRetriesAndErrorHandler from '../TriggerRetriesAndErrorHandler.svelte' + import TriggerStateToggle from '../TriggerStateToggle.svelte' interface Props { useDrawer?: boolean @@ -88,6 +89,8 @@ let error_handler_path: string | undefined = $state() let error_handler_args: Record = $state({}) let retry: Retry | undefined = $state() + let active_mode = $state(true) + let suspend_number: number | undefined = $state(undefined) const sqsConfig = $derived.by(getSaveCfg) const captureConfig = $derived.by(getCaptureConfig) @@ -176,6 +179,8 @@ error_handler_args = cfg?.error_handler_args ?? {} retry = cfg?.retry errorHandlerSelected = getHandlerType(error_handler_path ?? '') + active_mode = cfg?.suspend_number ? false : true + suspend_number = cfg?.suspend_number } catch (error) { sendUserToast(`Could not load SQS trigger config: ${error.body}`, true) } @@ -210,7 +215,8 @@ enabled, error_handler_path, error_handler_args, - retry + retry, + active_mode } } @@ -383,6 +389,8 @@ {/if}
+ + {/if} = $state({}) let retry: Retry | undefined = $state() + let active_mode = $state(true) + let suspend_number: number | undefined = $state(undefined) const websocketCfg = $derived.by(getSaveCfg) const captureConfig = $derived.by(isEditor ? getCaptureConfig : () => ({})) @@ -219,6 +222,8 @@ error_handler_args = cfg?.error_handler_args ?? {} retry = cfg?.retry errorHandlerSelected = getHandlerType(error_handler_path ?? '') + active_mode = cfg?.suspend_number ? false : true + suspend_number = cfg?.suspend_number } function getSaveCfg() { @@ -236,7 +241,8 @@ enabled, error_handler_path, error_handler_args, - retry + retry, + active_mode } } @@ -490,6 +496,8 @@ /> + + Date: Thu, 13 Nov 2025 17:12:38 +0100 Subject: [PATCH 04/35] remove print --- backend/windmill-queue/src/jobs.rs | 1 - backend/windmill-worker/src/worker.rs | 1 - 2 files changed, 2 deletions(-) diff --git a/backend/windmill-queue/src/jobs.rs b/backend/windmill-queue/src/jobs.rs index 2b2bd59829a5e..8a1615b57d3d9 100644 --- a/backend/windmill-queue/src/jobs.rs +++ b/backend/windmill-queue/src/jobs.rs @@ -4067,7 +4067,6 @@ pub async fn push<'c, 'd>( } } } - println!("Suspend number: {:#?}", suspend_number.as_ref()); let mut preprocessed = None; #[allow(unused)] let ( diff --git a/backend/windmill-worker/src/worker.rs b/backend/windmill-worker/src/worker.rs index ba099c87dd5df..2e34d1630f991 100644 --- a/backend/windmill-worker/src/worker.rs +++ b/backend/windmill-worker/src/worker.rs @@ -876,7 +876,6 @@ pub fn start_interactive_worker_shell( match pulled_job { Ok(Some(job)) => { tracing::debug!(worker = %worker_name, hostname = %hostname, "started handling of job {}", job.id); - println!("{:#?}", &job); let job_dir = create_job_dir(&worker_dir, job.id).await; #[cfg(feature = "benchmark")] let mut bench = windmill_common::bench::BenchmarkIter::new(); From 22b5dc26632262a1ece16d407e32fe6893c528be Mon Sep 17 00:00:00 2001 From: dieriba Date: Thu, 13 Nov 2025 17:16:48 +0100 Subject: [PATCH 05/35] rm packe json --- frontend/package-lock.json | 14119 ----------------------------------- 1 file changed, 14119 deletions(-) delete mode 100644 frontend/package-lock.json diff --git a/frontend/package-lock.json b/frontend/package-lock.json deleted file mode 100644 index 17007336e073f..0000000000000 --- a/frontend/package-lock.json +++ /dev/null @@ -1,14119 +0,0 @@ -{ - "name": "windmill-components", - "version": "1.575.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "windmill-components", - "version": "1.575.0", - "hasInstallScript": true, - "license": "AGPL-3.0", - "dependencies": { - "@anthropic-ai/sdk": "^0.60.0", - "@aws-crypto/sha256-js": "^4.0.0", - "@codingame/monaco-vscode-editor-api": "=21.6.0", - "@codingame/monaco-vscode-standalone-css-language-features": "=21.6.0", - "@codingame/monaco-vscode-standalone-html-language-features": "=21.6.0", - "@codingame/monaco-vscode-standalone-json-language-features": "=21.6.0", - "@codingame/monaco-vscode-standalone-languages": "=21.6.0", - "@codingame/monaco-vscode-standalone-typescript-language-features": "=21.6.0", - "@json2csv/plainjs": "^7.0.6", - "@leeoniya/ufuzzy": "^1.0.8", - "@popperjs/core": "^2.11.6", - "@redocly/json-to-json-schema": "^0.0.1", - "@scalar/openapi-parser": "^0.15.0", - "@tanstack/svelte-table": "npm:tanstack-table-8-svelte-5@^0.1", - "@tutorlatin/svelte-tiny-virtual-list": "^3.0.16", - "@windmill-labs/svelte-dnd-action": "^0.9.44", - "@xterm/addon-fit": "^0.10.0", - "@xyflow/svelte": "^1.0.0", - "ag-charts-community": "^9.0.1", - "ag-charts-enterprise": "^9.0.1", - "ag-grid-community": "^31.3.4", - "ag-grid-enterprise": "^31.3.4", - "ansi_up": "^6.0.6", - "chart.js": "^4.4.6", - "chartjs-adapter-date-fns": "^3.0.0", - "chartjs-plugin-zoom": "^2.0.0", - "clone": "^2.1.2", - "d3-zoom": "^3.0.0", - "date-fns": "^2.30.0", - "diff": "^7.0.0", - "driver.js": "^1.3.0", - "esm-env": "^1.0.0", - "fast-equals": "^5.0.1", - "graphql": "^16.7.1", - "hash-sum": "^2.0.0", - "highlight.js": "^11.8.0", - "idb": "^8.0.2", - "lru-cache": "^11.1.0", - "lucide-svelte": "^0.540.0", - "minimatch": "^10.0.1", - "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@=21.6.0", - "monaco-graphql": "=1.6.0", - "monaco-languageclient": "10.1.0", - "monaco-vim": "^0.4.1", - "ol": "^7.4.0", - "openai": "^5.16.0", - "openapi-types": "^12.1.3", - "p-limit": "^6.1.0", - "panzoom": "^9.4.3", - "pdfjs-dist": "4.8.69", - "quicktype-core": "^23.2.6", - "quill": "^1.3.7", - "rehype-github-alerts": "^3.0.0", - "rehype-raw": "^7.0.0", - "rfc4648": "^1.5.3", - "svelte-carousel": "^1.0.25", - "svelte-exmarkdown": "^5.0.0", - "svelte-infinite-loading": "^1.4.0", - "tailwind-merge": "^1.13.2", - "vscode": "npm:@codingame/monaco-vscode-extension-api@=21.6.0", - "vscode-languageclient": "~9.0.1", - "vscode-uri": "~3.1.0", - "vscode-ws-jsonrpc": "~3.5.0", - "windmill-parser-wasm-csharp": "1.510.1", - "windmill-parser-wasm-go": "1.510.1", - "windmill-parser-wasm-java": "1.510.1", - "windmill-parser-wasm-nu": "1.510.1", - "windmill-parser-wasm-php": "1.574.1", - "windmill-parser-wasm-py": "1.538.0", - "windmill-parser-wasm-regex": "1.574.1", - "windmill-parser-wasm-ruby": "1.526.1", - "windmill-parser-wasm-rust": "1.558.1", - "windmill-parser-wasm-ts": "1.565.0", - "windmill-parser-wasm-yaml": "1.561.0", - "windmill-sql-datatype-parser-wasm": "1.512.0", - "windmill-utils-internal": "^1.3.1", - "xterm": "^5.3.0", - "xterm-readline": "^1.1.2", - "y-monaco": "^0.1.4", - "y-websocket": "^1.5.4", - "yaml": "^2.8.0", - "yjs": "^13.6.7", - "zod": "^3.24.2", - "zod-to-json-schema": "^3.24.5" - }, - "devDependencies": { - "@floating-ui/core": "^1.3.1", - "@hey-api/openapi-ts": "^0.43.0", - "@melt-ui/pp": "^0.3.2", - "@melt-ui/svelte": "^0.86.2", - "@playwright/test": "^1.34.3", - "@sveltejs/adapter-static": "^3.0.6", - "@sveltejs/kit": "^2.28.0", - "@sveltejs/package": "^2.3.7", - "@sveltejs/vite-plugin-svelte": "^6.1.1", - "@tailwindcss/forms": "^0.5.3", - "@tailwindcss/typography": "^0.5.8", - "@types/d3": "^7.4.0", - "@types/d3-zoom": "^3.0.3", - "@types/diff": "^7.0.1", - "@types/lodash": "^4.14.195", - "@types/vscode": "^1.83.5", - "@typescript-eslint/eslint-plugin": "^5.59.8", - "@typescript-eslint/parser": "^5.60.0", - "@zerodevx/svelte-toast": "^0.9.6", - "autoprefixer": "^10.4.13", - "cssnano": "^6.0.1", - "d3-dag": "^0.11.5", - "eslint": "^8.47.0", - "eslint-config-prettier": "^8.6.0", - "eslint-plugin-svelte": "^2.45.1", - "path-browserify": "^1.0.1", - "postcss": "^8.4.49", - "postcss-load-config": "^4.0.1", - "prettier": "^3.1.0", - "prettier-plugin-svelte": "^3.3.3", - "style-to-object": "^0.4.1", - "stylelint-config-recommended": "^13.0.0", - "svelte": "^5.38.0", - "svelte-awesome-color-picker": "^3.0.4", - "svelte-check": "^4.0.0", - "svelte-floating-ui": "^1.5.8", - "svelte-highlight": "^7.6.0", - "svelte-popperjs": "^1.3.2", - "svelte-preprocess": "^6.0.0", - "svelte-range-slider-pips": "^2.3.1", - "svelte-splitpanes": "^8.0.9", - "svelte2tsx": "^0.6.16", - "tailwindcss": "^3.4.1", - "tar": "^7.4.3", - "tslib": "^2.6.1", - "typescript": "^5.5.0", - "vite": "npm:rolldown-vite@latest", - "vite-plugin-mkcert": "^1.17.5", - "yootils": "^0.3.1" - }, - "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "^4.35.0", - "fsevents": "^2.3.3" - }, - "peerDependencies": { - "svelte": "^5.0.0" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@anthropic-ai/sdk": { - "version": "0.60.0", - "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.60.0.tgz", - "integrity": "sha512-9zu/TXaUy8BZhXedDtt1wT3H4LOlpKDO1/ftiFpeR3N1PCr3KJFKkxxlQWWt1NNp08xSwUNJ3JNY8yhl8av6eQ==", - "license": "MIT", - "bin": { - "anthropic-ai-sdk": "bin/cli" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "11.6.1", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.6.1.tgz", - "integrity": "sha512-DxjgKBCoyReu4p5HMvpmgSOfRhhBcuf5V5soDDRgOTZMwsA4KSFzol1abFZgiCTE11L2kKGca5Md9GwDdXVBwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.15", - "js-yaml": "^4.1.0" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/philsturgeon" - } - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-4.0.0.tgz", - "integrity": "sha512-MHGJyjE7TX9aaqXj7zk2ppnFUOhaDs5sP+HtNS0evOxn72c+5njUmyJmpGd7TfyoDznZlHMmdo/xGUdu2NIjNQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^4.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@aws-crypto/util": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-4.0.0.tgz", - "integrity": "sha512-2EnmPy2gsFZ6m8bwUQN4jq+IyXV3quHAcwPOS6ZA3k+geujiqI8aRokO2kFJe+idJ/P3v4qWI186rVMo0+zLDQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@aws-sdk/types": { - "version": "3.901.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.901.0.tgz", - "integrity": "sha512-FfEM25hLEs4LoXsLXQ/q6X6L4JmKkKkbVFpKD4mwfVHtRVQG6QxJiCPcrkcPISquiy6esbwK2eh64TWbiD60cg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.6.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@codingame/monaco-vscode-05a2a821-e4de-5941-b7f9-bbf01c09f229-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-05a2a821-e4de-5941-b7f9-bbf01c09f229-common/-/monaco-vscode-05a2a821-e4de-5941-b7f9-bbf01c09f229-common-21.6.0.tgz", - "integrity": "sha512-K9eB11bREqotuq0ThCGJwp6JwndLkoZKw5z6dBjnCVDrPcUX5rZ7yV4891D1E6tBY0o8a9/Tvg5stgSzCqFVvA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-b6d52a6d-8c8e-51f5-bcd2-1722295e31d9-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-08d1b4da-daf2-5f0d-8c50-ca6a6986c50f-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-08d1b4da-daf2-5f0d-8c50-ca6a6986c50f-common/-/monaco-vscode-08d1b4da-daf2-5f0d-8c50-ca6a6986c50f-common-21.6.0.tgz", - "integrity": "sha512-FWwmf/tq+ApcbPJcFJ9ZzREEY24Fiy9kOVAgMW6IFAcJ5RejRYsO1I3dX4/aVckQYUBpaA65+Lfa7ArQVQ1WlQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-dbfe5f85-b426-55ed-a79b-5f811b395762-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-0af61f78-dfc5-57ba-8d32-66268c8de38d-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-0af61f78-dfc5-57ba-8d32-66268c8de38d-common/-/monaco-vscode-0af61f78-dfc5-57ba-8d32-66268c8de38d-common-21.6.0.tgz", - "integrity": "sha512-tBNQE4LAI5gAn1/vd0LaD+COX69Y5mWjp2SwBr19hmqusxbbZCVe6OGFrsolvBbW2fX8Hl8D8sP6+Daj8xS/kA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-b994942c-360d-5b68-8a33-77d4bde6b714-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-0c06bfba-d24d-5c4d-90cd-b40cefb7f811-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-0c06bfba-d24d-5c4d-90cd-b40cefb7f811-common/-/monaco-vscode-0c06bfba-d24d-5c4d-90cd-b40cefb7f811-common-21.6.0.tgz", - "integrity": "sha512-VJgFxjh12XmGhEHwg0DjIgnLh0oS3kFFoz7gU/K9Bij8ERovIikdij+2C2z+/eG5IKynMJpl6Ga1yNa2txmvWw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-0cc5da60-f921-59b9-bd8c-a018e93c0a6f-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-0cc5da60-f921-59b9-bd8c-a018e93c0a6f-common/-/monaco-vscode-0cc5da60-f921-59b9-bd8c-a018e93c0a6f-common-21.6.0.tgz", - "integrity": "sha512-tX8pXT5GXPg+6X2VvuY7dbntenkSdI4+txk7B2zlIjX2dUe638CrZiF4tv6CICBFshS/DCWPPF85KZosMQ6wDw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-f22e7e55-aee8-5b52-a6bc-950efd9f5890-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-1021b67c-93e5-5c78-a270-cbdb2574d980-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-1021b67c-93e5-5c78-a270-cbdb2574d980-common/-/monaco-vscode-1021b67c-93e5-5c78-a270-cbdb2574d980-common-21.6.0.tgz", - "integrity": "sha512-zurQClxd0L5muvSSeR5WeX1Gee9NHWwOr1on77hET2WDko/+0jj2OVoJQtyh4Snskr5qjcdXgAwThz0l317A4A==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-15626ec7-b165-51e1-8caf-7bcc2ae9b95a-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-15626ec7-b165-51e1-8caf-7bcc2ae9b95a-common/-/monaco-vscode-15626ec7-b165-51e1-8caf-7bcc2ae9b95a-common-21.6.0.tgz", - "integrity": "sha512-Mig4Ts/8mkVyYG6PgrHbxVaIkX4Kw4eqnp7OXu5ZcYswbSc6gnLxSg58DOoJ0NsHX2BP+HxBj2XnBHQCS1Hgyg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-158b9837-fc78-5d9c-86f5-9134e4358643-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-158b9837-fc78-5d9c-86f5-9134e4358643-common/-/monaco-vscode-158b9837-fc78-5d9c-86f5-9134e4358643-common-21.6.0.tgz", - "integrity": "sha512-UuW9A1hLvYA+rK1YGrXywJu7Dwh1Hl3IDKY9jguxhGHzQPoO3M6aX47q8bIMmo4Wd9B9W8TidxjcRjv3+FVxYA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-1b4486de-4fe4-59c4-9e6d-34f265ff6625-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-1b4486de-4fe4-59c4-9e6d-34f265ff6625-common/-/monaco-vscode-1b4486de-4fe4-59c4-9e6d-34f265ff6625-common-21.6.0.tgz", - "integrity": "sha512-zjdFDkMxi7p6EtQabq0zm/up82eD8PcNO9JBzxsf02luy5Mwna4nkYAT8dQUfAR4nTu8UlJSiDSnpMOjFH6M8w==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-2a94c04a-b85b-5669-b06b-89c1bfa11cb9-common": "21.6.0", - "@codingame/monaco-vscode-422642f2-7e3a-5c1c-9e1e-1d3ef1817346-common": "21.6.0", - "@codingame/monaco-vscode-4fad3647-b95d-5c19-bab1-bb9de627a5ec-common": "21.6.0", - "@codingame/monaco-vscode-71c8dbff-4c98-552f-aef0-e72b00fdcfc0-common": "21.6.0", - "@codingame/monaco-vscode-9a1a5840-af83-5d07-a156-ba32a36c5c4b-common": "21.6.0", - "@codingame/monaco-vscode-9a5ab9e7-d838-5831-9eb4-e79ea3764dcb-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-23aade48-f094-5c08-9555-97fc9cca96c9-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-23aade48-f094-5c08-9555-97fc9cca96c9-common/-/monaco-vscode-23aade48-f094-5c08-9555-97fc9cca96c9-common-21.6.0.tgz", - "integrity": "sha512-Y9YH8avGz4wTV0dvI4u7qEBaZz3vY23HIUzx8iko7TCws2U+J4o7RXQcRcsKx1PORzfUIQTpI/1731nuA7F7Hw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common/-/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common-21.6.0.tgz", - "integrity": "sha512-kMYJTMDWugg+JHIFYr3KaSMv1OlJSuhpom0Y+BlLZr7jnyaN/k55PwqfeuJmX5a18e3hwu3PX9abM2/dBk27Kw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-249dc928-1da3-51c1-82d0-45e0ba9d08a1-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-249dc928-1da3-51c1-82d0-45e0ba9d08a1-common/-/monaco-vscode-249dc928-1da3-51c1-82d0-45e0ba9d08a1-common-21.6.0.tgz", - "integrity": "sha512-c/peZ/OGO4nUz9F052zTIZ2E6VplCre+aZAX3EDKbIiNVGirWvWUT2JnORdxjPb1WAiWS++5usWnpe/YHKSxBA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-256d5b78-0649-50e9-8354-2807f95f68f4-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-256d5b78-0649-50e9-8354-2807f95f68f4-common/-/monaco-vscode-256d5b78-0649-50e9-8354-2807f95f68f4-common-21.6.0.tgz", - "integrity": "sha512-f/uy2BH/88r7eh/0VjMEbgos+28tqEK1Mb/jwRRNSpAq+W4goca+qiN0gXxwvqMlzOYbL25Q1diqfLBuPWpFWw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-2a22c7b4-b906-5914-8cd1-3ed912fb738f-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-2a22c7b4-b906-5914-8cd1-3ed912fb738f-common/-/monaco-vscode-2a22c7b4-b906-5914-8cd1-3ed912fb738f-common-21.6.0.tgz", - "integrity": "sha512-r3R1ciw2D7hWb+tVi7LHq6AeTKrpYXaEpJOtC4fr2Mr+bzECvaTs6KvaDLXd7GEpiW61Lbxz5JHWj4J9vQS4WQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-2a94c04a-b85b-5669-b06b-89c1bfa11cb9-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-2a94c04a-b85b-5669-b06b-89c1bfa11cb9-common/-/monaco-vscode-2a94c04a-b85b-5669-b06b-89c1bfa11cb9-common-21.6.0.tgz", - "integrity": "sha512-xaiRmKLOO7CwuQQff/Pe6ObQm/+vPr8ignXspqNGvo47yQqkTChJlEa6P3jznIbOreOz/kVR7NS5a56a8sY5Rg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-4a3ac544-9a61-534c-88df-756262793ef7-common": "21.6.0", - "@codingame/monaco-vscode-71c8dbff-4c98-552f-aef0-e72b00fdcfc0-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-2f06fe84-148e-5e6b-a7ca-c7989c5f128a-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-2f06fe84-148e-5e6b-a7ca-c7989c5f128a-common/-/monaco-vscode-2f06fe84-148e-5e6b-a7ca-c7989c5f128a-common-21.6.0.tgz", - "integrity": "sha512-Wg4YeC5pVag97B5BD0tl3016LJ4kHjhnygJo1PmD4yU36q7l7DXLa10tH38aDfcEOyYtEfZsssq2JjtqQOpgig==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-3109a756-1f83-5d09-945b-9f0fcad928f0-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-3109a756-1f83-5d09-945b-9f0fcad928f0-common/-/monaco-vscode-3109a756-1f83-5d09-945b-9f0fcad928f0-common-21.6.0.tgz", - "integrity": "sha512-lqV4EnQ4kOoahNYtbpUUhonyAIZa+yStx9qYgiHzYJQ/0v7Zy8oR1CFTG9lBRpUy0fONTXHnhUbqeSDQv3tTSw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-ac93482b-2178-52df-a200-ba0d1a4963fb-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-bc6d9a89-1625-5010-b57e-ff44151144fe-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-33833ac7-3af3-5e9d-8fb9-11838d852c59-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-33833ac7-3af3-5e9d-8fb9-11838d852c59-common/-/monaco-vscode-33833ac7-3af3-5e9d-8fb9-11838d852c59-common-21.6.0.tgz", - "integrity": "sha512-GYBi3j4qHN79GS3ErRGgkaTUC4b0ecGBDsGSvMbErQpCvuaDMZEee78DfVzjYPJG1Xzlp1wA9UBsIn15+x0gfw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-40cada32-7e9c-528a-81fc-766e4da54147-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-40cada32-7e9c-528a-81fc-766e4da54147-common/-/monaco-vscode-40cada32-7e9c-528a-81fc-766e4da54147-common-21.6.0.tgz", - "integrity": "sha512-2g7cvM9VrfWCnza//1ytdj+LvbkaRLjsXRwDCbY9yPZkIg6/IJmfS3JM45tllZaLUXs2yPCg9zhvaVCBfcijLg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-158b9837-fc78-5d9c-86f5-9134e4358643-common": "21.6.0", - "@codingame/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-422642f2-7e3a-5c1c-9e1e-1d3ef1817346-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-422642f2-7e3a-5c1c-9e1e-1d3ef1817346-common/-/monaco-vscode-422642f2-7e3a-5c1c-9e1e-1d3ef1817346-common-21.6.0.tgz", - "integrity": "sha512-GavXhLlNHfAOsRQWS6oP//HuFd2UQ8LkXr1zPAwUWxiGwVyQ3zMEju4KhnipU1ex4ryKEmOWmClpZah2UfGT2A==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-494be54c-bd37-5b3c-af70-02f086e28768-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-494be54c-bd37-5b3c-af70-02f086e28768-common/-/monaco-vscode-494be54c-bd37-5b3c-af70-02f086e28768-common-21.6.0.tgz", - "integrity": "sha512-Y0jwYhs4/RfRjM4L21+t5e/4CEhEDYnMR4mcxfsMq3c+sWJUIj1ExYU5P7L8Pcv9gd8BFTym7tdT07Ls0C0Vcg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-4a316137-39d1-5d77-8b53-112db3547c1e-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-4a316137-39d1-5d77-8b53-112db3547c1e-common/-/monaco-vscode-4a316137-39d1-5d77-8b53-112db3547c1e-common-21.6.0.tgz", - "integrity": "sha512-KLZdyUCUr1ZPE25Od8bCraq7nzFdIBvSta+uGfGpT8qGI+GuU5wr0Xn7Kk4tDhU4lYvoFJzsHssQf+90ICqWJQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-4fad3647-b95d-5c19-bab1-bb9de627a5ec-common": "21.6.0", - "@codingame/monaco-vscode-9a5ab9e7-d838-5831-9eb4-e79ea3764dcb-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-dbfe5f85-b426-55ed-a79b-5f811b395762-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-4a3ac544-9a61-534c-88df-756262793ef7-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-4a3ac544-9a61-534c-88df-756262793ef7-common/-/monaco-vscode-4a3ac544-9a61-534c-88df-756262793ef7-common-21.6.0.tgz", - "integrity": "sha512-f5E4lm+aEJ8Sz8nc6/OhEJRRPW1hMTES0xeaYm448VKwfxbEqyT4VMMF3ZpEE+rUux05CyDqMxAOGAhbT6rWgw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common/-/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common-21.6.0.tgz", - "integrity": "sha512-kmALyhBnH1umkJyxj6nb1rL/sJEp4fDUh7GFK/VmJgBsAw6dDXuZxGlZtO4qSvigJz5jcIcBMvcctqX7G1HjdA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-4dda7789-5a25-5e8b-b2de-c2f11b1b96e5-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-4dda7789-5a25-5e8b-b2de-c2f11b1b96e5-common/-/monaco-vscode-4dda7789-5a25-5e8b-b2de-c2f11b1b96e5-common-21.6.0.tgz", - "integrity": "sha512-9cp7YtFkhCaMs/Ge66dJGb1MNGQhaN5Rd9MrSPcoNjL8jtCpiwYdlzssc8WCWLNTZpI7A2pQDpl+DYHuCpagzQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-4fad3647-b95d-5c19-bab1-bb9de627a5ec-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-4fad3647-b95d-5c19-bab1-bb9de627a5ec-common/-/monaco-vscode-4fad3647-b95d-5c19-bab1-bb9de627a5ec-common-21.6.0.tgz", - "integrity": "sha512-KslhPUJ+lQ+BJzQkjfuPF3aRk1QVAiqPBlKwjCxPAkGa8QZu4PaXeeCFlFAnkVZ2qCEn/bcgZ1Q0VfS9QxWrSw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-523730aa-81e6-55d7-9916-87ad537fe087-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-523730aa-81e6-55d7-9916-87ad537fe087-common/-/monaco-vscode-523730aa-81e6-55d7-9916-87ad537fe087-common-21.6.0.tgz", - "integrity": "sha512-U9YZBjLC9EG5ysrBtjCJnKH2r/H7QxDOVZKjmrPBDABB7k+NBxkypwrbpr5wQg1i9Sz6MSa43kUs5M94JQ57ag==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common": "21.6.0", - "@codingame/monaco-vscode-ac93482b-2178-52df-a200-ba0d1a4963fb-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-5452e2b7-9081-5f95-839b-4ab3544ce28f-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-5452e2b7-9081-5f95-839b-4ab3544ce28f-common/-/monaco-vscode-5452e2b7-9081-5f95-839b-4ab3544ce28f-common-21.6.0.tgz", - "integrity": "sha512-708ArbbT9pRAUf4UH5y6V6pk2PW0pWq1wXKYcTF3FqzD3juATnfMqyOrKxeNkJxmT3eY8LgpntF7vhmGjhfuMw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-0af61f78-dfc5-57ba-8d32-66268c8de38d-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-571c8352-7953-5038-9f09-e03bb6219a0e-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-571c8352-7953-5038-9f09-e03bb6219a0e-common/-/monaco-vscode-571c8352-7953-5038-9f09-e03bb6219a0e-common-21.6.0.tgz", - "integrity": "sha512-0QafpW7DvCSHMWarscbXB7jfIQJJU3bBhN9MYgTiCH4eTtfBI6/5ttRH0UkamxE7o/iwesEohXzVvhT+q9yVKw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common/-/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common-21.6.0.tgz", - "integrity": "sha512-LmjgMsWG5qDbXNdJWcUmXZWZMpVrmyoucorLspFxRP9QOJmoKKAGCmvzDwKMQnmCeAXgGGdbvdPNKKgYVVs73A==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-615ce609-8555-545a-a549-47bd9f80e9f8-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-615ce609-8555-545a-a549-47bd9f80e9f8-common/-/monaco-vscode-615ce609-8555-545a-a549-47bd9f80e9f8-common-21.6.0.tgz", - "integrity": "sha512-Wh0yD3YjsHuemYIdMJ7Oz1lFlzUbmCs0x69LMpoFRucZ/+hsYpig/9lSeF5uXCoRN8pz3gglgC2Xj12abgkHJA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-08d1b4da-daf2-5f0d-8c50-ca6a6986c50f-common": "21.6.0", - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-4fad3647-b95d-5c19-bab1-bb9de627a5ec-common": "21.6.0", - "@codingame/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common": "21.6.0", - "@codingame/monaco-vscode-622c0cca-d5fa-59b6-b730-0715afcf93ee-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0", - "@codingame/monaco-vscode-dbfe5f85-b426-55ed-a79b-5f811b395762-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-622c0cca-d5fa-59b6-b730-0715afcf93ee-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-622c0cca-d5fa-59b6-b730-0715afcf93ee-common/-/monaco-vscode-622c0cca-d5fa-59b6-b730-0715afcf93ee-common-21.6.0.tgz", - "integrity": "sha512-Fw0feOxV04smlz7MrL+q/bF41ZKXukclYwLcySUkbg022wv4EWpWzdfGMSI7We4N78CUJNo4rVVz+KrmguycGA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-670aae94-7f88-54d7-90ea-6fcbef423557-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-670aae94-7f88-54d7-90ea-6fcbef423557-common/-/monaco-vscode-670aae94-7f88-54d7-90ea-6fcbef423557-common-21.6.0.tgz", - "integrity": "sha512-56sk3aYN56E52TLSpLOx3jKVbEvrVCB7e6I2FNGWlSRZGm4WQAtd8EJjfZ5CFryhpQc3DnNI6MrXc6jyIblkOQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-6845754f-e617-5ed9-8aaa-6ca3653a9532-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-6845754f-e617-5ed9-8aaa-6ca3653a9532-common/-/monaco-vscode-6845754f-e617-5ed9-8aaa-6ca3653a9532-common-21.6.0.tgz", - "integrity": "sha512-6kiB5YFftQXfRz5A9Cwl0knNCa2o9EIh1anKrYamOqgFEZSI1wxNl4t539ne2OtERYNHOoZ7jNxbuhKeNXpO7w==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-6980eeab-47bb-5a48-8e15-32caf0785565-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-6980eeab-47bb-5a48-8e15-32caf0785565-common/-/monaco-vscode-6980eeab-47bb-5a48-8e15-32caf0785565-common-21.6.0.tgz", - "integrity": "sha512-iLffAYdvgWn8Uy9NpCNbisPn+i0Rhdq1ULVOkUQqvmqhvOSjnPN/9PGPGgScDLLLROZpJ/QYzxWEVhdvUd4S5w==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-0cc5da60-f921-59b9-bd8c-a018e93c0a6f-common": "21.6.0", - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-40cada32-7e9c-528a-81fc-766e4da54147-common": "21.6.0", - "@codingame/monaco-vscode-4fad3647-b95d-5c19-bab1-bb9de627a5ec-common": "21.6.0", - "@codingame/monaco-vscode-615ce609-8555-545a-a549-47bd9f80e9f8-common": "21.6.0", - "@codingame/monaco-vscode-622c0cca-d5fa-59b6-b730-0715afcf93ee-common": "21.6.0", - "@codingame/monaco-vscode-6bf85d7b-e6e3-54e9-9bc1-7e08d663f0f6-common": "21.6.0", - "@codingame/monaco-vscode-71c8dbff-4c98-552f-aef0-e72b00fdcfc0-common": "21.6.0", - "@codingame/monaco-vscode-85886bdb-61c5-52f1-8eb7-d1d32f6f8cbd-common": "21.6.0", - "@codingame/monaco-vscode-9efc1f50-c7de-55d6-8b28-bcc88bd49b5a-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-6bf85d7b-e6e3-54e9-9bc1-7e08d663f0f6-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-6bf85d7b-e6e3-54e9-9bc1-7e08d663f0f6-common/-/monaco-vscode-6bf85d7b-e6e3-54e9-9bc1-7e08d663f0f6-common-21.6.0.tgz", - "integrity": "sha512-TXW8DYt9eNq2hhgaws6iF4JBBx8i++5Qby3r3uLegokSYaRt29DWAaTITvkumO82Yh8S5fn9jic9At+cgme8qQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-0cc5da60-f921-59b9-bd8c-a018e93c0a6f-common": "21.6.0", - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-85886bdb-61c5-52f1-8eb7-d1d32f6f8cbd-common": "21.6.0", - "@codingame/monaco-vscode-96e83782-7f38-572e-8787-02e981f1c54f-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-f22e7e55-aee8-5b52-a6bc-950efd9f5890-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-6db1b967-5327-5c5c-8c17-bd92774c0fb2-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-6db1b967-5327-5c5c-8c17-bd92774c0fb2-common/-/monaco-vscode-6db1b967-5327-5c5c-8c17-bd92774c0fb2-common-21.6.0.tgz", - "integrity": "sha512-SNXAKiAMUZeIL998yaMT+2MBy4SyiqyQBw892vPYtLu2XoaXPzhlpETPLHAIk1huVr3RVpW2tPYPUkyUkU7b6w==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-71c8dbff-4c98-552f-aef0-e72b00fdcfc0-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-71c8dbff-4c98-552f-aef0-e72b00fdcfc0-common/-/monaco-vscode-71c8dbff-4c98-552f-aef0-e72b00fdcfc0-common-21.6.0.tgz", - "integrity": "sha512-+ncY+YSUOu+0dPXBlFnebLfqoBNNbVhmfX7j/CGZyn66cmsqb5CNSEtEe/cUPsYE7lyKr/adJtO0UJjbWH/7xA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-4fad3647-b95d-5c19-bab1-bb9de627a5ec-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-72a1b7d3-3f58-5545-9b7e-f579bd003081-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-72a1b7d3-3f58-5545-9b7e-f579bd003081-common/-/monaco-vscode-72a1b7d3-3f58-5545-9b7e-f579bd003081-common-21.6.0.tgz", - "integrity": "sha512-nPCXVFFciJSdceyswWcg7bmE7wmMTg81tkEZ2P63ZyeyCrombxJqj9gRHMdRaffr705dbDT75nvW84PeKImVwg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0", - "@codingame/monaco-vscode-f24e325c-2ce0-5bba-8236-bfc4f53180ab-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-7869cfe8-f42c-5721-9f2b-7d04a6a41f16-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-7869cfe8-f42c-5721-9f2b-7d04a6a41f16-common/-/monaco-vscode-7869cfe8-f42c-5721-9f2b-7d04a6a41f16-common-21.6.0.tgz", - "integrity": "sha512-JL9zIiW5suPr4wrnmpU/2Lbyd4WewRkvBidBvb3m2KcZHRmF0K88Q/5cci5wNz/t21L97nqBw00hMj+6hbN96g==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-7f39b6f1-3542-5430-8760-0f404d7a7cee-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-7f39b6f1-3542-5430-8760-0f404d7a7cee-common/-/monaco-vscode-7f39b6f1-3542-5430-8760-0f404d7a7cee-common-21.6.0.tgz", - "integrity": "sha512-gNW6Dmb5QkJ35sqWWG0JcrPgRJFio8sJQ2czPBB8GEprUwvbRYUMq8ybnmJKdBmY4K2a4qny6guzrMe8MowLdg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common": "21.6.0", - "@codingame/monaco-vscode-670aae94-7f88-54d7-90ea-6fcbef423557-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-85886bdb-61c5-52f1-8eb7-d1d32f6f8cbd-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-85886bdb-61c5-52f1-8eb7-d1d32f6f8cbd-common/-/monaco-vscode-85886bdb-61c5-52f1-8eb7-d1d32f6f8cbd-common-21.6.0.tgz", - "integrity": "sha512-E27CGVwWPH14U9fggCg2e4pRoFaZ2ae/kOXGz/R0qkGhWuc/hJsq8DGdD5+Eu7N0Bq/E0jnizEy/0/97sloQAA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-897bebad-39df-57cb-8a57-36a271d038be-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-897bebad-39df-57cb-8a57-36a271d038be-common/-/monaco-vscode-897bebad-39df-57cb-8a57-36a271d038be-common-21.6.0.tgz", - "integrity": "sha512-yvnqdBKjWcnp4K0rWwIXCecJHGW1JgnkY90xNIDQaQQUT1uFRV/hG99ViS1MFY+mTg8XoDXwwjNZhArk3r4iYQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-89a82baf-8ded-5b2f-b8af-e5fbd72dc5ad-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-89a82baf-8ded-5b2f-b8af-e5fbd72dc5ad-common/-/monaco-vscode-89a82baf-8ded-5b2f-b8af-e5fbd72dc5ad-common-21.6.0.tgz", - "integrity": "sha512-NpnGhCRBB1BzRM5nTutDvrPF/uIGXijD29l9gBCmAlOZHG2Lr22LYs1cbPVncdgtfMOSmLdL8oWMQHt5aC77/w==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-256d5b78-0649-50e9-8354-2807f95f68f4-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-8ccb7637-50ea-5359-97bf-00015d7fe567-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-8ccb7637-50ea-5359-97bf-00015d7fe567-common/-/monaco-vscode-8ccb7637-50ea-5359-97bf-00015d7fe567-common-21.6.0.tgz", - "integrity": "sha512-kvMQJUpTu11zocIzuJq9utPWt17kbMgJIqiGpXBOJ6yZz9Whl3raElmWbw3MhbV/fu+L9GFauoQUzNTtXEJk+A==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-6db1b967-5327-5c5c-8c17-bd92774c0fb2-common": "21.6.0", - "@codingame/monaco-vscode-897bebad-39df-57cb-8a57-36a271d038be-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-96e83782-7f38-572e-8787-02e981f1c54f-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-96e83782-7f38-572e-8787-02e981f1c54f-common/-/monaco-vscode-96e83782-7f38-572e-8787-02e981f1c54f-common-21.6.0.tgz", - "integrity": "sha512-muL9TTs28G9yQ/CahSm3g3wQqvJV2UlOd/GG1r5x+JfuVm8TKCT1oL3GavlKlc4SeS1P7zOEFqmLqCYYXUufaQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-158b9837-fc78-5d9c-86f5-9134e4358643-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-ebba7d85-8a22-5735-adf4-8299cd976dce-common": "21.6.0", - "@codingame/monaco-vscode-f22e7e55-aee8-5b52-a6bc-950efd9f5890-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-9a1a5840-af83-5d07-a156-ba32a36c5c4b-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-9a1a5840-af83-5d07-a156-ba32a36c5c4b-common/-/monaco-vscode-9a1a5840-af83-5d07-a156-ba32a36c5c4b-common-21.6.0.tgz", - "integrity": "sha512-th0S/u7aPgsYcTe6jHECWTw6yIBB2KUvTBEiCY+j/gC1J35v14E5SWXJqRbII9fjZJ10rbcwDS/ZiQNWYK/1LA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-9a5ab9e7-d838-5831-9eb4-e79ea3764dcb-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-9a5ab9e7-d838-5831-9eb4-e79ea3764dcb-common/-/monaco-vscode-9a5ab9e7-d838-5831-9eb4-e79ea3764dcb-common-21.6.0.tgz", - "integrity": "sha512-+07rPCeg61ECDig7YCS5+Cc3WL4idNqfaaEvOD41n0+EzdY/vk2esVvYiwrwwUBnzmf8fKAAM5rVR7+d5zrxEg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-9a934394-0cf8-512d-939b-77e71f69cebb-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-9a934394-0cf8-512d-939b-77e71f69cebb-common/-/monaco-vscode-9a934394-0cf8-512d-939b-77e71f69cebb-common-21.6.0.tgz", - "integrity": "sha512-noM4NckKtHHDnHo2LSoQyWdLwa+5pzWMLefFavADt8BuOH2ADt38MjiZsaHLWpbSgUpytsx5fPYz9U6inplSEA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-9c84f943-bcb5-5bcf-92a6-91f66a732f26-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-9c84f943-bcb5-5bcf-92a6-91f66a732f26-common/-/monaco-vscode-9c84f943-bcb5-5bcf-92a6-91f66a732f26-common-21.6.0.tgz", - "integrity": "sha512-vjDOmNMckbtXBM7D2ImkJ5gjKw6+hS3+5JhdDmVUW5MnrfCTR5qPwwcfe8APoDCnzN+Bx7/HvN7z9Oax3qm+jw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-9d0168a3-519b-57f3-9bcc-89efc41f951a-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-9d0168a3-519b-57f3-9bcc-89efc41f951a-common/-/monaco-vscode-9d0168a3-519b-57f3-9bcc-89efc41f951a-common-21.6.0.tgz", - "integrity": "sha512-3kRxkDe1q5pCOJnVaKXaUUjxj2vql37JyjsVQ7zEzMCYXNeUTR/ACmxcLr4RkydYe4qnrRHjLUAyavRbAMeeJg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-9a934394-0cf8-512d-939b-77e71f69cebb-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-9ee79c1a-3f03-568b-8eac-b02513a98b68-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-9ee79c1a-3f03-568b-8eac-b02513a98b68-common/-/monaco-vscode-9ee79c1a-3f03-568b-8eac-b02513a98b68-common-21.6.0.tgz", - "integrity": "sha512-QsrNwsfenMiviQyR0F9TWQp/mo2pWGFLsALApsWENGdIYbLN811Fch9CE4aZI5GCtwP6A8pHEmJX+x3sBpAmRg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-e39a1c8f-7892-5d9b-9987-7b10b79e1a0a-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-9efc1f50-c7de-55d6-8b28-bcc88bd49b5a-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-9efc1f50-c7de-55d6-8b28-bcc88bd49b5a-common/-/monaco-vscode-9efc1f50-c7de-55d6-8b28-bcc88bd49b5a-common-21.6.0.tgz", - "integrity": "sha512-PtSOMlbJArTzHYNPL87YVwNdzQYU2CDFubGRdgl7JnEPVndWtCewPCRZ2X6NfwJUQmffJLrP71BJhXLktvVytw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-4fad3647-b95d-5c19-bab1-bb9de627a5ec-common": "21.6.0", - "@codingame/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common": "21.6.0", - "@codingame/monaco-vscode-71c8dbff-4c98-552f-aef0-e72b00fdcfc0-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-bc6d9a89-1625-5010-b57e-ff44151144fe-common": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0", - "@codingame/monaco-vscode-ebba7d85-8a22-5735-adf4-8299cd976dce-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-a175bd1a-4858-5944-9ae5-fb73305dcb13-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-a175bd1a-4858-5944-9ae5-fb73305dcb13-common/-/monaco-vscode-a175bd1a-4858-5944-9ae5-fb73305dcb13-common-21.6.0.tgz", - "integrity": "sha512-B4YG+FTGuwGXzbyiNuhOY2aJOVGwD0sQWPfrIq+pC5IvYJJUxMkCl4Aj/FydtJgcYKqY4k5F9PFcMu2xUOHWSQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-a3eaa464-944c-5b8f-8886-213068ba4897-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-a3eaa464-944c-5b8f-8886-213068ba4897-common/-/monaco-vscode-a3eaa464-944c-5b8f-8886-213068ba4897-common-21.6.0.tgz", - "integrity": "sha512-0i1ndH8D3dTGAalp/w0om6eRg6VXwbcKdaN+KqQ8zOcxqr354lBO5HFqGYeVBDxJdcIwn0Dp5Qdt7Wfp4VHZNw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-a654b07e-8806-5425-b124-18f03ba8e11a-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-a654b07e-8806-5425-b124-18f03ba8e11a-common/-/monaco-vscode-a654b07e-8806-5425-b124-18f03ba8e11a-common-21.6.0.tgz", - "integrity": "sha512-Zk/WWJ4GReQ+QLVXb/0sQy4zYqfq55JlItyGrrgMczx5M6lAjxhSO+ZDzv7h0/SHWCRdvx2gPkoHlp0pgaUvyA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-a9da9abe-278d-5ce6-9418-99c7c07c5c37-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-a9da9abe-278d-5ce6-9418-99c7c07c5c37-common/-/monaco-vscode-a9da9abe-278d-5ce6-9418-99c7c07c5c37-common-21.6.0.tgz", - "integrity": "sha512-bFhByCQ5in7B/pdBb9xhTYdT6lbZrBrRoITQC7/2g3ZMStHVeifTTmTKDoE83xwpe+tUHzhW7DLXbGJDXo5+UA==", - "license": "MIT" - }, - "node_modules/@codingame/monaco-vscode-abed5a84-8a82-5f84-9412-88a736235bae-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-abed5a84-8a82-5f84-9412-88a736235bae-common/-/monaco-vscode-abed5a84-8a82-5f84-9412-88a736235bae-common-21.6.0.tgz", - "integrity": "sha512-zlO6GjQWM67XpWixPkUySjhMr2MS+w/qQ2Wna4BBtCvJ2eHkmCp4ZDIalrVfsWr1Lk6TW3cs8eOQnBPhpCKiuA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-ac93482b-2178-52df-a200-ba0d1a4963fb-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-ac93482b-2178-52df-a200-ba0d1a4963fb-common/-/monaco-vscode-ac93482b-2178-52df-a200-ba0d1a4963fb-common-21.6.0.tgz", - "integrity": "sha512-TWrhJw1RE9+19cmjv5xlFrmtPEVUS/e6T/rTEyOWFI+5l3RCKXcVI+mo1Y+xGbeT1dyCgzncWnTwGnmH+kmr3Q==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-615ce609-8555-545a-a549-47bd9f80e9f8-common": "21.6.0", - "@codingame/monaco-vscode-670aae94-7f88-54d7-90ea-6fcbef423557-common": "21.6.0", - "@codingame/monaco-vscode-72a1b7d3-3f58-5545-9b7e-f579bd003081-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-bd0792ac-6043-5ec3-a41a-54ccb922a1f4-common": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0", - "@codingame/monaco-vscode-dbfe5f85-b426-55ed-a79b-5f811b395762-common": "21.6.0", - "@codingame/monaco-vscode-f24e325c-2ce0-5bba-8236-bfc4f53180ab-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-acd79e2c-c7e3-5594-873a-427e3006b3d8-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-acd79e2c-c7e3-5594-873a-427e3006b3d8-common/-/monaco-vscode-acd79e2c-c7e3-5594-873a-427e3006b3d8-common-21.6.0.tgz", - "integrity": "sha512-ElVJjLIfL9vkun5YzCotZrkKppPNXU4rrNkFZTKvS4qAtobDBDJKGuguIx1+9KttIPYddKTL3qEVosgOesJ8gw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-api": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-21.6.0.tgz", - "integrity": "sha512-ahQTgSMLx43qUGz+5BM+OkIyIaILN1v1qELSd/tSrsMp0u1Z9ttLM7TNUwi8Sd2f6PnX+oURnTQKu8e9/fD/rQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-base-service-override": "21.6.0", - "@codingame/monaco-vscode-environment-service-override": "21.6.0", - "@codingame/monaco-vscode-extensions-service-override": "21.6.0", - "@codingame/monaco-vscode-files-service-override": "21.6.0", - "@codingame/monaco-vscode-host-service-override": "21.6.0", - "@codingame/monaco-vscode-layout-service-override": "21.6.0", - "@codingame/monaco-vscode-quickaccess-service-override": "21.6.0", - "@vscode/iconv-lite-umd": "0.7.0", - "dompurify": "3.2.7", - "jschardet": "3.1.4", - "marked": "14.0.0" - } - }, - "node_modules/@codingame/monaco-vscode-b6d52a6d-8c8e-51f5-bcd2-1722295e31d9-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-b6d52a6d-8c8e-51f5-bcd2-1722295e31d9-common/-/monaco-vscode-b6d52a6d-8c8e-51f5-bcd2-1722295e31d9-common-21.6.0.tgz", - "integrity": "sha512-Ah1AMbSoqS8/icVMPj5Y1cPFu23SVIWfjFq5ApIEQ2pJkI5bifcqO1Jx1AQNEVM4HX/fG1AlyXQFo8t6Bt0mBA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-a175bd1a-4858-5944-9ae5-fb73305dcb13-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-b994942c-360d-5b68-8a33-77d4bde6b714-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-b994942c-360d-5b68-8a33-77d4bde6b714-common/-/monaco-vscode-b994942c-360d-5b68-8a33-77d4bde6b714-common-21.6.0.tgz", - "integrity": "sha512-EmczqQYtSuzCH/UHHyvrrUMBbRXvKcwHKNZEHpprROiuZboyTACfMLN9dLbEG5sWCk8Hr9BBvPwPzVqpsYj0aA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-base-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-21.6.0.tgz", - "integrity": "sha512-9pdCH0wghJPV7jfpWEp92vyWoiGAcknvUyDvoSpYBcackpB96w8CfyN+ljhw1GMeU4lu4o2sDQByJI3Uk3XrKw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-158b9837-fc78-5d9c-86f5-9134e4358643-common": "21.6.0", - "@codingame/monaco-vscode-23aade48-f094-5c08-9555-97fc9cca96c9-common": "21.6.0", - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common": "21.6.0", - "@codingame/monaco-vscode-9a1a5840-af83-5d07-a156-ba32a36c5c4b-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-d987325e-3e05-53aa-b9ff-6f97476f64db-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-bba55be6-41a2-50cd-a3cc-8bafa35bfa89-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-bba55be6-41a2-50cd-a3cc-8bafa35bfa89-common/-/monaco-vscode-bba55be6-41a2-50cd-a3cc-8bafa35bfa89-common-21.6.0.tgz", - "integrity": "sha512-+i+k9um6w4zJYw5DtV4Q+o0nX1WgOneKstRDt4YB0+TxAHQ+wu7bpnWaLjE2nshTl86k/l8i+vQmtpQvIS+qjA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-670aae94-7f88-54d7-90ea-6fcbef423557-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-bc6d9a89-1625-5010-b57e-ff44151144fe-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-bc6d9a89-1625-5010-b57e-ff44151144fe-common/-/monaco-vscode-bc6d9a89-1625-5010-b57e-ff44151144fe-common-21.6.0.tgz", - "integrity": "sha512-34b5zU0Y1xdhtFTr+xtBhWsvZO+ZDC/V1S5BspR3GEfs/NmWH8yP0dGcE9cf3o3dCVIvWknrimb+0v3B7Z1JEA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-bd0792ac-6043-5ec3-a41a-54ccb922a1f4-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-bd0792ac-6043-5ec3-a41a-54ccb922a1f4-common/-/monaco-vscode-bd0792ac-6043-5ec3-a41a-54ccb922a1f4-common-21.6.0.tgz", - "integrity": "sha512-5dq/h54RGU+3iyqcktc6pOFErEH3QiM8eFs5xx12Ij3mP0d/rBodSUBEoyk0cUSBB9MKn0Gkv0cOszUNTRbjPQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-4fad3647-b95d-5c19-bab1-bb9de627a5ec-common": "21.6.0", - "@codingame/monaco-vscode-615ce609-8555-545a-a549-47bd9f80e9f8-common": "21.6.0", - "@codingame/monaco-vscode-72a1b7d3-3f58-5545-9b7e-f579bd003081-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0", - "@codingame/monaco-vscode-dbfe5f85-b426-55ed-a79b-5f811b395762-common": "21.6.0", - "@codingame/monaco-vscode-f24e325c-2ce0-5bba-8236-bfc4f53180ab-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-be143a32-d60a-5489-a1d2-c83ea7eff6bf-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-be143a32-d60a-5489-a1d2-c83ea7eff6bf-common/-/monaco-vscode-be143a32-d60a-5489-a1d2-c83ea7eff6bf-common-21.6.0.tgz", - "integrity": "sha512-b1YKi0NRVykdyBrlzPpHQkiUUamHPGaVwhG8krededphKS0C33SSHITaaUT0c+wd4J2trf9Bc336qxruWqw1/A==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-9a934394-0cf8-512d-939b-77e71f69cebb-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-bf94ddb5-e436-506a-9763-5ab86b642508-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-bf94ddb5-e436-506a-9763-5ab86b642508-common/-/monaco-vscode-bf94ddb5-e436-506a-9763-5ab86b642508-common-21.6.0.tgz", - "integrity": "sha512-OBtyw5KXu8JidkjL92OxAuU0DX3cycDVa/jdc8Gdgj9REmcO3qg9WXFY4A0M9gyFHezwNRn1QL+Fv1ws9pcc6Q==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-bulk-edit-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-bulk-edit-service-override/-/monaco-vscode-bulk-edit-service-override-21.6.0.tgz", - "integrity": "sha512-YWXFSNn5JcwOXxaX4+hlCOoArgyj4Z1atk+yUhWPFYY+ifP1qf6czXPbGiDUAAGShn5W8oyv8NgEFgPo5CUNMA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-4fad3647-b95d-5c19-bab1-bb9de627a5ec-common": "21.6.0", - "@codingame/monaco-vscode-670aae94-7f88-54d7-90ea-6fcbef423557-common": "21.6.0", - "@codingame/monaco-vscode-71c8dbff-4c98-552f-aef0-e72b00fdcfc0-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common/-/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common-21.6.0.tgz", - "integrity": "sha512-4CJ4iHMUCb/lSol0jW4GHGXflEbHWsqsWeeIfb0IV86c8ZawnoeqqYSwCdktb4CB0zrI3008yyp03ZqGbVH8Yg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-ce7c734f-7712-563c-9335-d7acb43306af-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-ce7c734f-7712-563c-9335-d7acb43306af-common/-/monaco-vscode-ce7c734f-7712-563c-9335-d7acb43306af-common-21.6.0.tgz", - "integrity": "sha512-24VY3rsu9pCRo0D00vFrAP8gIGoqJ5FdUf/s5xgZ2n9/ijAJsWm23GAXMx0fKHvEDrEo3ow5yApNhcS0K+eSWg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-cea4d01f-6526-5c2f-8b09-b168fead499f-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-cea4d01f-6526-5c2f-8b09-b168fead499f-common/-/monaco-vscode-cea4d01f-6526-5c2f-8b09-b168fead499f-common-21.6.0.tgz", - "integrity": "sha512-FRQ8VHvAPtyc2oS1WL05VnB1VxmHpGto2rJhJqM+9oq4GnQLOtRFLd6tEZg2wUkAXtt93E/CvwQMsWUPbe0x+w==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-configuration-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-configuration-service-override/-/monaco-vscode-configuration-service-override-21.6.0.tgz", - "integrity": "sha512-E/Vd+t1TTKcQhrlgksVJXQJCmArFo+NdcpCJxCR7MKVUBux63QUgWKuKh0fSxpwkBt1gu1O9+SEoSjC10shN2w==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-158b9837-fc78-5d9c-86f5-9134e4358643-common": "21.6.0", - "@codingame/monaco-vscode-422642f2-7e3a-5c1c-9e1e-1d3ef1817346-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-ce7c734f-7712-563c-9335-d7acb43306af-common": "21.6.0", - "@codingame/monaco-vscode-d987325e-3e05-53aa-b9ff-6f97476f64db-common": "21.6.0", - "@codingame/monaco-vscode-f24e325c-2ce0-5bba-8236-bfc4f53180ab-common": "21.6.0", - "@codingame/monaco-vscode-files-service-override": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-d0569cfb-4706-5ad6-b0b0-5115ad8685db-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-d0569cfb-4706-5ad6-b0b0-5115ad8685db-common/-/monaco-vscode-d0569cfb-4706-5ad6-b0b0-5115ad8685db-common-21.6.0.tgz", - "integrity": "sha512-r6i1KuU3ahZLyP4ESsYVI4DsOsysGoZ73U6vcpCMfMoNuYEG0QAnXbXBcKHQamX+DSfVzjk5I1IFPk2n9edCMw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-0af61f78-dfc5-57ba-8d32-66268c8de38d-common": "21.6.0", - "@codingame/monaco-vscode-9a5ab9e7-d838-5831-9eb4-e79ea3764dcb-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-b994942c-360d-5b68-8a33-77d4bde6b714-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-d26a96d3-122c-5a3d-a04d-deb5ff0f19c0-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-d26a96d3-122c-5a3d-a04d-deb5ff0f19c0-common/-/monaco-vscode-d26a96d3-122c-5a3d-a04d-deb5ff0f19c0-common-21.6.0.tgz", - "integrity": "sha512-CgujHgZZ/e3I+2kcaFHKn2pbS4PDhLK2sWXiaArMsi/+0xlfc9tj2awW7Xz9srvJJHQXvYT+//d0Tm5Pcfygpg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-2a94c04a-b85b-5669-b06b-89c1bfa11cb9-common": "21.6.0", - "@codingame/monaco-vscode-9efc1f50-c7de-55d6-8b28-bcc88bd49b5a-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-d481a59e-259c-524e-bee1-76483d75d3a1-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-d481a59e-259c-524e-bee1-76483d75d3a1-common/-/monaco-vscode-d481a59e-259c-524e-bee1-76483d75d3a1-common-21.6.0.tgz", - "integrity": "sha512-b/fV8556/UFVYMOgoSknmi3PnA2Yyu3En6aEHvjR92dpxBJTrlRp6qGKGVra34Q8P0B4pXh8bWECOwjM2F+kHw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-523730aa-81e6-55d7-9916-87ad537fe087-common": "21.6.0", - "@codingame/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common": "21.6.0", - "@codingame/monaco-vscode-72a1b7d3-3f58-5545-9b7e-f579bd003081-common": "21.6.0", - "@codingame/monaco-vscode-9a5ab9e7-d838-5831-9eb4-e79ea3764dcb-common": "21.6.0", - "@codingame/monaco-vscode-ac93482b-2178-52df-a200-ba0d1a4963fb-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0", - "@codingame/monaco-vscode-f24e325c-2ce0-5bba-8236-bfc4f53180ab-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-d609a7d3-bf87-551a-884f-550a8b327ec5-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-d609a7d3-bf87-551a-884f-550a8b327ec5-common/-/monaco-vscode-d609a7d3-bf87-551a-884f-550a8b327ec5-common-21.6.0.tgz", - "integrity": "sha512-XeBEPtN0cqwbTa+r+5uP7EeJq6grMWftRHO2x6h0h+H4DtZyDy6mvzjpdt04TUSh4hOjd7NiOqHJxFpPhKm/wA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-d987325e-3e05-53aa-b9ff-6f97476f64db-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-d987325e-3e05-53aa-b9ff-6f97476f64db-common/-/monaco-vscode-d987325e-3e05-53aa-b9ff-6f97476f64db-common-21.6.0.tgz", - "integrity": "sha512-QIq/1Cwbzx0i/FG8nkvM5uZKOyV/MCeQrpqRY+EKZBEIOCFULM/NrK/Wvsr7SWl0RLIOgKfkdGdnqRl0Ebm2kA==", - "license": "MIT" - }, - "node_modules/@codingame/monaco-vscode-dbfe5f85-b426-55ed-a79b-5f811b395762-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-dbfe5f85-b426-55ed-a79b-5f811b395762-common/-/monaco-vscode-dbfe5f85-b426-55ed-a79b-5f811b395762-common-21.6.0.tgz", - "integrity": "sha512-KPggwPWzoNJ2E2sBnmIqvoeiJIrNAr2gJj75D+wpGNO/nN6IgONxq4Mk78s8HcVACN2WVmE0v9PLFT9E36zlbg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-bc6d9a89-1625-5010-b57e-ff44151144fe-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-e39a1c8f-7892-5d9b-9987-7b10b79e1a0a-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-e39a1c8f-7892-5d9b-9987-7b10b79e1a0a-common/-/monaco-vscode-e39a1c8f-7892-5d9b-9987-7b10b79e1a0a-common-21.6.0.tgz", - "integrity": "sha512-mdB6ECEtlAVCQv3Uxii0iTOn6CTTxBNnqtEbzHpC3TNmZM1vjaYBgdrVt6gxLpEA6zEEQOl+BlzAw+A7iPq7mw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-e59ecb8c-db32-5324-8fe4-cf9921fd92b8-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-e59ecb8c-db32-5324-8fe4-cf9921fd92b8-common/-/monaco-vscode-e59ecb8c-db32-5324-8fe4-cf9921fd92b8-common-21.6.0.tgz", - "integrity": "sha512-Cy1AFPrHzhnN/vox2daQiEzO3mKsUrhnGbaxUafIpIgBukDYewE/odMkEc8jpEeXELACAYoQPw9187MG+1EXFA==", - "license": "MIT" - }, - "node_modules/@codingame/monaco-vscode-e72c94ca-257a-5b75-8b68-5a5fa3c18255-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-e72c94ca-257a-5b75-8b68-5a5fa3c18255-common/-/monaco-vscode-e72c94ca-257a-5b75-8b68-5a5fa3c18255-common-21.6.0.tgz", - "integrity": "sha512-gSfBqKAOA/ixweNx33SEhZfhWY+bhAweo3tIFbGuD/70FviTLVtiPxxUcr7RqjwQIYRiB1tKnKtCMb/JZRbnYA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-158b9837-fc78-5d9c-86f5-9134e4358643-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-d609a7d3-bf87-551a-884f-550a8b327ec5-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-eb7d5efd-2e60-59f8-9ba4-9a8ae8cb2957-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-eb7d5efd-2e60-59f8-9ba4-9a8ae8cb2957-common/-/monaco-vscode-eb7d5efd-2e60-59f8-9ba4-9a8ae8cb2957-common-21.6.0.tgz", - "integrity": "sha512-uaekjdYuEv+iazR9GgTDii91fSpn0QvExrqOX4GODLXZ7ghaAs/Yl2mEy9ZfOIePvzLHYUH5jdrcLqffMDBVpA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-4fad3647-b95d-5c19-bab1-bb9de627a5ec-common": "21.6.0", - "@codingame/monaco-vscode-9ee79c1a-3f03-568b-8eac-b02513a98b68-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-e39a1c8f-7892-5d9b-9987-7b10b79e1a0a-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-eba0b9b3-174c-5dae-9867-a37810ca1808-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-eba0b9b3-174c-5dae-9867-a37810ca1808-common/-/monaco-vscode-eba0b9b3-174c-5dae-9867-a37810ca1808-common-21.6.0.tgz", - "integrity": "sha512-uTcWNKM8Kc8CQ7oIbrXo1zADBpa9Qbrgyt+hL6IjBpgWDfJK7wWncYWVn3sc1dtPlLBbdysWDnLj7Y+YKIOyQQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-670aae94-7f88-54d7-90ea-6fcbef423557-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-ebba7d85-8a22-5735-adf4-8299cd976dce-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-ebba7d85-8a22-5735-adf4-8299cd976dce-common/-/monaco-vscode-ebba7d85-8a22-5735-adf4-8299cd976dce-common-21.6.0.tgz", - "integrity": "sha512-g1LfbRvkxQzSrW7MrGlDAYo6YJ8/XFX4fZ8HZvj3HTgr9jy60l6GMrkhhTmgJjC/fPqqTqdmSSQ1i/JovSo2Hg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-eda30bac-0984-5b42-9362-c68996b85232-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-eda30bac-0984-5b42-9362-c68996b85232-common/-/monaco-vscode-eda30bac-0984-5b42-9362-c68996b85232-common-21.6.0.tgz", - "integrity": "sha512-mlq/4ooKh4j7e/YvVuhwLuDZQ71mQCwNEOGVaaXxYJ4C/CRhBR5NN5O+6ADJ7W/Z1bRxqu/ujUVZuA/+2vYKtQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common": "21.6.0", - "@codingame/monaco-vscode-622c0cca-d5fa-59b6-b730-0715afcf93ee-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-editor-api": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-editor-api/-/monaco-vscode-editor-api-21.6.0.tgz", - "integrity": "sha512-YTxKRHe9d4TvyEzWIqLpJXLyZyO4xFlLgrkgHoWBpomm6gIuwaRJJRpapBZf24oG8AhkniZSPg2iv/84M+ho6g==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-5452e2b7-9081-5f95-839b-4ab3544ce28f-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-editor-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-editor-service-override/-/monaco-vscode-editor-service-override-21.6.0.tgz", - "integrity": "sha512-SYC1TrH+OkDUwOjlS4gLbj3JVPWx1QsK17gKbeZaVXowzpJoVL73u9rY0GVkL5B9eS5yvhB2N+wKsa0lrO0Hlw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-72a1b7d3-3f58-5545-9b7e-f579bd003081-common": "21.6.0", - "@codingame/monaco-vscode-9efc1f50-c7de-55d6-8b28-bcc88bd49b5a-common": "21.6.0", - "@codingame/monaco-vscode-ac93482b-2178-52df-a200-ba0d1a4963fb-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-environment-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-21.6.0.tgz", - "integrity": "sha512-cSK0CAOH6f9dBYWHilhcYF52IcgEUliuZiFFNwSyo5mjaFXqAXzeU88rnSkkuewgIO6ZUiVZ+ApA00I7X+Kq7Q==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-abed5a84-8a82-5f84-9412-88a736235bae-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-extension-api": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extension-api/-/monaco-vscode-extension-api-21.6.0.tgz", - "integrity": "sha512-oslSpuCAZKS88hPx76Cickqd9/z5M1koUkx8UOqnfVIFAemnMHkZWWC4bOa/Q7wFZBy+1qB0/OuhrIBtycj5vA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-4a3ac544-9a61-534c-88df-756262793ef7-common": "21.6.0", - "@codingame/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-extensions-service-override": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-extensions-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-21.6.0.tgz", - "integrity": "sha512-uqPs5NHBypZRlxux0F4emoD03RzXZ19cpWd3FHxFrLERJRB9BUQqJAVpOb0Fwijp6B9KN5DYxRTS4gRbT5jr+w==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-05a2a821-e4de-5941-b7f9-bbf01c09f229-common": "21.6.0", - "@codingame/monaco-vscode-0af61f78-dfc5-57ba-8d32-66268c8de38d-common": "21.6.0", - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-249dc928-1da3-51c1-82d0-45e0ba9d08a1-common": "21.6.0", - "@codingame/monaco-vscode-256d5b78-0649-50e9-8354-2807f95f68f4-common": "21.6.0", - "@codingame/monaco-vscode-2a94c04a-b85b-5669-b06b-89c1bfa11cb9-common": "21.6.0", - "@codingame/monaco-vscode-4a3ac544-9a61-534c-88df-756262793ef7-common": "21.6.0", - "@codingame/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common": "21.6.0", - "@codingame/monaco-vscode-4dda7789-5a25-5e8b-b2de-c2f11b1b96e5-common": "21.6.0", - "@codingame/monaco-vscode-571c8352-7953-5038-9f09-e03bb6219a0e-common": "21.6.0", - "@codingame/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common": "21.6.0", - "@codingame/monaco-vscode-622c0cca-d5fa-59b6-b730-0715afcf93ee-common": "21.6.0", - "@codingame/monaco-vscode-670aae94-7f88-54d7-90ea-6fcbef423557-common": "21.6.0", - "@codingame/monaco-vscode-6845754f-e617-5ed9-8aaa-6ca3653a9532-common": "21.6.0", - "@codingame/monaco-vscode-71c8dbff-4c98-552f-aef0-e72b00fdcfc0-common": "21.6.0", - "@codingame/monaco-vscode-7f39b6f1-3542-5430-8760-0f404d7a7cee-common": "21.6.0", - "@codingame/monaco-vscode-8ccb7637-50ea-5359-97bf-00015d7fe567-common": "21.6.0", - "@codingame/monaco-vscode-a654b07e-8806-5425-b124-18f03ba8e11a-common": "21.6.0", - "@codingame/monaco-vscode-a9da9abe-278d-5ce6-9418-99c7c07c5c37-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-b994942c-360d-5b68-8a33-77d4bde6b714-common": "21.6.0", - "@codingame/monaco-vscode-bba55be6-41a2-50cd-a3cc-8bafa35bfa89-common": "21.6.0", - "@codingame/monaco-vscode-bf94ddb5-e436-506a-9763-5ab86b642508-common": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0", - "@codingame/monaco-vscode-d0569cfb-4706-5ad6-b0b0-5115ad8685db-common": "21.6.0", - "@codingame/monaco-vscode-eb7d5efd-2e60-59f8-9ba4-9a8ae8cb2957-common": "21.6.0", - "@codingame/monaco-vscode-eba0b9b3-174c-5dae-9867-a37810ca1808-common": "21.6.0", - "@codingame/monaco-vscode-f22e7e55-aee8-5b52-a6bc-950efd9f5890-common": "21.6.0", - "@codingame/monaco-vscode-files-service-override": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-f1bbc6d3-6129-583c-a2ba-c80b832993d2-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-f1bbc6d3-6129-583c-a2ba-c80b832993d2-common/-/monaco-vscode-f1bbc6d3-6129-583c-a2ba-c80b832993d2-common-21.6.0.tgz", - "integrity": "sha512-jiROZSvmiZ/yP5YaeIdexmyUOgOcZ9UMike/ttm8xe6XKiwaO1TAAi8S3499XuR1xff9g2P9KXdPDfsJwi7Xkw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-f22e7e55-aee8-5b52-a6bc-950efd9f5890-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-f22e7e55-aee8-5b52-a6bc-950efd9f5890-common/-/monaco-vscode-f22e7e55-aee8-5b52-a6bc-950efd9f5890-common-21.6.0.tgz", - "integrity": "sha512-Td9EHwGwf5dx/chrcBAV7ip2lL98Z/S0nyoCv8zkVLwZgs1+ozRk7AYfnYYcGUBhzKbu/P/RPtqnn1Ha4NPtYQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common": "21.6.0", - "@codingame/monaco-vscode-9a5ab9e7-d838-5831-9eb4-e79ea3764dcb-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-f24e325c-2ce0-5bba-8236-bfc4f53180ab-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-f24e325c-2ce0-5bba-8236-bfc4f53180ab-common/-/monaco-vscode-f24e325c-2ce0-5bba-8236-bfc4f53180ab-common-21.6.0.tgz", - "integrity": "sha512-3XWFSifzoxUI++i801KWjKXG9lWGKjBsx7jNsa2cl8hERYGvSUgBu2QxXCJhKWda9x1k61z1P6G7t8il9eFlQw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-ff9fa663-eae3-5274-8573-c2b918871e4b-common": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-ff9fa663-eae3-5274-8573-c2b918871e4b-common/-/monaco-vscode-ff9fa663-eae3-5274-8573-c2b918871e4b-common-21.6.0.tgz", - "integrity": "sha512-Intx8vVL0z4kIwfVMwy23kZiYpXFkBfQ24My1Cn/nKej5nb8lL86tEeJ/F5KnJ72gh1FeehSj5XH8BqX4pxhHg==", - "license": "MIT" - }, - "node_modules/@codingame/monaco-vscode-files-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-21.6.0.tgz", - "integrity": "sha512-h+Ew3dLoJ/Ii3vnkp2f1NSzmD39rB+n1eEhq27RaFSt0iDcnNs6QJYeoSzawi9QyvzCHwyLMM4VwDUNT7FgePA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-0c06bfba-d24d-5c4d-90cd-b40cefb7f811-common": "21.6.0", - "@codingame/monaco-vscode-15626ec7-b165-51e1-8caf-7bcc2ae9b95a-common": "21.6.0", - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-2f06fe84-148e-5e6b-a7ca-c7989c5f128a-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0", - "@codingame/monaco-vscode-cea4d01f-6526-5c2f-8b09-b168fead499f-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-host-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-21.6.0.tgz", - "integrity": "sha512-DpZGpBP3g4SbEpVNnPykOxMWD/fBSgFTUkEEUZQmoHFAecCfjHl3TBpjcv+DKRRHDnSUC3kz3d8jRKzBw0XXUA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-158b9837-fc78-5d9c-86f5-9134e4358643-common": "21.6.0", - "@codingame/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common": "21.6.0", - "@codingame/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-keybindings-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-keybindings-service-override/-/monaco-vscode-keybindings-service-override-21.6.0.tgz", - "integrity": "sha512-6nKsbWE9krjM94IUyCRrpUMHhkwZuFcM1zZOxJ/DCnQ8uXYOWYsw94lNA18QqMS9uSLi6kxCg4DNeyk7vSoUrA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-2a22c7b4-b906-5914-8cd1-3ed912fb738f-common": "21.6.0", - "@codingame/monaco-vscode-40cada32-7e9c-528a-81fc-766e4da54147-common": "21.6.0", - "@codingame/monaco-vscode-a3eaa464-944c-5b8f-8886-213068ba4897-common": "21.6.0", - "@codingame/monaco-vscode-acd79e2c-c7e3-5594-873a-427e3006b3d8-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-d609a7d3-bf87-551a-884f-550a8b327ec5-common": "21.6.0", - "@codingame/monaco-vscode-files-service-override": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-language-pack-cs": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-cs/-/monaco-vscode-language-pack-cs-21.6.0.tgz", - "integrity": "sha512-+xx2VXCpWZtjMqXZh1aOZYCOVi5ZUGd7pMTXTSx3CU6zbq6a3hhceUZGyI5I3EdRBOAOF6ciDPd3D+8B/B/wiQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-language-pack-de": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-de/-/monaco-vscode-language-pack-de-21.6.0.tgz", - "integrity": "sha512-AEBmmDuBlZQR1yTH8nic7NQkSQqVLjJAYjU7mnC6Z1ZkNsWzUA3zOhAjv6O5kbQhtOtwPm3lc22SFR7ElDid6A==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-language-pack-es": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-es/-/monaco-vscode-language-pack-es-21.6.0.tgz", - "integrity": "sha512-/rizSv3rMdvZVxEbGnQo5m6PeCsh4aLeunc/4Oiqmc9vYsVg3gLr9cwqwQJ0jBgeUS0Xfc1UHuszHYOLdkGFOg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-language-pack-fr": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-fr/-/monaco-vscode-language-pack-fr-21.6.0.tgz", - "integrity": "sha512-ObfmJXT+YEcQ/H5s38BQctA9rCAYjb6EbxcoyUrYLQo1UrgE94qlgUC3bLOlpmGuqNPyp1XqHNMnIEU+xipbnQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-language-pack-it": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-it/-/monaco-vscode-language-pack-it-21.6.0.tgz", - "integrity": "sha512-9nFyW7mzWz7iR2dPos1sQdNRU/rgpXuZrGzCc2Fx2XKNpmjP5aTyl2bthrCxANFqOiSyjpphI2op3T4JHxvGBw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-language-pack-ja": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-ja/-/monaco-vscode-language-pack-ja-21.6.0.tgz", - "integrity": "sha512-ymm45QHA3ohaFEpLDpoLRVgVpASG2vnxIHnSLSg3U3rOU1rMl/UQvcz6Hp9AoVyxGBqGNLNmaVVQqnu7FF2ZgA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-language-pack-ko": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-ko/-/monaco-vscode-language-pack-ko-21.6.0.tgz", - "integrity": "sha512-Qc7oO5z4nUhroA0h+TarN3olz6hRM5kXlW75RoQvzUkEQ52TOMRDYYukNw548f4B+3Rg0hmn0AiAtFGTGz2QHw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-language-pack-pl": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-pl/-/monaco-vscode-language-pack-pl-21.6.0.tgz", - "integrity": "sha512-7FPsViYJ6M7PzO25kNQUyamg7ZqPGlulh3BNH7S7/13KhIt1pOxLmn5r9Dx6rfyERPB9evU1BJ9HJkT5qFJ3aQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-language-pack-pt-br": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-pt-br/-/monaco-vscode-language-pack-pt-br-21.6.0.tgz", - "integrity": "sha512-xEespwZksuiSzSLarqco/BCnTld6IRXRzLXa9wu1Y1e/2s2quOuxFGltUy4EmlbUfgQuMVsyt0na/CbbxVDdEA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-language-pack-qps-ploc": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-qps-ploc/-/monaco-vscode-language-pack-qps-ploc-21.6.0.tgz", - "integrity": "sha512-cqyaLh7/U5vajyAvZKx0pEaH+psQKEMAorvR2b2iyh7ujr5s6U9YRehziwaZ49jqgeNUn1Rmd5gJD34iyja+iw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-language-pack-ru": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-ru/-/monaco-vscode-language-pack-ru-21.6.0.tgz", - "integrity": "sha512-mXsEDyuFiOwvcF/MM0Yb9vdmUxVoiHZUp6XFsnJbMl7pt5DUNoTfrwNhIVbAjSATn4SdYiJ7sgwXI1Jw5j8EWg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-language-pack-tr": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-tr/-/monaco-vscode-language-pack-tr-21.6.0.tgz", - "integrity": "sha512-1yABKhZVLjtnP8d2IqSqxmNcJpR+TcYIL+w3UhxqqQEzCy0kK97hE/Ms6m0aMuOrU8tpYHKXp0E1jxBVcvoOrA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-language-pack-zh-hans": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-zh-hans/-/monaco-vscode-language-pack-zh-hans-21.6.0.tgz", - "integrity": "sha512-V4AXR+Dq9plOfeHYA4SwFzpb1jHL+DJQrDnUsSUVb6nOaEyblRunNzL4okg/AAiNP6wf3S0ZMZrK5rheFl7e4A==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-language-pack-zh-hant": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-zh-hant/-/monaco-vscode-language-pack-zh-hant-21.6.0.tgz", - "integrity": "sha512-43SUv4m33v2pMetEjt4ABzLdsbGR4XfGpKf/dUmOWTg0ijoPwIq+0fa/CKoC1X7oEfxHp5gQPaFdtx3pZSjQpA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-languages-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-languages-service-override/-/monaco-vscode-languages-service-override-21.6.0.tgz", - "integrity": "sha512-sHmraWmJcj//q23SI8T9L5uBgG5jzWhDwz9eHcCFKkNfNnSFbC5hjx9Zi9GWXQyuZ2eRC36kkOSHUYV/c4zVIA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-files-service-override": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-layout-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-21.6.0.tgz", - "integrity": "sha512-+0aWhYKS1bT+sgsBryV+B7Q4PVnPNvK4y46VaawcdjMRrpZx3BtO4+00VBY4E4W1kYDh26NS2XSGV0ot07s9kw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-6bf85d7b-e6e3-54e9-9bc1-7e08d663f0f6-common": "21.6.0", - "@codingame/monaco-vscode-85886bdb-61c5-52f1-8eb7-d1d32f6f8cbd-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-localization-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-localization-service-override/-/monaco-vscode-localization-service-override-21.6.0.tgz", - "integrity": "sha512-rVOTG0FS4S2rSK57vXC5nQ+Gp1ejtNlwUu3ak+Spr0wtlFJm6/eAKY5lkvg2ls8kGj+LEt9aI2tUDAuVESbkTQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-a654b07e-8806-5425-b124-18f03ba8e11a-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-log-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-log-service-override/-/monaco-vscode-log-service-override-21.6.0.tgz", - "integrity": "sha512-mjDH/ixg5x75s6NF0vi6tzWWKlm5jovLJc+O3i/rhoryhFeip/04WHtq9mfuceY7iQiH7x2BuhiRcq5OSNbYBw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-abed5a84-8a82-5f84-9412-88a736235bae-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-cea4d01f-6526-5c2f-8b09-b168fead499f-common": "21.6.0", - "@codingame/monaco-vscode-environment-service-override": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-model-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-model-service-override/-/monaco-vscode-model-service-override-21.6.0.tgz", - "integrity": "sha512-RuL6r1HrCHSUX8G19VXvk5P5M79wgpMB4L1+OMhNkOlwcw4e+Aonh4xM/eV8DqC2N7RMWuc7hTWUPs/BdwLh7A==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-0c06bfba-d24d-5c4d-90cd-b40cefb7f811-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-monarch-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-monarch-service-override/-/monaco-vscode-monarch-service-override-21.6.0.tgz", - "integrity": "sha512-MAbz8i5dkIhAap6KPSMbHXkcVm/8bkRnGxsK7WametT8FVCM1sZak7VbhJu6jAXAPdIQYX/ATTovAycIYZ4zxw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-quickaccess-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-21.6.0.tgz", - "integrity": "sha512-ELUuZ86ogmcTLLX2mKc5zl3yv1L0fPiRwmwTIkq3xwmj+vyNesBXmL1zNaauMvj7MV+P5VPU1LEBptlpZvKwqQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-158b9837-fc78-5d9c-86f5-9134e4358643-common": "21.6.0", - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-40cada32-7e9c-528a-81fc-766e4da54147-common": "21.6.0", - "@codingame/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common": "21.6.0", - "@codingame/monaco-vscode-9a1a5840-af83-5d07-a156-ba32a36c5c4b-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-d609a7d3-bf87-551a-884f-550a8b327ec5-common": "21.6.0", - "@codingame/monaco-vscode-eda30bac-0984-5b42-9362-c68996b85232-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-standalone-css-language-features": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-standalone-css-language-features/-/monaco-vscode-standalone-css-language-features-21.6.0.tgz", - "integrity": "sha512-CQGzycWi1uLY3+IMPRRBrLDwnTUxDMlH81/EE5klh+BtsgJzX6YyHcKr+Mvs6127279jR/b2yYyU9SZEMiheLg==", - "license": "MIT", - "dependencies": { - "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-standalone-html-language-features": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-standalone-html-language-features/-/monaco-vscode-standalone-html-language-features-21.6.0.tgz", - "integrity": "sha512-jCG1YAgSRzwp/eoFYYj+c2A9Uu6tUKUMGiZaLip1RqOgBY2ZoN5ON0ypXkJei5MO4mCqTz6zkXAwIMiilhTN4w==", - "license": "MIT", - "dependencies": { - "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-standalone-json-language-features": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-standalone-json-language-features/-/monaco-vscode-standalone-json-language-features-21.6.0.tgz", - "integrity": "sha512-ZaEt3lPJ2cFC1bhUv9LCf9865s2+cqWsG6X/UyhUTdut9Z4ccCIXjrZPRLDRDlHHp82jkGvXFhPK6RxnXYhzwg==", - "license": "MIT", - "dependencies": { - "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-standalone-languages": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-standalone-languages/-/monaco-vscode-standalone-languages-21.6.0.tgz", - "integrity": "sha512-wSsckW8q6BvLucRhPEQZOerAcaKdwMaBtYo+F2wCkA0a0NvGGUBcGnkUgY7T9fIFynRfvDRBi29Wf3NQm0LgvA==", - "license": "MIT", - "dependencies": { - "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-standalone-typescript-language-features": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-standalone-typescript-language-features/-/monaco-vscode-standalone-typescript-language-features-21.6.0.tgz", - "integrity": "sha512-qr08fvnZtYQhCxLkzSq+JCGM6gikv19O/Vj1kUdxLU8TqUDgYuDvRyrcXL83aX2uyQArfyoo4xJRdvvA9ULOsw==", - "license": "MIT", - "dependencies": { - "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-textmate-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-textmate-service-override/-/monaco-vscode-textmate-service-override-21.6.0.tgz", - "integrity": "sha512-BhtfRCYQgr+rR9H4i+WwaaWkaoqnHVmgzuMAh/Q8tUSp5AQdDv5RYlAe7eOV5HxxsRK5t4yUW4b1/6tA0hfMNQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-33833ac7-3af3-5e9d-8fb9-11838d852c59-common": "21.6.0", - "@codingame/monaco-vscode-9a934394-0cf8-512d-939b-77e71f69cebb-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-be143a32-d60a-5489-a1d2-c83ea7eff6bf-common": "21.6.0", - "@codingame/monaco-vscode-files-service-override": "21.6.0", - "vscode-oniguruma": "1.7.0", - "vscode-textmate": "9.2.0" - } - }, - "node_modules/@codingame/monaco-vscode-theme-defaults-default-extension": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-theme-defaults-default-extension/-/monaco-vscode-theme-defaults-default-extension-21.6.0.tgz", - "integrity": "sha512-64ysP4o00Tyng04TjdBQebEG8KxPDKS6wyoq7lp4A6/BkK41tJhjiq7+0i4wcgIPS8a2m5TIX/VvKcOzYWVyOg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-theme-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-theme-service-override/-/monaco-vscode-theme-service-override-21.6.0.tgz", - "integrity": "sha512-LcY1HTZSY94Q7qnfdDanNyc8pE/6TrUYUoU09iF3FzjAiR8kiDQBsHja5vkrVGt8IYjwnSSxE2SeA/cSHvbfLQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common": "21.6.0", - "@codingame/monaco-vscode-9a934394-0cf8-512d-939b-77e71f69cebb-common": "21.6.0", - "@codingame/monaco-vscode-9d0168a3-519b-57f3-9bcc-89efc41f951a-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-files-service-override": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-view-banner-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-view-banner-service-override/-/monaco-vscode-view-banner-service-override-21.6.0.tgz", - "integrity": "sha512-CLPjwBewnVBJv0bp+90kSjyzLrMV++AFsPn3EQsEnTFtth4144H1Y2NMsgBF/AziOKV7jnVedHMwQNIuWDDhlQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common": "21.6.0", - "@codingame/monaco-vscode-85886bdb-61c5-52f1-8eb7-d1d32f6f8cbd-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-view-common-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-view-common-service-override/-/monaco-vscode-view-common-service-override-21.6.0.tgz", - "integrity": "sha512-o19a+pj733J7OTrxBZTGARIq9/+JqLobdEEOfhvNHfRsWyepHyu3eerEe5EadpUlYy4nY7JiesVWcdzGY0vxnw==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-0c06bfba-d24d-5c4d-90cd-b40cefb7f811-common": "21.6.0", - "@codingame/monaco-vscode-0cc5da60-f921-59b9-bd8c-a018e93c0a6f-common": "21.6.0", - "@codingame/monaco-vscode-158b9837-fc78-5d9c-86f5-9134e4358643-common": "21.6.0", - "@codingame/monaco-vscode-1b4486de-4fe4-59c4-9e6d-34f265ff6625-common": "21.6.0", - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-2a94c04a-b85b-5669-b06b-89c1bfa11cb9-common": "21.6.0", - "@codingame/monaco-vscode-3109a756-1f83-5d09-945b-9f0fcad928f0-common": "21.6.0", - "@codingame/monaco-vscode-40cada32-7e9c-528a-81fc-766e4da54147-common": "21.6.0", - "@codingame/monaco-vscode-4a316137-39d1-5d77-8b53-112db3547c1e-common": "21.6.0", - "@codingame/monaco-vscode-4fad3647-b95d-5c19-bab1-bb9de627a5ec-common": "21.6.0", - "@codingame/monaco-vscode-523730aa-81e6-55d7-9916-87ad537fe087-common": "21.6.0", - "@codingame/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common": "21.6.0", - "@codingame/monaco-vscode-615ce609-8555-545a-a549-47bd9f80e9f8-common": "21.6.0", - "@codingame/monaco-vscode-670aae94-7f88-54d7-90ea-6fcbef423557-common": "21.6.0", - "@codingame/monaco-vscode-6980eeab-47bb-5a48-8e15-32caf0785565-common": "21.6.0", - "@codingame/monaco-vscode-6db1b967-5327-5c5c-8c17-bd92774c0fb2-common": "21.6.0", - "@codingame/monaco-vscode-71c8dbff-4c98-552f-aef0-e72b00fdcfc0-common": "21.6.0", - "@codingame/monaco-vscode-72a1b7d3-3f58-5545-9b7e-f579bd003081-common": "21.6.0", - "@codingame/monaco-vscode-7869cfe8-f42c-5721-9f2b-7d04a6a41f16-common": "21.6.0", - "@codingame/monaco-vscode-7f39b6f1-3542-5430-8760-0f404d7a7cee-common": "21.6.0", - "@codingame/monaco-vscode-897bebad-39df-57cb-8a57-36a271d038be-common": "21.6.0", - "@codingame/monaco-vscode-89a82baf-8ded-5b2f-b8af-e5fbd72dc5ad-common": "21.6.0", - "@codingame/monaco-vscode-8ccb7637-50ea-5359-97bf-00015d7fe567-common": "21.6.0", - "@codingame/monaco-vscode-9a5ab9e7-d838-5831-9eb4-e79ea3764dcb-common": "21.6.0", - "@codingame/monaco-vscode-9c84f943-bcb5-5bcf-92a6-91f66a732f26-common": "21.6.0", - "@codingame/monaco-vscode-9efc1f50-c7de-55d6-8b28-bcc88bd49b5a-common": "21.6.0", - "@codingame/monaco-vscode-a654b07e-8806-5425-b124-18f03ba8e11a-common": "21.6.0", - "@codingame/monaco-vscode-ac93482b-2178-52df-a200-ba0d1a4963fb-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-bc6d9a89-1625-5010-b57e-ff44151144fe-common": "21.6.0", - "@codingame/monaco-vscode-bulk-edit-service-override": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0", - "@codingame/monaco-vscode-d26a96d3-122c-5a3d-a04d-deb5ff0f19c0-common": "21.6.0", - "@codingame/monaco-vscode-d481a59e-259c-524e-bee1-76483d75d3a1-common": "21.6.0", - "@codingame/monaco-vscode-dbfe5f85-b426-55ed-a79b-5f811b395762-common": "21.6.0", - "@codingame/monaco-vscode-e59ecb8c-db32-5324-8fe4-cf9921fd92b8-common": "21.6.0", - "@codingame/monaco-vscode-e72c94ca-257a-5b75-8b68-5a5fa3c18255-common": "21.6.0", - "@codingame/monaco-vscode-f1bbc6d3-6129-583c-a2ba-c80b832993d2-common": "21.6.0", - "@codingame/monaco-vscode-f24e325c-2ce0-5bba-8236-bfc4f53180ab-common": "21.6.0", - "@codingame/monaco-vscode-ff9fa663-eae3-5274-8573-c2b918871e4b-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-view-status-bar-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-view-status-bar-service-override/-/monaco-vscode-view-status-bar-service-override-21.6.0.tgz", - "integrity": "sha512-5a7xuQM+WGaU0Dw5vfLCi6SiYQKnuJbAbuLlp6u723I25e1IJ0Glt+bXYdyKxpaYT5FVx4xJOBFxLuedGNyI8g==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-0cc5da60-f921-59b9-bd8c-a018e93c0a6f-common": "21.6.0", - "@codingame/monaco-vscode-622c0cca-d5fa-59b6-b730-0715afcf93ee-common": "21.6.0", - "@codingame/monaco-vscode-85886bdb-61c5-52f1-8eb7-d1d32f6f8cbd-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-view-title-bar-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-view-title-bar-service-override/-/monaco-vscode-view-title-bar-service-override-21.6.0.tgz", - "integrity": "sha512-smoaqHc50wUEc3kI5sEEgDhjFJkh7WXq/aiAUUfkRsy3fA8fs8LmEZ5z5ueI7zx1lIvuT89HE5xq9+jw96NqjA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-08d1b4da-daf2-5f0d-8c50-ca6a6986c50f-common": "21.6.0", - "@codingame/monaco-vscode-40cada32-7e9c-528a-81fc-766e4da54147-common": "21.6.0", - "@codingame/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common": "21.6.0", - "@codingame/monaco-vscode-5e2c24a1-3217-55e8-bc90-521eaf7df5a6-common": "21.6.0", - "@codingame/monaco-vscode-85886bdb-61c5-52f1-8eb7-d1d32f6f8cbd-common": "21.6.0", - "@codingame/monaco-vscode-96e83782-7f38-572e-8787-02e981f1c54f-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-dbfe5f85-b426-55ed-a79b-5f811b395762-common": "21.6.0", - "@codingame/monaco-vscode-ebba7d85-8a22-5735-adf4-8299cd976dce-common": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-views-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-views-service-override/-/monaco-vscode-views-service-override-21.6.0.tgz", - "integrity": "sha512-7+Zjq7xC1QtO1LZMdsbiMmd0RgomjAOrljvu/66EAE9dJ4rW1dXU+IbViEQJpRYiYrnNBfgXT+DQ/d7Yt9C3Vg==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-6980eeab-47bb-5a48-8e15-32caf0785565-common": "21.6.0", - "@codingame/monaco-vscode-6bf85d7b-e6e3-54e9-9bc1-7e08d663f0f6-common": "21.6.0", - "@codingame/monaco-vscode-71c8dbff-4c98-552f-aef0-e72b00fdcfc0-common": "21.6.0", - "@codingame/monaco-vscode-85886bdb-61c5-52f1-8eb7-d1d32f6f8cbd-common": "21.6.0", - "@codingame/monaco-vscode-9efc1f50-c7de-55d6-8b28-bcc88bd49b5a-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0", - "@codingame/monaco-vscode-keybindings-service-override": "21.6.0", - "@codingame/monaco-vscode-layout-service-override": "21.6.0", - "@codingame/monaco-vscode-quickaccess-service-override": "21.6.0", - "@codingame/monaco-vscode-view-common-service-override": "21.6.0" - } - }, - "node_modules/@codingame/monaco-vscode-workbench-service-override": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-workbench-service-override/-/monaco-vscode-workbench-service-override-21.6.0.tgz", - "integrity": "sha512-vvUzaLAbOLj16SjV4T+OJXRwF0uIM9Q7jpYYoKXCkN+Y8CJpGCDUSwCsLGx4Tz+f2H/ZzUWsv5Wr8xlznD18DA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-1021b67c-93e5-5c78-a270-cbdb2574d980-common": "21.6.0", - "@codingame/monaco-vscode-23b6fb38-5e58-5886-b34b-27abc4f5df02-common": "21.6.0", - "@codingame/monaco-vscode-256d5b78-0649-50e9-8354-2807f95f68f4-common": "21.6.0", - "@codingame/monaco-vscode-494be54c-bd37-5b3c-af70-02f086e28768-common": "21.6.0", - "@codingame/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common": "21.6.0", - "@codingame/monaco-vscode-6980eeab-47bb-5a48-8e15-32caf0785565-common": "21.6.0", - "@codingame/monaco-vscode-71c8dbff-4c98-552f-aef0-e72b00fdcfc0-common": "21.6.0", - "@codingame/monaco-vscode-85886bdb-61c5-52f1-8eb7-d1d32f6f8cbd-common": "21.6.0", - "@codingame/monaco-vscode-9c84f943-bcb5-5bcf-92a6-91f66a732f26-common": "21.6.0", - "@codingame/monaco-vscode-9efc1f50-c7de-55d6-8b28-bcc88bd49b5a-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-caeb744c-8e3f-5c11-80fb-0f057d24d544-common": "21.6.0", - "@codingame/monaco-vscode-keybindings-service-override": "21.6.0", - "@codingame/monaco-vscode-quickaccess-service-override": "21.6.0", - "@codingame/monaco-vscode-view-banner-service-override": "21.6.0", - "@codingame/monaco-vscode-view-common-service-override": "21.6.0", - "@codingame/monaco-vscode-view-status-bar-service-override": "21.6.0", - "@codingame/monaco-vscode-view-title-bar-service-override": "21.6.0" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", - "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "peer": true, - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^2.4.1" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", - "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "peer": true, - "engines": { - "node": "^14 || ^16 || >=18" - } - }, - "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", - "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.7.1", - "@csstools/css-tokenizer": "^2.4.1" - } - }, - "node_modules/@emnapi/core": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz", - "integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.1.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", - "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", - "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", - "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.10" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", - "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.7.3", - "@floating-ui/utils": "^0.2.10" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", - "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@glideapps/ts-necessities": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.2.3.tgz", - "integrity": "sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w==", - "license": "MIT" - }, - "node_modules/@hey-api/openapi-ts": { - "version": "0.43.2", - "resolved": "https://registry.npmjs.org/@hey-api/openapi-ts/-/openapi-ts-0.43.2.tgz", - "integrity": "sha512-o1/w+9tk1Ty/LJBy/VrHvDzA8YkCSRi1rr567aABlLwa9pbl2WP5fsUQbXGOgZ1HsLieVXo6qwcNMNqC6v2oxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@apidevtools/json-schema-ref-parser": "11.6.1", - "c12": "1.10.0", - "camelcase": "8.0.0", - "commander": "12.0.0", - "handlebars": "4.7.8" - }, - "bin": { - "openapi-ts": "bin/index.cjs" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "typescript": "^5.x" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@internationalized/date": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.10.0.tgz", - "integrity": "sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@json2csv/formatters": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@json2csv/formatters/-/formatters-7.0.6.tgz", - "integrity": "sha512-hjIk1H1TR4ydU5ntIENEPgoMGW+Q7mJ+537sDFDbsk+Y3EPl2i4NfFVjw0NJRgT+ihm8X30M67mA8AS6jPidSA==", - "license": "MIT" - }, - "node_modules/@json2csv/plainjs": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@json2csv/plainjs/-/plainjs-7.0.6.tgz", - "integrity": "sha512-4Md7RPDCSYpmW1HWIpWBOqCd4vWfIqm53S3e/uzQ62iGi7L3r34fK/8nhOMEe+/eVfCx8+gdSCt1d74SlacQHw==", - "license": "MIT", - "dependencies": { - "@json2csv/formatters": "^7.0.6", - "@streamparser/json": "^0.0.20" - } - }, - "node_modules/@kurkle/color": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", - "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", - "license": "MIT" - }, - "node_modules/@leeoniya/ufuzzy": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/@leeoniya/ufuzzy/-/ufuzzy-1.0.19.tgz", - "integrity": "sha512-0pikDeYt0IHEUPza5RTCDXc/17S1pTrYnReEMp8Aa6k1ovzw5QdZLwicW8TjljwEZRb6oYag0xmALohrcq/yOQ==", - "license": "MIT" - }, - "node_modules/@mapbox/jsonlint-lines-primitives": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", - "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@mapbox/mapbox-gl-style-spec": { - "version": "13.28.0", - "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-style-spec/-/mapbox-gl-style-spec-13.28.0.tgz", - "integrity": "sha512-B8xM7Fp1nh5kejfIl4SWeY0gtIeewbuRencqO3cJDrCHZpaPg7uY+V8abuR+esMeuOjRl5cLhVTP40v+1ywxbg==", - "license": "ISC", - "dependencies": { - "@mapbox/jsonlint-lines-primitives": "~2.0.2", - "@mapbox/point-geometry": "^0.1.0", - "@mapbox/unitbezier": "^0.0.0", - "csscolorparser": "~1.0.2", - "json-stringify-pretty-compact": "^2.0.0", - "minimist": "^1.2.6", - "rw": "^1.3.3", - "sort-object": "^0.3.2" - }, - "bin": { - "gl-style-composite": "bin/gl-style-composite.js", - "gl-style-format": "bin/gl-style-format.js", - "gl-style-migrate": "bin/gl-style-migrate.js", - "gl-style-validate": "bin/gl-style-validate.js" - } - }, - "node_modules/@mapbox/point-geometry": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", - "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", - "license": "ISC" - }, - "node_modules/@mapbox/unitbezier": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", - "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==", - "license": "BSD-2-Clause" - }, - "node_modules/@melt-ui/pp": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@melt-ui/pp/-/pp-0.3.2.tgz", - "integrity": "sha512-xKkPvaIAFinklLXcQOpwZ8YSpqAFxykjWf8Y/fSJQwsixV/0rcFs07hJ49hJjPy5vItvw5Qa0uOjzFUbXzBypQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "estree-walker": "^3.0.3", - "magic-string": "^0.30.5" - }, - "peerDependencies": { - "@melt-ui/svelte": ">= 0.29.0", - "svelte": "^3.55.0 || ^4.0.0 || ^5.0.0-next.1" - } - }, - "node_modules/@melt-ui/svelte": { - "version": "0.86.6", - "resolved": "https://registry.npmjs.org/@melt-ui/svelte/-/svelte-0.86.6.tgz", - "integrity": "sha512-Jer+M7DgIwT5IHfTayb4Iw/fkkxWNmC/mqn/nMh9JrbPbkxmyabfLQnhJ+JDn5HK77f84j34lubO3iqFtYAfMg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@floating-ui/core": "^1.3.1", - "@floating-ui/dom": "^1.4.5", - "@internationalized/date": "^3.5.0", - "dequal": "^2.0.3", - "focus-trap": "^7.5.2", - "nanoid": "^5.0.4" - }, - "peerDependencies": { - "svelte": "^3.0.0 || ^4.0.0 || ^5.0.0-next.118" - } - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", - "integrity": "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.5.0", - "@emnapi/runtime": "^1.5.0", - "@tybys/wasm-util": "^0.10.1" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@oxc-project/runtime": { - "version": "0.92.0", - "resolved": "https://registry.npmjs.org/@oxc-project/runtime/-/runtime-0.92.0.tgz", - "integrity": "sha512-Z7x2dZOmznihvdvCvLKMl+nswtOSVxS2H2ocar+U9xx6iMfTp0VGIrX6a4xB1v80IwOPC7dT1LXIJrY70Xu3Jw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@oxc-project/types": { - "version": "0.94.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.94.0.tgz", - "integrity": "sha512-+UgQT/4o59cZfH6Cp7G0hwmqEQ0wE+AdIwhikdwnhWI9Dp8CgSY081+Q3O67/wq3VJu8mgUEB93J9EHHn70fOw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Boshen" - } - }, - "node_modules/@petamoriken/float16": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.9.3.tgz", - "integrity": "sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==", - "license": "MIT" - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@playwright/test": { - "version": "1.56.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.0.tgz", - "integrity": "sha512-Tzh95Twig7hUwwNe381/K3PggZBZblKUe2wv25oIpzWLr6Z0m4KgV1ZVIjnR6GM9ANEqjZD7XsZEa6JL/7YEgg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.56.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.29", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", - "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", - "dev": true, - "license": "MIT" - }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "license": "MIT", - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@redocly/json-to-json-schema": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@redocly/json-to-json-schema/-/json-to-json-schema-0.0.1.tgz", - "integrity": "sha512-dSMyuNPN2k+tFeNZ0+QJ7S1zDJ0UeNL+lpnPFR9K5avj2V4uG4m6FdjrApQ9Zi35AIocaDp/KGfBD9gR5MLUbQ==", - "license": "SEE LICENSE IN LICENSE" - }, - "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.42.tgz", - "integrity": "sha512-W5ZKF3TP3bOWuBfotAGp+UGjxOkGV7jRmIRbBA7NFjggx7Oi6vOmGDqpHEIX7kDCiry1cnIsWQaxNvWbMdkvzQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.42.tgz", - "integrity": "sha512-abw/wtgJA8OCgaTlL+xJxnN/Z01BwV1rfzIp5Hh9x+IIO6xOBfPsQ0nzi0+rWx3TyZ9FZXyC7bbC+5NpQ9EaXQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-beta.42.tgz", - "integrity": "sha512-Y/UrZIRVr8CvXVEB88t6PeC46r1K9/QdPEo2ASE/b/KBEyXIx+QbM6kv9QfQVWU2Atly2+SVsQzxQsIvuk3lZQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-beta.42.tgz", - "integrity": "sha512-zRM0oOk7BZiy6DoWBvdV4hyEg+j6+WcBZIMHVirMEZRu8hd18kZdJkg+bjVMfCEhwpWeFUfBfZ1qcaZ5UdYzlQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-beta.42.tgz", - "integrity": "sha512-6RjFaC52QNwo7ilU8C5H7swbGlgfTkG9pudXwzr3VYyT18s0C9gLg3mvc7OMPIGqNxnQ0M5lU8j6aQCk2DTRVg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-beta.42.tgz", - "integrity": "sha512-LMYHM5Sf6ROq+VUwHMDVX2IAuEsWTv4SnlFEedBnMGpvRuQ14lCmD4m5Q8sjyAQCgyha9oghdGoK8AEg1sXZKg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-beta.42.tgz", - "integrity": "sha512-/bNTYb9aKNhzdbPn3O4MK2aLv55AlrkUKPE4KNfBYjkoZUfDr4jWp7gsSlvTc5A/99V1RCm9axvt616ZzeXGyA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-beta.42.tgz", - "integrity": "sha512-n/SLa4h342oyeGykZdch7Y3GNCNliRPL4k5wkeZ/5eQZs+c6/ZG1SHCJQoy7bZcmxiMyaXs9HoFmv1PEKrZgWg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-beta.42.tgz", - "integrity": "sha512-4PSd46sFzqpLHSGdaSViAb1mk55sCUMpJg+X8ittXaVocQsV3QLG/uydSH8RyL0ngHX5fy3D70LcCzlB15AgHw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-beta.42.tgz", - "integrity": "sha512-BmWoeJJyeZXmZBcfoxG6J9+rl2G7eO47qdTkAzEegj4n3aC6CBIHOuDcbE8BvhZaEjQR0nh0nJrtEDlt65Q7Sw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-beta.42.tgz", - "integrity": "sha512-2Ft32F7uiDTrGZUKws6CLNTlvTWHC33l4vpXrzUucf9rYtUThAdPCOt89Pmn13tNX6AulxjGEP2R0nZjTSW3eQ==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^1.0.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-beta.42.tgz", - "integrity": "sha512-hC1kShXW/z221eG+WzQMN06KepvPbMBknF0iGR3VMYJLOe9gwnSTfGxFT5hf8XrPv7CEZqTWRd0GQpkSHRbGsw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-win32-ia32-msvc": { - "version": "1.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.0.0-beta.42.tgz", - "integrity": "sha512-AICBYromawouGjj+GS33369E8Vwhy6UwhQEhQ5evfS8jPCsyVvoICJatbDGDGH01dwtVGLD5eDFzPicUOVpe4g==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.42.tgz", - "integrity": "sha512-XpZ0M+tjoEiSc9c+uZR7FCnOI0uxDRNs1elGOMjeB0pUP1QmvVbZGYNsyLbLoP4u7e3VQN8rie1OQ8/mB6rcJg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.42.tgz", - "integrity": "sha512-N7pQzk9CyE7q0bBN/q0J8s6Db279r5kUZc6d7/wWRe9/zXqC52HQovVyu6iXPIDY4BEzzgbVLhVFXrOuGJ22ZQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz", - "integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@scalar/openapi-parser": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@scalar/openapi-parser/-/openapi-parser-0.15.0.tgz", - "integrity": "sha512-49u1sE+P+72nbt/9p7flBS/g7wbapTGAplcQ1FZxa4La56OMuShCl4qSSdw8lPNZjUZNTLcw7ExVOGI9p1kkOA==", - "license": "MIT", - "dependencies": { - "ajv": "^8.17.1", - "ajv-draft-04": "^1.0.0", - "ajv-formats": "^3.0.1", - "jsonpointer": "^5.0.1", - "leven": "^4.0.0", - "yaml": "^2.4.5" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@smithy/types": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.7.0.tgz", - "integrity": "sha512-KM8Or+jCDCrUI3wYYhj7ehrC7aATB1NdJ1aFEE/YLKNLVH257k9RNeOqKdg0JOxjyEpVD7KKsmmob9mRy1Ho2g==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@standard-schema/spec": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", - "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@streamparser/json": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@streamparser/json/-/json-0.0.20.tgz", - "integrity": "sha512-VqAAkydywPpkw63WQhPVKCD3SdwXuihCUVZbbiY3SfSTGQyHmwRoq27y4dmJdZuJwd5JIlQoMPyGvMbUPY0RKQ==", - "license": "MIT" - }, - "node_modules/@svelte-put/shortcut": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@svelte-put/shortcut/-/shortcut-4.1.0.tgz", - "integrity": "sha512-wImNEIkbxAIWFqlfuhcbC+jRPDeRa/uJGIXHMEVVD+jqL9xCwWNnkGQJ6Qb2XVszuRLHlb8SGZDL3Io/h3vs8w==", - "license": "MIT", - "peerDependencies": { - "svelte": "^5.1.0" - } - }, - "node_modules/@sveltejs/acorn-typescript": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.6.tgz", - "integrity": "sha512-4awhxtMh4cx9blePWl10HRHj8Iivtqj+2QdDCSMDzxG+XKa9+VCNupQuCuvzEhYPzZSrX+0gC+0lHA/0fFKKQQ==", - "license": "MIT", - "peerDependencies": { - "acorn": "^8.9.0" - } - }, - "node_modules/@sveltejs/adapter-static": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.10.tgz", - "integrity": "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@sveltejs/kit": "^2.0.0" - } - }, - "node_modules/@sveltejs/kit": { - "version": "2.46.5", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.46.5.tgz", - "integrity": "sha512-7TSvMrCdmig5TMyYDW876C5FljhA0wlGixtvASCiqUqtLfmyEEpaysXjC7GhR5mWcGRrCGF+L2Bl1eEaW1wTCA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@standard-schema/spec": "^1.0.0", - "@sveltejs/acorn-typescript": "^1.0.5", - "@types/cookie": "^0.6.0", - "acorn": "^8.14.1", - "cookie": "^0.6.0", - "devalue": "^5.3.2", - "esm-env": "^1.2.2", - "kleur": "^4.1.5", - "magic-string": "^0.30.5", - "mrmime": "^2.0.0", - "sade": "^1.8.1", - "set-cookie-parser": "^2.6.0", - "sirv": "^3.0.0" - }, - "bin": { - "svelte-kit": "svelte-kit.js" - }, - "engines": { - "node": ">=18.13" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.0.0", - "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0", - "svelte": "^4.0.0 || ^5.0.0-next.0", - "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - } - } - }, - "node_modules/@sveltejs/package": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/@sveltejs/package/-/package-2.5.4.tgz", - "integrity": "sha512-8+1hccAt0M3PPkHVPKH54Wc+cc1PNxRqCrICZiv/hEEto8KwbQVRghxNgTB4htIPyle+4CIB8RayTQH5zRQh9A==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^4.0.3", - "kleur": "^4.1.5", - "sade": "^1.8.1", - "semver": "^7.5.4", - "svelte2tsx": "~0.7.33" - }, - "bin": { - "svelte-package": "svelte-package.js" - }, - "engines": { - "node": "^16.14 || >=18" - }, - "peerDependencies": { - "svelte": "^3.44.0 || ^4.0.0 || ^5.0.0-next.1" - } - }, - "node_modules/@sveltejs/package/node_modules/svelte2tsx": { - "version": "0.7.45", - "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.45.tgz", - "integrity": "sha512-cSci+mYGygYBHIZLHlm/jYlEc1acjAHqaQaDFHdEBpUueM9kSTnPpvPtSl5VkJOU1qSJ7h1K+6F/LIUYiqC8VA==", - "dev": true, - "license": "MIT", - "dependencies": { - "dedent-js": "^1.0.1", - "scule": "^1.3.0" - }, - "peerDependencies": { - "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0", - "typescript": "^4.9.4 || ^5.0.0" - } - }, - "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.1.tgz", - "integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", - "debug": "^4.4.1", - "deepmerge": "^4.3.1", - "magic-string": "^0.30.17", - "vitefu": "^1.1.1" - }, - "engines": { - "node": "^20.19 || ^22.12 || >=24" - }, - "peerDependencies": { - "svelte": "^5.0.0", - "vite": "^6.3.0 || ^7.0.0" - } - }, - "node_modules/@sveltejs/vite-plugin-svelte-inspector": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.1.tgz", - "integrity": "sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.1" - }, - "engines": { - "node": "^20.19 || ^22.12 || >=24" - }, - "peerDependencies": { - "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0", - "svelte": "^5.0.0", - "vite": "^6.3.0 || ^7.0.0" - } - }, - "node_modules/@swc/helpers": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", - "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@tailwindcss/forms": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz", - "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mini-svg-data-uri": "^1.2.3" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" - } - }, - "node_modules/@tailwindcss/typography": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz", - "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "6.0.10" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" - } - }, - "node_modules/@tanstack/svelte-table": { - "name": "tanstack-table-8-svelte-5", - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/tanstack-table-8-svelte-5/-/tanstack-table-8-svelte-5-0.1.2.tgz", - "integrity": "sha512-wMRu7Y709GpRrbPSN6uiYPCsNk5J/ZjvNuHGCbSUNNZEs1u4q09qnoTbY1EcwGAb3RkDEHEyrE9ArJNT4w0HOg==", - "license": "MIT", - "dependencies": { - "@tanstack/table-core": "^8.20.5" - }, - "peerDependencies": { - "svelte": "^5.0.0" - } - }, - "node_modules/@tanstack/table-core": { - "version": "8.21.3", - "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz", - "integrity": "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@tutorlatin/svelte-tiny-virtual-list": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/@tutorlatin/svelte-tiny-virtual-list/-/svelte-tiny-virtual-list-3.0.16.tgz", - "integrity": "sha512-JQSmhRDAFZbq2rTlzn+kFXJayi5VPLxeGjD01ZVyV2ti7PlQE/ov6rQFR1c8s7Y3B1OiTcv3oEWGi3ib69V8eQ==", - "license": "MIT", - "engines": { - "node": ">=20.17.0" - }, - "funding": { - "url": "https://github.com/sponsors/jonasgeiler" - }, - "peerDependencies": { - "svelte": "^5.0.0" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", - "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-array": "*", - "@types/d3-axis": "*", - "@types/d3-brush": "*", - "@types/d3-chord": "*", - "@types/d3-color": "*", - "@types/d3-contour": "*", - "@types/d3-delaunay": "*", - "@types/d3-dispatch": "*", - "@types/d3-drag": "*", - "@types/d3-dsv": "*", - "@types/d3-ease": "*", - "@types/d3-fetch": "*", - "@types/d3-force": "*", - "@types/d3-format": "*", - "@types/d3-geo": "*", - "@types/d3-hierarchy": "*", - "@types/d3-interpolate": "*", - "@types/d3-path": "*", - "@types/d3-polygon": "*", - "@types/d3-quadtree": "*", - "@types/d3-random": "*", - "@types/d3-scale": "*", - "@types/d3-scale-chromatic": "*", - "@types/d3-selection": "*", - "@types/d3-shape": "*", - "@types/d3-time": "*", - "@types/d3-time-format": "*", - "@types/d3-timer": "*", - "@types/d3-transition": "*", - "@types/d3-zoom": "*" - } - }, - "node_modules/@types/d3-array": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", - "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-axis": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", - "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-brush": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", - "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-chord": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", - "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", - "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", - "license": "MIT" - }, - "node_modules/@types/d3-contour": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", - "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-array": "*", - "@types/geojson": "*" - } - }, - "node_modules/@types/d3-delaunay": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", - "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-dispatch": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz", - "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-drag": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", - "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", - "license": "MIT", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-dsv": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", - "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-ease": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", - "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-fetch": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", - "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-dsv": "*" - } - }, - "node_modules/@types/d3-force": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", - "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-format": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", - "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/geojson": "*" - } - }, - "node_modules/@types/d3-hierarchy": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", - "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-interpolate": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", - "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", - "license": "MIT", - "dependencies": { - "@types/d3-color": "*" - } - }, - "node_modules/@types/d3-path": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", - "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-polygon": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", - "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-quadtree": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", - "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-random": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", - "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-scale": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", - "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-time": "*" - } - }, - "node_modules/@types/d3-scale-chromatic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", - "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-selection": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", - "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", - "license": "MIT" - }, - "node_modules/@types/d3-shape": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", - "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/d3-path": "*" - } - }, - "node_modules/@types/d3-time": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", - "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-time-format": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", - "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-timer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", - "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-transition": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", - "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", - "license": "MIT", - "dependencies": { - "@types/d3-selection": "*" - } - }, - "node_modules/@types/d3-zoom": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", - "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", - "license": "MIT", - "dependencies": { - "@types/d3-interpolate": "*", - "@types/d3-selection": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/diff": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/diff/-/diff-7.0.2.tgz", - "integrity": "sha512-JSWRMozjFKsGlEjiiKajUjIJVKuKdE3oVy2DNtK+fUo8q82nhFZ2CPQwicAIkXrofahDXrWJ7mjelvZphMS98Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "license": "MIT" - }, - "node_modules/@types/geojson": { - "version": "7946.0.16", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", - "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/hammerjs": { - "version": "2.0.46", - "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.46.tgz", - "integrity": "sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==", - "license": "MIT" - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "license": "MIT" - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "license": "MIT", - "optional": true - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "license": "MIT" - }, - "node_modules/@types/vscode": { - "version": "1.105.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.105.0.tgz", - "integrity": "sha512-Lotk3CTFlGZN8ray4VxJE7axIyLZZETQJVWi/lYoUVQuqfRxlQhVOfoejsD2V3dVXPSbS15ov5ZyowMAzgUqcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "license": "ISC" - }, - "node_modules/@vscode/iconv-lite-umd": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@vscode/iconv-lite-umd/-/iconv-lite-umd-0.7.0.tgz", - "integrity": "sha512-bRRFxLfg5dtAyl5XyiVWz/ZBPahpOpPrNYnnHpOpUZvam4tKH35wdhP4Kj6PbM0+KdliOsPzbGWpkxcdpNB/sg==", - "license": "MIT" - }, - "node_modules/@windmill-labs/svelte-dnd-action": { - "version": "0.9.48", - "resolved": "https://registry.npmjs.org/@windmill-labs/svelte-dnd-action/-/svelte-dnd-action-0.9.48.tgz", - "integrity": "sha512-A6pWayH3nOi79DZohTscGj5t2PuNtHlKM5WIAj9WlVDx5pS1A+MsyfuNZi8oCpj2590wFmQl+58G4y4xZqDa1Q==", - "license": "MIT", - "peerDependencies": { - "svelte": ">=3.23.0 || ^5.0.0-next.0" - } - }, - "node_modules/@xterm/addon-fit": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@xterm/addon-fit/-/addon-fit-0.10.0.tgz", - "integrity": "sha512-UFYkDm4HUahf2lnEyHvio51TNGiLK66mqP2JoATy7hRZeXaGMRDr00JiSF7m63vR5WKATF605yEggJKsw0JpMQ==", - "license": "MIT", - "peerDependencies": { - "@xterm/xterm": "^5.0.0" - } - }, - "node_modules/@xterm/xterm": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-5.5.0.tgz", - "integrity": "sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==", - "license": "MIT", - "peer": true - }, - "node_modules/@xyflow/svelte": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@xyflow/svelte/-/svelte-1.3.1.tgz", - "integrity": "sha512-aLr2v0/nr+zER5+dCzEmR5qCu9l7FCKZwYiRvCX15U2FVIdO2M522pyPEr7Siwq6EEx0QjECACeN+rLZCDSzeA==", - "license": "MIT", - "dependencies": { - "@svelte-put/shortcut": "^4.1.0", - "@xyflow/system": "0.0.70" - }, - "peerDependencies": { - "svelte": "^5.25.0" - } - }, - "node_modules/@xyflow/system": { - "version": "0.0.70", - "resolved": "https://registry.npmjs.org/@xyflow/system/-/system-0.0.70.tgz", - "integrity": "sha512-PpC//u9zxdjj0tfTSmZrg3+sRbTz6kop/Amky44U2Dl51sxzDTIUfXMwETOYpmr2dqICWXBIJwXL2a9QWtX2XA==", - "license": "MIT", - "dependencies": { - "@types/d3-drag": "^3.0.7", - "@types/d3-interpolate": "^3.0.4", - "@types/d3-selection": "^3.0.10", - "@types/d3-transition": "^3.0.8", - "@types/d3-zoom": "^3.0.8", - "d3-drag": "^3.0.0", - "d3-interpolate": "^3.0.1", - "d3-selection": "^3.0.0", - "d3-zoom": "^3.0.0" - } - }, - "node_modules/@zerodevx/svelte-toast": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/@zerodevx/svelte-toast/-/svelte-toast-0.9.6.tgz", - "integrity": "sha512-nHlTrCjverlPK9yukK6fqbG3e/R+f10ldrc4nJHOe2qNDScuPTuYVSFEk2dDDtzWAwTN5pmdEXgA3M2RbT8jiw==", - "dev": true, - "license": "ISC", - "peerDependencies": { - "svelte": "^3.57.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "license": "MIT", - "optional": true, - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "license": "MIT", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ag-charts-community": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/ag-charts-community/-/ag-charts-community-9.3.2.tgz", - "integrity": "sha512-jw2llxTYzGAZ24m7eQsKS24BnJBhspZKsL03DbqH0wxLepbEcC3eeWICe+02TBQCbFVsWmSsYukjzQg3FkVWRw==", - "license": "MIT" - }, - "node_modules/ag-charts-enterprise": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/ag-charts-enterprise/-/ag-charts-enterprise-9.3.2.tgz", - "integrity": "sha512-wRsEuhpQn7CwDSOfZuxEDCpgznzOgQyBjVelO30x3r5JSBKNPtfOL+r9huADdlNmPvHlHwa+YeaYh7wtP92CbA==", - "license": "Commercial", - "dependencies": { - "ag-charts-community": "9.3.2" - } - }, - "node_modules/ag-grid-community": { - "version": "31.3.4", - "resolved": "https://registry.npmjs.org/ag-grid-community/-/ag-grid-community-31.3.4.tgz", - "integrity": "sha512-jOxQO86C6eLnk1GdP24HB6aqaouFzMWizgfUwNY5MnetiWzz9ZaAmOGSnW/XBvdjXvC5Fpk3gSbvVKKQ7h9kBw==", - "license": "MIT" - }, - "node_modules/ag-grid-enterprise": { - "version": "31.3.4", - "resolved": "https://registry.npmjs.org/ag-grid-enterprise/-/ag-grid-enterprise-31.3.4.tgz", - "integrity": "sha512-kreGRsFjz41APXXchLcQFtginnrmIGQYH48p7ydz33x8v+aja06HS5yEM6NP8j+VVHX43LeXnsl5Y4TLRgSoeg==", - "license": "Commercial", - "dependencies": { - "ag-charts-community": "9.3.2", - "ag-grid-community": "31.3.4" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-draft-04": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", - "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", - "license": "MIT", - "peerDependencies": { - "ajv": "^8.5.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/amator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/amator/-/amator-1.1.0.tgz", - "integrity": "sha512-V5+aH8pe+Z3u/UG3L3pG3BaFQGXAyXHVQDroRwjPHdh08bcUEchAVsU1MCuJSCaU5o60wTK6KaE6te5memzgYw==", - "license": "MIT", - "dependencies": { - "bezier-easing": "^2.0.3" - } - }, - "node_modules/ansi_up": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/ansi_up/-/ansi_up-6.0.6.tgz", - "integrity": "sha512-yIa1x3Ecf8jWP4UWEunNjqNX6gzE4vg2gGz+xqRGY+TBSucnYp6RRdPV4brmtg6bQ1ljD48mZ5iGSEj7QEpRKA==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ansis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", - "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "license": "MIT", - "optional": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/axios": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", - "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/baseline-browser-mapping": { - "version": "2.8.16", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.16.tgz", - "integrity": "sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, - "node_modules/bezier-easing": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bezier-easing/-/bezier-easing-2.1.0.tgz", - "integrity": "sha512-gbIqZ/eslnUFC1tjEvtz0sgx+xTK20wDnYMIA27VA04R7w6xxXQPZDbibjA9DTWZRA2CXtwHykkVzlCaAJAZig==", - "license": "MIT" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "license": "MIT", - "optional": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/brace-expansion/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-or-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-3.0.0.tgz", - "integrity": "sha512-iczIdVJzGEYhP5DqQxYM9Hh7Ztpqqi+CXZpSmX8ALFs9ecXkQIeqRyM6TfxEfMVpwhl3dSuDvxdzzo9sUOIVBQ==", - "license": "MIT" - }, - "node_modules/browserslist": { - "version": "4.26.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", - "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "baseline-browser-mapping": "^2.8.9", - "caniuse-lite": "^1.0.30001746", - "electron-to-chromium": "^1.5.227", - "node-releases": "^2.0.21", - "update-browserslist-db": "^1.1.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "optional": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/c12": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/c12/-/c12-1.10.0.tgz", - "integrity": "sha512-0SsG7UDhoRWcuSvKWHaXmu5uNjDCDN3nkQLRL4Q42IlFy+ze58FcCoI3uPwINXinkz7ZinbhEgyzYFw9u9ZV8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^3.6.0", - "confbox": "^0.1.3", - "defu": "^6.1.4", - "dotenv": "^16.4.5", - "giget": "^1.2.1", - "jiti": "^1.21.0", - "mlly": "^1.6.1", - "ohash": "^1.1.3", - "pathe": "^1.1.2", - "perfect-debounce": "^1.0.0", - "pkg-types": "^1.0.3", - "rc9": "^2.1.1" - } - }, - "node_modules/c12/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/c12/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/c12/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", - "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys/node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001750", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001750.tgz", - "integrity": "sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/canvas": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-3.2.0.tgz", - "integrity": "sha512-jk0GxrLtUEmW/TmFsk2WghvgHe8B0pxGilqCL21y8lHkPUGa6FTsnCNtHPOzT8O3y+N+m3espawV80bbBlgfTA==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "node-addon-api": "^7.0.0", - "prebuild-install": "^7.1.3" - }, - "engines": { - "node": "^18.12.0 || >= 20.9.0" - } - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chart.js": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz", - "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@kurkle/color": "^0.3.0" - }, - "engines": { - "pnpm": ">=8" - } - }, - "node_modules/chartjs-adapter-date-fns": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chartjs-adapter-date-fns/-/chartjs-adapter-date-fns-3.0.0.tgz", - "integrity": "sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg==", - "license": "MIT", - "peerDependencies": { - "chart.js": ">=2.8.0", - "date-fns": ">=2.0.0" - } - }, - "node_modules/chartjs-plugin-zoom": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/chartjs-plugin-zoom/-/chartjs-plugin-zoom-2.2.0.tgz", - "integrity": "sha512-in6kcdiTlP6npIVLMd4zXZ08PDUXC52gZ4FAy5oyjk1zX3gKarXMAof7B9eFiisf9WOC3bh2saHg+J5WtLXZeA==", - "license": "MIT", - "dependencies": { - "@types/hammerjs": "^2.0.45", - "hammerjs": "^2.0.8" - }, - "peerDependencies": { - "chart.js": ">=3.2.0" - } - }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/citty": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", - "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "consola": "^3.2.3" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/collection-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collection-utils/-/collection-utils-1.0.1.tgz", - "integrity": "sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg==", - "license": "Apache-2.0" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz", - "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/consola": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cross-fetch": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", - "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.7.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-declaration-sorter": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz", - "integrity": "sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-functions-list": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", - "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12 || >=16" - } - }, - "node_modules/css-select": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/csscolorparser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", - "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==", - "license": "MIT" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssnano-preset-default": "^6.1.2", - "lilconfig": "^3.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-default": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^4.0.2", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.5", - "postcss-merge-rules": "^6.1.1", - "postcss-minify-font-values": "^6.1.0", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.4", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.4" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "dev": true, - "license": "ISC", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dag": { - "version": "0.11.5", - "resolved": "https://registry.npmjs.org/d3-dag/-/d3-dag-0.11.5.tgz", - "integrity": "sha512-sNHvYqjzDlvV2fyEkoOCSuLs2GeWliIg7pJcAiKXgtUSxl0kIX0C2q1J8JzzA9CQWptKxYtzxFCXiKptTW8qsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "d3-array": "^3.1.6", - "fastpriorityqueue": "0.7.2", - "javascript-lp-solver": "0.4.24", - "quadprog": "^1.6.1" - } - }, - "node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "license": "ISC", - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } - }, - "node_modules/d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, - "node_modules/debounce-promise": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/debounce-promise/-/debounce-promise-3.1.2.tgz", - "integrity": "sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "license": "MIT", - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", - "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dedent-js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", - "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-equal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", - "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", - "license": "MIT", - "dependencies": { - "is-arguments": "^1.1.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.5.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "license": "MIT", - "optional": true, - "dependencies": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", - "dev": true, - "license": "MIT" - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/destr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", - "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "devOptional": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/devalue": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.3.2.tgz", - "integrity": "sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==", - "dev": true, - "license": "MIT" - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/diff": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", - "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dompurify": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.7.tgz", - "integrity": "sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==", - "license": "(MPL-2.0 OR Apache-2.0)", - "optionalDependencies": { - "@types/trusted-types": "^2.0.7" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/driver.js": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/driver.js/-/driver.js-1.3.6.tgz", - "integrity": "sha512-g2nNuu+tWmPpuoyk3ffpT9vKhjPz4NrJzq6mkRDZIwXCrFhrKdDJ9TX5tJOBpvCTBrBYjgRQ17XlcQB15q4gMg==", - "license": "MIT" - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/earcut": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", - "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", - "license": "ISC" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/easy-reactive": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/easy-reactive/-/easy-reactive-1.0.4.tgz", - "integrity": "sha512-dFVouegPctMf6XT5si+sRByBWUQE30n99TW0Y45Y7mccmNsbSl4uXA2sBGI8zCDZqXjhb8ouA3wVVhSSGpXk5Q==", - "license": "Apache-2.0", - "dependencies": { - "lodash.clonedeep": "^4.5.0", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.235", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.235.tgz", - "integrity": "sha512-i/7ntLFwOdoHY7sgjlTIDo4Sl8EdoTjWIaKinYOVfC6bOp71bmwenyZthWHcasxgHDNWbWxvG9M3Ia116zIaYQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "license": "MIT", - "optional": true, - "dependencies": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "license": "MIT", - "optional": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "license": "MIT", - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", - "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-compat-utils": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", - "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz", - "integrity": "sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-svelte": { - "version": "2.46.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.46.1.tgz", - "integrity": "sha512-7xYr2o4NID/f9OEYMqxsEQsCsj4KaMy4q5sANaKkAb6/QeCjYFxRmDm2S3YC3A3pl1kyPZ/syOx/i7LcWYSbIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@jridgewell/sourcemap-codec": "^1.4.15", - "eslint-compat-utils": "^0.5.1", - "esutils": "^2.0.3", - "known-css-properties": "^0.35.0", - "postcss": "^8.4.38", - "postcss-load-config": "^3.1.4", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.1.0", - "semver": "^7.6.2", - "svelte-eslint-parser": "^0.43.0" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0-0 || ^9.0.0-0", - "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "svelte": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-svelte/node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-svelte/node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-svelte/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-svelte/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/esm-env": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", - "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", - "license": "MIT" - }, - "node_modules/esm-env-robust": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/esm-env-robust/-/esm-env-robust-0.0.3.tgz", - "integrity": "sha512-90Gnuw2DALOqlL1581VxP3GHPUNHX9U+fQ+8FNcTTFClhY5gEggAAnJ3q1b2Oq23knRsjv8YpNeMRPaMLUymOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "esm-env": "^1.0.0" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrap": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.1.0.tgz", - "integrity": "sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter3": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", - "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "license": "(MIT OR WTFPL)", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", - "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==", - "license": "Apache-2.0" - }, - "node_modules/fast-equals": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.3.2.tgz", - "integrity": "sha512-6rxyATwPCkaFIL3JLqw8qXqMpIZ942pTX/tbQFkRsDGblS8tNGtlUauA/+mt6RUfqn/4MoEr+WDkYoIQbibWuQ==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fastpriorityqueue": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/fastpriorityqueue/-/fastpriorityqueue-0.7.2.tgz", - "integrity": "sha512-5DtIKh6vtOmEGkYdEPNNb+mxeYCnBiKbK3s4gq52l6cX8I5QaTDWWw0Wx/iYo80fVOblSycHu1/iJeqeNxG8Jw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/focus-trap": { - "version": "7.6.5", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.5.tgz", - "integrity": "sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tabbable": "^6.2.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "license": "MIT", - "optional": true - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/geotiff": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.1.3.tgz", - "integrity": "sha512-PT6uoF5a1+kbC3tHmZSUsLHBp2QJlHasxxxxPW47QIY1VBKpFB+FcDvX+MxER6UzgLQZ0xDzJ9s48B9JbOCTqA==", - "license": "MIT", - "dependencies": { - "@petamoriken/float16": "^3.4.7", - "lerc": "^3.0.0", - "pako": "^2.0.4", - "parse-headers": "^2.0.2", - "quick-lru": "^6.1.1", - "web-worker": "^1.2.0", - "xml-utils": "^1.0.2", - "zstddec": "^0.1.0" - }, - "engines": { - "node": ">=10.19" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/giget": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.5.tgz", - "integrity": "sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "citty": "^0.1.6", - "consola": "^3.4.0", - "defu": "^6.1.4", - "node-fetch-native": "^1.6.6", - "nypm": "^0.5.4", - "pathe": "^2.0.3", - "tar": "^6.2.1" - }, - "bin": { - "giget": "dist/cli.mjs" - } - }, - "node_modules/giget/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/giget/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/giget/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/giget/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/giget/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/giget/node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/giget/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "license": "MIT", - "optional": true - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true, - "license": "MIT" - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/graphql": { - "version": "16.11.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz", - "integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" - } - }, - "node_modules/graphql-language-service": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/graphql-language-service/-/graphql-language-service-5.5.0.tgz", - "integrity": "sha512-9EvWrLLkF6Y5e29/2cmFoAO6hBPPAZlCyjznmpR11iFtRydfkss+9m6x+htA8h7YznGam+TtJwS6JuwoWWgb2Q==", - "license": "MIT", - "dependencies": { - "debounce-promise": "^3.1.2", - "nullthrows": "^1.0.0", - "vscode-languageserver-types": "^3.17.1" - }, - "bin": { - "graphql": "dist/temp-bin.js" - }, - "peerDependencies": { - "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/hammerjs": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", - "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-sum": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", - "license": "MIT" - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hast-util-from-html": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", - "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "devlop": "^1.1.0", - "hast-util-from-parse5": "^8.0.0", - "parse5": "^7.0.0", - "vfile": "^6.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", - "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^9.0.0", - "property-information": "^7.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-is-element": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", - "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", - "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-from-parse5": "^8.0.0", - "hast-util-to-parse5": "^8.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "parse5": "^7.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5/node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hastscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", - "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/highlight.js": { - "version": "11.11.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", - "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/idb": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/idb/-/idb-8.0.3.tgz", - "integrity": "sha512-LtwtVyVYO5BqRvcsKuB2iUMnHwPVByPCXFXOpuU96IZPPoPN6xjOGxZQ74pgSVVLQWtUOYgyeL4GE98BY5D3wg==", - "license": "ISC" - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "license": "MIT", - "optional": true - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "devOptional": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "devOptional": true, - "license": "ISC" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-reference": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", - "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.6" - } - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/isomorphic.js": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz", - "integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==", - "license": "MIT", - "funding": { - "type": "GitHub Sponsors ❤", - "url": "https://github.com/sponsors/dmonad" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/javascript-lp-solver": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/javascript-lp-solver/-/javascript-lp-solver-0.4.24.tgz", - "integrity": "sha512-5edoDKnMrt/u3M6GnZKDDIPxOyFOg+WrwDv8mjNiMC2DePhy2H9/FFQgf4ggywaXT1utvkxusJcjQUER72cZmA==", - "dev": true, - "license": "Unlicense" - }, - "node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-base64": { - "version": "3.7.8", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz", - "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", - "license": "BSD-3-Clause" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jschardet": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-3.1.4.tgz", - "integrity": "sha512-/kmVISmrwVwtyYU40iQUOp3SUPk2dhNCMsZBQX0R1/jZ8maaXJ/oZIzUOiyOqcgtLnETFKYChbJ5iDC/eWmFHg==", - "license": "LGPL-2.1+", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stringify-pretty-compact": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz", - "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==", - "license": "MIT" - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/known-css-properties": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", - "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", - "dev": true, - "license": "MIT" - }, - "node_modules/lerc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz", - "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==", - "license": "Apache-2.0" - }, - "node_modules/level": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz", - "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==", - "license": "MIT", - "optional": true, - "dependencies": { - "level-js": "^5.0.0", - "level-packager": "^5.1.0", - "leveldown": "^5.4.0" - }, - "engines": { - "node": ">=8.6.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/level" - } - }, - "node_modules/level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "deprecated": "Superseded by level-transcoder (https://github.com/Level/community#faq)", - "license": "MIT", - "optional": true, - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "license": "MIT", - "optional": true, - "dependencies": { - "errno": "~0.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "license": "MIT", - "optional": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-js": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz", - "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==", - "deprecated": "Superseded by browser-level (https://github.com/Level/community#faq)", - "license": "MIT", - "optional": true, - "dependencies": { - "abstract-leveldown": "~6.2.3", - "buffer": "^5.5.0", - "inherits": "^2.0.3", - "ltgt": "^2.1.2" - } - }, - "node_modules/level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "license": "MIT", - "optional": true, - "dependencies": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "license": "MIT", - "optional": true, - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/leveldown": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", - "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", - "deprecated": "Superseded by classic-level (https://github.com/Level/community#faq)", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "abstract-leveldown": "~6.2.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "~4.1.0" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "license": "MIT", - "optional": true, - "dependencies": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-4.1.0.tgz", - "integrity": "sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lib0": { - "version": "0.2.114", - "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.114.tgz", - "integrity": "sha512-gcxmNFzA4hv8UYi8j43uPlQ7CGcyMJ2KQb5kZASw6SnAKAf10hK12i2fjrS3Cl/ugZa5Ui6WwIu1/6MIXiHttQ==", - "license": "MIT", - "dependencies": { - "isomorphic.js": "^0.2.4" - }, - "bin": { - "0ecdsa-generate-keypair": "bin/0ecdsa-generate-keypair.js", - "0gentesthtml": "bin/gentesthtml.js", - "0serve": "bin/0serve.js" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "type": "GitHub Sponsors ❤", - "url": "https://github.com/sponsors/dmonad" - } - }, - "node_modules/lightningcss": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", - "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.30.2", - "lightningcss-darwin-arm64": "1.30.2", - "lightningcss-darwin-x64": "1.30.2", - "lightningcss-freebsd-x64": "1.30.2", - "lightningcss-linux-arm-gnueabihf": "1.30.2", - "lightningcss-linux-arm64-gnu": "1.30.2", - "lightningcss-linux-arm64-musl": "1.30.2", - "lightningcss-linux-x64-gnu": "1.30.2", - "lightningcss-linux-x64-musl": "1.30.2", - "lightningcss-win32-arm64-msvc": "1.30.2", - "lightningcss-win32-x64-msvc": "1.30.2" - } - }, - "node_modules/lightningcss-android-arm64": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", - "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", - "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", - "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", - "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", - "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", - "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", - "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", - "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", - "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", - "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", - "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/locate-character": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT" - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", - "license": "MIT" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "license": "MIT", - "optional": true - }, - "node_modules/lucide-svelte": { - "version": "0.540.0", - "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.540.0.tgz", - "integrity": "sha512-jedJgKrrsT1B6mAMHGMmk6dIZKhorLq4KO7v+j7hYfeGR0LRe3W+SvwpWF1E6WT2/AY9IAm8KT/G+Nzf+0lW3g==", - "license": "ISC", - "peerDependencies": { - "svelte": "^3 || ^4 || ^5.0.0-next.42" - } - }, - "node_modules/magic-string": { - "version": "0.30.19", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", - "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mapbox-to-css-font": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/mapbox-to-css-font/-/mapbox-to-css-font-2.4.5.tgz", - "integrity": "sha512-VJ6nB8emkO9VODI0Fk+TQ/0zKBTqmf/Pkt8Xv0kHstoc0iXRajA00DAid4Kc3K5xeFIOoiZrVxijEzj0GLVO2w==", - "license": "BSD-2-Clause" - }, - "node_modules/markdown-table": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/marked": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", - "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/meow": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromark": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mini-svg-data-uri": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", - "dev": true, - "license": "MIT", - "bin": { - "mini-svg-data-uri": "cli.js" - } - }, - "node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "license": "ISC", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minizlib": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", - "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "license": "MIT", - "optional": true - }, - "node_modules/mlly": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", - "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.15.0", - "pathe": "^2.0.3", - "pkg-types": "^1.3.1", - "ufo": "^1.6.1" - } - }, - "node_modules/mlly/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/monaco-editor": { - "name": "@codingame/monaco-vscode-editor-api", - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-editor-api/-/monaco-vscode-editor-api-21.6.0.tgz", - "integrity": "sha512-YTxKRHe9d4TvyEzWIqLpJXLyZyO4xFlLgrkgHoWBpomm6gIuwaRJJRpapBZf24oG8AhkniZSPg2iv/84M+ho6g==", - "license": "MIT", - "peer": true, - "dependencies": { - "@codingame/monaco-vscode-5452e2b7-9081-5f95-839b-4ab3544ce28f-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0" - } - }, - "node_modules/monaco-graphql": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/monaco-graphql/-/monaco-graphql-1.6.0.tgz", - "integrity": "sha512-KFANLCtgsaHhLAqxiIbwjGwjsO19j1vQhw1iSgaewxr1/RfUEs5FBoUVfq3JITrpgLjBahfcgIWlB0mdgb9RgA==", - "license": "MIT", - "dependencies": { - "graphql-language-service": "^5.3.0", - "picomatch-browser": "^2.2.6" - }, - "peerDependencies": { - "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0-alpha.2", - "monaco-editor": ">= 0.20.0 < 1", - "prettier": "^2.8.0 || ^3.0.0" - } - }, - "node_modules/monaco-languageclient": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/monaco-languageclient/-/monaco-languageclient-10.1.0.tgz", - "integrity": "sha512-aWHi84S9MKnkppZoNOCL7bRU3gY1xbkjExMOjp8EQtKe0o+gsQcmigCymzIc1C5XFCU395ENG5AKWeseRXjQsQ==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-api": "^21.3.2", - "@codingame/monaco-vscode-configuration-service-override": "^21.3.2", - "@codingame/monaco-vscode-editor-api": "^21.3.2", - "@codingame/monaco-vscode-editor-service-override": "^21.3.2", - "@codingame/monaco-vscode-extension-api": "^21.3.2", - "@codingame/monaco-vscode-extensions-service-override": "^21.3.2", - "@codingame/monaco-vscode-language-pack-cs": "^21.3.2", - "@codingame/monaco-vscode-language-pack-de": "^21.3.2", - "@codingame/monaco-vscode-language-pack-es": "^21.3.2", - "@codingame/monaco-vscode-language-pack-fr": "^21.3.2", - "@codingame/monaco-vscode-language-pack-it": "^21.3.2", - "@codingame/monaco-vscode-language-pack-ja": "^21.3.2", - "@codingame/monaco-vscode-language-pack-ko": "^21.3.2", - "@codingame/monaco-vscode-language-pack-pl": "^21.3.2", - "@codingame/monaco-vscode-language-pack-pt-br": "^21.3.2", - "@codingame/monaco-vscode-language-pack-qps-ploc": "^21.3.2", - "@codingame/monaco-vscode-language-pack-ru": "^21.3.2", - "@codingame/monaco-vscode-language-pack-tr": "^21.3.2", - "@codingame/monaco-vscode-language-pack-zh-hans": "^21.3.2", - "@codingame/monaco-vscode-language-pack-zh-hant": "^21.3.2", - "@codingame/monaco-vscode-languages-service-override": "^21.3.2", - "@codingame/monaco-vscode-localization-service-override": "^21.3.2", - "@codingame/monaco-vscode-log-service-override": "^21.3.2", - "@codingame/monaco-vscode-model-service-override": "^21.3.2", - "@codingame/monaco-vscode-monarch-service-override": "^21.3.2", - "@codingame/monaco-vscode-textmate-service-override": "^21.3.2", - "@codingame/monaco-vscode-theme-defaults-default-extension": "^21.3.2", - "@codingame/monaco-vscode-theme-service-override": "^21.3.2", - "@codingame/monaco-vscode-views-service-override": "^21.3.2", - "@codingame/monaco-vscode-workbench-service-override": "^21.3.2", - "vscode-languageclient": "~9.0.1", - "vscode-languageserver-protocol": "~3.17.5", - "vscode-ws-jsonrpc": "~3.5.0" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/monaco-vim": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/monaco-vim/-/monaco-vim-0.4.2.tgz", - "integrity": "sha512-rdbQC3O2rmpwX2Orzig/6gZjZfH7q7TIeB+uEl49sa+QyNm3jCKJOw5mwxBdFzTqbrPD+URfg6A2lEkuL5kymw==", - "license": "MIT", - "peerDependencies": { - "monaco-editor": "*" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "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" - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz", - "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, - "node_modules/napi-build-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", - "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", - "license": "MIT", - "optional": true - }, - "node_modules/napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "license": "MIT", - "optional": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true, - "license": "MIT" - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "license": "MIT" - }, - "node_modules/ngraph.events": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-1.4.0.tgz", - "integrity": "sha512-NeDGI4DSyjBNBRtA86222JoYietsmCXbs8CEB0dZ51Xeh4lhVl1y3wpWLumczvnha8sFQIW4E0vvVWwgmX2mGw==", - "license": "BSD-3-Clause" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-abi": { - "version": "3.78.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.78.0.tgz", - "integrity": "sha512-E2wEyrgX/CqvicaQYU3Ze1PFGjc4QYPGsjUrlYkqAE0WjHEZwgOsGMPMzkMse4LjJbDmaEuDX3CM036j5K2DSQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "license": "MIT", - "optional": true - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch-native": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", - "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-gyp-build": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", - "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", - "license": "MIT", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-releases": { - "version": "2.0.23", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.23.tgz", - "integrity": "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "license": "MIT" - }, - "node_modules/nypm": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.5.4.tgz", - "integrity": "sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "citty": "^0.1.6", - "consola": "^3.4.0", - "pathe": "^2.0.3", - "pkg-types": "^1.3.1", - "tinyexec": "^0.3.2", - "ufo": "^1.5.4" - }, - "bin": { - "nypm": "dist/cli.mjs" - }, - "engines": { - "node": "^14.16.0 || >=16.10.0" - } - }, - "node_modules/nypm/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ohash": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.6.tgz", - "integrity": "sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg==", - "dev": true, - "license": "MIT" - }, - "node_modules/ol": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/ol/-/ol-7.5.2.tgz", - "integrity": "sha512-HJbb3CxXrksM6ct367LsP3N+uh+iBBMdP3DeGGipdV9YAYTP0vTJzqGnoqQ6C2IW4qf8krw9yuyQbc9fjOIaOQ==", - "license": "BSD-2-Clause", - "dependencies": { - "earcut": "^2.2.3", - "geotiff": "^2.0.7", - "ol-mapbox-style": "^10.1.0", - "pbf": "3.2.1", - "rbush": "^3.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/openlayers" - } - }, - "node_modules/ol-mapbox-style": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/ol-mapbox-style/-/ol-mapbox-style-10.7.0.tgz", - "integrity": "sha512-S/UdYBuOjrotcR95Iq9AejGYbifKeZE85D9VtH11ryJLQPTZXZSW1J5bIXcr4AlAH6tyjPPHTK34AdkwB32Myw==", - "license": "BSD-2-Clause", - "dependencies": { - "@mapbox/mapbox-gl-style-spec": "^13.23.1", - "mapbox-to-css-font": "^2.4.1", - "ol": "^7.3.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/openai": { - "version": "5.23.2", - "resolved": "https://registry.npmjs.org/openai/-/openai-5.23.2.tgz", - "integrity": "sha512-MQBzmTulj+MM5O8SKEk/gL8a7s5mktS9zUtAkU257WjvobGc9nKcBuVwjyEEcb9SI8a8Y2G/mzn3vm9n1Jlleg==", - "license": "Apache-2.0", - "bin": { - "openai": "bin/cli" - }, - "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" - }, - "peerDependenciesMeta": { - "ws": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/openapi-types": { - "version": "12.1.3", - "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", - "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", - "license": "MIT" - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", - "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/pako": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", - "license": "(MIT AND Zlib)" - }, - "node_modules/panzoom": { - "version": "9.4.3", - "resolved": "https://registry.npmjs.org/panzoom/-/panzoom-9.4.3.tgz", - "integrity": "sha512-xaxCpElcRbQsUtIdwlrZA90P90+BHip4Vda2BC8MEb4tkI05PmR6cKECdqUCZ85ZvBHjpI9htJrZBxV5Gp/q/w==", - "license": "MIT", - "dependencies": { - "amator": "^1.1.0", - "ngraph.events": "^1.2.2", - "wheel": "^1.0.0" - } - }, - "node_modules/parchment": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", - "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==", - "license": "BSD-3-Clause" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-headers": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.6.tgz", - "integrity": "sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==", - "license": "MIT" - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path2d": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/path2d/-/path2d-0.2.2.tgz", - "integrity": "sha512-+vnG6S4dYcYxZd+CZxzXCNKdELYZSKfohrk98yajCo1PtRoDgCTrrwOvK1GT0UoAdVszagDVllQc0U1vaX4NUQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pbf": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", - "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", - "license": "BSD-3-Clause", - "dependencies": { - "ieee754": "^1.1.12", - "resolve-protobuf-schema": "^2.1.0" - }, - "bin": { - "pbf": "bin/pbf" - } - }, - "node_modules/pdfjs-dist": { - "version": "4.8.69", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.8.69.tgz", - "integrity": "sha512-IHZsA4T7YElCKNNXtiLgqScw4zPd3pG9do8UrznC757gMd7UPeHSL2qwNNMJo4r79fl8oj1Xx+1nh2YkzdMpLQ==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "canvas": "^3.0.0-rc2", - "path2d": "^0.2.1" - } - }, - "node_modules/perfect-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", - "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/picomatch-browser": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/picomatch-browser/-/picomatch-browser-2.2.6.tgz", - "integrity": "sha512-0ypsOQt9D4e3hziV8O4elD9uN0z/jtUEfxVRtNaAAtXIyUx9m/SzlO020i8YNL2aL/E6blOvvHQcin6HZlFy/w==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" - } - }, - "node_modules/pkg-types/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/playwright": { - "version": "1.56.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.0.tgz", - "integrity": "sha512-X5Q1b8lOdWIE4KAoHpW3SE8HvUB+ZZsUoN64ZhjnN8dOb1UpujxBtENGiZFE+9F/yhzJwYa+ca3u43FeLbboHA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.56.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.56.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.0.tgz", - "integrity": "sha512-1SXl7pMfemAMSDn5rkPeZljxOCYAmQnYLBTExuh6E8USHXGSX3dx6lYZN/xPpTz1vimXmPA9CDnILvmJaB8aSQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/playwright/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-calc/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", - "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-merge-longhand": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-rules": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-nested/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-ordered-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", - "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.3.3" - } - }, - "node_modules/postcss-scss": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", - "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-scss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.4.29" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" - }, - "engines": { - "node": "^14 || ^16 || >= 18" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-unique-selectors/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/prebuild-install": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", - "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", - "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^2.0.0", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", - "license": "MIT", - "peer": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-plugin-svelte": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.4.0.tgz", - "integrity": "sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "prettier": "^3.0.0", - "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/property-information": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", - "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/protocol-buffers-schema": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", - "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==", - "license": "MIT" - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "license": "MIT", - "optional": true - }, - "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", - "license": "MIT", - "optional": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/quadprog": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/quadprog/-/quadprog-1.6.1.tgz", - "integrity": "sha512-fN5Jkcjlln/b3pJkseDKREf89JkKIyu6cKIVXisgL6ocKPQ0yTp9n6NZUAq3otEPPw78WZMG9K0o9WsfKyMWJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.2.tgz", - "integrity": "sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/quickselect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", - "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", - "license": "ISC" - }, - "node_modules/quicktype-core": { - "version": "23.2.6", - "resolved": "https://registry.npmjs.org/quicktype-core/-/quicktype-core-23.2.6.tgz", - "integrity": "sha512-asfeSv7BKBNVb9WiYhFRBvBZHcRutPRBwJMxW0pefluK4kkKu4lv0IvZBwFKvw2XygLcL1Rl90zxWDHYgkwCmA==", - "license": "Apache-2.0", - "dependencies": { - "@glideapps/ts-necessities": "2.2.3", - "browser-or-node": "^3.0.0", - "collection-utils": "^1.0.1", - "cross-fetch": "^4.0.0", - "is-url": "^1.2.4", - "js-base64": "^3.7.7", - "lodash": "^4.17.21", - "pako": "^1.0.6", - "pluralize": "^8.0.0", - "readable-stream": "4.5.2", - "unicode-properties": "^1.4.1", - "urijs": "^1.19.1", - "wordwrap": "^1.0.0", - "yaml": "^2.4.1" - } - }, - "node_modules/quicktype-core/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/quicktype-core/node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "license": "(MIT AND Zlib)" - }, - "node_modules/quicktype-core/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/quill": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz", - "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", - "license": "BSD-3-Clause", - "dependencies": { - "clone": "^2.1.1", - "deep-equal": "^1.0.1", - "eventemitter3": "^2.0.3", - "extend": "^3.0.2", - "parchment": "^1.1.4", - "quill-delta": "^3.6.2" - } - }, - "node_modules/quill-delta": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz", - "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", - "license": "MIT", - "dependencies": { - "deep-equal": "^1.0.1", - "extend": "^3.0.2", - "fast-diff": "1.1.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/rbush": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", - "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", - "license": "MIT", - "dependencies": { - "quickselect": "^2.0.0" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "optional": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rc9": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", - "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defu": "^6.1.4", - "destr": "^2.0.3" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/read-pkg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rehype-github-alerts": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rehype-github-alerts/-/rehype-github-alerts-3.0.0.tgz", - "integrity": "sha512-m8Lm+V0Ee0T9JqaLN0eBqtyUSfMUDFhAOIjbvoAQfI6EKtxKsIGWP6PaQE01UBHat0K7dBtnaeyCmJuUO7ylHg==", - "license": "MIT", - "dependencies": { - "hast-util-from-html": "^2.0.1", - "hast-util-is-element": "^3.0.0", - "unist-util-visit": "^5.0.0" - } - }, - "node_modules/rehype-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-raw": "^9.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", - "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", - "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-protobuf-schema": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", - "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", - "license": "MIT", - "dependencies": { - "protocol-buffers-schema": "^3.3.1" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfc4648": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.4.tgz", - "integrity": "sha512-rRg/6Lb+IGfJqO05HZkN50UtY7K/JhxJag1kP23+zyMfrvoB0B7RWv06MbOzoc79RgCdNTiUaNsTT1AJZ7Z+cg==", - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rolldown": { - "version": "1.0.0-beta.42", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-beta.42.tgz", - "integrity": "sha512-xaPcckj+BbJhYLsv8gOqezc8EdMcKKe/gk8v47B0KPvgABDrQ0qmNPAiT/gh9n9Foe0bUkEv2qzj42uU5q1WRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@oxc-project/types": "=0.94.0", - "@rolldown/pluginutils": "1.0.0-beta.42", - "ansis": "=4.2.0" - }, - "bin": { - "rolldown": "bin/cli.mjs" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-beta.42", - "@rolldown/binding-darwin-arm64": "1.0.0-beta.42", - "@rolldown/binding-darwin-x64": "1.0.0-beta.42", - "@rolldown/binding-freebsd-x64": "1.0.0-beta.42", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.42", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.42", - "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.42", - "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.42", - "@rolldown/binding-linux-x64-musl": "1.0.0-beta.42", - "@rolldown/binding-openharmony-arm64": "1.0.0-beta.42", - "@rolldown/binding-wasm32-wasi": "1.0.0-beta.42", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.42", - "@rolldown/binding-win32-ia32-msvc": "1.0.0-beta.42", - "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.42" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", - "license": "BSD-3-Clause" - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/scule": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", - "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", - "dev": true, - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-cookie-parser": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", - "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "optional": true - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "optional": true, - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/sirv": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", - "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/sort-asc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.1.0.tgz", - "integrity": "sha512-jBgdDd+rQ+HkZF2/OHCmace5dvpos/aWQpcxuyRs9QUbPRnkEJmYVo81PIGpjIdpOcsnJ4rGjStfDHsbn+UVyw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-desc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.1.1.tgz", - "integrity": "sha512-jfZacW5SKOP97BF5rX5kQfJmRVZP5/adDUTY8fCSPvNcXDVpUEe2pr/iKGlcyZzchRJZrswnp68fgk3qBXgkJw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-object": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-0.3.2.tgz", - "integrity": "sha512-aAQiEdqFTTdsvUFxXm3umdo04J7MRljoVGbBlkH7BgNsMvVNAJyGj7C/wV1A8wHWAJj/YikeZbfuCKqhggNWGA==", - "dependencies": { - "sort-asc": "^0.1.0", - "sort-desc": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-indent": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.1.1.tgz", - "integrity": "sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-search": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", - "dev": true, - "license": "ISC" - }, - "node_modules/style-to-object": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", - "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/stylehacks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/stylehacks/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/stylelint": { - "version": "15.11.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", - "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4", - "@csstools/selector-specificity": "^3.0.0", - "balanced-match": "^2.0.0", - "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.2.1", - "css-tree": "^2.3.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.1", - "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^7.0.0", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.29.0", - "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.28", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", - "supports-hyperlinks": "^3.0.0", - "svg-tags": "^1.0.0", - "table": "^6.8.1", - "write-file-atomic": "^5.0.1" - }, - "bin": { - "stylelint": "bin/stylelint.mjs" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - } - }, - "node_modules/stylelint-config-recommended": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", - "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "stylelint": "^15.10.0" - } - }, - "node_modules/stylelint/node_modules/@csstools/selector-specificity": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", - "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.13" - } - }, - "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz", - "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.2.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/stylelint/node_modules/known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/stylelint/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/stylelint/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sucrase/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/sucrase/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", - "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=14.18" - }, - "funding": { - "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svelte": { - "version": "5.39.12", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.39.12.tgz", - "integrity": "sha512-CEzwxFuEycokU8K8CE/OuwVbmei+ivu2HvBGYIdASfMa1hCRSNr4RRkzNSvbAvu6h+BOig2CsZTAEY+WKvwZpA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/remapping": "^2.3.4", - "@jridgewell/sourcemap-codec": "^1.5.0", - "@sveltejs/acorn-typescript": "^1.0.5", - "@types/estree": "^1.0.5", - "acorn": "^8.12.1", - "aria-query": "^5.3.1", - "axobject-query": "^4.1.0", - "clsx": "^2.1.1", - "esm-env": "^1.2.1", - "esrap": "^2.1.0", - "is-reference": "^3.0.3", - "locate-character": "^3.0.0", - "magic-string": "^0.30.11", - "zimmerframe": "^1.1.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/svelte-awesome-color-picker": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/svelte-awesome-color-picker/-/svelte-awesome-color-picker-3.1.4.tgz", - "integrity": "sha512-tiFakxvSpCwodOSFW6CflnLVSldSlDY77rDipHfW7hvB+4gTP3y6uO+Dm9O9e7P5N7K+CNyNjjdjbZOHYkMyNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "colord": "^2.9.3", - "svelte-awesome-slider": "^1.1.2" - }, - "peerDependencies": { - "svelte": "^3.55.1 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/svelte-awesome-slider": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/svelte-awesome-slider/-/svelte-awesome-slider-1.1.2.tgz", - "integrity": "sha512-HFIWwq6rtX6aXyc6ns2R0P6pDLYIr6nRjTPyAddAiTAgZqsohAoEfOEwKKqMmZ6Q+CH48zzcFdyo6lFkBJvyQw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "svelte": "^3.54.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/svelte-carousel": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/svelte-carousel/-/svelte-carousel-1.0.25.tgz", - "integrity": "sha512-vR/AbGYwlh3fgWaB5PJg+iqZFvoVCJq4JWdmlXvPtdG9TLlKJWBcoiKlMZt3MnFF7AqNW46tOH/O+uVMWQzyWQ==", - "license": "Apache-2.0", - "dependencies": { - "easy-reactive": "1.0.4" - } - }, - "node_modules/svelte-check": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.3.3.tgz", - "integrity": "sha512-RYP0bEwenDXzfv0P1sKAwjZSlaRyqBn0Fz1TVni58lqyEiqgwztTpmodJrGzP6ZT2aHl4MbTvWP6gbmQ3FOnBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "chokidar": "^4.0.1", - "fdir": "^6.2.0", - "picocolors": "^1.0.0", - "sade": "^1.7.4" - }, - "bin": { - "svelte-check": "bin/svelte-check" - }, - "engines": { - "node": ">= 18.0.0" - }, - "peerDependencies": { - "svelte": "^4.0.0 || ^5.0.0-next.0", - "typescript": ">=5.0.0" - } - }, - "node_modules/svelte-check/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/svelte-eslint-parser": { - "version": "0.43.0", - "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.43.0.tgz", - "integrity": "sha512-GpU52uPKKcVnh8tKN5P4UZpJ/fUDndmq7wfsvoVXsyP+aY0anol7Yqo01fyrlaWGMFfm4av5DyrjlaXdLRJvGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "postcss": "^8.4.39", - "postcss-scss": "^4.0.9" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "svelte": { - "optional": true - } - } - }, - "node_modules/svelte-eslint-parser/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/svelte-eslint-parser/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/svelte-exmarkdown": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/svelte-exmarkdown/-/svelte-exmarkdown-5.0.2.tgz", - "integrity": "sha512-/GhWbh0TBd7OPsL6IhQZm4BVuglP5MP4lVwBDnIF8IYfmHfwfY0z/nu78L8FDwJM2pP+DW8045g+jUhM357U1w==", - "license": "MIT", - "dependencies": { - "remark-gfm": "^4.0.1", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.1.2", - "unified": "^11.0.5" - }, - "peerDependencies": { - "svelte": "^5.1.3" - } - }, - "node_modules/svelte-floating-ui": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/svelte-floating-ui/-/svelte-floating-ui-1.6.2.tgz", - "integrity": "sha512-EC+DZtBey50P6l3NSzNQWon3cip8a1bzwdpmCdc45kymqEWL4BKhPemAq7SQ9QLebDPaMECW6YodxFbs2d+O/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/dom": "^1.6.13" - } - }, - "node_modules/svelte-highlight": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/svelte-highlight/-/svelte-highlight-7.8.4.tgz", - "integrity": "sha512-aVp+Q0hH9kI7PlSDrklmFTF4Uj7wYj7UGuqkREnkXlqpEffxr2g6esZcMMaTgECdg5rb2mJqM88+nwS10ecoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "highlight.js": "11.11.1" - } - }, - "node_modules/svelte-infinite-loading": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/svelte-infinite-loading/-/svelte-infinite-loading-1.4.0.tgz", - "integrity": "sha512-Jo+f/yr/HmZQuIiiKKzAHVFXdAUWHW2RBbrcQTil8JVk1sCm/riy7KTJVzjBgQvHasrFQYKF84zvtc9/Y4lFYg==", - "license": "MIT" - }, - "node_modules/svelte-popperjs": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svelte-popperjs/-/svelte-popperjs-1.3.2.tgz", - "integrity": "sha512-fwrErlkvngL876WXRnL3OLlfk/n9YkZwwLxuKRpZOYCJLt1zrwhoKTXS+/sRgDveD/zd6GQ35hV89EOip+NBGA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@popperjs/core": ">=2", - "svelte": ">=3" - } - }, - "node_modules/svelte-preprocess": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-6.0.3.tgz", - "integrity": "sha512-PLG2k05qHdhmRG7zR/dyo5qKvakhm8IJ+hD2eFRQmMLHp7X3eJnjeupUtvuRpbNiF31RjVw45W+abDwHEmP5OA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "engines": { - "node": ">= 18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.10.2", - "coffeescript": "^2.5.1", - "less": "^3.11.3 || ^4.0.0", - "postcss": "^7 || ^8", - "postcss-load-config": ">=3", - "pug": "^3.0.0", - "sass": "^1.26.8", - "stylus": ">=0.55", - "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "svelte": "^4.0.0 || ^5.0.0-next.100 || ^5.0.0", - "typescript": "^5.0.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "coffeescript": { - "optional": true - }, - "less": { - "optional": true - }, - "postcss": { - "optional": true - }, - "postcss-load-config": { - "optional": true - }, - "pug": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/svelte-range-slider-pips": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/svelte-range-slider-pips/-/svelte-range-slider-pips-2.3.1.tgz", - "integrity": "sha512-P29PNqHld+SiaDuHzf98rLvhSYWXb3TVL9p7U5RG9UX8emUgypZgp9zuIIwpmIXysGQC6JG8duMc5FuaPnSVdg==", - "dev": true, - "license": "MPL-2.0" - }, - "node_modules/svelte-splitpanes": { - "version": "8.0.9", - "resolved": "https://registry.npmjs.org/svelte-splitpanes/-/svelte-splitpanes-8.0.9.tgz", - "integrity": "sha512-L3oLXTC99M191FInTXJ/f/2i0welRql1QuVbPaU8iy6nvCR6X9VyjHCsCpLqKGWHwqkWo/AM9CQ1c0nzlb+MkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "esm-env-robust": "0.0.3" - }, - "peerDependencies": { - "svelte": "^4.2.19 || ^5.1.0" - } - }, - "node_modules/svelte2tsx": { - "version": "0.6.27", - "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.6.27.tgz", - "integrity": "sha512-E1uPW1o6VsbRz+nUk3fznZ2lSmCITAJoNu8AYefWSvIwE2pSB01i5sId4RMbWNzfcwCQl1DcgGShCPcldl4rvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "dedent-js": "^1.0.1", - "pascal-case": "^3.1.1" - }, - "peerDependencies": { - "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0", - "typescript": "^4.9.4 || ^5.0.0" - } - }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", - "dev": true - }, - "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", - "dev": true, - "license": "MIT" - }, - "node_modules/table": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/tailwind-merge": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz", - "integrity": "sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" - } - }, - "node_modules/tailwindcss": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz", - "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.6.0", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.2", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.7", - "lilconfig": "^3.1.3", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.47", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", - "postcss-nested": "^6.2.0", - "postcss-selector-parser": "^6.1.2", - "resolve": "^1.22.8", - "sucrase": "^3.35.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tailwindcss/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/tailwindcss/node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tailwindcss/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tailwindcss/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/tar": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", - "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.1.0", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/tar-fs": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", - "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "license": "ISC", - "optional": true - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tiny-inflate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trim-newlines": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ufo": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/uglify-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "license": "MIT", - "dependencies": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } - }, - "node_modules/unicode-trie/node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "license": "MIT" - }, - "node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urijs": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==", - "license": "MIT" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", - "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", - "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vite": { - "name": "rolldown-vite", - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/rolldown-vite/-/rolldown-vite-7.1.16.tgz", - "integrity": "sha512-cK6tCmZyEC0KRAcXTjQ+ara+wkqmaE7WUoI0ZfZzDuvaRaZ3mtvbhTJc4cH+PjKRok++++Z1bZZaNlf3+SnnGA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@oxc-project/runtime": "0.92.0", - "fdir": "^6.5.0", - "lightningcss": "^1.30.2", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rolldown": "1.0.0-beta.42", - "tinyglobby": "^0.2.15" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "esbuild": "^0.25.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite-plugin-mkcert": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.17.9.tgz", - "integrity": "sha512-SwI7yqp2Cq4r2XItarnHRCj2uzHPqevbxFNMLpyN+LDXd5w1vmZeM4l5X/wCZoP4mjPQYN+9+4kmE6e3nPO5fg==", - "dev": true, - "license": "MIT", - "dependencies": { - "axios": "^1.12.2", - "debug": "^4.4.3", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=v16.7.0" - }, - "peerDependencies": { - "vite": ">=3" - } - }, - "node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/vitefu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", - "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", - "dev": true, - "license": "MIT", - "workspaces": [ - "tests/deps/*", - "tests/projects/*", - "tests/projects/workspace/packages/*" - ], - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } - } - }, - "node_modules/vscode": { - "name": "@codingame/monaco-vscode-extension-api", - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extension-api/-/monaco-vscode-extension-api-21.6.0.tgz", - "integrity": "sha512-oslSpuCAZKS88hPx76Cickqd9/z5M1koUkx8UOqnfVIFAemnMHkZWWC4bOa/Q7wFZBy+1qB0/OuhrIBtycj5vA==", - "license": "MIT", - "dependencies": { - "@codingame/monaco-vscode-4a3ac544-9a61-534c-88df-756262793ef7-common": "21.6.0", - "@codingame/monaco-vscode-4bf376c2-03c7-58cb-8303-c67aeefa3d3d-common": "21.6.0", - "@codingame/monaco-vscode-api": "21.6.0", - "@codingame/monaco-vscode-extensions-service-override": "21.6.0" - } - }, - "node_modules/vscode-jsonrpc": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", - "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/vscode-languageclient": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-9.0.1.tgz", - "integrity": "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==", - "license": "MIT", - "dependencies": { - "minimatch": "^5.1.0", - "semver": "^7.3.7", - "vscode-languageserver-protocol": "3.17.5" - }, - "engines": { - "vscode": "^1.82.0" - } - }, - "node_modules/vscode-languageclient/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/vscode-languageclient/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/vscode-languageclient/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", - "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", - "license": "MIT", - "dependencies": { - "vscode-jsonrpc": "8.2.0", - "vscode-languageserver-types": "3.17.5" - } - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "license": "MIT" - }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "license": "MIT" - }, - "node_modules/vscode-textmate": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-9.2.0.tgz", - "integrity": "sha512-rkvG4SraZQaPSN/5XjwKswdU0OP9MF28QjrYzUBbhb8QyG3ljB1Ky996m++jiI7KdiAP2CkBiQZd9pqEDTClqA==", - "license": "MIT" - }, - "node_modules/vscode-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", - "license": "MIT" - }, - "node_modules/vscode-ws-jsonrpc": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/vscode-ws-jsonrpc/-/vscode-ws-jsonrpc-3.5.0.tgz", - "integrity": "sha512-13ZDy7Od4AfEPK2HIfY3DtyRi4FVsvFql1yobVJrpIoHOKGGJpIjVvIJpMxkrHzCZzWlYlg+WEu2hrYkCTvM0Q==", - "license": "MIT", - "dependencies": { - "vscode-jsonrpc": "~8.2.1" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/vscode-ws-jsonrpc/node_modules/vscode-jsonrpc": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1.tgz", - "integrity": "sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/web-worker": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.5.0.tgz", - "integrity": "sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==", - "license": "Apache-2.0" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wheel": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wheel/-/wheel-1.0.0.tgz", - "integrity": "sha512-XiCMHibOiqalCQ+BaNSwRoZ9FDTAvOsXxGHXChBugewDj7HC8VBIER71dEOiRH1fSdLbRCQzngKTSiZ06ZQzeA==", - "license": "MIT" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/windmill-parser-wasm-csharp": { - "version": "1.510.1", - "resolved": "https://registry.npmjs.org/windmill-parser-wasm-csharp/-/windmill-parser-wasm-csharp-1.510.1.tgz", - "integrity": "sha512-qm09YmnbeYHLwYn1jUnObVzPhYO9NZKMlIO7nlo7zPJBXqksgG5fK/KCtwGw9rChrnz+DsvM9wP5FhrwRLMtwQ==" - }, - "node_modules/windmill-parser-wasm-go": { - "version": "1.510.1", - "resolved": "https://registry.npmjs.org/windmill-parser-wasm-go/-/windmill-parser-wasm-go-1.510.1.tgz", - "integrity": "sha512-HOkk6LXK0wrwvkn+zjm3Gxo90HmyL6TYqmLo2yp8fZuppy7GOngT27zwYeBtwONiPyvDKskzoqPQoEfd8VuUsQ==" - }, - "node_modules/windmill-parser-wasm-java": { - "version": "1.510.1", - "resolved": "https://registry.npmjs.org/windmill-parser-wasm-java/-/windmill-parser-wasm-java-1.510.1.tgz", - "integrity": "sha512-Zle+JZT/ZwUArUVacUudYlS+CaHp2lSnkqD/IhWaRUG+gcv26VbERnrrHPonqXbVMS+eA9ElfXrFM5j0ukaXUw==" - }, - "node_modules/windmill-parser-wasm-nu": { - "version": "1.510.1", - "resolved": "https://registry.npmjs.org/windmill-parser-wasm-nu/-/windmill-parser-wasm-nu-1.510.1.tgz", - "integrity": "sha512-AJLFiUy6af+LpUe7CddDo4+JOmw3c0K/1iOWh8NdTwXcLDj90lL6089mdsVo1apyloLgrTbcuFDzZMXVGBgtCg==" - }, - "node_modules/windmill-parser-wasm-php": { - "version": "1.574.1", - "resolved": "https://registry.npmjs.org/windmill-parser-wasm-php/-/windmill-parser-wasm-php-1.574.1.tgz", - "integrity": "sha512-COyid6B1RYs+bpzUCInsA4HY/WZkpDLfkQ90+AqU/TVTpzYSbAC2JCbIwy0cRElBvlhI4bQ+9Wg6hSQKMpEkpA==" - }, - "node_modules/windmill-parser-wasm-py": { - "version": "1.538.0", - "resolved": "https://registry.npmjs.org/windmill-parser-wasm-py/-/windmill-parser-wasm-py-1.538.0.tgz", - "integrity": "sha512-s+bdIgT/fA5em3zYUwF8D14uA/dZh7iu0krZYZQqZUO7txN37hwSCVfovbMkIwm4zPbsJ50mU8DRLt7UpAPZIw==" - }, - "node_modules/windmill-parser-wasm-regex": { - "version": "1.574.1", - "resolved": "https://registry.npmjs.org/windmill-parser-wasm-regex/-/windmill-parser-wasm-regex-1.574.1.tgz", - "integrity": "sha512-KnNBnpTGcnBPSzTQHdsjTPJbRQ81iem98eUnMGO8Zt1qgBFJ/eFZPwmUg6TZMbMITzTi0QqRCJj08eQID1FcPg==" - }, - "node_modules/windmill-parser-wasm-ruby": { - "version": "1.526.1", - "resolved": "https://registry.npmjs.org/windmill-parser-wasm-ruby/-/windmill-parser-wasm-ruby-1.526.1.tgz", - "integrity": "sha512-rMBQA8s21wmL2kA5ztRs/ZgVA3ckxe9/NLjxl3iQPL0CX6DlvfaUH0O+AnhpXXDMyBs1Y1SZIhcnbnvsHZ3R8g==" - }, - "node_modules/windmill-parser-wasm-rust": { - "version": "1.558.1", - "resolved": "https://registry.npmjs.org/windmill-parser-wasm-rust/-/windmill-parser-wasm-rust-1.558.1.tgz", - "integrity": "sha512-21S7lm1KF8zO1187rbq14hzPHII2RdM2+D44MoAh1F6VoaScj+Puq0z5B1O/hwn/95R/a9jBlL2D8jbkXtlD1A==" - }, - "node_modules/windmill-parser-wasm-ts": { - "version": "1.565.0", - "resolved": "https://registry.npmjs.org/windmill-parser-wasm-ts/-/windmill-parser-wasm-ts-1.565.0.tgz", - "integrity": "sha512-ui7dQ2kizWSG0ELpDU70Ccfk47EjC+yLI3tf6O+BdINs+YTjxA65MjShsvE3l4MnaxN8knbOLoSHkvIYCu77mg==" - }, - "node_modules/windmill-parser-wasm-yaml": { - "version": "1.561.0", - "resolved": "https://registry.npmjs.org/windmill-parser-wasm-yaml/-/windmill-parser-wasm-yaml-1.561.0.tgz", - "integrity": "sha512-UbyxsRxJ/QDE+RFjj8q6cMZqr57gxHXBM+W8VLXnQ8I79W5KI+FhKcNFraUpXzqQjalZJ3cVZXXr8C7cTlJ8IQ==" - }, - "node_modules/windmill-sql-datatype-parser-wasm": { - "version": "1.512.0", - "resolved": "https://registry.npmjs.org/windmill-sql-datatype-parser-wasm/-/windmill-sql-datatype-parser-wasm-1.512.0.tgz", - "integrity": "sha512-uHNL8F72/Tf96xF3hOHnPDjkEyqXw7fNjcPJiUhth9sTQkcwUIoJMOdwm8/cs+j9kKVRJ4tgNYMHEBLylazp6g==" - }, - "node_modules/windmill-utils-internal": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/windmill-utils-internal/-/windmill-utils-internal-1.3.1.tgz", - "integrity": "sha512-afRGUDcvaUfGu7FA6DD0xWECQiKnXADs0N4WyQQ+OvaloxZ4oQzdEpLnVab/m3T02hhs29ru4Ilrdxu3ozyT5Q==", - "license": "Apache 2.0" - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "devOptional": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/xml-utils": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.10.2.tgz", - "integrity": "sha512-RqM+2o1RYs6T8+3DzDSoTRAUfrvaejbVHcp3+thnAtDKo8LskR+HomLajEy5UjTz24rpka7AxVBRR3g2wTUkJA==", - "license": "CC0-1.0" - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/xterm": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/xterm/-/xterm-5.3.0.tgz", - "integrity": "sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==", - "deprecated": "This package is now deprecated. Move to @xterm/xterm instead.", - "license": "MIT" - }, - "node_modules/xterm-readline": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/xterm-readline/-/xterm-readline-1.1.2.tgz", - "integrity": "sha512-1+W2nVuQvCYz9OUYwFBiolrSQUui51aDDyacKXt4PuxeBHqzvabQEJ2kwdBDzsmOjz5BwlDTAjJmYpH2OGqLFA==", - "license": "MIT", - "dependencies": { - "string-width": "^4" - }, - "peerDependencies": { - "@xterm/xterm": "^5.5.0" - } - }, - "node_modules/y-leveldb": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/y-leveldb/-/y-leveldb-0.1.2.tgz", - "integrity": "sha512-6ulEn5AXfXJYi89rXPEg2mMHAyyw8+ZfeMMdOtBbV8FJpQ1NOrcgi6DTAcXof0dap84NjHPT2+9d0rb6cFsjEg==", - "license": "MIT", - "optional": true, - "dependencies": { - "level": "^6.0.1", - "lib0": "^0.2.31" - }, - "funding": { - "type": "GitHub Sponsors ❤", - "url": "https://github.com/sponsors/dmonad" - }, - "peerDependencies": { - "yjs": "^13.0.0" - } - }, - "node_modules/y-monaco": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/y-monaco/-/y-monaco-0.1.6.tgz", - "integrity": "sha512-sYRywMmcylt+Nupl+11AvizD2am06ST8lkVbUXuaEmrtV6Tf+TD4rsEm6u9YGGowYue+Vfg1IJ97SUP2J+PVXg==", - "license": "MIT", - "dependencies": { - "lib0": "^0.2.43" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=6.0.0" - }, - "peerDependencies": { - "monaco-editor": ">=0.20.0", - "yjs": "^13.3.1" - } - }, - "node_modules/y-protocols": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.6.tgz", - "integrity": "sha512-vHRF2L6iT3rwj1jub/K5tYcTT/mEYDUppgNPXwp8fmLpui9f7Yeq3OEtTLVF012j39QnV+KEQpNqoN7CWU7Y9Q==", - "license": "MIT", - "dependencies": { - "lib0": "^0.2.85" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=8.0.0" - }, - "funding": { - "type": "GitHub Sponsors ❤", - "url": "https://github.com/sponsors/dmonad" - }, - "peerDependencies": { - "yjs": "^13.0.0" - } - }, - "node_modules/y-websocket": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/y-websocket/-/y-websocket-1.5.4.tgz", - "integrity": "sha512-Y3021uy0anOIHqAPyAZbNDoR05JuMEGjRNI8c+K9MHzVS8dWoImdJUjccljAznc8H2L7WkIXhRHZ1igWNRSgPw==", - "license": "MIT", - "dependencies": { - "lib0": "^0.2.52", - "lodash.debounce": "^4.0.8", - "y-protocols": "^1.0.5" - }, - "bin": { - "y-websocket": "bin/server.js", - "y-websocket-server": "bin/server.js" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=8.0.0" - }, - "funding": { - "type": "GitHub Sponsors ❤", - "url": "https://github.com/sponsors/dmonad" - }, - "optionalDependencies": { - "ws": "^6.2.1", - "y-leveldb": "^0.1.0" - }, - "peerDependencies": { - "yjs": "^13.5.6" - } - }, - "node_modules/y-websocket/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "license": "MIT", - "optional": true, - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yjs": { - "version": "13.6.27", - "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.27.tgz", - "integrity": "sha512-OIDwaflOaq4wC6YlPBy2L6ceKeKuF7DeTxx+jPzv1FHn9tCZ0ZwSRnUBxD05E3yed46fv/FWJbvR+Ud7x0L7zw==", - "license": "MIT", - "peer": true, - "dependencies": { - "lib0": "^0.2.99" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=8.0.0" - }, - "funding": { - "type": "GitHub Sponsors ❤", - "url": "https://github.com/sponsors/dmonad" - } - }, - "node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yootils": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/yootils/-/yootils-0.3.1.tgz", - "integrity": "sha512-A7AMeJfGefk317I/3tBoUYRcDcNavKEkpiPN/nQsBz/viI2GvT7BtrqdPD6rGqBFN8Ax7v4obf+Cl32JF9DDVw==", - "dev": true, - "license": "MIT" - }, - "node_modules/zimmerframe": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", - "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", - "license": "MIT" - }, - "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.24.6", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", - "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", - "license": "ISC", - "peerDependencies": { - "zod": "^3.24.1" - } - }, - "node_modules/zstddec": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/zstddec/-/zstddec-0.1.0.tgz", - "integrity": "sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==", - "license": "MIT AND BSD-3-Clause" - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} From d022ba73a54d6b0ef9d2dc9013964a03c99f2ba5 Mon Sep 17 00:00:00 2001 From: dieriba Date: Thu, 13 Nov 2025 17:56:28 +0100 Subject: [PATCH 06/35] fix discard --- backend/windmill-api/openapi.yaml | 29 +++++++++++++++---- backend/windmill-api/src/jobs.rs | 16 +++++----- .../src/lib/components/triggers/http/utils.ts | 3 +- .../lib/components/triggers/kafka/utils.ts | 1 + .../src/lib/components/triggers/mqtt/utils.ts | 1 + .../src/lib/components/triggers/nats/utils.ts | 1 + .../lib/components/triggers/postgres/utils.ts | 1 + .../src/lib/components/triggers/sqs/utils.ts | 1 + .../components/triggers/websocket/utils.ts | 1 + 9 files changed, 41 insertions(+), 13 deletions(-) diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index e6f8062c3caf6..81db08d97af6c 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -17534,6 +17534,10 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" + active_mode: + type: boolean + default: true + description: If true, queue jobs with suspend functionality instead of immediate execution required: - path @@ -17717,6 +17721,10 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" + active_mode: + type: boolean + default: true + description: If true, queue jobs with suspend functionality instead of immediate execution required: - path - script_path @@ -18005,6 +18013,10 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" + active_mode: + type: boolean + default: true + description: If true, queue jobs with suspend functionality instead of immediate execution required: - queue_url - aws_resource_path @@ -18183,6 +18195,10 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" + active_mode: + type: boolean + default: true + description: If true, queue jobs with suspend functionality instead of immediate execution required: - path - script_path @@ -18286,6 +18302,10 @@ components: type: string error_handler_args: $ref: "#/components/schemas/ScriptArgs" + active_mode: + type: boolean + default: true + description: If true, queue jobs with suspend functionality instead of immediate execution retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" @@ -18405,7 +18425,10 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" - + active_mode: + type: boolean + default: true + description: If true, queue jobs with suspend functionality instead of immediate execution required: - path - script_path @@ -18452,10 +18475,6 @@ components: $ref: "#/components/schemas/ScriptArgs" retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" - active_mode: - type: boolean - default: true - description: If true, queue jobs with suspend functionality instead of immediate execution required: - path diff --git a/backend/windmill-api/src/jobs.rs b/backend/windmill-api/src/jobs.rs index 77cb73b8e9eb2..8105730779eec 100644 --- a/backend/windmill-api/src/jobs.rs +++ b/backend/windmill-api/src/jobs.rs @@ -2309,20 +2309,22 @@ async fn cancel_suspended_jobs( r#" WITH jobs_to_cancel AS ( SELECT - jq.id + v2_job_queue.id FROM - v2_job_queue jq - INNER JOIN v2_job j ON j.id = jq.id + v2_job_queue + INNER JOIN v2_job ON v2_job.id = v2_job_queue.id WHERE - j.workspace_id = $1 AND - jq.suspend = $2 AND - jq.canceled_by IS NULL + v2_job.workspace_id = $1 AND + v2_job_queue.suspend = $2 AND + v2_job_queue.canceled_by IS NULL ) UPDATE v2_job_queue SET canceled_by = $3, - canceled_reason = 'Canceled all suspended jobs with suspend number' + canceled_reason = 'Canceled all suspended jobs with suspend number', + suspend = 0, + scheduled_for = now() WHERE id IN (SELECT id FROM jobs_to_cancel) "#, diff --git a/frontend/src/lib/components/triggers/http/utils.ts b/frontend/src/lib/components/triggers/http/utils.ts index 31c70dc5dd759..bf2c65710f36c 100644 --- a/frontend/src/lib/components/triggers/http/utils.ts +++ b/frontend/src/lib/components/triggers/http/utils.ts @@ -60,7 +60,8 @@ export async function saveHttpRouteFromCfg( summary: routeCfg.summary, error_handler_path: routeCfg.error_handler_path, error_handler_args: routeCfg.error_handler_path ? routeCfg.error_handler_args : undefined, - retry: routeCfg.retry + retry: routeCfg.retry, + active_mode: routeCfg.active_mode } try { if (edit) { diff --git a/frontend/src/lib/components/triggers/kafka/utils.ts b/frontend/src/lib/components/triggers/kafka/utils.ts index 49ac86baa6fd4..f91488694878a 100644 --- a/frontend/src/lib/components/triggers/kafka/utils.ts +++ b/frontend/src/lib/components/triggers/kafka/utils.ts @@ -23,6 +23,7 @@ export async function saveKafkaTriggerFromCfg( kafka_resource_path: cfg.kafka_resource_path, group_id: cfg.group_id, topics: cfg.topics, + active_mode: cfg.active_mode, ...errorHandlerAndRetries } try { diff --git a/frontend/src/lib/components/triggers/mqtt/utils.ts b/frontend/src/lib/components/triggers/mqtt/utils.ts index 1e4505f321a88..c9b1ca3618e9f 100644 --- a/frontend/src/lib/components/triggers/mqtt/utils.ts +++ b/frontend/src/lib/components/triggers/mqtt/utils.ts @@ -27,6 +27,7 @@ export async function saveMqttTriggerFromCfg( script_path: cfg.script_path, enabled: cfg.enabled, is_flow: cfg.is_flow, + active_mode: cfg.active_mode, ...errorHandlerAndRetries } try { diff --git a/frontend/src/lib/components/triggers/nats/utils.ts b/frontend/src/lib/components/triggers/nats/utils.ts index 3b6c4bf67cd17..0d850150a2e13 100644 --- a/frontend/src/lib/components/triggers/nats/utils.ts +++ b/frontend/src/lib/components/triggers/nats/utils.ts @@ -25,6 +25,7 @@ export async function saveNatsTriggerFromCfg( consumer_name: cfg.consumer_name, subjects: cfg.subjects, use_jetstream: cfg.use_jetstream, + active_mode: cfg.active_mode, ...errorHandlerAndRetries } try { diff --git a/frontend/src/lib/components/triggers/postgres/utils.ts b/frontend/src/lib/components/triggers/postgres/utils.ts index bfe143642bc12..641b6ad692e04 100644 --- a/frontend/src/lib/components/triggers/postgres/utils.ts +++ b/frontend/src/lib/components/triggers/postgres/utils.ts @@ -126,6 +126,7 @@ export async function savePostgresTriggerFromCfg( publication_name: config.publication_name, publication: config.publication, enabled: config.enabled, + active_mode: config.active_mode, ...errorHandlerAndRetries } if (edit) { diff --git a/frontend/src/lib/components/triggers/sqs/utils.ts b/frontend/src/lib/components/triggers/sqs/utils.ts index 61a00b9858b93..533eda2088a6f 100644 --- a/frontend/src/lib/components/triggers/sqs/utils.ts +++ b/frontend/src/lib/components/triggers/sqs/utils.ts @@ -25,6 +25,7 @@ export async function saveSqsTriggerFromCfg( message_attributes: cfg.message_attributes, aws_auth_resource_type: cfg.aws_auth_resource_type, enabled: cfg.enabled, + active_mode: cfg.active_mode, ...errorHandlerAndRetries } try { diff --git a/frontend/src/lib/components/triggers/websocket/utils.ts b/frontend/src/lib/components/triggers/websocket/utils.ts index 3802255e972f9..b80423c842246 100644 --- a/frontend/src/lib/components/triggers/websocket/utils.ts +++ b/frontend/src/lib/components/triggers/websocket/utils.ts @@ -29,6 +29,7 @@ export async function saveWebsocketTriggerFromCfg( url_runnable_args: triggerCfg.url_runnable_args, can_return_message: triggerCfg.can_return_message, can_return_error_result: triggerCfg.can_return_error_result, + active_mode: triggerCfg.active_mode, ...errorHandlerAndRetries } try { From 50f39c512425347f5c39277b534a4b073748e08c Mon Sep 17 00:00:00 2001 From: dieriba Date: Thu, 13 Nov 2025 18:39:36 +0100 Subject: [PATCH 07/35] fix --- backend/windmill-api/src/scripts.rs | 1 + backend/windmill-worker/src/ai/tools.rs | 1 + backend/windmill-worker/src/worker_flow.rs | 1 + backend/windmill-worker/src/worker_lockfiles.rs | 1 + 4 files changed, 4 insertions(+) diff --git a/backend/windmill-api/src/scripts.rs b/backend/windmill-api/src/scripts.rs index 82c8864fe32f7..0a15028f0ba27 100644 --- a/backend/windmill-api/src/scripts.rs +++ b/backend/windmill-api/src/scripts.rs @@ -1023,6 +1023,7 @@ async fn create_script_internal<'c>( None, None, None, + None, ) .await?; Ok((hash, new_tx, None)) diff --git a/backend/windmill-worker/src/ai/tools.rs b/backend/windmill-worker/src/ai/tools.rs index 478eca5e54a4b..9504c82330980 100644 --- a/backend/windmill-worker/src/ai/tools.rs +++ b/backend/windmill-worker/src/ai/tools.rs @@ -472,6 +472,7 @@ async fn execute_windmill_tool( None, None, None, + None ) .await?; diff --git a/backend/windmill-worker/src/worker_flow.rs b/backend/windmill-worker/src/worker_flow.rs index f0bc4cfc1eebf..252adb6df3bcc 100644 --- a/backend/windmill-worker/src/worker_flow.rs +++ b/backend/windmill-worker/src/worker_flow.rs @@ -3304,6 +3304,7 @@ async fn push_next_flow_job( None, None, None, + None ) .warn_after_seconds(2) .await?; diff --git a/backend/windmill-worker/src/worker_lockfiles.rs b/backend/windmill-worker/src/worker_lockfiles.rs index 0b840884f57b8..bbc49f725fa1e 100644 --- a/backend/windmill-worker/src/worker_lockfiles.rs +++ b/backend/windmill-worker/src/worker_lockfiles.rs @@ -671,6 +671,7 @@ pub async fn trigger_dependents_to_recompute_dependencies( None, debounce_job_id_o, None, + None ) .await?; From ba535b5077e0b311e3f9a466c20c7978a2de4ef1 Mon Sep 17 00:00:00 2001 From: dieriba Date: Thu, 13 Nov 2025 18:52:01 +0100 Subject: [PATCH 08/35] update .sqlx --- ...40f82b545727985b97a6dd063fbdae58c233.json} | 7 +++--- ...b478ef2b2bd9831c1031e3a9fc98b59a6895.json} | 10 ++++++-- ...1fffd03f95538c7036320137ca2c3bcdedee.json} | 7 +++--- ...3676e2bfb912e1344706a251ed2ac15636f5.json} | 7 +++--- ...0dff6ab03541f5d9fccc643e9dc7ac3e63727.json | 15 ++++++++++++ ...3b3d2701311af0de9fdd20a80b7108d5cac9.json} | 7 +++--- ...202d97b974ffcb3405d57df818ab94533bb9.json} | 24 ++++++++++++------- ...fdd5d32cf0a956fd46c5c77fc8bce3167d164.json | 15 ++++++++++++ ...153c43903f929ae5d62fbba12610f89c36d55.json | 2 +- ...4d942a349203ee1045a12ebe8601a4cbb943.json} | 7 +++--- ...adc6ca727a009a849df877dbb745867a1070.json} | 5 ++-- ...5367144e8c68b39528b6fed1fdb834991eff.json} | 7 +++--- ...81c6d17c23f67ff919f17bab3c5fc73506c6d.json | 23 ++++++++++++++++++ ...11abcdf28d6155dc1bd7101586269406194e.json} | 7 +++--- ...ee5704e96395ff64528115d988747120d71e.json} | 5 ++-- ...83e5bc6d67cdee066e8c1cad58f78c6d3c52.json} | 7 +++--- ...6a8a9e5fa31b6c98a410fbbab8eb78d57416.json} | 5 ++-- ...feaee284ab959022c1d7347daca009574d88b.json | 15 ++++++++++++ ...e56343c5c76a6b38ea1d765989f9d9d80de11.json | 16 +++++++++++++ ...a939b493a4ede46de8e54b9f75e04db08b4b1.json | 15 ++++++++++++ ...72feaea342acdb06c8bbd8e28e94bba3043e.json} | 7 +++--- ...1bf40ed16cb486f4d1c951d381ae39973e01.json} | 7 +++--- ...849c15a4f98447ebff26237afdd09bf5a706.json} | 7 +++--- ...a79bb2c82dc7d7ca09d929951cd8b38d4ece0.json | 23 ++++++++++++++++++ ...0d4eec55f15296c9c5445ef38845402bf09d.json} | 7 +++--- ...12b8d065215b39cd00ea1e84b22cf619d9757.json | 15 ++++++++++++ ...297f603de4126ad0ae26afccd23dc2f2c9779.json | 16 +++++++++++++ ...4b42324748f98a1b8782654c90728171a9ef.json} | 7 +++--- ...632625d64d073ee9de31a1ea980175ec24be.json} | 7 +++--- ...88e4c342230945dc9b1cb3881ffa3b8cf1c4.json} | 5 ++-- backend/tests/common/mod.rs | 1 + 31 files changed, 246 insertions(+), 62 deletions(-) rename backend/.sqlx/{query-f28b71a304721643dd90fa468f61f351d6df8282415e54f0ea4f905417657ba8.json => query-0e5f4f2a359a9bc25bd34e6b47df40f82b545727985b97a6dd063fbdae58c233.json} (75%) rename backend/.sqlx/{query-1301f873a829db137573b8b39449f6160f2adf44f864f26a99b8eab5818fbd50.json => query-1175372607104f91be877a833ebcb478ef2b2bd9831c1031e3a9fc98b59a6895.json} (89%) rename backend/.sqlx/{query-e56c71de41ba0750ae9ae8540c903cb0bf241d959a6c8f7bb896160001a6672b.json => query-488af33509bc10e6315d6ecc6d431fffd03f95538c7036320137ca2c3bcdedee.json} (74%) rename backend/.sqlx/{query-e9941e580a21848fa71b38c58030078a25f117a3bfec78d5270a4c4970f2465e.json => query-4fa8f58b8ca1bde91b41707fe2163676e2bfb912e1344706a251ed2ac15636f5.json} (81%) create mode 100644 backend/.sqlx/query-520e6b27bed78d78e07a0cf627a0dff6ab03541f5d9fccc643e9dc7ac3e63727.json rename backend/.sqlx/{query-0ef1e5bbbefc117a4cdaf414b3652354641c2f735d071540f858bc064f2432cd.json => query-54ebe2c3ba3fa684232023b517543b3d2701311af0de9fdd20a80b7108d5cac9.json} (77%) rename backend/.sqlx/{query-39cd46049a6e7d21d310a4973b3b40604cbb8c5ea1d28e4f74651505c317b440.json => query-594361c66b0883ef521508705004202d97b974ffcb3405d57df818ab94533bb9.json} (67%) create mode 100644 backend/.sqlx/query-596eef1e1ee7fea56d8335aa9acfdd5d32cf0a956fd46c5c77fc8bce3167d164.json rename backend/.sqlx/{query-b5f6870444fc97d8beab3cf61c91e58936138d80a97b423c17338ba069b6a3aa.json => query-5fbfa74803bbf4a1edcb88da29324d942a349203ee1045a12ebe8601a4cbb943.json} (80%) rename backend/.sqlx/{query-4c64bd0e364f536597db83161b5a27ff58b5ec7148bc94807423593bcfa27b90.json => query-6bf3ac66b1fdebc92d700b7aa594adc6ca727a009a849df877dbb745867a1070.json} (89%) rename backend/.sqlx/{query-9ebf262393fc4a29e8f09b304dd99e786fe78dd21721e8f54dc943dd571a7e08.json => query-6cbcfd2541887f1a9dc6bb546a3f5367144e8c68b39528b6fed1fdb834991eff.json} (72%) create mode 100644 backend/.sqlx/query-734c7687b5b767f8cfdf6da404381c6d17c23f67ff919f17bab3c5fc73506c6d.json rename backend/.sqlx/{query-06af027f6ed10200de2006a2fc48771a8f42c28c87b78220eec1bddeae1f648f.json => query-74850c79b25d88c7824862db8c9711abcdf28d6155dc1bd7101586269406194e.json} (71%) rename backend/.sqlx/{query-465144ea7e2930203618d9814a3e20c77b4363cf9e7c655d395f3fe40c247f61.json => query-75af156459c8bbbf152cf5a6fc57ee5704e96395ff64528115d988747120d71e.json} (88%) rename backend/.sqlx/{query-0382065b3dfd78b384e26f81317af91de289f52462e74343770a8b0d47d0577d.json => query-8990d1a7583a06e7f2c8bfaef42683e5bc6d67cdee066e8c1cad58f78c6d3c52.json} (73%) rename backend/.sqlx/{query-17ca259e1c78e1317fdd19436e15bef428fc4f0d52776d7a5fca64f17225ef30.json => query-925ed4e302228b2608ba5b384f1c6a8a9e5fa31b6c98a410fbbab8eb78d57416.json} (82%) create mode 100644 backend/.sqlx/query-ab2826ee002b12f7c342331d2effeaee284ab959022c1d7347daca009574d88b.json create mode 100644 backend/.sqlx/query-b034e2cea9a95df06c3e4f2ae5ee56343c5c76a6b38ea1d765989f9d9d80de11.json create mode 100644 backend/.sqlx/query-b2ed2cf9b96283f05a859171755a939b493a4ede46de8e54b9f75e04db08b4b1.json rename backend/.sqlx/{query-1f6b773ce34fe51d03d6f9a2345481629c62453eebbb08f82dd2da23389bc117.json => query-b32af7075f1c15bada6383afec6a72feaea342acdb06c8bbd8e28e94bba3043e.json} (85%) rename backend/.sqlx/{query-9abbb75c238372cc3dbaebf1dbc50ff78df6c5dcf92b08d611afe23c5b865521.json => query-b8a7284ca502ab017160c14b71a71bf40ed16cb486f4d1c951d381ae39973e01.json} (75%) rename backend/.sqlx/{query-0f697b1ab3105e2ea036f8ecace2d54f97bc2d0ef52f5812244a97c289523592.json => query-bc92d97de4b46ee1255123fe19c5849c15a4f98447ebff26237afdd09bf5a706.json} (81%) create mode 100644 backend/.sqlx/query-be1b147e24317b8a9b4eebca24aa79bb2c82dc7d7ca09d929951cd8b38d4ece0.json rename backend/.sqlx/{query-fe78796c5ea2384bdb6191b66943d746de874ca6600178f5db9797eda44f1733.json => query-d2a4b01130d1e76502ffe6c5a3220d4eec55f15296c9c5445ef38845402bf09d.json} (78%) create mode 100644 backend/.sqlx/query-d9ed162b135a76edea752dd8da612b8d065215b39cd00ea1e84b22cf619d9757.json create mode 100644 backend/.sqlx/query-e42f45e45def71202aa08504f01297f603de4126ad0ae26afccd23dc2f2c9779.json rename backend/.sqlx/{query-bf2163c542fb8c4e173167a8f333ef762fecf782424c5b61b89f32918b8d6971.json => query-eee24a25a49dfaf2d0a2580bac234b42324748f98a1b8782654c90728171a9ef.json} (94%) rename backend/.sqlx/{query-3b6bd7b41f130ce6df62fdecb351a3e01be0726d02d3f863e0ea5c476a8e785e.json => query-faca1306bebb90d0e96ef2aee48f632625d64d073ee9de31a1ea980175ec24be.json} (76%) rename backend/.sqlx/{query-e7c61bbdcf882f6e1e9b11df03e7a2ee318c72b365c0fe0b9fbec886a461f5e4.json => query-fe5224c32bd0899cf78cfd006bf988e4c342230945dc9b1cb3881ffa3b8cf1c4.json} (66%) diff --git a/backend/.sqlx/query-f28b71a304721643dd90fa468f61f351d6df8282415e54f0ea4f905417657ba8.json b/backend/.sqlx/query-0e5f4f2a359a9bc25bd34e6b47df40f82b545727985b97a6dd063fbdae58c233.json similarity index 75% rename from backend/.sqlx/query-f28b71a304721643dd90fa468f61f351d6df8282415e54f0ea4f905417657ba8.json rename to backend/.sqlx/query-0e5f4f2a359a9bc25bd34e6b47df40f82b545727985b97a6dd063fbdae58c233.json index b0095248efc5c..0fca9399e07a0 100644 --- a/backend/.sqlx/query-f28b71a304721643dd90fa468f61f351d6df8282415e54f0ea4f905417657ba8.json +++ b/backend/.sqlx/query-0e5f4f2a359a9bc25bd34e6b47df40f82b545727985b97a6dd063fbdae58c233.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n INSERT INTO nats_trigger (\n workspace_id,\n path,\n nats_resource_path,\n subjects,\n stream_name,\n consumer_name,\n use_jetstream,\n script_path,\n is_flow,\n enabled,\n edited_by,\n email,\n edited_at,\n error_handler_path,\n error_handler_args,\n retry\n ) VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, now(), $13, $14, $15\n )\n ", + "query": "\n INSERT INTO nats_trigger (\n workspace_id,\n path,\n nats_resource_path,\n subjects,\n stream_name,\n consumer_name,\n use_jetstream,\n script_path,\n is_flow,\n enabled,\n edited_by,\n email,\n edited_at,\n error_handler_path,\n error_handler_args,\n retry,\n suspend_number\n ) VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, now(), $13, $14, $15, $16\n )\n ", "describe": { "columns": [], "parameters": { @@ -19,10 +19,11 @@ "Varchar", "Varchar", "Jsonb", - "Jsonb" + "Jsonb", + "Int4" ] }, "nullable": [] }, - "hash": "f28b71a304721643dd90fa468f61f351d6df8282415e54f0ea4f905417657ba8" + "hash": "0e5f4f2a359a9bc25bd34e6b47df40f82b545727985b97a6dd063fbdae58c233" } diff --git a/backend/.sqlx/query-1301f873a829db137573b8b39449f6160f2adf44f864f26a99b8eab5818fbd50.json b/backend/.sqlx/query-1175372607104f91be877a833ebcb478ef2b2bd9831c1031e3a9fc98b59a6895.json similarity index 89% rename from backend/.sqlx/query-1301f873a829db137573b8b39449f6160f2adf44f864f26a99b8eab5818fbd50.json rename to backend/.sqlx/query-1175372607104f91be877a833ebcb478ef2b2bd9831c1031e3a9fc98b59a6895.json index 2999ae4bf2851..7b48713c6ac24 100644 --- a/backend/.sqlx/query-1301f873a829db137573b8b39449f6160f2adf44f864f26a99b8eab5818fbd50.json +++ b/backend/.sqlx/query-1175372607104f91be877a833ebcb478ef2b2bd9831c1031e3a9fc98b59a6895.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT\n path,\n script_path,\n is_flow,\n route_path,\n authentication_resource_path,\n workspace_id,\n request_type AS \"request_type: _\",\n authentication_method AS \"authentication_method: _\",\n edited_by,\n email,\n static_asset_config AS \"static_asset_config: _\",\n wrap_body,\n raw_string,\n workspaced_route,\n is_static_website,\n error_handler_path,\n error_handler_args as \"error_handler_args: _\",\n retry as \"retry: _\"\n FROM\n http_trigger\n WHERE\n http_method = $1\n ", + "query": "\n SELECT\n path,\n script_path,\n is_flow,\n route_path,\n authentication_resource_path,\n workspace_id,\n request_type AS \"request_type: _\",\n authentication_method AS \"authentication_method: _\",\n edited_by,\n email,\n static_asset_config AS \"static_asset_config: _\",\n wrap_body,\n raw_string,\n workspaced_route,\n is_static_website,\n error_handler_path,\n error_handler_args as \"error_handler_args: _\",\n retry as \"retry: _\",\n suspend_number\n FROM\n http_trigger\n WHERE\n http_method = $1\n ", "describe": { "columns": [ { @@ -117,6 +117,11 @@ "ordinal": 17, "name": "retry: _", "type_info": "Jsonb" + }, + { + "ordinal": 18, + "name": "suspend_number", + "type_info": "Int4" } ], "parameters": { @@ -155,8 +160,9 @@ false, true, true, + true, true ] }, - "hash": "1301f873a829db137573b8b39449f6160f2adf44f864f26a99b8eab5818fbd50" + "hash": "1175372607104f91be877a833ebcb478ef2b2bd9831c1031e3a9fc98b59a6895" } diff --git a/backend/.sqlx/query-e56c71de41ba0750ae9ae8540c903cb0bf241d959a6c8f7bb896160001a6672b.json b/backend/.sqlx/query-488af33509bc10e6315d6ecc6d431fffd03f95538c7036320137ca2c3bcdedee.json similarity index 74% rename from backend/.sqlx/query-e56c71de41ba0750ae9ae8540c903cb0bf241d959a6c8f7bb896160001a6672b.json rename to backend/.sqlx/query-488af33509bc10e6315d6ecc6d431fffd03f95538c7036320137ca2c3bcdedee.json index f19d888a6767a..04441a96ccb54 100644 --- a/backend/.sqlx/query-e56c71de41ba0750ae9ae8540c903cb0bf241d959a6c8f7bb896160001a6672b.json +++ b/backend/.sqlx/query-488af33509bc10e6315d6ecc6d431fffd03f95538c7036320137ca2c3bcdedee.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE postgres_trigger \n SET \n postgres_resource_path = $1,\n replication_slot_name = $2,\n publication_name = $3,\n script_path = $4,\n path = $5,\n is_flow = $6,\n edited_by = $7,\n email = $8,\n edited_at = now(),\n server_id = NULL,\n error = NULL,\n error_handler_path = $11,\n error_handler_args = $12,\n retry = $13\n WHERE \n workspace_id = $9 AND path = $10\n ", + "query": "\n UPDATE postgres_trigger \n SET \n postgres_resource_path = $1,\n replication_slot_name = $2,\n publication_name = $3,\n script_path = $4,\n path = $5,\n is_flow = $6,\n edited_by = $7,\n email = $8,\n edited_at = now(),\n server_id = NULL,\n error = NULL,\n error_handler_path = $11,\n error_handler_args = $12,\n retry = $13,\n suspend_number = $14\n WHERE \n workspace_id = $9 AND path = $10\n ", "describe": { "columns": [], "parameters": { @@ -17,10 +17,11 @@ "Text", "Varchar", "Jsonb", - "Jsonb" + "Jsonb", + "Int4" ] }, "nullable": [] }, - "hash": "e56c71de41ba0750ae9ae8540c903cb0bf241d959a6c8f7bb896160001a6672b" + "hash": "488af33509bc10e6315d6ecc6d431fffd03f95538c7036320137ca2c3bcdedee" } diff --git a/backend/.sqlx/query-e9941e580a21848fa71b38c58030078a25f117a3bfec78d5270a4c4970f2465e.json b/backend/.sqlx/query-4fa8f58b8ca1bde91b41707fe2163676e2bfb912e1344706a251ed2ac15636f5.json similarity index 81% rename from backend/.sqlx/query-e9941e580a21848fa71b38c58030078a25f117a3bfec78d5270a4c4970f2465e.json rename to backend/.sqlx/query-4fa8f58b8ca1bde91b41707fe2163676e2bfb912e1344706a251ed2ac15636f5.json index 1e67891f486b5..f1232e8da2dce 100644 --- a/backend/.sqlx/query-e9941e580a21848fa71b38c58030078a25f117a3bfec78d5270a4c4970f2465e.json +++ b/backend/.sqlx/query-4fa8f58b8ca1bde91b41707fe2163676e2bfb912e1344706a251ed2ac15636f5.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE sqs_trigger \n SET \n queue_url = $1,\n aws_resource_path = $2,\n message_attributes = $3,\n aws_auth_resource_type = $4,\n script_path = $5,\n path = $6,\n is_flow = $7,\n edited_by = $8,\n email = $9,\n edited_at = now(),\n server_id = NULL,\n error = NULL,\n error_handler_path = $12,\n error_handler_args = $13,\n retry = $14\n WHERE \n workspace_id = $10 AND path = $11\n ", + "query": "\n UPDATE sqs_trigger \n SET \n queue_url = $1,\n aws_resource_path = $2,\n message_attributes = $3,\n aws_auth_resource_type = $4,\n script_path = $5,\n path = $6,\n is_flow = $7,\n edited_by = $8,\n email = $9,\n edited_at = now(),\n server_id = NULL,\n error = NULL,\n error_handler_path = $12,\n error_handler_args = $13,\n retry = $14,\n suspend_number = $15\n WHERE \n workspace_id = $10 AND path = $11\n ", "describe": { "columns": [], "parameters": { @@ -28,10 +28,11 @@ "Text", "Varchar", "Jsonb", - "Jsonb" + "Jsonb", + "Int4" ] }, "nullable": [] }, - "hash": "e9941e580a21848fa71b38c58030078a25f117a3bfec78d5270a4c4970f2465e" + "hash": "4fa8f58b8ca1bde91b41707fe2163676e2bfb912e1344706a251ed2ac15636f5" } diff --git a/backend/.sqlx/query-520e6b27bed78d78e07a0cf627a0dff6ab03541f5d9fccc643e9dc7ac3e63727.json b/backend/.sqlx/query-520e6b27bed78d78e07a0cf627a0dff6ab03541f5d9fccc643e9dc7ac3e63727.json new file mode 100644 index 0000000000000..3fb98822d3f78 --- /dev/null +++ b/backend/.sqlx/query-520e6b27bed78d78e07a0cf627a0dff6ab03541f5d9fccc643e9dc7ac3e63727.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM v2_job_queue WHERE workspace_id = $1 AND suspend = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "520e6b27bed78d78e07a0cf627a0dff6ab03541f5d9fccc643e9dc7ac3e63727" +} diff --git a/backend/.sqlx/query-0ef1e5bbbefc117a4cdaf414b3652354641c2f735d071540f858bc064f2432cd.json b/backend/.sqlx/query-54ebe2c3ba3fa684232023b517543b3d2701311af0de9fdd20a80b7108d5cac9.json similarity index 77% rename from backend/.sqlx/query-0ef1e5bbbefc117a4cdaf414b3652354641c2f735d071540f858bc064f2432cd.json rename to backend/.sqlx/query-54ebe2c3ba3fa684232023b517543b3d2701311af0de9fdd20a80b7108d5cac9.json index a867ace2cb8b4..75865e51364ff 100644 --- a/backend/.sqlx/query-0ef1e5bbbefc117a4cdaf414b3652354641c2f735d071540f858bc064f2432cd.json +++ b/backend/.sqlx/query-54ebe2c3ba3fa684232023b517543b3d2701311af0de9fdd20a80b7108d5cac9.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE nats_trigger \n SET \n nats_resource_path = $1,\n subjects = $2,\n stream_name = $3,\n consumer_name = $4,\n use_jetstream = $5,\n script_path = $6,\n path = $7,\n is_flow = $8,\n edited_by = $9,\n email = $10,\n edited_at = now(),\n server_id = NULL,\n error = NULL,\n error_handler_path = $13,\n error_handler_args = $14,\n retry = $15\n WHERE \n workspace_id = $11 AND path = $12\n ", + "query": "\n UPDATE nats_trigger \n SET \n nats_resource_path = $1,\n subjects = $2,\n stream_name = $3,\n consumer_name = $4,\n use_jetstream = $5,\n script_path = $6,\n path = $7,\n is_flow = $8,\n edited_by = $9,\n email = $10,\n edited_at = now(),\n server_id = NULL,\n error = NULL,\n error_handler_path = $13,\n error_handler_args = $14,\n retry = $15,\n suspend_number = $16\n WHERE \n workspace_id = $11 AND path = $12\n ", "describe": { "columns": [], "parameters": { @@ -19,10 +19,11 @@ "Text", "Varchar", "Jsonb", - "Jsonb" + "Jsonb", + "Int4" ] }, "nullable": [] }, - "hash": "0ef1e5bbbefc117a4cdaf414b3652354641c2f735d071540f858bc064f2432cd" + "hash": "54ebe2c3ba3fa684232023b517543b3d2701311af0de9fdd20a80b7108d5cac9" } diff --git a/backend/.sqlx/query-39cd46049a6e7d21d310a4973b3b40604cbb8c5ea1d28e4f74651505c317b440.json b/backend/.sqlx/query-594361c66b0883ef521508705004202d97b974ffcb3405d57df818ab94533bb9.json similarity index 67% rename from backend/.sqlx/query-39cd46049a6e7d21d310a4973b3b40604cbb8c5ea1d28e4f74651505c317b440.json rename to backend/.sqlx/query-594361c66b0883ef521508705004202d97b974ffcb3405d57df818ab94533bb9.json index 0b80171146a6e..bfc1655114135 100644 --- a/backend/.sqlx/query-39cd46049a6e7d21d310a4973b3b40604cbb8c5ea1d28e4f74651505c317b440.json +++ b/backend/.sqlx/query-594361c66b0883ef521508705004202d97b974ffcb3405d57df818ab94533bb9.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT \n gcp_resource_path, \n script_path,\n is_flow, \n workspace_id,\n path,\n edited_by,\n email,\n delivery_config AS \"delivery_config: _\",\n retry as \"retry: _\",\n error_handler_path,\n error_handler_args as \"error_handler_args: _\"\n FROM\n gcp_trigger\n WHERE\n workspace_id = $1 AND\n path = $2 AND\n delivery_type = 'push'::DELIVERY_MODE \n ", + "query": "\n SELECT \n gcp_resource_path, \n script_path,\n is_flow,\n suspend_number,\n workspace_id,\n path,\n edited_by,\n email,\n delivery_config AS \"delivery_config: _\",\n retry as \"retry: _\",\n error_handler_path,\n error_handler_args as \"error_handler_args: _\"\n FROM\n gcp_trigger\n WHERE\n workspace_id = $1 AND\n path = $2 AND\n delivery_type = 'push'::DELIVERY_MODE \n ", "describe": { "columns": [ { @@ -20,41 +20,46 @@ }, { "ordinal": 3, + "name": "suspend_number", + "type_info": "Int4" + }, + { + "ordinal": 4, "name": "workspace_id", "type_info": "Varchar" }, { - "ordinal": 4, + "ordinal": 5, "name": "path", "type_info": "Varchar" }, { - "ordinal": 5, + "ordinal": 6, "name": "edited_by", "type_info": "Varchar" }, { - "ordinal": 6, + "ordinal": 7, "name": "email", "type_info": "Varchar" }, { - "ordinal": 7, + "ordinal": 8, "name": "delivery_config: _", "type_info": "Jsonb" }, { - "ordinal": 8, + "ordinal": 9, "name": "retry: _", "type_info": "Jsonb" }, { - "ordinal": 9, + "ordinal": 10, "name": "error_handler_path", "type_info": "Varchar" }, { - "ordinal": 10, + "ordinal": 11, "name": "error_handler_args: _", "type_info": "Jsonb" } @@ -69,6 +74,7 @@ false, false, false, + true, false, false, false, @@ -79,5 +85,5 @@ true ] }, - "hash": "39cd46049a6e7d21d310a4973b3b40604cbb8c5ea1d28e4f74651505c317b440" + "hash": "594361c66b0883ef521508705004202d97b974ffcb3405d57df818ab94533bb9" } diff --git a/backend/.sqlx/query-596eef1e1ee7fea56d8335aa9acfdd5d32cf0a956fd46c5c77fc8bce3167d164.json b/backend/.sqlx/query-596eef1e1ee7fea56d8335aa9acfdd5d32cf0a956fd46c5c77fc8bce3167d164.json new file mode 100644 index 0000000000000..5f698096f69d4 --- /dev/null +++ b/backend/.sqlx/query-596eef1e1ee7fea56d8335aa9acfdd5d32cf0a956fd46c5c77fc8bce3167d164.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM v2_job WHERE id = $1 AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [] + }, + "hash": "596eef1e1ee7fea56d8335aa9acfdd5d32cf0a956fd46c5c77fc8bce3167d164" +} diff --git a/backend/.sqlx/query-5a219a2532517869578c4504ff3153c43903f929ae5d62fbba12610f89c36d55.json b/backend/.sqlx/query-5a219a2532517869578c4504ff3153c43903f929ae5d62fbba12610f89c36d55.json index 713ccb9dd35d9..36ddb8ab9fd94 100644 --- a/backend/.sqlx/query-5a219a2532517869578c4504ff3153c43903f929ae5d62fbba12610f89c36d55.json +++ b/backend/.sqlx/query-5a219a2532517869578c4504ff3153c43903f929ae5d62fbba12610f89c36d55.json @@ -15,7 +15,7 @@ ] }, "nullable": [ - null + true ] }, "hash": "5a219a2532517869578c4504ff3153c43903f929ae5d62fbba12610f89c36d55" diff --git a/backend/.sqlx/query-b5f6870444fc97d8beab3cf61c91e58936138d80a97b423c17338ba069b6a3aa.json b/backend/.sqlx/query-5fbfa74803bbf4a1edcb88da29324d942a349203ee1045a12ebe8601a4cbb943.json similarity index 80% rename from backend/.sqlx/query-b5f6870444fc97d8beab3cf61c91e58936138d80a97b423c17338ba069b6a3aa.json rename to backend/.sqlx/query-5fbfa74803bbf4a1edcb88da29324d942a349203ee1045a12ebe8601a4cbb943.json index 1d8fa42e31700..382fe32c23d38 100644 --- a/backend/.sqlx/query-b5f6870444fc97d8beab3cf61c91e58936138d80a97b423c17338ba069b6a3aa.json +++ b/backend/.sqlx/query-5fbfa74803bbf4a1edcb88da29324d942a349203ee1045a12ebe8601a4cbb943.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE \n websocket_trigger\n SET\n url = $1,\n script_path = $2,\n path = $3,\n is_flow = $4,\n filters = $5,\n initial_messages = $6,\n url_runnable_args = $7,\n edited_by = $8,\n email = $9,\n can_return_message = $10,\n can_return_error_result = $11,\n edited_at = now(),\n server_id = NULL,\n error = NULL,\n error_handler_path = $14,\n error_handler_args = $15,\n retry = $16\n WHERE\n workspace_id = $12 AND path = $13\n ", + "query": "\n UPDATE \n websocket_trigger\n SET\n url = $1,\n script_path = $2,\n path = $3,\n is_flow = $4,\n filters = $5,\n initial_messages = $6,\n url_runnable_args = $7,\n edited_by = $8,\n email = $9,\n can_return_message = $10,\n can_return_error_result = $11,\n edited_at = now(),\n server_id = NULL,\n error = NULL,\n error_handler_path = $14,\n error_handler_args = $15,\n retry = $16,\n suspend_number = $17\n WHERE\n workspace_id = $12 AND path = $13\n ", "describe": { "columns": [], "parameters": { @@ -20,10 +20,11 @@ "Text", "Varchar", "Jsonb", - "Jsonb" + "Jsonb", + "Int4" ] }, "nullable": [] }, - "hash": "b5f6870444fc97d8beab3cf61c91e58936138d80a97b423c17338ba069b6a3aa" + "hash": "5fbfa74803bbf4a1edcb88da29324d942a349203ee1045a12ebe8601a4cbb943" } diff --git a/backend/.sqlx/query-4c64bd0e364f536597db83161b5a27ff58b5ec7148bc94807423593bcfa27b90.json b/backend/.sqlx/query-6bf3ac66b1fdebc92d700b7aa594adc6ca727a009a849df877dbb745867a1070.json similarity index 89% rename from backend/.sqlx/query-4c64bd0e364f536597db83161b5a27ff58b5ec7148bc94807423593bcfa27b90.json rename to backend/.sqlx/query-6bf3ac66b1fdebc92d700b7aa594adc6ca727a009a849df877dbb745867a1070.json index dfe905113e5f2..ddd880ec8cc95 100644 --- a/backend/.sqlx/query-4c64bd0e364f536597db83161b5a27ff58b5ec7148bc94807423593bcfa27b90.json +++ b/backend/.sqlx/query-6bf3ac66b1fdebc92d700b7aa594adc6ca727a009a849df877dbb745867a1070.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE\n http_trigger\n SET\n wrap_body = $1,\n raw_string = $2,\n authentication_resource_path = $3,\n script_path = $4,\n path = $5,\n is_flow = $6,\n http_method = $7,\n static_asset_config = $8,\n edited_by = $9,\n email = $10,\n request_type = $11,\n authentication_method = $12,\n summary = $13,\n description = $14,\n edited_at = now(),\n is_static_website = $15,\n error_handler_path = $16,\n error_handler_args = $17,\n retry = $18\n WHERE\n workspace_id = $19 AND\n path = $20\n ", + "query": "\n UPDATE\n http_trigger\n SET\n wrap_body = $1,\n raw_string = $2,\n authentication_resource_path = $3,\n script_path = $4,\n path = $5,\n is_flow = $6,\n http_method = $7,\n static_asset_config = $8,\n edited_by = $9,\n email = $10,\n request_type = $11,\n authentication_method = $12,\n summary = $13,\n description = $14,\n edited_at = now(),\n is_static_website = $15,\n error_handler_path = $16,\n error_handler_args = $17,\n retry = $18,\n suspend_number = $19\n WHERE\n workspace_id = $20 AND\n path = $21\n ", "describe": { "columns": [], "parameters": { @@ -61,11 +61,12 @@ "Varchar", "Jsonb", "Jsonb", + "Int4", "Text", "Text" ] }, "nullable": [] }, - "hash": "4c64bd0e364f536597db83161b5a27ff58b5ec7148bc94807423593bcfa27b90" + "hash": "6bf3ac66b1fdebc92d700b7aa594adc6ca727a009a849df877dbb745867a1070" } diff --git a/backend/.sqlx/query-9ebf262393fc4a29e8f09b304dd99e786fe78dd21721e8f54dc943dd571a7e08.json b/backend/.sqlx/query-6cbcfd2541887f1a9dc6bb546a3f5367144e8c68b39528b6fed1fdb834991eff.json similarity index 72% rename from backend/.sqlx/query-9ebf262393fc4a29e8f09b304dd99e786fe78dd21721e8f54dc943dd571a7e08.json rename to backend/.sqlx/query-6cbcfd2541887f1a9dc6bb546a3f5367144e8c68b39528b6fed1fdb834991eff.json index 53c7562d030ab..83ea14be10ac1 100644 --- a/backend/.sqlx/query-9ebf262393fc4a29e8f09b304dd99e786fe78dd21721e8f54dc943dd571a7e08.json +++ b/backend/.sqlx/query-6cbcfd2541887f1a9dc6bb546a3f5367144e8c68b39528b6fed1fdb834991eff.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n INSERT INTO websocket_trigger (\n workspace_id,\n path,\n url,\n script_path,\n is_flow,\n enabled,\n filters,\n initial_messages,\n url_runnable_args,\n edited_by,\n can_return_message,\n can_return_error_result,\n email,\n edited_at,\n error_handler_path,\n error_handler_args,\n retry\n ) VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, now(), $14, $15, $16\n )\n ", + "query": "\n INSERT INTO websocket_trigger (\n workspace_id,\n path,\n url,\n script_path,\n is_flow,\n enabled,\n filters,\n initial_messages,\n url_runnable_args,\n edited_by,\n can_return_message,\n can_return_error_result,\n email,\n edited_at,\n error_handler_path,\n error_handler_args,\n retry,\n suspend_number\n ) VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, now(), $14, $15, $16, $17\n )\n ", "describe": { "columns": [], "parameters": { @@ -20,10 +20,11 @@ "Varchar", "Varchar", "Jsonb", - "Jsonb" + "Jsonb", + "Int4" ] }, "nullable": [] }, - "hash": "9ebf262393fc4a29e8f09b304dd99e786fe78dd21721e8f54dc943dd571a7e08" + "hash": "6cbcfd2541887f1a9dc6bb546a3f5367144e8c68b39528b6fed1fdb834991eff" } diff --git a/backend/.sqlx/query-734c7687b5b767f8cfdf6da404381c6d17c23f67ff919f17bab3c5fc73506c6d.json b/backend/.sqlx/query-734c7687b5b767f8cfdf6da404381c6d17c23f67ff919f17bab3c5fc73506c6d.json new file mode 100644 index 0000000000000..b7637d52e0946 --- /dev/null +++ b/backend/.sqlx/query-734c7687b5b767f8cfdf6da404381c6d17c23f67ff919f17bab3c5fc73506c6d.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM v2_job_queue WHERE workspace_id = $1 AND suspend = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Int4" + ] + }, + "nullable": [ + null + ] + }, + "hash": "734c7687b5b767f8cfdf6da404381c6d17c23f67ff919f17bab3c5fc73506c6d" +} diff --git a/backend/.sqlx/query-06af027f6ed10200de2006a2fc48771a8f42c28c87b78220eec1bddeae1f648f.json b/backend/.sqlx/query-74850c79b25d88c7824862db8c9711abcdf28d6155dc1bd7101586269406194e.json similarity index 71% rename from backend/.sqlx/query-06af027f6ed10200de2006a2fc48771a8f42c28c87b78220eec1bddeae1f648f.json rename to backend/.sqlx/query-74850c79b25d88c7824862db8c9711abcdf28d6155dc1bd7101586269406194e.json index 8566af0709592..5977e463bc560 100644 --- a/backend/.sqlx/query-06af027f6ed10200de2006a2fc48771a8f42c28c87b78220eec1bddeae1f648f.json +++ b/backend/.sqlx/query-74850c79b25d88c7824862db8c9711abcdf28d6155dc1bd7101586269406194e.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n INSERT INTO postgres_trigger (\n workspace_id,\n path,\n postgres_resource_path,\n replication_slot_name,\n publication_name,\n script_path,\n is_flow,\n enabled,\n edited_by,\n email,\n edited_at,\n error_handler_path,\n error_handler_args,\n retry\n ) VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, now(), $11, $12, $13\n )\n ", + "query": "\n INSERT INTO postgres_trigger (\n workspace_id,\n path,\n postgres_resource_path,\n replication_slot_name,\n publication_name,\n script_path,\n is_flow,\n enabled,\n edited_by,\n email,\n edited_at,\n error_handler_path,\n error_handler_args,\n retry,\n suspend_number\n ) VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, now(), $11, $12, $13, $14\n )\n ", "describe": { "columns": [], "parameters": { @@ -17,10 +17,11 @@ "Varchar", "Varchar", "Jsonb", - "Jsonb" + "Jsonb", + "Int4" ] }, "nullable": [] }, - "hash": "06af027f6ed10200de2006a2fc48771a8f42c28c87b78220eec1bddeae1f648f" + "hash": "74850c79b25d88c7824862db8c9711abcdf28d6155dc1bd7101586269406194e" } diff --git a/backend/.sqlx/query-465144ea7e2930203618d9814a3e20c77b4363cf9e7c655d395f3fe40c247f61.json b/backend/.sqlx/query-75af156459c8bbbf152cf5a6fc57ee5704e96395ff64528115d988747120d71e.json similarity index 88% rename from backend/.sqlx/query-465144ea7e2930203618d9814a3e20c77b4363cf9e7c655d395f3fe40c247f61.json rename to backend/.sqlx/query-75af156459c8bbbf152cf5a6fc57ee5704e96395ff64528115d988747120d71e.json index 7869fe789eb5e..3804ade90f345 100644 --- a/backend/.sqlx/query-465144ea7e2930203618d9814a3e20c77b4363cf9e7c655d395f3fe40c247f61.json +++ b/backend/.sqlx/query-75af156459c8bbbf152cf5a6fc57ee5704e96395ff64528115d988747120d71e.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE\n http_trigger\n SET\n route_path = $1,\n route_path_key = $2,\n workspaced_route = $3,\n wrap_body = $4,\n raw_string = $5,\n authentication_resource_path = $6,\n script_path = $7,\n path = $8,\n is_flow = $9,\n http_method = $10,\n static_asset_config = $11,\n edited_by = $12,\n email = $13,\n request_type = $14,\n authentication_method = $15,\n summary = $16,\n description = $17,\n edited_at = now(),\n is_static_website = $18,\n error_handler_path = $19,\n error_handler_args = $20,\n retry = $21\n WHERE\n workspace_id = $22 AND\n path = $23\n ", + "query": "\n UPDATE\n http_trigger\n SET\n route_path = $1,\n route_path_key = $2,\n workspaced_route = $3,\n wrap_body = $4,\n raw_string = $5,\n authentication_resource_path = $6,\n script_path = $7,\n path = $8,\n is_flow = $9,\n http_method = $10,\n static_asset_config = $11,\n edited_by = $12,\n email = $13,\n request_type = $14,\n authentication_method = $15,\n summary = $16,\n description = $17,\n edited_at = now(),\n is_static_website = $18,\n error_handler_path = $19,\n error_handler_args = $20,\n retry = $21,\n suspend_number = $22\n WHERE\n workspace_id = $23 AND\n path = $24\n ", "describe": { "columns": [], "parameters": { @@ -64,11 +64,12 @@ "Varchar", "Jsonb", "Jsonb", + "Int4", "Text", "Text" ] }, "nullable": [] }, - "hash": "465144ea7e2930203618d9814a3e20c77b4363cf9e7c655d395f3fe40c247f61" + "hash": "75af156459c8bbbf152cf5a6fc57ee5704e96395ff64528115d988747120d71e" } diff --git a/backend/.sqlx/query-0382065b3dfd78b384e26f81317af91de289f52462e74343770a8b0d47d0577d.json b/backend/.sqlx/query-8990d1a7583a06e7f2c8bfaef42683e5bc6d67cdee066e8c1cad58f78c6d3c52.json similarity index 73% rename from backend/.sqlx/query-0382065b3dfd78b384e26f81317af91de289f52462e74343770a8b0d47d0577d.json rename to backend/.sqlx/query-8990d1a7583a06e7f2c8bfaef42683e5bc6d67cdee066e8c1cad58f78c6d3c52.json index 7e2371e9d8669..0f3c202216687 100644 --- a/backend/.sqlx/query-0382065b3dfd78b384e26f81317af91de289f52462e74343770a8b0d47d0577d.json +++ b/backend/.sqlx/query-8990d1a7583a06e7f2c8bfaef42683e5bc6d67cdee066e8c1cad58f78c6d3c52.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n INSERT INTO kafka_trigger (\n workspace_id,\n path,\n kafka_resource_path,\n group_id,\n topics,\n script_path,\n is_flow,\n enabled,\n edited_by,\n email,\n edited_at,\n error_handler_path,\n error_handler_args,\n retry\n ) VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, now(), $11, $12, $13\n )\n ", + "query": "\n INSERT INTO kafka_trigger (\n workspace_id,\n path,\n kafka_resource_path,\n group_id,\n topics,\n script_path,\n is_flow,\n enabled,\n edited_by,\n email,\n edited_at,\n error_handler_path,\n error_handler_args,\n retry,\n suspend_number\n ) VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, now(), $11, $12, $13, $14\n )\n ", "describe": { "columns": [], "parameters": { @@ -17,10 +17,11 @@ "Varchar", "Varchar", "Jsonb", - "Jsonb" + "Jsonb", + "Int4" ] }, "nullable": [] }, - "hash": "0382065b3dfd78b384e26f81317af91de289f52462e74343770a8b0d47d0577d" + "hash": "8990d1a7583a06e7f2c8bfaef42683e5bc6d67cdee066e8c1cad58f78c6d3c52" } diff --git a/backend/.sqlx/query-17ca259e1c78e1317fdd19436e15bef428fc4f0d52776d7a5fca64f17225ef30.json b/backend/.sqlx/query-925ed4e302228b2608ba5b384f1c6a8a9e5fa31b6c98a410fbbab8eb78d57416.json similarity index 82% rename from backend/.sqlx/query-17ca259e1c78e1317fdd19436e15bef428fc4f0d52776d7a5fca64f17225ef30.json rename to backend/.sqlx/query-925ed4e302228b2608ba5b384f1c6a8a9e5fa31b6c98a410fbbab8eb78d57416.json index dd40aabbc1cfc..395c3fb580c1a 100644 --- a/backend/.sqlx/query-17ca259e1c78e1317fdd19436e15bef428fc4f0d52776d7a5fca64f17225ef30.json +++ b/backend/.sqlx/query-925ed4e302228b2608ba5b384f1c6a8a9e5fa31b6c98a410fbbab8eb78d57416.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE \n gcp_trigger \n SET \n gcp_resource_path = $1,\n subscription_id = $2,\n topic_id = $3,\n delivery_type = $4,\n delivery_config = $5,\n is_flow = $6, \n edited_by = $7, \n email = $8,\n script_path = $9,\n path = $10,\n enabled = $11,\n edited_at = now(), \n error = NULL,\n server_id = NULL,\n error_handler_path = $14,\n error_handler_args = $15,\n retry = $16,\n auto_acknowledge_msg = $17,\n ack_deadline = $18\n WHERE \n workspace_id = $12 AND \n path = $13\n ", + "query": "\n UPDATE \n gcp_trigger \n SET \n gcp_resource_path = $1,\n subscription_id = $2,\n topic_id = $3,\n delivery_type = $4,\n delivery_config = $5,\n is_flow = $6, \n edited_by = $7, \n email = $8,\n script_path = $9,\n path = $10,\n enabled = $11,\n edited_at = now(), \n error = NULL,\n server_id = NULL,\n error_handler_path = $14,\n error_handler_args = $15,\n retry = $16,\n auto_acknowledge_msg = $17,\n ack_deadline = $18,\n suspend_number = $19\n WHERE \n workspace_id = $12 AND \n path = $13\n ", "describe": { "columns": [], "parameters": { @@ -32,10 +32,11 @@ "Jsonb", "Jsonb", "Bool", + "Int4", "Int4" ] }, "nullable": [] }, - "hash": "17ca259e1c78e1317fdd19436e15bef428fc4f0d52776d7a5fca64f17225ef30" + "hash": "925ed4e302228b2608ba5b384f1c6a8a9e5fa31b6c98a410fbbab8eb78d57416" } diff --git a/backend/.sqlx/query-ab2826ee002b12f7c342331d2effeaee284ab959022c1d7347daca009574d88b.json b/backend/.sqlx/query-ab2826ee002b12f7c342331d2effeaee284ab959022c1d7347daca009574d88b.json new file mode 100644 index 0000000000000..80379e1888a64 --- /dev/null +++ b/backend/.sqlx/query-ab2826ee002b12f7c342331d2effeaee284ab959022c1d7347daca009574d88b.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n WITH jobs_to_resume AS (\n SELECT \n jq.id\n FROM \n v2_job_queue jq \n INNER JOIN v2_job j ON j.id = jq.id \n WHERE \n j.workspace_id = $1 AND \n jq.suspend = $2 AND \n jq.canceled_by IS NULL\n )\n UPDATE \n v2_job_queue \n SET \n suspend = 0, \n scheduled_for = NOW()\n WHERE \n id IN (SELECT id FROM jobs_to_resume)\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "ab2826ee002b12f7c342331d2effeaee284ab959022c1d7347daca009574d88b" +} diff --git a/backend/.sqlx/query-b034e2cea9a95df06c3e4f2ae5ee56343c5c76a6b38ea1d765989f9d9d80de11.json b/backend/.sqlx/query-b034e2cea9a95df06c3e4f2ae5ee56343c5c76a6b38ea1d765989f9d9d80de11.json new file mode 100644 index 0000000000000..1e7017189168e --- /dev/null +++ b/backend/.sqlx/query-b034e2cea9a95df06c3e4f2ae5ee56343c5c76a6b38ea1d765989f9d9d80de11.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "\n WITH jobs_to_cancel AS (\n SELECT \n v2_job_queue.id\n FROM \n v2_job_queue \n INNER JOIN v2_job ON v2_job.id = v2_job_queue.id \n WHERE \n v2_job.workspace_id = $1 AND \n v2_job_queue.suspend = $2 AND \n v2_job_queue.canceled_by IS NULL\n )\n UPDATE \n v2_job_queue \n SET \n canceled_by = $3,\n canceled_reason = 'Canceled all suspended jobs with suspend number',\n suspend = 0,\n scheduled_for = now()\n WHERE \n id IN (SELECT id FROM jobs_to_cancel)\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int4", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "b034e2cea9a95df06c3e4f2ae5ee56343c5c76a6b38ea1d765989f9d9d80de11" +} diff --git a/backend/.sqlx/query-b2ed2cf9b96283f05a859171755a939b493a4ede46de8e54b9f75e04db08b4b1.json b/backend/.sqlx/query-b2ed2cf9b96283f05a859171755a939b493a4ede46de8e54b9f75e04db08b4b1.json new file mode 100644 index 0000000000000..90c5587a9ca41 --- /dev/null +++ b/backend/.sqlx/query-b2ed2cf9b96283f05a859171755a939b493a4ede46de8e54b9f75e04db08b4b1.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE v2_job_queue SET suspend = NULL WHERE workspace_id = $1 AND suspend = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "b2ed2cf9b96283f05a859171755a939b493a4ede46de8e54b9f75e04db08b4b1" +} diff --git a/backend/.sqlx/query-1f6b773ce34fe51d03d6f9a2345481629c62453eebbb08f82dd2da23389bc117.json b/backend/.sqlx/query-b32af7075f1c15bada6383afec6a72feaea342acdb06c8bbd8e28e94bba3043e.json similarity index 85% rename from backend/.sqlx/query-1f6b773ce34fe51d03d6f9a2345481629c62453eebbb08f82dd2da23389bc117.json rename to backend/.sqlx/query-b32af7075f1c15bada6383afec6a72feaea342acdb06c8bbd8e28e94bba3043e.json index f69ec4f2a6937..561d5abb01e59 100644 --- a/backend/.sqlx/query-1f6b773ce34fe51d03d6f9a2345481629c62453eebbb08f82dd2da23389bc117.json +++ b/backend/.sqlx/query-b32af7075f1c15bada6383afec6a72feaea342acdb06c8bbd8e28e94bba3043e.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n INSERT INTO http_trigger (\n workspace_id,\n path,\n route_path,\n route_path_key,\n workspaced_route,\n authentication_resource_path,\n wrap_body,\n raw_string,\n script_path,\n summary,\n description,\n is_flow,\n request_type,\n authentication_method,\n http_method,\n static_asset_config,\n edited_by,\n email,\n edited_at,\n is_static_website,\n error_handler_path,\n error_handler_args,\n retry\n )\n VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, now(), $19, $20, $21, $22\n )\n ", + "query": "\n INSERT INTO http_trigger (\n workspace_id,\n path,\n route_path,\n route_path_key,\n workspaced_route,\n authentication_resource_path,\n wrap_body,\n raw_string,\n script_path,\n summary,\n description,\n is_flow,\n request_type,\n authentication_method,\n http_method,\n static_asset_config,\n edited_by,\n email,\n edited_at,\n is_static_website,\n error_handler_path,\n error_handler_args,\n retry,\n suspend_number\n )\n VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, now(), $19, $20, $21, $22, $23\n )\n ", "describe": { "columns": [], "parameters": { @@ -64,10 +64,11 @@ "Bool", "Varchar", "Jsonb", - "Jsonb" + "Jsonb", + "Int4" ] }, "nullable": [] }, - "hash": "1f6b773ce34fe51d03d6f9a2345481629c62453eebbb08f82dd2da23389bc117" + "hash": "b32af7075f1c15bada6383afec6a72feaea342acdb06c8bbd8e28e94bba3043e" } diff --git a/backend/.sqlx/query-9abbb75c238372cc3dbaebf1dbc50ff78df6c5dcf92b08d611afe23c5b865521.json b/backend/.sqlx/query-b8a7284ca502ab017160c14b71a71bf40ed16cb486f4d1c951d381ae39973e01.json similarity index 75% rename from backend/.sqlx/query-9abbb75c238372cc3dbaebf1dbc50ff78df6c5dcf92b08d611afe23c5b865521.json rename to backend/.sqlx/query-b8a7284ca502ab017160c14b71a71bf40ed16cb486f4d1c951d381ae39973e01.json index 65dc60db730aa..07f65e47df38b 100644 --- a/backend/.sqlx/query-9abbb75c238372cc3dbaebf1dbc50ff78df6c5dcf92b08d611afe23c5b865521.json +++ b/backend/.sqlx/query-b8a7284ca502ab017160c14b71a71bf40ed16cb486f4d1c951d381ae39973e01.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n INSERT INTO sqs_trigger (\n workspace_id,\n path,\n queue_url,\n aws_resource_path,\n message_attributes,\n aws_auth_resource_type,\n script_path,\n is_flow,\n enabled,\n edited_by,\n email,\n edited_at,\n error_handler_path,\n error_handler_args,\n retry\n ) VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, now(), $12, $13, $14\n )\n ", + "query": "\n INSERT INTO sqs_trigger (\n workspace_id,\n path,\n queue_url,\n aws_resource_path,\n message_attributes,\n aws_auth_resource_type,\n script_path,\n is_flow,\n enabled,\n edited_by,\n email,\n edited_at,\n error_handler_path,\n error_handler_args,\n retry,\n suspend_number\n ) VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, now(), $12, $13, $14, $15\n )\n ", "describe": { "columns": [], "parameters": { @@ -28,10 +28,11 @@ "Varchar", "Varchar", "Jsonb", - "Jsonb" + "Jsonb", + "Int4" ] }, "nullable": [] }, - "hash": "9abbb75c238372cc3dbaebf1dbc50ff78df6c5dcf92b08d611afe23c5b865521" + "hash": "b8a7284ca502ab017160c14b71a71bf40ed16cb486f4d1c951d381ae39973e01" } diff --git a/backend/.sqlx/query-0f697b1ab3105e2ea036f8ecace2d54f97bc2d0ef52f5812244a97c289523592.json b/backend/.sqlx/query-bc92d97de4b46ee1255123fe19c5849c15a4f98447ebff26237afdd09bf5a706.json similarity index 81% rename from backend/.sqlx/query-0f697b1ab3105e2ea036f8ecace2d54f97bc2d0ef52f5812244a97c289523592.json rename to backend/.sqlx/query-bc92d97de4b46ee1255123fe19c5849c15a4f98447ebff26237afdd09bf5a706.json index ec215e0f29a98..e3adffe44479e 100644 --- a/backend/.sqlx/query-0f697b1ab3105e2ea036f8ecace2d54f97bc2d0ef52f5812244a97c289523592.json +++ b/backend/.sqlx/query-bc92d97de4b46ee1255123fe19c5849c15a4f98447ebff26237afdd09bf5a706.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE \n mqtt_trigger \n SET\n mqtt_resource_path = $1,\n subscribe_topics = $2,\n client_version = $3,\n client_id = $4,\n v3_config = $5,\n v5_config = $6,\n is_flow = $7, \n edited_by = $8, \n email = $9,\n script_path = $10,\n path = $11,\n edited_at = now(), \n error = NULL,\n server_id = NULL,\n error_handler_path = $14,\n error_handler_args = $15,\n retry = $16\n WHERE \n workspace_id = $12 AND \n path = $13\n ", + "query": "\n UPDATE \n mqtt_trigger \n SET\n mqtt_resource_path = $1,\n subscribe_topics = $2,\n client_version = $3,\n client_id = $4,\n v3_config = $5,\n v5_config = $6,\n is_flow = $7, \n edited_by = $8, \n email = $9,\n script_path = $10,\n path = $11,\n edited_at = now(), \n error = NULL,\n server_id = NULL,\n error_handler_path = $14,\n error_handler_args = $15,\n retry = $16,\n suspend_number = $17\n WHERE \n workspace_id = $12 AND \n path = $13\n ", "describe": { "columns": [], "parameters": { @@ -30,10 +30,11 @@ "Text", "Varchar", "Jsonb", - "Jsonb" + "Jsonb", + "Int4" ] }, "nullable": [] }, - "hash": "0f697b1ab3105e2ea036f8ecace2d54f97bc2d0ef52f5812244a97c289523592" + "hash": "bc92d97de4b46ee1255123fe19c5849c15a4f98447ebff26237afdd09bf5a706" } diff --git a/backend/.sqlx/query-be1b147e24317b8a9b4eebca24aa79bb2c82dc7d7ca09d929951cd8b38d4ece0.json b/backend/.sqlx/query-be1b147e24317b8a9b4eebca24aa79bb2c82dc7d7ca09d929951cd8b38d4ece0.json new file mode 100644 index 0000000000000..4691f3ca4f4f8 --- /dev/null +++ b/backend/.sqlx/query-be1b147e24317b8a9b4eebca24aa79bb2c82dc7d7ca09d929951cd8b38d4ece0.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT id FROM v2_job_queue WHERE workspace_id = $1 AND suspend = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [ + "Text", + "Int4" + ] + }, + "nullable": [ + false + ] + }, + "hash": "be1b147e24317b8a9b4eebca24aa79bb2c82dc7d7ca09d929951cd8b38d4ece0" +} diff --git a/backend/.sqlx/query-fe78796c5ea2384bdb6191b66943d746de874ca6600178f5db9797eda44f1733.json b/backend/.sqlx/query-d2a4b01130d1e76502ffe6c5a3220d4eec55f15296c9c5445ef38845402bf09d.json similarity index 78% rename from backend/.sqlx/query-fe78796c5ea2384bdb6191b66943d746de874ca6600178f5db9797eda44f1733.json rename to backend/.sqlx/query-d2a4b01130d1e76502ffe6c5a3220d4eec55f15296c9c5445ef38845402bf09d.json index 6881d0aef0c9d..0db643d6d15d9 100644 --- a/backend/.sqlx/query-fe78796c5ea2384bdb6191b66943d746de874ca6600178f5db9797eda44f1733.json +++ b/backend/.sqlx/query-d2a4b01130d1e76502ffe6c5a3220d4eec55f15296c9c5445ef38845402bf09d.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n INSERT INTO mqtt_trigger (\n mqtt_resource_path,\n subscribe_topics,\n client_version,\n client_id,\n v3_config,\n v5_config,\n workspace_id,\n path, \n script_path, \n is_flow, \n email, \n enabled, \n edited_by,\n error_handler_path,\n error_handler_args,\n retry\n ) \n VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16\n )", + "query": "\n INSERT INTO mqtt_trigger (\n mqtt_resource_path,\n subscribe_topics,\n client_version,\n client_id,\n v3_config,\n v5_config,\n workspace_id,\n path, \n script_path, \n is_flow, \n email, \n enabled, \n edited_by,\n error_handler_path,\n error_handler_args,\n retry,\n suspend_number\n ) \n VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17\n )", "describe": { "columns": [], "parameters": { @@ -30,10 +30,11 @@ "Varchar", "Varchar", "Jsonb", - "Jsonb" + "Jsonb", + "Int4" ] }, "nullable": [] }, - "hash": "fe78796c5ea2384bdb6191b66943d746de874ca6600178f5db9797eda44f1733" + "hash": "d2a4b01130d1e76502ffe6c5a3220d4eec55f15296c9c5445ef38845402bf09d" } diff --git a/backend/.sqlx/query-d9ed162b135a76edea752dd8da612b8d065215b39cd00ea1e84b22cf619d9757.json b/backend/.sqlx/query-d9ed162b135a76edea752dd8da612b8d065215b39cd00ea1e84b22cf619d9757.json new file mode 100644 index 0000000000000..a9ca50b54b6cb --- /dev/null +++ b/backend/.sqlx/query-d9ed162b135a76edea752dd8da612b8d065215b39cd00ea1e84b22cf619d9757.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM job_perms WHERE job_id = $1 AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [] + }, + "hash": "d9ed162b135a76edea752dd8da612b8d065215b39cd00ea1e84b22cf619d9757" +} diff --git a/backend/.sqlx/query-e42f45e45def71202aa08504f01297f603de4126ad0ae26afccd23dc2f2c9779.json b/backend/.sqlx/query-e42f45e45def71202aa08504f01297f603de4126ad0ae26afccd23dc2f2c9779.json new file mode 100644 index 0000000000000..ac36e8931dc82 --- /dev/null +++ b/backend/.sqlx/query-e42f45e45def71202aa08504f01297f603de4126ad0ae26afccd23dc2f2c9779.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE v2_job_queue SET suspend = NULL WHERE id = $1 AND workspace_id = $2 AND suspend = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Text", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "e42f45e45def71202aa08504f01297f603de4126ad0ae26afccd23dc2f2c9779" +} diff --git a/backend/.sqlx/query-bf2163c542fb8c4e173167a8f333ef762fecf782424c5b61b89f32918b8d6971.json b/backend/.sqlx/query-eee24a25a49dfaf2d0a2580bac234b42324748f98a1b8782654c90728171a9ef.json similarity index 94% rename from backend/.sqlx/query-bf2163c542fb8c4e173167a8f333ef762fecf782424c5b61b89f32918b8d6971.json rename to backend/.sqlx/query-eee24a25a49dfaf2d0a2580bac234b42324748f98a1b8782654c90728171a9ef.json index 46db07e1e0d00..06eaa84ceaab4 100644 --- a/backend/.sqlx/query-bf2163c542fb8c4e173167a8f333ef762fecf782424c5b61b89f32918b8d6971.json +++ b/backend/.sqlx/query-eee24a25a49dfaf2d0a2580bac234b42324748f98a1b8782654c90728171a9ef.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "WITH inserted_job AS (\n INSERT INTO v2_job (id, workspace_id, raw_code, raw_lock, raw_flow, tag, parent_job,\n created_by, permissioned_as, runnable_id, runnable_path, args, kind, trigger,\n script_lang, same_worker, pre_run_error, permissioned_as_email, visible_to_owner,\n flow_innermost_root_job, root_job, concurrent_limit, concurrency_time_window_s, timeout, flow_step_id,\n cache_ttl, priority, trigger_kind, script_entrypoint_override, preprocessed)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18,\n $19, $20, $38, $21, $22, $23, $24, $25, $26, $39::job_trigger_kind,\n ($12::JSONB)->>'_ENTRYPOINT_OVERRIDE', $27)\n ),\n inserted_runtime AS (\n INSERT INTO v2_job_runtime (id, ping) VALUES ($1, null)\n ),\n inserted_job_perms AS (\n INSERT INTO job_perms (job_id, email, username, is_admin, is_operator, folders, groups, workspace_id, end_user_email) \n values ($1, $32, $33, $34, $35, $36, $37, $2, $41) \n ON CONFLICT (job_id) DO UPDATE SET email = EXCLUDED.email, username = EXCLUDED.username, is_admin = EXCLUDED.is_admin, is_operator = EXCLUDED.is_operator, folders = EXCLUDED.folders, groups = EXCLUDED.groups, workspace_id = EXCLUDED.workspace_id, end_user_email = EXCLUDED.end_user_email\n )\n INSERT INTO v2_job_queue\n (workspace_id, id, running, scheduled_for, started_at, tag, priority)\n VALUES ($2, $1, $28, COALESCE($29, now()), CASE WHEN $27 OR $40 THEN now() END, $30, $31)", + "query": "WITH inserted_job AS (\n INSERT INTO v2_job (id, workspace_id, raw_code, raw_lock, raw_flow, tag, parent_job,\n created_by, permissioned_as, runnable_id, runnable_path, args, kind, trigger,\n script_lang, same_worker, pre_run_error, permissioned_as_email, visible_to_owner,\n flow_innermost_root_job, root_job, concurrent_limit, concurrency_time_window_s, timeout, flow_step_id,\n cache_ttl, priority, trigger_kind, script_entrypoint_override, preprocessed)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18,\n $19, $20, $38, $21, $22, $23, $24, $25, $26, $39::job_trigger_kind,\n ($12::JSONB)->>'_ENTRYPOINT_OVERRIDE', $27)\n ),\n inserted_runtime AS (\n INSERT INTO v2_job_runtime (id, ping) VALUES ($1, null)\n ),\n inserted_job_perms AS (\n INSERT INTO job_perms (job_id, email, username, is_admin, is_operator, folders, groups, workspace_id, end_user_email) \n values ($1, $32, $33, $34, $35, $36, $37, $2, $41) \n ON CONFLICT (job_id) DO UPDATE SET email = EXCLUDED.email, username = EXCLUDED.username, is_admin = EXCLUDED.is_admin, is_operator = EXCLUDED.is_operator, folders = EXCLUDED.folders, groups = EXCLUDED.groups, workspace_id = EXCLUDED.workspace_id, end_user_email = EXCLUDED.end_user_email\n )\n INSERT INTO v2_job_queue\n (workspace_id, id, running, scheduled_for, started_at, tag, priority, suspend)\n VALUES ($2, $1, $28, COALESCE($29, now()), CASE WHEN $27 OR $40 THEN now() END, $30, $31, $42)", "describe": { "columns": [], "parameters": { @@ -124,10 +124,11 @@ } }, "Bool", - "Varchar" + "Varchar", + "Int4" ] }, "nullable": [] }, - "hash": "bf2163c542fb8c4e173167a8f333ef762fecf782424c5b61b89f32918b8d6971" + "hash": "eee24a25a49dfaf2d0a2580bac234b42324748f98a1b8782654c90728171a9ef" } diff --git a/backend/.sqlx/query-3b6bd7b41f130ce6df62fdecb351a3e01be0726d02d3f863e0ea5c476a8e785e.json b/backend/.sqlx/query-faca1306bebb90d0e96ef2aee48f632625d64d073ee9de31a1ea980175ec24be.json similarity index 76% rename from backend/.sqlx/query-3b6bd7b41f130ce6df62fdecb351a3e01be0726d02d3f863e0ea5c476a8e785e.json rename to backend/.sqlx/query-faca1306bebb90d0e96ef2aee48f632625d64d073ee9de31a1ea980175ec24be.json index fa18a36f44a43..f160a297e0daa 100644 --- a/backend/.sqlx/query-3b6bd7b41f130ce6df62fdecb351a3e01be0726d02d3f863e0ea5c476a8e785e.json +++ b/backend/.sqlx/query-faca1306bebb90d0e96ef2aee48f632625d64d073ee9de31a1ea980175ec24be.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n UPDATE kafka_trigger \n SET \n kafka_resource_path = $1,\n group_id = $2,\n topics = $3,\n script_path = $4,\n path = $5,\n is_flow = $6,\n edited_by = $7,\n email = $8,\n edited_at = now(),\n server_id = NULL,\n error = NULL,\n error_handler_path = $11,\n error_handler_args = $12,\n retry = $13\n WHERE \n workspace_id = $9 AND path = $10\n ", + "query": "\n UPDATE kafka_trigger \n SET \n kafka_resource_path = $1,\n group_id = $2,\n topics = $3,\n script_path = $4,\n path = $5,\n is_flow = $6,\n edited_by = $7,\n email = $8,\n edited_at = now(),\n server_id = NULL,\n error = NULL,\n error_handler_path = $11,\n error_handler_args = $12,\n retry = $13,\n suspend_number = $14\n WHERE \n workspace_id = $9 AND path = $10\n ", "describe": { "columns": [], "parameters": { @@ -17,10 +17,11 @@ "Text", "Varchar", "Jsonb", - "Jsonb" + "Jsonb", + "Int4" ] }, "nullable": [] }, - "hash": "3b6bd7b41f130ce6df62fdecb351a3e01be0726d02d3f863e0ea5c476a8e785e" + "hash": "faca1306bebb90d0e96ef2aee48f632625d64d073ee9de31a1ea980175ec24be" } diff --git a/backend/.sqlx/query-e7c61bbdcf882f6e1e9b11df03e7a2ee318c72b365c0fe0b9fbec886a461f5e4.json b/backend/.sqlx/query-fe5224c32bd0899cf78cfd006bf988e4c342230945dc9b1cb3881ffa3b8cf1c4.json similarity index 66% rename from backend/.sqlx/query-e7c61bbdcf882f6e1e9b11df03e7a2ee318c72b365c0fe0b9fbec886a461f5e4.json rename to backend/.sqlx/query-fe5224c32bd0899cf78cfd006bf988e4c342230945dc9b1cb3881ffa3b8cf1c4.json index 6d41284328e0b..d33740d4838e0 100644 --- a/backend/.sqlx/query-e7c61bbdcf882f6e1e9b11df03e7a2ee318c72b365c0fe0b9fbec886a461f5e4.json +++ b/backend/.sqlx/query-fe5224c32bd0899cf78cfd006bf988e4c342230945dc9b1cb3881ffa3b8cf1c4.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n INSERT INTO gcp_trigger (\n gcp_resource_path,\n subscription_id,\n topic_id,\n delivery_type,\n delivery_config,\n workspace_id, \n path, \n script_path, \n is_flow, \n email, \n enabled, \n edited_by,\n error_handler_path,\n error_handler_args,\n retry,\n auto_acknowledge_msg,\n ack_deadline\n ) \n VALUES (\n $1, \n $2, \n $3, \n $4,\n $5,\n $6, \n $7, \n $8, \n $9,\n $10,\n $11,\n $12,\n $13,\n $14,\n $15,\n $16,\n $17\n )", + "query": "\n INSERT INTO gcp_trigger (\n gcp_resource_path,\n subscription_id,\n topic_id,\n delivery_type,\n delivery_config,\n workspace_id, \n path, \n script_path, \n is_flow, \n email, \n enabled, \n edited_by,\n error_handler_path,\n error_handler_args,\n retry,\n auto_acknowledge_msg,\n ack_deadline,\n suspend_number\n ) \n VALUES (\n $1, \n $2, \n $3, \n $4,\n $5,\n $6, \n $7, \n $8, \n $9,\n $10,\n $11,\n $12,\n $13,\n $14,\n $15,\n $16,\n $17,\n $18\n )", "describe": { "columns": [], "parameters": { @@ -31,10 +31,11 @@ "Jsonb", "Jsonb", "Bool", + "Int4", "Int4" ] }, "nullable": [] }, - "hash": "e7c61bbdcf882f6e1e9b11df03e7a2ee318c72b365c0fe0b9fbec886a461f5e4" + "hash": "fe5224c32bd0899cf78cfd006bf988e4c342230945dc9b1cb3881ffa3b8cf1c4" } diff --git a/backend/tests/common/mod.rs b/backend/tests/common/mod.rs index 129fd86d63b94..c06a7470d5392 100644 --- a/backend/tests/common/mod.rs +++ b/backend/tests/common/mod.rs @@ -209,6 +209,7 @@ impl RunJob { None, debounce_job_id_o, None, + None ) .await .expect("push has to succeed"); From e637d85874b0ba566051f8d5451765213b865206 Mon Sep 17 00:00:00 2001 From: dieriba Date: Thu, 13 Nov 2025 18:55:58 +0100 Subject: [PATCH 09/35] update --- backend/windmill-api/openapi.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 78a133861f814..37fc987f4dbb1 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -8383,6 +8383,7 @@ paths: - suspend_number responses: "200": + description: confirmation message content: application/json: schema: From 9af0ad7b6cea459eff72fbabafe942489a49df61 Mon Sep 17 00:00:00 2001 From: dieriba Date: Thu, 13 Nov 2025 18:58:21 +0100 Subject: [PATCH 10/35] update ref --- backend/ee-repo-ref.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/ee-repo-ref.txt b/backend/ee-repo-ref.txt index f4c07745206d1..e52cafd43de3d 100644 --- a/backend/ee-repo-ref.txt +++ b/backend/ee-repo-ref.txt @@ -1 +1 @@ -4302ebbb8ded39e04ebcf7aaac71847c9bebe19c \ No newline at end of file +36461172defb2d58fcb4bd3832aed7f2ddd69cde \ No newline at end of file From 94faed5bdffc2dc3314a71c95322a8626f02b4f6 Mon Sep 17 00:00:00 2001 From: dieriba Date: Thu, 13 Nov 2025 19:02:48 +0100 Subject: [PATCH 11/35] jobs update --- backend/windmill-api/src/jobs.rs | 199 ------------------------------- 1 file changed, 199 deletions(-) diff --git a/backend/windmill-api/src/jobs.rs b/backend/windmill-api/src/jobs.rs index 12c30a5517eee..24789f5f008a6 100644 --- a/backend/windmill-api/src/jobs.rs +++ b/backend/windmill-api/src/jobs.rs @@ -344,22 +344,6 @@ pub fn workspaced_service() -> Router { "/send_email_with_instance_smtp", post(send_email_with_instance_smtp), ) - .route( - "/resume_suspended/:job_id/:resume_id", - post(resume_suspended_job_auth), - ) - .route( - "/cancel_suspended/:job_id/:resume_id", - post(cancel_suspended_job_auth), - ) - .route( - "/resume_suspended_batch/:suspend_number", - post(resume_suspended_batch_auth), - ) - .route( - "/cancel_suspended_batch/:suspend_number", - post(cancel_suspended_batch_auth), - ) } pub fn workspace_unauthed_service() -> Router { @@ -8390,186 +8374,3 @@ async fn delete_completed_job<'a>( ) .await; } - -pub async fn resume_suspended_job_auth( - authed: ApiAuthed, - Extension(db): Extension, - Path((w_id, job_id, suspend_number)): Path<(String, Uuid, i32)>, -) -> error::Result { - let mut tx: Transaction<'_, Postgres> = db.begin().await?; - - let rows_affected = sqlx::query!( - "UPDATE v2_job_queue SET suspend = NULL WHERE id = $1 AND workspace_id = $2 AND suspend = $3", - job_id, - w_id, - suspend_number - ) - .execute(&mut *tx) - .await? - .rows_affected(); - - if rows_affected == 0 { - return Err( - anyhow::anyhow!("No suspended job found with this job_id and suspend_number").into(), - ); - } - - audit_log( - &mut *tx, - &authed, - "jobs.suspend_resume", - ActionKind::Update, - &w_id, - Some( - &serde_json::json!({ - "approved": true, - "job_id": job_id, - "suspend_number": suspend_number, - "details": format!("Resumed by {}", &authed.username) - }) - .to_string(), - ), - None, - ) - .await?; - tx.commit().await?; - Ok(StatusCode::OK) -} - -pub async fn cancel_suspended_job_auth( - authed: ApiAuthed, - Extension(db): Extension, - Path((w_id, job_id, suspend_number)): Path<(String, Uuid, i32)>, -) -> error::Result { - let mut tx: Transaction<'_, Postgres> = db.begin().await?; - - audit_log( - &mut *tx, - &authed, - "jobs.suspend_cancel", - ActionKind::Delete, - &w_id, - Some( - &serde_json::json!({ - "job_id": job_id, - "suspend_number": suspend_number, - "details": format!("Cancelled and deleted by {}", &authed.username) - }) - .to_string(), - ), - None, - ) - .await?; - tx.commit().await?; - Ok(StatusCode::OK) -} -pub async fn resume_suspended_batch_auth( - authed: ApiAuthed, - Extension(db): Extension, - Path((w_id, suspend_number)): Path<(String, i32)>, -) -> error::Result { - let mut tx: Transaction<'_, Postgres> = db.begin().await?; - - let rows_affected = sqlx::query!( - "UPDATE v2_job_queue SET suspend = NULL WHERE workspace_id = $1 AND suspend = $2", - w_id, - suspend_number - ) - .execute(&mut *tx) - .await? - .rows_affected(); - - if rows_affected == 0 { - return Err(anyhow::anyhow!("No suspended jobs found with this suspend number").into()); - } - - audit_log( - &mut *tx, - &authed, - "jobs.suspend_resume_batch", - ActionKind::Update, - &w_id, - Some( - &serde_json::json!({ - "approved": true, - "suspend_number": suspend_number, - "job_count": rows_affected, - "details": format!("Batch resumed {} jobs by {}", rows_affected, &authed.username) - }) - .to_string(), - ), - None, - ) - .await?; - tx.commit().await?; - Ok(StatusCode::OK) -} - -pub async fn cancel_suspended_batch_auth( - authed: ApiAuthed, - Extension(db): Extension, - Path((w_id, suspend_number)): Path<(String, i32)>, -) -> error::Result { - let mut tx: Transaction<'_, Postgres> = db.begin().await?; - - let suspended_jobs = sqlx::query!( - "SELECT id FROM v2_job_queue WHERE workspace_id = $1 AND suspend = $2", - w_id, - suspend_number - ) - .fetch_all(&mut *tx) - .await?; - - if suspended_jobs.is_empty() { - return Err(anyhow::anyhow!("No suspended jobs found with this suspend number").into()); - } - - let job_count = suspended_jobs.len(); - - sqlx::query!( - "DELETE FROM v2_job_queue WHERE workspace_id = $1 AND suspend = $2", - w_id, - suspend_number - ) - .execute(&mut *tx) - .await?; - - for job in suspended_jobs.iter() { - sqlx::query!( - "DELETE FROM v2_job WHERE id = $1 AND workspace_id = $2", - job.id, - w_id - ) - .execute(&mut *tx) - .await?; - - // Delete related job_perms if exists - sqlx::query!( - "DELETE FROM job_perms WHERE job_id = $1 AND workspace_id = $2", - job.id, - w_id - ) - .execute(&mut *tx) - .await?; - } - - audit_log( - &mut *tx, - &authed, - "jobs.suspend_cancel_batch", - ActionKind::Delete, - &w_id, - Some( - &serde_json::json!({ - "suspend_number": suspend_number, - "job_count": job_count, - "details": format!("Batch cancelled and deleted {} jobs by {}", job_count, &authed.username) - }) - .to_string(), - ), - None, - ) - .await?; - tx.commit().await?; - Ok(StatusCode::OK) -} From f576e203e3c929cd1969a93aefd3987c3de6f728 Mon Sep 17 00:00:00 2001 From: dieriba Date: Thu, 13 Nov 2025 19:11:30 +0100 Subject: [PATCH 12/35] nits --- backend/windmill-api/src/triggers/handler.rs | 14 ++------------ backend/windmill-api/src/triggers/listener.rs | 16 +--------------- backend/windmill-api/src/triggers/mod.rs | 12 ++++++++++++ 3 files changed, 15 insertions(+), 27 deletions(-) diff --git a/backend/windmill-api/src/triggers/handler.rs b/backend/windmill-api/src/triggers/handler.rs index 6005e27c31f49..d10a7848d2d57 100644 --- a/backend/windmill-api/src/triggers/handler.rs +++ b/backend/windmill-api/src/triggers/handler.rs @@ -1,7 +1,7 @@ use crate::{ db::ApiAuthed, jobs::generate_unique_suspend_number, - triggers::{StandardTriggerQuery, TriggerData}, + triggers::{StandardTriggerQuery, TriggerData, BASE_TRIGGER_FIELDS}, }; use async_trait::async_trait; use serde::{de::DeserializeOwned, Deserialize, Serialize}; @@ -138,17 +138,7 @@ pub trait TriggerCrud: Send + Sync + 'static { workspace_id: &str, path: &str, ) -> Result { - let mut fields = vec![ - "workspace_id", - "path", - "script_path", - "is_flow", - "edited_by", - "email", - "edited_at", - "extra_perms", - "suspend_number", - ]; + let mut fields = Vec::from(BASE_TRIGGER_FIELDS); if Self::SUPPORTS_SERVER_STATE { fields.extend_from_slice(&["enabled", "server_id", "last_server_ping", "error"]); diff --git a/backend/windmill-api/src/triggers/listener.rs b/backend/windmill-api/src/triggers/listener.rs index 885a5e7d70417..421b3c4b09cac 100644 --- a/backend/windmill-api/src/triggers/listener.rs +++ b/backend/windmill-api/src/triggers/listener.rs @@ -6,7 +6,7 @@ use crate::{ triggers::{ handler::TriggerCrud, trigger_helpers::{trigger_runnable, TriggerJobArgs}, - Trigger, TriggerErrorHandling, + Trigger, TriggerErrorHandling, BASE_TRIGGER_FIELDS, }, users::fetch_api_authed, }; @@ -27,18 +27,6 @@ use windmill_common::{ DB, INSTANCE_NAME, }; -const BASE_TRIGGER_FIELDS: [&'static str; 9] = [ - "workspace_id", - "path", - "script_path", - "is_flow", - "edited_by", - "email", - "edited_at", - "extra_perms", - "suspend_number", -]; - #[allow(unused)] #[async_trait] pub trait Listener: TriggerCrud + TriggerJobArgs { @@ -46,8 +34,6 @@ pub trait Listener: TriggerCrud + TriggerJobArgs { type Extra: Send + Sync; type ExtraState: Send + Sync; - //to use in next PR to add job trigger kind to eow - #[allow(unused)] const JOB_TRIGGER_KIND: JobTriggerKind; const EXTRA_TRIGGER_AND_WHERE_CLAUSE: &[&'static str] = &[]; const EXTRA_CAPTURE_AND_WHERE_CLAUSE: &[&'static str] = &[]; diff --git a/backend/windmill-api/src/triggers/mod.rs b/backend/windmill-api/src/triggers/mod.rs index 509837bb709ed..21c8fd5dc7c4b 100644 --- a/backend/windmill-api/src/triggers/mod.rs +++ b/backend/windmill-api/src/triggers/mod.rs @@ -149,3 +149,15 @@ impl Default for StandardTriggerQuery { Self { page: Some(0), per_page: Some(100), path: None, path_start: None, is_flow: None } } } + +pub const BASE_TRIGGER_FIELDS: [&'static str; 9] = [ + "workspace_id", + "path", + "script_path", + "is_flow", + "edited_by", + "email", + "edited_at", + "extra_perms", + "suspend_number", +]; From bd3f3fd42d7e9642234fe305947bccbcf18718c7 Mon Sep 17 00:00:00 2001 From: dieriba Date: Thu, 13 Nov 2025 19:13:44 +0100 Subject: [PATCH 13/35] update ref --- backend/ee-repo-ref.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/ee-repo-ref.txt b/backend/ee-repo-ref.txt index e52cafd43de3d..202518370e632 100644 --- a/backend/ee-repo-ref.txt +++ b/backend/ee-repo-ref.txt @@ -1 +1 @@ -36461172defb2d58fcb4bd3832aed7f2ddd69cde \ No newline at end of file +90ef44ceb8220e7e54a2ac40756c96fe003d8695 \ No newline at end of file From a4f3b4fc9bcdd562f4c706eb901e16367729ff42 Mon Sep 17 00:00:00 2001 From: dieriba Date: Fri, 14 Nov 2025 21:06:49 +0100 Subject: [PATCH 14/35] big --- ...200000_add_queue_mode_to_triggers.down.sql | 32 +- ...06200000_add_queue_mode_to_triggers.up.sql | 38 +- backend/src/monitor.rs | 2 +- backend/tests/common/mod.rs | 1 - backend/windmill-api/openapi.yaml | 55 ++- backend/windmill-api/src/apps.rs | 9 +- .../windmill-api/src/concurrency_groups.rs | 1 + backend/windmill-api/src/flows.rs | 6 +- backend/windmill-api/src/jobs.rs | 206 +++++------ backend/windmill-api/src/scripts.rs | 3 +- backend/windmill-api/src/settings.rs | 2 +- .../src/triggers/email/handler_oss.rs | 2 - backend/windmill-api/src/triggers/handler.rs | 44 +-- .../windmill-api/src/triggers/http/handler.rs | 54 ++- backend/windmill-api/src/triggers/http/mod.rs | 4 +- backend/windmill-api/src/triggers/listener.rs | 12 +- backend/windmill-api/src/triggers/mod.rs | 18 +- .../windmill-api/src/triggers/mqtt/handler.rs | 10 +- .../src/triggers/postgres/handler.rs | 10 +- .../src/triggers/trigger_helpers.rs | 350 +++--------------- .../src/triggers/websocket/handler.rs | 10 +- .../src/triggers/websocket/listener.rs | 16 +- .../src/triggers/websocket/mod.rs | 5 +- backend/windmill-common/src/triggers.rs | 13 + backend/windmill-queue/src/jobs.rs | 34 +- backend/windmill-queue/src/schedule.rs | 8 +- backend/windmill-worker/src/ai/tools.rs | 1 - backend/windmill-worker/src/worker_flow.rs | 1 - .../windmill-worker/src/worker_lockfiles.rs | 1 - .../triggers/TriggerStateToggle.svelte | 33 +- .../email/EmailTriggerEditorInner.svelte | 6 - .../triggers/gcp/GcpTriggerEditorInner.svelte | 6 +- .../triggers/http/RouteEditorInner.svelte | 6 +- .../kafka/KafkaTriggerEditorInner.svelte | 6 +- .../mqtt/MqttTriggerEditorInner.svelte | 6 +- .../nats/NatsTriggerEditorInner.svelte | 6 +- .../PostgresTriggerEditorInner.svelte | 6 +- .../triggers/sqs/SqsTriggerEditorInner.svelte | 6 +- .../WebsocketTriggerEditorInner.svelte | 6 +- 39 files changed, 372 insertions(+), 663 deletions(-) diff --git a/backend/migrations/20251106200000_add_queue_mode_to_triggers.down.sql b/backend/migrations/20251106200000_add_queue_mode_to_triggers.down.sql index 7f5272169a199..eb44ce17ef0f5 100644 --- a/backend/migrations/20251106200000_add_queue_mode_to_triggers.down.sql +++ b/backend/migrations/20251106200000_add_queue_mode_to_triggers.down.sql @@ -1,33 +1,33 @@ -- Add down migration script here -DROP INDEX IF EXISTS idx_websocket_trigger_suspend_number; -DROP INDEX IF EXISTS idx_sqs_trigger_suspend_number; -DROP INDEX IF EXISTS idx_postgres_trigger_suspend_number; -DROP INDEX IF EXISTS idx_nats_trigger_suspend_number; -DROP INDEX IF EXISTS idx_mqtt_trigger_suspend_number; -DROP INDEX IF EXISTS idx_kafka_trigger_suspend_number; -DROP INDEX IF EXISTS idx_http_trigger_suspend_number; -DROP INDEX IF EXISTS idx_gcp_trigger_suspend_number; +DROP INDEX IF EXISTS idx_websocket_trigger_active_mode; +DROP INDEX IF EXISTS idx_sqs_trigger_active_mode; +DROP INDEX IF EXISTS idx_postgres_trigger_active_mode; +DROP INDEX IF EXISTS idx_nats_trigger_active_mode; +DROP INDEX IF EXISTS idx_mqtt_trigger_active_mode; +DROP INDEX IF EXISTS idx_kafka_trigger_active_mode; +DROP INDEX IF EXISTS idx_http_trigger_active_mode; +DROP INDEX IF EXISTS idx_gcp_trigger_active_mode; ALTER TABLE websocket_trigger -DROP COLUMN IF EXISTS suspend_number; +DROP COLUMN IF EXISTS active_mode; ALTER TABLE sqs_trigger -DROP COLUMN IF EXISTS suspend_number; +DROP COLUMN IF EXISTS active_mode; ALTER TABLE postgres_trigger -DROP COLUMN IF EXISTS suspend_number; +DROP COLUMN IF EXISTS active_mode; ALTER TABLE nats_trigger -DROP COLUMN IF EXISTS suspend_number; +DROP COLUMN IF EXISTS active_mode; ALTER TABLE mqtt_trigger -DROP COLUMN IF EXISTS suspend_number; +DROP COLUMN IF EXISTS active_mode; ALTER TABLE kafka_trigger -DROP COLUMN IF EXISTS suspend_number; +DROP COLUMN IF EXISTS active_mode; ALTER TABLE http_trigger -DROP COLUMN IF EXISTS suspend_number; +DROP COLUMN IF EXISTS active_mode; ALTER TABLE gcp_trigger -DROP COLUMN IF EXISTS suspend_number; \ No newline at end of file +DROP COLUMN IF EXISTS active_mode; \ No newline at end of file diff --git a/backend/migrations/20251106200000_add_queue_mode_to_triggers.up.sql b/backend/migrations/20251106200000_add_queue_mode_to_triggers.up.sql index 99678f0c5a0e9..9fe090b2dc50f 100644 --- a/backend/migrations/20251106200000_add_queue_mode_to_triggers.up.sql +++ b/backend/migrations/20251106200000_add_queue_mode_to_triggers.up.sql @@ -1,37 +1,37 @@ -- Add up migration script here ALTER TABLE gcp_trigger -ADD COLUMN suspend_number INTEGER NULL; +ADD COLUMN active_mode BOOLEAN NOT NULL DEFAULT TRUE; ALTER TABLE http_trigger -ADD COLUMN suspend_number INTEGER NULL; +ADD COLUMN active_mode BOOLEAN NOT NULL DEFAULT TRUE; ALTER TABLE kafka_trigger -ADD COLUMN suspend_number INTEGER NULL; +ADD COLUMN active_mode BOOLEAN NOT NULL DEFAULT TRUE; ALTER TABLE mqtt_trigger -ADD COLUMN suspend_number INTEGER NULL; +ADD COLUMN active_mode BOOLEAN NOT NULL DEFAULT TRUE; ALTER TABLE nats_trigger -ADD COLUMN suspend_number INTEGER NULL; +ADD COLUMN active_mode BOOLEAN NOT NULL DEFAULT TRUE; ALTER TABLE postgres_trigger -ADD COLUMN suspend_number INTEGER NULL; +ADD COLUMN active_mode BOOLEAN NOT NULL DEFAULT TRUE; ALTER TABLE sqs_trigger -ADD COLUMN suspend_number INTEGER NULL; +ADD COLUMN active_mode BOOLEAN NOT NULL DEFAULT TRUE; ALTER TABLE websocket_trigger -ADD COLUMN suspend_number INTEGER NULL; +ADD COLUMN active_mode BOOLEAN NOT NULL DEFAULT TRUE; ALTER TABLE email_trigger -ADD COLUMN suspend_number INTEGER NULL; - -CREATE INDEX idx_gcp_trigger_suspend_number ON gcp_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; -CREATE INDEX idx_http_trigger_suspend_number ON http_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; -CREATE INDEX idx_kafka_trigger_suspend_number ON kafka_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; -CREATE INDEX idx_mqtt_trigger_suspend_number ON mqtt_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; -CREATE INDEX idx_nats_trigger_suspend_number ON nats_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; -CREATE INDEX idx_postgres_trigger_suspend_number ON postgres_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; -CREATE INDEX idx_sqs_trigger_suspend_number ON sqs_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; -CREATE INDEX idx_websocket_trigger_suspend_number ON websocket_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; -CREATE INDEX idx_email_trigger_suspend_number ON email_trigger(workspace_id,path,suspend_number) WHERE suspend_number IS NOT NULL; \ No newline at end of file +ADD COLUMN active_mode BOOLEAN NOT NULL DEFAULT TRUE; + +CREATE INDEX idx_gcp_trigger_active_mode ON gcp_trigger(workspace_id,path,active_mode); +CREATE INDEX idx_http_trigger_active_mode ON http_trigger(workspace_id,path,active_mode); +CREATE INDEX idx_kafka_trigger_active_mode ON kafka_trigger(workspace_id,path,active_mode); +CREATE INDEX idx_mqtt_trigger_active_mode ON mqtt_trigger(workspace_id,path,active_mode); +CREATE INDEX idx_nats_trigger_active_mode ON nats_trigger(workspace_id,path,active_mode); +CREATE INDEX idx_postgres_trigger_active_mode ON postgres_trigger(workspace_id,path,active_mode); +CREATE INDEX idx_sqs_trigger_active_mode ON sqs_trigger(workspace_id,path,active_mode); +CREATE INDEX idx_websocket_trigger_active_mode ON websocket_trigger(workspace_id,path,active_mode); +CREATE INDEX idx_email_trigger_active_mode ON email_trigger(workspace_id,path,active_mode); \ No newline at end of file diff --git a/backend/src/monitor.rs b/backend/src/monitor.rs index b0818c96cd4a7..978aba2faaea4 100644 --- a/backend/src/monitor.rs +++ b/backend/src/monitor.rs @@ -1271,7 +1271,7 @@ pub async fn reload_license_key(conn: &Connection) -> anyhow::Result<()> { tracing::error!("Could not parse LICENSE_KEY found: {:#?}", &q); } }; - set_license_key(value).await; + set_license_key(value, conn.as_sql()).await; Ok(()) } diff --git a/backend/tests/common/mod.rs b/backend/tests/common/mod.rs index c06a7470d5392..cfdfe4124ffea 100644 --- a/backend/tests/common/mod.rs +++ b/backend/tests/common/mod.rs @@ -208,7 +208,6 @@ impl RunJob { false, None, debounce_job_id_o, - None, None ) .await diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 37fc987f4dbb1..a58ca3999e49c 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -8088,6 +8088,8 @@ paths: - $ref: "#/components/parameters/ScriptExactPath" - $ref: "#/components/parameters/ScriptStartPath" - $ref: "#/components/parameters/SchedulePath" + - $ref: "#/components/parameters/TriggerPath" + - $ref: "#/components/parameters/JobTriggerKind" - $ref: "#/components/parameters/ScriptExactHash" - $ref: "#/components/parameters/StartedBefore" - $ref: "#/components/parameters/StartedAfter" @@ -8374,13 +8376,7 @@ paths: content: application/json: schema: - type: object - properties: - suspend_number: - type: integer - description: the suspend number of jobs to resume - required: - - suspend_number + $ref: "#/components/schemas/SuspendedJobRequest" responses: "200": description: confirmation message @@ -8403,13 +8399,7 @@ paths: content: application/json: schema: - type: object - properties: - suspend_number: - type: integer - description: the suspend number of jobs to cancel - required: - - suspend_number + $ref: "#/components/schemas/SuspendedJobRequest" responses: "200": description: confirmation message @@ -15039,6 +15029,12 @@ components: in: query schema: type: string + TriggerPath: + name: trigger_path + description: mask to filter by trigger path + in: query + schema: + type: string ScriptExactPath: name: script_path_exact description: mask to filter exact matching path @@ -17038,6 +17034,18 @@ components: - timezone - args + SuspendedJobRequest: + type: object + properties: + trigger_path: + type: string + description: The path of the trigger + trigger_kind: + $ref: "#/components/parameters/JobTriggerKind" + required: + - runnable_path + - trigger_kind + TriggerExtraProperty: type: object properties: @@ -17060,8 +17068,8 @@ components: format: date-time is_flow: type: boolean - suspend_number: - type: number + active_mode: + type: boolean required: - path - script_path @@ -17071,6 +17079,7 @@ components: - edited_by - edited_at - is_flow + - active_mode AuthenticationMethod: type: string @@ -17307,7 +17316,7 @@ components: active_mode: type: boolean default: true - description: If true, queue jobs with suspend functionality instead of immediate execution + description: If set to false, each incomming event will be suspend job until ran manually or set it to true required: - path @@ -17372,7 +17381,6 @@ components: active_mode: type: boolean default: true - description: If true, queue jobs with suspend functionality instead of immediate execution required: - path - script_path @@ -17509,7 +17517,6 @@ components: active_mode: type: boolean default: true - description: If true, queue jobs with suspend functionality instead of immediate execution required: - path @@ -17561,7 +17568,6 @@ components: active_mode: type: boolean default: true - description: If true, queue jobs with suspend functionality instead of immediate execution required: - path @@ -17706,7 +17712,6 @@ components: active_mode: type: boolean default: true - description: If true, queue jobs with suspend functionality instead of immediate execution required: - path - script_path @@ -17748,7 +17753,6 @@ components: active_mode: type: boolean default: true - description: If true, queue jobs with suspend functionality instead of immediate execution required: - path - script_path @@ -18040,7 +18044,6 @@ components: active_mode: type: boolean default: true - description: If true, queue jobs with suspend functionality instead of immediate execution required: - queue_url - aws_resource_path @@ -18186,7 +18189,6 @@ components: active_mode: type: boolean default: true - description: If true, queue jobs with suspend functionality instead of immediate execution required: - path - script_path @@ -18222,7 +18224,6 @@ components: active_mode: type: boolean default: true - description: If true, queue jobs with suspend functionality instead of immediate execution required: - path - script_path @@ -18295,7 +18296,6 @@ components: active_mode: type: boolean default: true - description: If true, queue jobs with suspend functionality instead of immediate execution required: - path @@ -18329,7 +18329,6 @@ components: active_mode: type: boolean default: true - description: If true, queue jobs with suspend functionality instead of immediate execution retry: $ref: "../../openflow.openapi.yaml#/components/schemas/Retry" @@ -18412,7 +18411,6 @@ components: active_mode: type: boolean default: true - description: If true, queue jobs with suspend functionality instead of immediate execution required: - path @@ -18452,7 +18450,6 @@ components: active_mode: type: boolean default: true - description: If true, queue jobs with suspend functionality instead of immediate execution required: - path - script_path diff --git a/backend/windmill-api/src/apps.rs b/backend/windmill-api/src/apps.rs index 96858e3e3ce5f..a8fe8ce82bc88 100644 --- a/backend/windmill-api/src/apps.rs +++ b/backend/windmill-api/src/apps.rs @@ -1241,8 +1241,7 @@ async fn create_app_internal<'a>( false, None, None, - None, - None, + None ) .await?; tracing::info!("Pushed app dependency job {}", dependency_job_uuid); @@ -1632,8 +1631,7 @@ async fn update_app_internal<'a>( false, None, None, - None, - None, + None ) .await?; tracing::info!("Pushed app dependency job {}", dependency_job_uuid); @@ -1953,8 +1951,7 @@ async fn execute_component( false, end_user_email, None, - None, - None, + None ) .await?; tx.commit().await?; diff --git a/backend/windmill-api/src/concurrency_groups.rs b/backend/windmill-api/src/concurrency_groups.rs index 4a96a16e0b084..e9c06de4f12bd 100644 --- a/backend/windmill-api/src/concurrency_groups.rs +++ b/backend/windmill-api/src/concurrency_groups.rs @@ -203,6 +203,7 @@ async fn get_concurrent_intervals( has_null_parent: None, worker: None, label: None, + trigger_path: None, scheduled_for_before_now: _, is_not_schedule: _, started_before: _, diff --git a/backend/windmill-api/src/flows.rs b/backend/windmill-api/src/flows.rs index fad5d6bb99873..ebc09952b5d90 100644 --- a/backend/windmill-api/src/flows.rs +++ b/backend/windmill-api/src/flows.rs @@ -562,8 +562,7 @@ async fn create_flow( false, None, None, - None, - None, + None ) .await?; @@ -1027,8 +1026,7 @@ async fn update_flow( false, None, None, - None, - None, + None ) .await?; diff --git a/backend/windmill-api/src/jobs.rs b/backend/windmill-api/src/jobs.rs index 24789f5f008a6..662b1b23499d6 100644 --- a/backend/windmill-api/src/jobs.rs +++ b/backend/windmill-api/src/jobs.rs @@ -38,6 +38,7 @@ use windmill_common::jobs::{ DynamicInput, JobTriggerKind, ENTRYPOINT_OVERRIDE, }; use windmill_common::s3_helpers::{upload_artifact_to_store, BundleFormat}; +use windmill_common::triggers::TriggerInfo; use windmill_common::utils::{RunnableKind, WarnAfterExt}; use windmill_common::worker::{Connection, CLOUD_HOSTED, TMP_DIR}; use windmill_common::DYNAMIC_INPUT_CACHE; @@ -47,6 +48,7 @@ use windmill_common::{email_oss::send_email_html, server::load_smtp_config}; use windmill_common::variables::get_workspace_key; use crate::triggers::trigger_helpers::ScriptId; +use crate::triggers::INACTIVE_TRIGGER_SCHEDULED_FOR_DATE; use crate::{ add_webhook_allowed_origin, args::{self, RawWebhookArgs}, @@ -1819,6 +1821,7 @@ pub struct ListQueueQuery { pub created_or_started_after: Option>, pub running: Option, pub schedule_path: Option, + pub trigger_path: Option, pub parent_job: Option, pub order_desc: Option, pub job_kinds: Option, @@ -1840,6 +1843,7 @@ pub struct ListQueueQuery { impl From for ListQueueQuery { fn from(lcq: ListCompletedQuery) -> Self { Self { + trigger_path: lcq.trigger_path, script_path_start: lcq.script_path_start, script_path_exact: lcq.script_path_exact, script_hash: lcq.script_hash, @@ -1994,6 +1998,9 @@ pub fn filter_list_queue_query( sqlb.and_where_eq("trigger_kind", "?".bind(&format!("{}", tk))); } + if let Some(p) = &lq.trigger_path { + sqlb.and_where_eq("trigger", "?".bind(p)); + } sqlb } @@ -2220,46 +2227,50 @@ async fn cancel_selection( } #[derive(Deserialize)] -pub struct ResumeSuspendedJobsRequest { - suspend_number: i32, +#[serde(untagged)] +enum SuspendJobsRequest { + Trigger { trigger_path: String, trigger_kind: JobTriggerKind }, } async fn resume_suspended_jobs( authed: ApiAuthed, Extension(user_db): Extension, Path(w_id): Path, - Json(request): Json, + Json(request): Json, ) -> error::JsonResult { require_admin(authed.is_admin, &authed.username)?; let mut tx = user_db.begin(&authed).await?; - sqlx::query!( - r#" - WITH jobs_to_resume AS ( - SELECT - jq.id - FROM - v2_job_queue jq - INNER JOIN v2_job j ON j.id = jq.id - WHERE - j.workspace_id = $1 AND - jq.suspend = $2 AND - jq.canceled_by IS NULL - ) - UPDATE - v2_job_queue - SET - suspend = 0, - scheduled_for = NOW() - WHERE - id IN (SELECT id FROM jobs_to_resume) - "#, - w_id, - request.suspend_number - ) - .fetch_all(&mut *tx) - .await?; + match request { + SuspendJobsRequest::Trigger { trigger_path, trigger_kind } => { + let scheduled_for = INACTIVE_TRIGGER_SCHEDULED_FOR_DATE.clone(); + sqlx::query!( + r#" + UPDATE + v2_job_queue + SET + scheduled_for = NOW() + FROM + v2_job + WHERE + v2_job_queue.running is FALSE AND + v2_job_queue.id = v2_job.id + AND v2_job.workspace_id = $1 + AND v2_job_queue.scheduled_for = $2 + AND v2_job_queue.canceled_by IS NULL + AND v2_job.trigger_kind = $3 + AND v2_job.trigger = $4 + "#, + w_id, + scheduled_for, + trigger_kind as JobTriggerKind, + trigger_path + ) + .fetch_all(&mut *tx) + .await?; + } + } audit_log( &mut *tx, @@ -2267,81 +2278,78 @@ async fn resume_suspended_jobs( "jobs.resume_suspended", ActionKind::Update, &w_id, - Some(&format!("suspend_number:{}", request.suspend_number)), + None, None, ) .await?; tx.commit().await?; - Ok(Json(format!( - "Resumed all suspended workspace jobs for suspend number: {}", - request.suspend_number - ))) -} - -#[derive(Deserialize)] -pub struct CancelSuspendedJobsRequest { - suspend_number: i32, + Ok(Json(format!("Resumed all suspended workspace jobs",))) } async fn cancel_suspended_jobs( authed: ApiAuthed, Extension(user_db): Extension, Path(w_id): Path, - Json(request): Json, + Json(request): Json, ) -> error::JsonResult { require_admin(authed.is_admin, &authed.username)?; let mut tx = user_db.begin(&authed).await?; - sqlx::query!( - r#" - WITH jobs_to_cancel AS ( - SELECT - v2_job_queue.id - FROM - v2_job_queue - INNER JOIN v2_job ON v2_job.id = v2_job_queue.id - WHERE - v2_job.workspace_id = $1 AND - v2_job_queue.suspend = $2 AND - v2_job_queue.canceled_by IS NULL - ) - UPDATE - v2_job_queue - SET - canceled_by = $3, - canceled_reason = 'Canceled all suspended jobs with suspend number', - suspend = 0, - scheduled_for = now() - WHERE - id IN (SELECT id FROM jobs_to_cancel) - "#, - w_id, - request.suspend_number, - authed.username - ) - .fetch_all(&mut *tx) - .await?; + match request { + SuspendJobsRequest::Trigger { trigger_path, trigger_kind } => { + let scheduled_for = INACTIVE_TRIGGER_SCHEDULED_FOR_DATE.clone(); + let reason = format!( + "Canceled all suspended jobs for {} with trigger at path: {}", + &trigger_kind, &trigger_path + ); + sqlx::query!( + r#" + UPDATE + v2_job_queue + SET + canceled_by = $1, + canceled_reason = $2, + scheduled_for = NOW() + FROM + v2_job + WHERE + v2_job_queue.id = v2_job.id + AND v2_job_queue.running is FALSE + AND v2_job_queue.scheduled_for = $3 + AND v2_job.workspace_id = $4 + AND v2_job_queue.canceled_by IS NULL + AND v2_job.trigger_kind = $5 + AND v2_job.trigger = $6 + "#, + authed.username, + reason, + scheduled_for, + w_id, + trigger_kind as JobTriggerKind, + trigger_path + ) + .fetch_all(&mut *tx) + .await?; + } + } audit_log( &mut *tx, &authed, "jobs.cancel_suspended", ActionKind::Delete, &w_id, - Some(&format!("suspend_number:{}", request.suspend_number)), + None, None, ) .await?; tx.commit().await?; - Ok(Json(format!( - "Canceled all suspended workspace jobs for suspend number: {}", - request.suspend_number - ))) + Ok(Json(format!("Canceled all suspended workspace jobs",))) } async fn list_filtered_job_uuids( @@ -4027,7 +4035,7 @@ async fn batch_rerun_handle_job( // Call appropriate function to push job to queue match job.kind { JobKind::Flow => { - let result = run_flow_by_path_inner( + let result = push_flow_job_by_path_into_queue( authed.clone(), db.clone(), user_db.clone(), @@ -4044,7 +4052,7 @@ async fn batch_rerun_handle_job( } JobKind::Script => { let result = if use_latest_version { - run_script_by_path_inner( + push_script_job_by_path_into_queue( authed.clone(), db.clone(), user_db.clone(), @@ -4172,13 +4180,15 @@ pub async fn run_flow_by_path( ) .await?; - let (uuid, _) = - run_flow_by_path_inner(authed, db, user_db, w_id, flow_path, run_query, args, None).await?; + let (uuid, _) = push_flow_job_by_path_into_queue( + authed, db, user_db, w_id, flow_path, run_query, args, None, + ) + .await?; Ok((StatusCode::CREATED, uuid.to_string())) } -pub async fn run_flow_by_path_inner( +pub async fn push_flow_job_by_path_into_queue( authed: ApiAuthed, db: DB, user_db: UserDB, @@ -4186,7 +4196,7 @@ pub async fn run_flow_by_path_inner( flow_path: StripPath, run_query: RunJobQuery, args: PushArgsOwned, - trigger_kind: Option, + trigger: Option, ) -> error::Result<(Uuid, Option)> { #[cfg(feature = "enterprise")] check_license_key_valid().await?; @@ -4265,8 +4275,7 @@ pub async fn run_flow_by_path_inner( false, None, None, - None, - trigger_kind, + trigger, ) .await?; @@ -4385,7 +4394,6 @@ pub async fn restart_flow( None, None, None, - None, ) .await?; tx.commit().await?; @@ -4410,7 +4418,7 @@ pub async fn run_script_by_path( ) .await?; - let (uuid, _) = run_script_by_path_inner( + let (uuid, _) = push_script_job_by_path_into_queue( authed, db, user_db, @@ -4425,7 +4433,7 @@ pub async fn run_script_by_path( Ok((StatusCode::CREATED, uuid.to_string())) } -pub async fn run_script_by_path_inner( +pub async fn push_script_job_by_path_into_queue( authed: ApiAuthed, db: DB, user_db: UserDB, @@ -4433,7 +4441,7 @@ pub async fn run_script_by_path_inner( script_path: StripPath, run_query: RunJobQuery, args: PushArgsOwned, - trigger_kind: Option, + trigger: Option, ) -> error::Result<(Uuid, Option)> { #[cfg(feature = "enterprise")] check_license_key_valid().await?; @@ -4505,8 +4513,7 @@ pub async fn run_script_by_path_inner( false, None, None, - None, - trigger_kind, + trigger, ) .await?; tx.commit().await?; @@ -4665,7 +4672,6 @@ pub async fn run_workflow_as_code( None, None, None, - None, ) .await?; @@ -5211,7 +5217,6 @@ pub async fn run_wait_result_job_by_path_get( None, None, None, - None, ) .await?; tx.commit().await?; @@ -5367,7 +5372,6 @@ pub async fn run_wait_result_script_by_path_internal( None, None, None, - None, ) .await?; tx.commit().await?; @@ -5491,7 +5495,6 @@ pub async fn run_wait_result_script_by_hash( None, None, None, - None, ) .await?; tx.commit().await?; @@ -5642,7 +5645,7 @@ pub async fn stream_job( let uuid = match runnable_id { RunnableId::ScriptId(ScriptId::ScriptPath(script_path)) | RunnableId::HubScript(script_path) => { - run_script_by_path_inner( + push_script_job_by_path_into_queue( authed.clone(), db.clone(), user_db, @@ -5669,7 +5672,7 @@ pub async fn stream_job( .0 } RunnableId::FlowPath(flow_path) => { - run_flow_by_path_inner( + push_flow_job_by_path_into_queue( authed.clone(), db.clone(), user_db, @@ -5808,7 +5811,6 @@ pub async fn run_wait_result_flow_by_path_internal( None, None, None, - None, ) .await?; @@ -5904,7 +5906,6 @@ async fn run_preview_script( None, None, None, - None, ) .await?; tx.commit().await?; @@ -6026,7 +6027,6 @@ async fn run_bundle_preview_script( None, None, None, - None, ) .await?; job_id = Some(uuid); @@ -6167,7 +6167,6 @@ async fn run_dependencies_job( None, None, None, - None, ) .await?; tx.commit().await?; @@ -6238,7 +6237,6 @@ async fn run_flow_dependencies_job( None, None, None, - None, ) .await?; tx.commit().await?; @@ -6593,7 +6591,6 @@ async fn run_preview_flow_job( None, None, None, - None, ) .await?; @@ -6678,7 +6675,7 @@ async fn run_dynamic_select( let push_args = PushArgsOwned { extra: None, args: script_args.clone() }; - let (uuid, _) = run_script_by_path_inner( + let (uuid, _) = push_script_job_by_path_into_queue( authed.clone(), db.clone(), user_db.clone(), @@ -6792,7 +6789,6 @@ async fn run_dynamic_select( None, None, None, - None, ) .await?; tx.commit().await?; @@ -6927,7 +6923,6 @@ pub async fn run_job_by_hash_inner( None, None, None, - None, ) .await?; tx.commit().await?; @@ -7789,6 +7784,10 @@ pub fn filter_list_completed_query( sqlb.and_where_eq("trigger_kind", "'schedule'"); } + if let Some(p) = &lq.trigger_path { + sqlb.and_where_eq("trigger", "?".bind(p)); + } + if let Some(ps) = &lq.script_path_start { sqlb.and_where_like_left("runnable_path", ps); } @@ -7963,6 +7962,7 @@ pub struct ListCompletedQuery { pub is_flow_step: Option, pub suspended: Option, pub schedule_path: Option, + pub trigger_path: Option, // filter by matching a subset of the args using base64 encoded json subset pub args: Option, // filter by matching a subset of the result using base64 encoded json subset diff --git a/backend/windmill-api/src/scripts.rs b/backend/windmill-api/src/scripts.rs index 0a15028f0ba27..b45f53c9ec64e 100644 --- a/backend/windmill-api/src/scripts.rs +++ b/backend/windmill-api/src/scripts.rs @@ -1022,8 +1022,7 @@ async fn create_script_internal<'c>( false, None, None, - None, - None, + None ) .await?; Ok((hash, new_tx, None)) diff --git a/backend/windmill-api/src/settings.rs b/backend/windmill-api/src/settings.rs index 4851130286ff6..de00d3cbe6232 100644 --- a/backend/windmill-api/src/settings.rs +++ b/backend/windmill-api/src/settings.rs @@ -188,7 +188,7 @@ pub async fn test_license_key( Json(TestKey { license_key }): Json, ) -> error::Result { require_super_admin(&db, &authed.email).await?; - let (_, expired) = validate_license_key(license_key).await?; + let (_, expired) = validate_license_key(license_key, Some(&db)).await?; if expired { Err(error::Error::BadRequest("Expired license key".to_string())) diff --git a/backend/windmill-api/src/triggers/email/handler_oss.rs b/backend/windmill-api/src/triggers/email/handler_oss.rs index 363f515f40c77..2f3a318bdd922 100644 --- a/backend/windmill-api/src/triggers/email/handler_oss.rs +++ b/backend/windmill-api/src/triggers/email/handler_oss.rs @@ -46,7 +46,6 @@ impl TriggerCrud for EmailTrigger { _authed: &ApiAuthed, _w_id: &str, _trigger: TriggerData, - _suspend_number: Option, ) -> Result<()> { Err(Error::BadRequest( "Email triggers are not available in open source version".to_string(), @@ -61,7 +60,6 @@ impl TriggerCrud for EmailTrigger { _workspace_id: &str, _path: &str, _trigger: TriggerData, - _suspend_number: Option, ) -> Result<()> { Err(Error::BadRequest( "Email triggers are not available in open source version".to_string(), diff --git a/backend/windmill-api/src/triggers/handler.rs b/backend/windmill-api/src/triggers/handler.rs index d10a7848d2d57..d1d3d8c34155b 100644 --- a/backend/windmill-api/src/triggers/handler.rs +++ b/backend/windmill-api/src/triggers/handler.rs @@ -1,6 +1,5 @@ use crate::{ db::ApiAuthed, - jobs::generate_unique_suspend_number, triggers::{StandardTriggerQuery, TriggerData, BASE_TRIGGER_FIELDS}, }; use async_trait::async_trait; @@ -100,7 +99,6 @@ pub trait TriggerCrud: Send + Sync + 'static { authed: &ApiAuthed, w_id: &str, trigger: TriggerData, - suspend_number: Option, ) -> Result<()>; async fn update_trigger( @@ -111,7 +109,6 @@ pub trait TriggerCrud: Send + Sync + 'static { workspace_id: &str, path: &str, trigger: TriggerData, - suspend_number: Option, ) -> Result<()>; async fn test_connection( @@ -290,7 +287,7 @@ pub trait TriggerCrud: Send + Sync + 'static { "email", "edited_at", "extra_perms", - "suspend_number", + "active_mode", ]; if Self::SUPPORTS_SERVER_STATE { @@ -354,20 +351,6 @@ pub fn trigger_routes() -> Router { router } -pub async fn get_suspend_number_for_inactive_mode( - db: &DB, - workspace_id: &str, - active_mode: Option, -) -> Result> { - if let Some(false) = active_mode { - Ok(Some( - generate_unique_suspend_number(db, workspace_id).await?, - )) - } else { - Ok(None) - } -} - async fn create_trigger( Extension(handler): Extension>, authed: ApiAuthed, @@ -398,19 +381,9 @@ async fn create_trigger( let mut tx = user_db.begin(&authed).await?; let new_path = new_trigger.base.path.clone(); - let suspend_number = - get_suspend_number_for_inactive_mode(&db, &workspace_id, new_trigger.base.active_mode) - .await?; handler - .create_trigger( - &db, - &mut *tx, - &authed, - &workspace_id, - new_trigger, - suspend_number, - ) + .create_trigger(&db, &mut *tx, &authed, &workspace_id, new_trigger) .await?; audit_log( @@ -501,20 +474,9 @@ async fn update_trigger( let mut tx = user_db.begin(&authed).await?; let new_path = edit_trigger.base.path.to_string(); - let suspend_number = - get_suspend_number_for_inactive_mode(&db, &workspace_id, edit_trigger.base.active_mode) - .await?; handler - .update_trigger( - &db, - &mut *tx, - &authed, - &workspace_id, - path, - edit_trigger, - suspend_number, - ) + .update_trigger(&db, &mut *tx, &authed, &workspace_id, path, edit_trigger) .await?; audit_log( diff --git a/backend/windmill-api/src/triggers/http/handler.rs b/backend/windmill-api/src/triggers/http/handler.rs index c3b35f68c3a60..f98c8ee7ca52a 100644 --- a/backend/windmill-api/src/triggers/http/handler.rs +++ b/backend/windmill-api/src/triggers/http/handler.rs @@ -8,7 +8,6 @@ use crate::{ jobs::start_job_update_sse_stream, resources::try_get_resource_from_db_as, triggers::{ - handler::get_suspend_number_for_inactive_mode, http::{ refresh_routers, validate_authentication_method, HttpConfig, HttpConfigRequest, RouteExists, ROUTE_PATH_KEY_RE, VALID_ROUTE_PATH_RE, @@ -41,7 +40,8 @@ use windmill_audit::{audit_oss::audit_log, ActionKind}; use windmill_common::{ db::UserDB, error::{Error, Result}, - triggers::TriggerKind, + jobs::JobTriggerKind, + triggers::{TriggerInfo, TriggerKind}, utils::{not_found_if_none, require_admin, StripPath}, worker::CLOUD_HOSTED, }; @@ -177,7 +177,6 @@ pub async fn insert_new_trigger_into_db( w_id: &str, trigger: &TriggerData, route_path_key: &str, - suspend_number: Option, ) -> Result<()> { require_admin(authed.is_admin, &authed.username)?; @@ -209,7 +208,7 @@ pub async fn insert_new_trigger_into_db( error_handler_path, error_handler_args, retry, - suspend_number + active_mode ) VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, now(), $19, $20, $21, $22, $23 @@ -237,7 +236,7 @@ pub async fn insert_new_trigger_into_db( trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, trigger.error_handling.retry as _, - suspend_number + trigger.base.active_mode.unwrap_or(true) ) .execute(&mut *tx) .await?; @@ -283,19 +282,9 @@ pub async fn create_many_http_triggers( let mut tx = user_db.begin(&authed).await?; for (new_http_trigger, route_path_key) in new_http_triggers.iter().zip(route_path_keys.iter()) { - let suspend_number = - get_suspend_number_for_inactive_mode(&db, &w_id, new_http_trigger.base.active_mode) - .await?; - insert_new_trigger_into_db( - &authed, - &mut tx, - &w_id, - new_http_trigger, - route_path_key, - suspend_number, - ) - .await - .map_err(|err| error_wrapper(&new_http_trigger.config.route_path, err))?; + insert_new_trigger_into_db(&authed, &mut tx, &w_id, new_http_trigger, route_path_key) + .await + .map_err(|err| error_wrapper(&new_http_trigger.config.route_path, err))?; audit_log( &mut *tx, @@ -448,12 +437,10 @@ impl TriggerCrud for HttpTrigger { authed: &ApiAuthed, w_id: &str, trigger: TriggerData, - suspend_number: Option, ) -> Result<()> { let route_path_key = check_if_route_exist(db, &trigger.config, &w_id, None).await?; - insert_new_trigger_into_db(authed, tx, w_id, &trigger, &route_path_key, suspend_number) - .await?; + insert_new_trigger_into_db(authed, tx, w_id, &trigger, &route_path_key).await?; increase_trigger_version(tx).await?; @@ -468,7 +455,6 @@ impl TriggerCrud for HttpTrigger { workspace_id: &str, path: &str, trigger: TriggerData, - suspend_number: Option, ) -> Result<()> { if authed.is_admin { if trigger.config.route_path.is_empty() { @@ -512,7 +498,7 @@ impl TriggerCrud for HttpTrigger { error_handler_path = $19, error_handler_args = $20, retry = $21, - suspend_number = $22 + active_mode = $22 WHERE workspace_id = $23 AND path = $24 @@ -538,7 +524,7 @@ impl TriggerCrud for HttpTrigger { trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, trigger.error_handling.retry as _, - suspend_number, + trigger.base.active_mode.unwrap_or(true), workspace_id, path, ) @@ -571,7 +557,7 @@ impl TriggerCrud for HttpTrigger { error_handler_path = $16, error_handler_args = $17, retry = $18, - suspend_number = $19 + active_mode = $19 WHERE workspace_id = $20 AND path = $21 @@ -594,7 +580,7 @@ impl TriggerCrud for HttpTrigger { trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, trigger.error_handling.retry as _, - suspend_number, + trigger.base.active_mode.unwrap_or(true), workspace_id, path, ) @@ -1054,7 +1040,8 @@ async fn route_job( ) .map_err(|e| e.into_response())?; - if let Some(suspend_number) = trigger.suspend_number { + let trigger_info = TriggerInfo::new(Some(trigger.path.clone()), JobTriggerKind::Http); + if !trigger.active_mode { let _ = trigger_runnable( &db, Some(user_db), @@ -1068,8 +1055,8 @@ async fn route_job( trigger.error_handler_args.as_ref(), format!("http_trigger/{}", trigger.path), None, - Some(suspend_number), - Some(windmill_common::jobs::JobTriggerKind::Http) + trigger.active_mode, + trigger_info, ) .await .map_err(|e| e.into_response())?; @@ -1101,7 +1088,8 @@ async fn route_job( trigger.error_handler_args.as_ref(), format!("http_trigger/{}", trigger.path), None, - Some(windmill_common::jobs::JobTriggerKind::Http), + trigger_info, + None, ) .await .map_err(|e| e.into_response())?; @@ -1160,8 +1148,8 @@ async fn route_job( trigger.error_handler_args.as_ref(), format!("http_trigger/{}", trigger.path), None, - None, - Some(windmill_common::jobs::JobTriggerKind::Http), + trigger.active_mode, + trigger_info, ) .await .map_err(|e| e.into_response()), @@ -1177,7 +1165,7 @@ async fn route_job( trigger.error_handler_path.as_deref(), trigger.error_handler_args.as_ref(), format!("http_trigger/{}", trigger.path), - Some(windmill_common::jobs::JobTriggerKind::Http), + trigger_info, ) .await .map_err(|e| e.into_response()), diff --git a/backend/windmill-api/src/triggers/http/mod.rs b/backend/windmill-api/src/triggers/http/mod.rs index 446dad7728697..0025d92be70c2 100644 --- a/backend/windmill-api/src/triggers/http/mod.rs +++ b/backend/windmill-api/src/triggers/http/mod.rs @@ -48,7 +48,7 @@ pub struct TriggerRoute { error_handler_path: Option, error_handler_args: Option>>, retry: Option>, - suspend_number: Option, + active_mode: bool, } pub struct RoutersCache { @@ -259,7 +259,7 @@ pub async fn refresh_routers(db: &DB) -> Result<(bool, RwLockReadGuard<'_, Route error_handler_path, error_handler_args as "error_handler_args: _", retry as "retry: _", - suspend_number + active_mode FROM http_trigger WHERE diff --git a/backend/windmill-api/src/triggers/listener.rs b/backend/windmill-api/src/triggers/listener.rs index 421b3c4b09cac..f931d036d8cad 100644 --- a/backend/windmill-api/src/triggers/listener.rs +++ b/backend/windmill-api/src/triggers/listener.rs @@ -22,7 +22,7 @@ use tokio::sync::RwLock; use windmill_common::{ error::{Error, Result}, jobs::JobTriggerKind, - triggers::TriggerKind, + triggers::{TriggerInfo, TriggerKind}, utils::report_critical_error, DB, INSTANCE_NAME, }; @@ -95,7 +95,7 @@ pub trait Listener: TriggerCrud + TriggerJobArgs { trigger_config: trigger.config, error_handling: Some(trigger.error_handling), trigger_mode: true, - suspend_number: trigger.base.suspend_number, + active_mode: Some(trigger.base.active_mode), }) .collect_vec(); @@ -145,7 +145,7 @@ pub trait Listener: TriggerCrud + TriggerJobArgs { trigger_mode: false, is_flow: capture.is_flow, error_handling: None, - suspend_number: None, + active_mode: None, }) .collect_vec(); @@ -506,8 +506,8 @@ pub trait Listener: TriggerCrud + TriggerJobArgs { error_handler_args, format!("{}_trigger/{}", Self::TRIGGER_KIND, listening_trigger.path), None, - listening_trigger.suspend_number, - Some(Self::JOB_TRIGGER_KIND), + listening_trigger.active_mode.unwrap_or(false), + TriggerInfo::new(Some(listening_trigger.path.clone()), Self::JOB_TRIGGER_KIND), ) .await?; @@ -802,7 +802,7 @@ pub struct ListeningTrigger { pub script_path: String, pub trigger_mode: bool, pub error_handling: Option, - pub suspend_number: Option, + pub active_mode: Option, } impl ListeningTrigger { diff --git a/backend/windmill-api/src/triggers/mod.rs b/backend/windmill-api/src/triggers/mod.rs index 21c8fd5dc7c4b..276e74117185f 100644 --- a/backend/windmill-api/src/triggers/mod.rs +++ b/backend/windmill-api/src/triggers/mod.rs @@ -1,7 +1,15 @@ -use chrono::{DateTime, Utc}; +use chrono::{DateTime, TimeZone, Utc}; use serde::{Deserialize, Serialize}; use sqlx::{types::Json as SqlxJson, FromRow}; use std::{collections::HashMap, fmt::Debug}; +use windmill_common::jobs::JobTriggerKind; + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(tag = "type", rename_all = "snake_case")] +pub enum HandlerAction { + Trigger { path: String, trigger_kind: JobTriggerKind }, + // Future variants can be added here (e.g., Script, Flow, etc.) +} #[cfg(all(feature = "smtp", feature = "enterprise", feature = "private"))] pub mod email; @@ -52,7 +60,7 @@ pub struct BaseTrigger { pub email: String, pub edited_at: DateTime, pub extra_perms: Option, - pub suspend_number: Option, + pub active_mode: bool, } #[derive(Debug, FromRow, Clone, Serialize, Deserialize)] @@ -159,5 +167,9 @@ pub const BASE_TRIGGER_FIELDS: [&'static str; 9] = [ "email", "edited_at", "extra_perms", - "suspend_number", + "active_mode", ]; + +lazy_static::lazy_static! { + pub static ref INACTIVE_TRIGGER_SCHEDULED_FOR_DATE: DateTime = Utc.with_ymd_and_hms(9999, 12, 31, 23, 59, 59).unwrap(); +} diff --git a/backend/windmill-api/src/triggers/mqtt/handler.rs b/backend/windmill-api/src/triggers/mqtt/handler.rs index cdd2093c07bcc..b4db9e2ed67e4 100644 --- a/backend/windmill-api/src/triggers/mqtt/handler.rs +++ b/backend/windmill-api/src/triggers/mqtt/handler.rs @@ -73,7 +73,6 @@ impl TriggerCrud for MqttTrigger { authed: &ApiAuthed, w_id: &str, trigger: TriggerData, - suspend_number: Option, ) -> Result<()> { let subscribe_topics = trigger .config @@ -103,7 +102,7 @@ impl TriggerCrud for MqttTrigger { error_handler_path, error_handler_args, retry, - suspend_number + active_mode ) VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17 @@ -124,7 +123,7 @@ impl TriggerCrud for MqttTrigger { trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, trigger.error_handling.retry as _, - suspend_number + trigger.base.active_mode.unwrap_or(true) ) .execute(tx) .await?; @@ -140,7 +139,6 @@ impl TriggerCrud for MqttTrigger { workspace_id: &str, path: &str, trigger: TriggerData, - suspend_number: Option, ) -> Result<()> { let subscribe_topics = trigger .config @@ -174,7 +172,7 @@ impl TriggerCrud for MqttTrigger { error_handler_path = $14, error_handler_args = $15, retry = $16, - suspend_number = $17 + active_mode = $17 WHERE workspace_id = $12 AND path = $13 @@ -195,7 +193,7 @@ impl TriggerCrud for MqttTrigger { trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, trigger.error_handling.retry as _, - suspend_number + trigger.base.active_mode.unwrap_or(true) ) .execute(tx) .await?; diff --git a/backend/windmill-api/src/triggers/postgres/handler.rs b/backend/windmill-api/src/triggers/postgres/handler.rs index f0156fdd727b0..0bdfe995955d8 100644 --- a/backend/windmill-api/src/triggers/postgres/handler.rs +++ b/backend/windmill-api/src/triggers/postgres/handler.rs @@ -71,7 +71,6 @@ impl TriggerCrud for PostgresTrigger { authed: &ApiAuthed, w_id: &str, trigger: TriggerData, - suspend_number: Option, ) -> Result<()> { let Self::TriggerConfigRequest { postgres_resource_path, @@ -128,7 +127,7 @@ impl TriggerCrud for PostgresTrigger { error_handler_path, error_handler_args, retry, - suspend_number + active_mode ) VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, now(), $11, $12, $13, $14 ) @@ -146,7 +145,7 @@ impl TriggerCrud for PostgresTrigger { trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, trigger.error_handling.retry as _, - suspend_number + trigger.base.active_mode.unwrap_or(true) ) .execute(tx) .await?; @@ -161,7 +160,6 @@ impl TriggerCrud for PostgresTrigger { w_id: &str, path: &str, trigger: TriggerData, - suspend_number: Option, ) -> Result<()> { let Self::TriggerConfigRequest { replication_slot_name, @@ -232,7 +230,7 @@ impl TriggerCrud for PostgresTrigger { error_handler_path = $11, error_handler_args = $12, retry = $13, - suspend_number = $14 + active_mode = $14 WHERE workspace_id = $9 AND path = $10 "#, @@ -249,7 +247,7 @@ impl TriggerCrud for PostgresTrigger { trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, trigger.error_handling.retry as _, - suspend_number + trigger.base.active_mode.unwrap_or(true) ) .execute(tx) .await?; diff --git a/backend/windmill-api/src/triggers/trigger_helpers.rs b/backend/windmill-api/src/triggers/trigger_helpers.rs index f938253092da0..e357b7b0681f3 100644 --- a/backend/windmill-api/src/triggers/trigger_helpers.rs +++ b/backend/windmill-api/src/triggers/trigger_helpers.rs @@ -1,31 +1,17 @@ use anyhow::Context; use axum::response::IntoResponse; -use chrono::{TimeZone, Utc}; +use chrono::{DateTime, Utc}; use http::StatusCode; use serde::Deserialize; use serde_json::value::RawValue; use sqlx::types::Json; +use std::collections::HashMap; use std::future::Future; -use std::{collections::HashMap, i32}; use uuid::Uuid; use windmill_common::{ - db::{UserDB, UserDbWithAuthed}, - error::Result, - flows::{FlowModuleValue, Retry}, - get_latest_deployed_hash_for_path, get_latest_flow_version_info_for_path, - jobs::{ - get_has_preprocessor_from_content_and_lang, script_path_to_payload, JobPayload, - JobTriggerKind, - }, - scripts::{get_full_hub_script_by_path, ScriptHash, ScriptLang}, - triggers::{ - HubOrWorkspaceId, RunnableFormat, RunnableFormatVersion, TriggerKind, - RUNNABLE_FORMAT_VERSION_CACHE, - }, - users::username_to_permissioned_as, - utils::StripPath, - worker::to_raw_value, - FlowVersionInfo, + FlowVersionInfo, db::{UserDB, UserDbWithAuthed}, error::Result, flows::{FlowModuleValue, Retry}, get_latest_deployed_hash_for_path, get_latest_flow_version_info_for_path, jobs::{JobPayload, get_has_preprocessor_from_content_and_lang, script_path_to_payload}, scripts::{ScriptHash, ScriptLang, get_full_hub_script_by_path}, triggers::{ + HubOrWorkspaceId, RUNNABLE_FORMAT_VERSION_CACHE, RunnableFormat, RunnableFormatVersion, TriggerInfo, TriggerKind + }, users::username_to_permissioned_as, utils::StripPath, worker::to_raw_value }; use windmill_queue::{push, PushArgs, PushArgsOwned, PushIsolationLevel}; @@ -34,9 +20,11 @@ use crate::jobs::check_license_key_valid; use crate::{ db::{ApiAuthed, DB}, jobs::{ - check_tag_available_for_workspace, delete_job_metadata_after_use, result_to_response, - run_flow_by_path_inner, run_script_by_path_inner, run_wait_result_internal, RunJobQuery, + check_tag_available_for_workspace, delete_job_metadata_after_use, + push_flow_job_by_path_into_queue, push_script_job_by_path_into_queue, result_to_response, + run_wait_result_internal, RunJobQuery, }, + triggers::INACTIVE_TRIGGER_SCHEDULED_FOR_DATE, utils::check_scopes, HTTP_CLIENT, }; @@ -498,7 +486,8 @@ pub async fn trigger_runnable_inner( error_handler_args: Option<&sqlx::types::Json>>, trigger_path: String, job_id: Option, - trigger_kind: Option, + trigger: TriggerInfo, + active_mode: Option, ) -> Result<(Uuid, Option, Option)> { let error_handler_args = error_handler_args.map(|args| { let args = args @@ -510,10 +499,13 @@ pub async fn trigger_runnable_inner( }); let user_db = user_db.unwrap_or_else(|| UserDB::new(db.clone())); + let scheduled_for = active_mode + .filter(|active_mode| !*active_mode) + .map(|_| INACTIVE_TRIGGER_SCHEDULED_FOR_DATE.clone()); let (uuid, delete_after_use, early_return) = if is_flow { - let run_query = RunJobQuery { job_id, ..Default::default() }; + let run_query = RunJobQuery { job_id, scheduled_for, ..Default::default() }; let path = StripPath(runnable_path.to_string()); - let (uuid, early_return) = run_flow_by_path_inner( + let (uuid, early_return) = push_flow_job_by_path_into_queue( authed, db.clone(), user_db, @@ -521,7 +513,7 @@ pub async fn trigger_runnable_inner( path, run_query, args, - trigger_kind, + Some(trigger), ) .await?; (uuid, None, early_return) @@ -538,7 +530,8 @@ pub async fn trigger_runnable_inner( error_handler_args.as_ref(), trigger_path, job_id, - trigger_kind, + trigger, + scheduled_for, ) .await?; (uuid, delete_after_use, None) @@ -561,49 +554,27 @@ pub async fn trigger_runnable( error_handler_args: Option<&sqlx::types::Json>>, trigger_path: String, job_id: Option, - suspend_number: Option, - trigger_kind: Option, + active_mode: bool, + trigger: TriggerInfo, ) -> Result { - let uuid = match suspend_number { - Some(suspend_number) => { - trigger_runnable_with_suspend( - db, - user_db, - authed, - workspace_id, - runnable_path, - is_flow, - args, - retry, - error_handler_path, - error_handler_args, - trigger_path, - job_id, - suspend_number, - trigger_kind, - ) - .await? - } - _ => { - trigger_runnable_inner( - db, - user_db, - authed, - workspace_id, - runnable_path, - is_flow, - args, - retry, - error_handler_path, - error_handler_args, - trigger_path, - job_id, - trigger_kind, - ) - .await? - .0 - } - }; + let uuid = trigger_runnable_inner( + db, + user_db, + authed, + workspace_id, + runnable_path, + is_flow, + args, + retry, + error_handler_path, + error_handler_args, + trigger_path, + job_id, + trigger, + Some(active_mode), + ) + .await? + .0; Ok((StatusCode::CREATED, uuid.to_string()).into_response()) } @@ -620,7 +591,7 @@ pub async fn trigger_runnable_and_wait_for_result( error_handler_path: Option<&str>, error_handler_args: Option<&sqlx::types::Json>>, trigger_path: String, - trigger_kind: Option, + trigger: TriggerInfo, ) -> Result { let username = authed.username.clone(); let (uuid, delete_after_use, early_return) = trigger_runnable_inner( @@ -636,7 +607,8 @@ pub async fn trigger_runnable_and_wait_for_result( error_handler_args, trigger_path, None, - trigger_kind, + trigger, + None, ) .await?; let (result, success) = @@ -663,7 +635,7 @@ pub async fn trigger_runnable_and_wait_for_raw_result( error_handler_path: Option<&str>, error_handler_args: Option<&sqlx::types::Json>>, trigger_path: String, - trigger_kind: Option, + trigger: TriggerInfo, ) -> Result<(Box, bool)> { let username = authed.username.clone(); let (uuid, delete_after_use, early_return) = trigger_runnable_inner( @@ -679,7 +651,8 @@ pub async fn trigger_runnable_and_wait_for_raw_result( error_handler_args, trigger_path, None, - trigger_kind, + trigger, + None, ) .await?; @@ -713,7 +686,7 @@ pub async fn trigger_runnable_and_wait_for_raw_result_with_error_ctx( error_handler_path: Option<&str>, error_handler_args: Option<&sqlx::types::Json>>, trigger_path: String, - trigger_kind: Option, + trigger: TriggerInfo, ) -> Result> { let (result, success) = trigger_runnable_and_wait_for_raw_result( db, @@ -727,7 +700,7 @@ pub async fn trigger_runnable_and_wait_for_raw_result_with_error_ctx( error_handler_path, error_handler_args, trigger_path, - trigger_kind, + trigger, ) .await?; @@ -754,12 +727,13 @@ async fn trigger_script_internal( error_handler_args: Option<&sqlx::types::Json>>>, trigger_path: String, job_id: Option, - trigger_kind: Option, + trigger: TriggerInfo, + scheduled_for: Option>, ) -> Result<(Uuid, Option)> { if retry.is_none() && error_handler_path.is_none() { - let run_query = RunJobQuery { job_id, ..Default::default() }; + let run_query = RunJobQuery { job_id, scheduled_for, ..Default::default() }; let path = StripPath(script_path.to_string()); - run_script_by_path_inner( + push_script_job_by_path_into_queue( authed, db.clone(), user_db, @@ -767,7 +741,7 @@ async fn trigger_script_internal( path, run_query, args, - trigger_kind, + Some(trigger), ) .await } else { @@ -783,7 +757,8 @@ async fn trigger_script_internal( error_handler_args, trigger_path, job_id, - trigger_kind, + trigger, + scheduled_for, ) .await } @@ -801,7 +776,8 @@ async fn trigger_script_with_retry_and_error_handler( error_handler_args: Option<&sqlx::types::Json>>>, trigger_path: String, job_id: Option, - trigger_kind: Option, + trigger: TriggerInfo, + scheduled_for: Option>, ) -> Result<(Uuid, Option)> { #[cfg(feature = "enterprise")] check_license_key_valid().await?; @@ -874,7 +850,7 @@ async fn trigger_script_with_retry_and_error_handler( priority, tag_override: tag.clone(), apply_preprocessor, - trigger_path: Some(trigger_path), + trigger_path: Some(trigger_path.clone()), custom_debounce_key, debounce_delay_s, }, @@ -885,7 +861,6 @@ async fn trigger_script_with_retry_and_error_handler( ))) } }; - let (uuid, tx) = push( &db, tx, @@ -896,7 +871,7 @@ async fn trigger_script_with_retry_and_error_handler( email, permissioned_as, authed.token_prefix.as_deref(), - None, + scheduled_for, None, None, None, @@ -914,217 +889,10 @@ async fn trigger_script_with_retry_and_error_handler( false, None, None, - None, - trigger_kind, + Some(trigger), ) .await?; tx.commit().await?; Ok((uuid, delete_after_use)) } - - -async fn trigger_runnable_with_suspend( - db: &DB, - user_db: Option, - authed: ApiAuthed, - workspace_id: &str, - runnable_path: &str, - is_flow: bool, - args: PushArgsOwned, - retry: Option<&sqlx::types::Json>, - error_handler_path: Option<&str>, - error_handler_args: Option<&sqlx::types::Json>>, - trigger_path: String, - job_id: Option, - suspend_number: i32, - trigger_kind: Option, -) -> Result { - let far_future_utc = Utc.with_ymd_and_hms(9999, 12, 31, 23, 59, 59).unwrap(); - if is_flow { - let user_db = user_db.unwrap_or_else(|| UserDB::new(db.clone())); - let db_authed = UserDbWithAuthed { db: user_db.clone(), authed: &authed.to_authed_ref() }; - - let FlowVersionInfo { version, .. } = get_latest_flow_version_info_for_path( - Some(db_authed), - &db, - workspace_id, - runnable_path, - false, - ) - .await?; - - let (email, permissioned_as, push_authed, tx) = ( - authed.email.as_str(), - username_to_permissioned_as(&authed.username), - Some(authed.clone().into()), - PushIsolationLevel::Isolated(user_db, authed.clone().into()), - ); - - let push_args = windmill_queue::PushArgs { args: &args.args, extra: args.extra }; - - let flow_payload = windmill_common::jobs::JobPayload::Flow { - path: runnable_path.to_string(), - version: version, - dedicated_worker: None, - apply_preprocessor: false, - }; - - let (uuid, tx) = push( - db, - tx, - workspace_id, - flow_payload, - push_args, - authed.display_username(), - email, - permissioned_as, - authed.token_prefix.as_deref(), - Some(far_future_utc), - None, - None, - None, - None, - job_id, - false, - false, - None, - true, - None, - None, - None, - None, - push_authed.as_ref(), - false, - None, - None, - Some(suspend_number), - trigger_kind - ) - .await?; - - tx.commit().await?; - Ok(uuid) - } else { - use crate::jobs::check_tag_available_for_workspace; - use windmill_common::db::UserDbWithAuthed; - use windmill_common::jobs::script_path_to_payload; - use windmill_common::users::username_to_permissioned_as; - use windmill_queue::{push, PushIsolationLevel}; - - let error_handler_args = error_handler_args.map(|args| { - args.0 - .iter() - .map(|(key, value)| (key.to_owned(), to_raw_value(&value))) - .collect::>>() - }); - - let user_db = user_db.unwrap_or_else(|| UserDB::new(db.clone())); - let db_authed = UserDbWithAuthed { db: user_db.clone(), authed: &authed.to_authed_ref() }; - let (job_payload, tag, _delete_after_use, timeout, on_behalf_of) = script_path_to_payload( - runnable_path, - Some(db_authed), - db.clone(), - workspace_id, - Some(false), - ) - .await?; - - check_tag_available_for_workspace(db, workspace_id, &tag, &authed).await?; - - let (email, permissioned_as, push_authed, tx) = - if let Some(on_behalf_of) = on_behalf_of.as_ref() { - ( - on_behalf_of.email.as_str(), - on_behalf_of.permissioned_as.clone(), - None, - PushIsolationLevel::IsolatedRoot(db.clone()), - ) - } else { - ( - authed.email.as_str(), - username_to_permissioned_as(&authed.username), - Some(authed.clone().into()), - PushIsolationLevel::Isolated(user_db, authed.clone().into()), - ) - }; - - let push_args = windmill_queue::PushArgs { args: &args.args, extra: args.extra }; - - let retryable_job_payload = match job_payload { - windmill_common::jobs::JobPayload::ScriptHash { - hash, - path, - custom_concurrency_key, - concurrent_limit, - concurrency_time_window_s, - custom_debounce_key, - debounce_delay_s, - cache_ttl, - priority, - apply_preprocessor, - .. - } => windmill_common::jobs::JobPayload::SingleStepFlow { - path, - hash: Some(hash), - flow_version: None, - args: HashMap::from(&push_args), - retry: retry.map(|r| r.0.clone()), - error_handler_path: error_handler_path.map(|s| s.to_string()), - error_handler_args, - skip_handler: None, - custom_concurrency_key, - concurrent_limit, - concurrency_time_window_s, - cache_ttl, - priority, - tag_override: tag.clone(), - apply_preprocessor, - trigger_path: Some(trigger_path), - custom_debounce_key, - debounce_delay_s, - }, - _ => { - return Err(windmill_common::error::Error::internal_err(format!( - "Unsupported job payload for suspended execution" - ))) - } - }; - - let (uuid, tx) = push( - db, - tx, - workspace_id, - retryable_job_payload, - push_args, - authed.display_username(), - email, - permissioned_as, - authed.token_prefix.as_deref(), - Some(far_future_utc), - None, - None, - None, - None, - job_id, - false, - false, - None, - true, - tag, - timeout, - None, - None, - push_authed.as_ref(), - false, - None, - None, - Some(suspend_number), - trigger_kind - ) - .await?; - - tx.commit().await?; - Ok(uuid) - } -} diff --git a/backend/windmill-api/src/triggers/websocket/handler.rs b/backend/windmill-api/src/triggers/websocket/handler.rs index f1c39b720f4b4..1dcfd956e5e3d 100644 --- a/backend/windmill-api/src/triggers/websocket/handler.rs +++ b/backend/windmill-api/src/triggers/websocket/handler.rs @@ -79,7 +79,6 @@ impl TriggerCrud for WebsocketTrigger { authed: &ApiAuthed, w_id: &str, trigger: TriggerData, - suspend_number: Option, ) -> Result<()> { let filters = trigger .config @@ -114,7 +113,7 @@ impl TriggerCrud for WebsocketTrigger { error_handler_path, error_handler_args, retry, - suspend_number + active_mode ) VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, now(), $14, $15, $16, $17 ) @@ -138,7 +137,7 @@ impl TriggerCrud for WebsocketTrigger { trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, trigger.error_handling.retry as _, - suspend_number + trigger.base.active_mode.unwrap_or(true) ) .execute(&mut *tx) .await?; @@ -153,7 +152,6 @@ impl TriggerCrud for WebsocketTrigger { w_id: &str, path: &str, trigger: TriggerData, - suspend_number: Option, ) -> Result<()> { let filters = trigger .config @@ -192,7 +190,7 @@ impl TriggerCrud for WebsocketTrigger { error_handler_path = $14, error_handler_args = $15, retry = $16, - suspend_number = $17 + active_mode = $17 WHERE workspace_id = $12 AND path = $13 ", @@ -216,7 +214,7 @@ impl TriggerCrud for WebsocketTrigger { trigger.error_handling.error_handler_path, trigger.error_handling.error_handler_args as _, trigger.error_handling.retry as _, - suspend_number + trigger.base.active_mode.unwrap_or(true) ) .execute(&mut *tx) .await?; diff --git a/backend/windmill-api/src/triggers/websocket/listener.rs b/backend/windmill-api/src/triggers/websocket/listener.rs index ea0cebb0e55dc..b1fd2dc56d17a 100644 --- a/backend/windmill-api/src/triggers/websocket/listener.rs +++ b/backend/windmill-api/src/triggers/websocket/listener.rs @@ -24,6 +24,7 @@ use tokio_tungstenite::{connect_async, tungstenite::Message, MaybeTlsStream, Web use windmill_common::{ error::{to_anyhow, Error, Result}, jobs::JobTriggerKind, + triggers::TriggerInfo, utils::report_critical_error, worker::to_raw_value, DB, @@ -94,7 +95,7 @@ impl ListeningTrigger { None, None, "".to_string(), // doesn't matter as no retry/error handler - Some(windmill_common::jobs::JobTriggerKind::Websocket), + TriggerInfo::new(Some(self.path.to_owned()), JobTriggerKind::Websocket), ) .await .map(|r| r.get().to_owned())?; @@ -333,7 +334,7 @@ impl Listener for WebsocketTrigger { trigger_config, script_path, error_handling, - suspend_number, + active_mode, .. } = listening_trigger; @@ -366,8 +367,9 @@ impl Listener for WebsocketTrigger { ), None => (None, None, None), }; - - if suspend_number.is_some() || extra.is_none() { + let active_mode = active_mode.unwrap_or(false); + let trigger = TriggerInfo::new(Some(path.to_owned()), Self::JOB_TRIGGER_KIND); + if active_mode || extra.is_none() { trigger_runnable( db, None, @@ -381,8 +383,8 @@ impl Listener for WebsocketTrigger { error_handler_args, format!("websocket_trigger/{}", listening_trigger.path), None, - *suspend_number, - Some(windmill_common::jobs::JobTriggerKind::Websocket), + active_mode, + trigger, ) .await?; } else if let Some(ReturnMessageChannels { send_message_tx, mut killpill_rx }) = extra { @@ -413,7 +415,7 @@ impl Listener for WebsocketTrigger { error_handler_path.as_deref(), error_handler_args.as_ref(), format!("websocket_trigger/{}", trigger_path), - Some(windmill_common::jobs::JobTriggerKind::Websocket), + trigger, ) => { if let Ok((result, success)) = result { if !success && !can_return_error_result { diff --git a/backend/windmill-api/src/triggers/websocket/mod.rs b/backend/windmill-api/src/triggers/websocket/mod.rs index e19c958423a39..6d35c77e8e9cc 100644 --- a/backend/windmill-api/src/triggers/websocket/mod.rs +++ b/backend/windmill-api/src/triggers/websocket/mod.rs @@ -11,7 +11,8 @@ use serde_json::value::RawValue; use sqlx::{types::Json as SqlxJson, FromRow}; use windmill_common::{ error::{Error, Result}, - triggers::TriggerKind, + jobs::JobTriggerKind, + triggers::{TriggerInfo, TriggerKind}, worker::to_raw_value, DB, }; @@ -113,7 +114,7 @@ pub async fn get_url_from_runnable_value( None, None, "".to_string(), // doesn't matter as no retry/error handler - Some(windmill_common::jobs::JobTriggerKind::Websocket), + TriggerInfo::new(Some(path.to_owned()), JobTriggerKind::Websocket), ) .await?; diff --git a/backend/windmill-common/src/triggers.rs b/backend/windmill-common/src/triggers.rs index 43c4ae50fc920..3c28db449c677 100644 --- a/backend/windmill-common/src/triggers.rs +++ b/backend/windmill-common/src/triggers.rs @@ -4,6 +4,8 @@ use serde::{Deserialize, Serialize}; use std::fmt; use strum_macros::EnumIter; +use crate::jobs::JobTriggerKind; + #[derive(sqlx::Type, Serialize, Deserialize, Debug, Clone, Eq, PartialEq, Hash, EnumIter)] #[sqlx(type_name = "TRIGGER_KIND", rename_all = "snake_case")] #[serde(rename_all = "snake_case")] @@ -82,3 +84,14 @@ lazy_static! { pub static ref RUNNABLE_FORMAT_VERSION_CACHE: Cache = Cache::new(1000); } + +pub struct TriggerInfo { + pub trigger_path: Option, + pub trigger_kind: JobTriggerKind, +} + +impl TriggerInfo { + pub fn new(trigger_path: Option, trigger_kind: JobTriggerKind) -> TriggerInfo { + TriggerInfo { trigger_path, trigger_kind } + } +} diff --git a/backend/windmill-queue/src/jobs.rs b/backend/windmill-queue/src/jobs.rs index b3e6e85cab103..5c3bca618c4af 100644 --- a/backend/windmill-queue/src/jobs.rs +++ b/backend/windmill-queue/src/jobs.rs @@ -37,6 +37,7 @@ use windmill_common::auth::JobPerms; use windmill_common::bench::BenchmarkIter; use windmill_common::lockfiles::is_generated_from_raw_requirements; use windmill_common::jobs::{JobTriggerKind, EMAIL_ERROR_HANDLER_USER_EMAIL}; +use windmill_common::triggers::TriggerInfo; use windmill_common::utils::{configure_client, now_from_db}; use windmill_common::worker::{Connection, MIN_VERSION_SUPPORTS_DEBOUNCING, SCRIPT_TOKEN_EXPIRY}; @@ -471,7 +472,6 @@ pub async fn push_init_job<'c>( None, None, None, - None, ) .await?; inner_tx.commit().await?; @@ -531,7 +531,6 @@ pub async fn push_periodic_bash_job<'c>( None, None, None, - None, ) .await?; inner_tx.commit().await?; @@ -1378,7 +1377,6 @@ async fn restart_job_if_perpetual_inner( None, None, None, - None, ) .await?; tx.commit().await?; @@ -1930,7 +1928,6 @@ pub async fn push_error_handler<'a, 'c, T: Serialize + Send + Sync>( None, None, None, - None, ) .await?; tx.commit().await?; @@ -3871,7 +3868,7 @@ pub async fn push<'c, 'd>( token_prefix: Option<&str>, #[allow(unused_mut)] mut scheduled_for_o: Option>, - schedule_path: Option, + schedule_path: Option, //should be removed in favor of the trigger param below parent_job: Option, root_job: Option, flow_innermost_root_job: Option, @@ -3890,8 +3887,7 @@ pub async fn push<'c, 'd>( // If we know there is already a debounce job, we can use this for debouncing. // NOTE: Only works with dependency jobs triggered by relative imports debounce_job_id_o: Option, - suspend_number: Option, // If provided, job will be created as suspended with this number - trigger_kind: Option, + trigger: Option, ) -> Result<(Uuid, Transaction<'c, Postgres>), Error> { #[cfg(feature = "cloud")] if *CLOUD_HOSTED { @@ -5211,6 +5207,16 @@ pub async fn push<'c, 'd>( } } + let (trigger_path, trigger_kind) = trigger.map_or_else( + || { + schedule_path.map(|path| (Some(path), JobTriggerKind::Schedule)) + }, + |trigger| { + Some((trigger.trigger_path, trigger.trigger_kind)) + }, + ) + .unzip(); + if concurrent_limit.is_some() { insert_concurrency_key( workspace_id, @@ -5286,13 +5292,6 @@ pub async fn push<'c, 'd>( // tracing::error!("Could not insert job_perms for job {job_id}: {err:#}"); // } - let trigger_kind = trigger_kind.or_else(|| { - if schedule_path.is_some() { - Some(JobTriggerKind::Schedule) - } else { - None - } - }); let root_job = if root_job.is_some() && (root_job == flow_innermost_root_job.or(parent_job).or(Some(job_id))) @@ -5324,8 +5323,8 @@ pub async fn push<'c, 'd>( ON CONFLICT (job_id) DO UPDATE SET email = EXCLUDED.email, username = EXCLUDED.username, is_admin = EXCLUDED.is_admin, is_operator = EXCLUDED.is_operator, folders = EXCLUDED.folders, groups = EXCLUDED.groups, workspace_id = EXCLUDED.workspace_id, end_user_email = EXCLUDED.end_user_email ) INSERT INTO v2_job_queue - (workspace_id, id, running, scheduled_for, started_at, tag, priority, suspend) - VALUES ($2, $1, $28, COALESCE($29, now()), CASE WHEN $27 OR $40 THEN now() END, $30, $31, $42)", + (workspace_id, id, running, scheduled_for, started_at, tag, priority) + VALUES ($2, $1, $28, COALESCE($29, now()), CASE WHEN $27 OR $40 THEN now() END, $30, $31)", job_id, workspace_id, raw_code, @@ -5339,7 +5338,7 @@ pub async fn push<'c, 'd>( script_path.clone(), Json(args) as Json, job_kind.clone() as JobKind, - schedule_path, + trigger_path.flatten(), language as Option, same_worker, pre_run_error.map(|e| e.to_string()), @@ -5371,7 +5370,6 @@ pub async fn push<'c, 'd>( trigger_kind as Option, running, end_user_email, - suspend_number.unwrap_or(0), ) .execute(&mut *tx) .warn_after_seconds(1) diff --git a/backend/windmill-queue/src/schedule.rs b/backend/windmill-queue/src/schedule.rs index 36f3d02aeb3bc..343f005916467 100644 --- a/backend/windmill-queue/src/schedule.rs +++ b/backend/windmill-queue/src/schedule.rs @@ -21,8 +21,10 @@ use windmill_common::get_latest_flow_version_id_for_path; use windmill_common::get_latest_flow_version_info_for_path_from_version; use windmill_common::jobs::check_tag_available_for_workspace_internal; use windmill_common::jobs::JobPayload; +use windmill_common::jobs::JobTriggerKind; use windmill_common::schedule::schedule_to_user; use windmill_common::scripts::ScriptHash; +use windmill_common::triggers::TriggerInfo; use windmill_common::utils::WarnAfterExt; use windmill_common::worker::to_raw_value; use windmill_common::FlowVersionInfo; @@ -503,8 +505,10 @@ pub async fn push_scheduled_job<'c>( false, None, None, - None, - Some(windmill_common::jobs::JobTriggerKind::Schedule), + Some(TriggerInfo::new( + Some(schedule.path.clone()), + JobTriggerKind::Schedule, + )), ) .warn_after_seconds_with_sql(1, "push in push_scheduled_job".to_string()) .await?; diff --git a/backend/windmill-worker/src/ai/tools.rs b/backend/windmill-worker/src/ai/tools.rs index 9504c82330980..f132e914850b8 100644 --- a/backend/windmill-worker/src/ai/tools.rs +++ b/backend/windmill-worker/src/ai/tools.rs @@ -471,7 +471,6 @@ async fn execute_windmill_tool( true, None, None, - None, None ) .await?; diff --git a/backend/windmill-worker/src/worker_flow.rs b/backend/windmill-worker/src/worker_flow.rs index 252adb6df3bcc..b28cf06d4b160 100644 --- a/backend/windmill-worker/src/worker_flow.rs +++ b/backend/windmill-worker/src/worker_flow.rs @@ -3303,7 +3303,6 @@ async fn push_next_flow_job( false, None, None, - None, None ) .warn_after_seconds(2) diff --git a/backend/windmill-worker/src/worker_lockfiles.rs b/backend/windmill-worker/src/worker_lockfiles.rs index bbc49f725fa1e..59b9e41b520d3 100644 --- a/backend/windmill-worker/src/worker_lockfiles.rs +++ b/backend/windmill-worker/src/worker_lockfiles.rs @@ -670,7 +670,6 @@ pub async fn trigger_dependents_to_recompute_dependencies( false, None, debounce_job_id_o, - None, None ) .await?; diff --git a/frontend/src/lib/components/triggers/TriggerStateToggle.svelte b/frontend/src/lib/components/triggers/TriggerStateToggle.svelte index a7ca694b6e9b2..d57dc0f9e5c88 100644 --- a/frontend/src/lib/components/triggers/TriggerStateToggle.svelte +++ b/frontend/src/lib/components/triggers/TriggerStateToggle.svelte @@ -1,26 +1,27 @@ - - -{#if shouldShowModal} - -
- {#if loading} -
-
- Loading queued jobs... -
- {:else if error} -
- {error} -
- {:else if queuedJobs.length === 0} -
-
-
No suspended jobs found
-
This trigger has no suspended jobs waiting to be processed.
-
-
- {:else} -
-
-

- Suspended Jobs {#if hasMorePages}(Page {currentPage}){:else}({queuedJobs.length}){/if} -

-

Click on any job to view details

-
- -
-
-
Status
-
Started
-
Duration
-
Path
-
Triggered by
-
-
- -
- {#each queuedJobs as job} -
- { - window.open(`/run/${job.id}?workspace=${workspace}`, '_blank') - }} - /> -
- {/each} -
-
-
- - {#if queuedJobs.length > 0 && (currentPage > 1 || hasMorePages)} -
-
- - {queuedJobs.length} - {hasMorePages ? '+' : ''} suspended job{queuedJobs.length === 1 ? '' : 's'} - -
- -
-
Page {currentPage}
- - - - -
-
- {/if} - -
-

- You are switching this trigger from inactive to active mode. What would you like to do - with the {hasMorePages - ? `${queuedJobs.length}+ suspended` - : `${queuedJobs.length} suspended`} job{queuedJobs.length === 1 ? '' : 's'}? -

-
- {/if} - -
- {#if !loading && !error && queuedJobs.length > 0} - - - - {/if} -
-
-
-{/if} + diff --git a/frontend/src/lib/components/triggers/TriggerSuspendedJobsModal.svelte b/frontend/src/lib/components/triggers/TriggerSuspendedJobsModal.svelte new file mode 100644 index 0000000000000..2979537b2b96a --- /dev/null +++ b/frontend/src/lib/components/triggers/TriggerSuspendedJobsModal.svelte @@ -0,0 +1,289 @@ + + +{#if shouldShowModal} + +
+ {#if loading} +
+
+ Loading queued jobs... +
+ {:else if error} +
+ {error} +
+ {:else if queuedJobs.length === 0} +
+
+
No suspended jobs found
+
This trigger has no suspended jobs waiting to be processed.
+
+
+ {:else} +
+
+

+ Suspended Jobs {#if hasMorePages}(Page {currentPage}){:else}({queuedJobs.length}){/if} +

+

Click on any job to view details

+
+ +
+
+
Status
+
Started
+
Duration
+
Path
+
Triggered by
+
+
+ +
+ {#each queuedJobs as job} +
+ { + window.open(`/run/${job.id}?workspace=${workspace}`, '_blank') + }} + /> +
+ {/each} +
+
+
+ + {#if queuedJobs.length > 0 && (currentPage > 1 || hasMorePages)} +
+
+ + {queuedJobs.length} + {hasMorePages ? '+' : ''} suspended job{queuedJobs.length === 1 ? '' : 's'} + +
+ +
+
Page {currentPage}
+ + + + +
+
+ {/if} + +
+

+ You are switching this trigger from inactive to active mode. What would you like to do + with the {hasMorePages + ? `${queuedJobs.length}+ suspended` + : `${queuedJobs.length} suspended`} job{queuedJobs.length === 1 ? '' : 's'}? +

+
+ {/if} + +
+ {#if !loading && !error && queuedJobs.length > 0} + + + + {/if} +
+
+
+{/if} diff --git a/frontend/src/lib/components/triggers/email/EmailTriggerEditorInner.svelte b/frontend/src/lib/components/triggers/email/EmailTriggerEditorInner.svelte index ffc43d8e8054c..7ef99e60314e1 100644 --- a/frontend/src/lib/components/triggers/email/EmailTriggerEditorInner.svelte +++ b/frontend/src/lib/components/triggers/email/EmailTriggerEditorInner.svelte @@ -67,7 +67,7 @@ let error_handler_args: Record = $state({}) let retry: Retry | undefined = $state() let enabled = $state(false) - let active_mode = $state(true) + let suspended_mode = $state(true) // Component references let drawer = $state(undefined) let initialConfig: NewEmailTrigger | undefined = undefined @@ -166,7 +166,7 @@ retry = cfg?.retry errorHandlerSelected = getHandlerType(error_handler_path ?? '') enabled = cfg?.enabled ?? false - active_mode = cfg?.active_mode ?? true + suspended_mode = cfg?.suspended_mode ?? true } async function loadTrigger(defaultConfig?: Partial): Promise { @@ -218,7 +218,7 @@ error_handler_args, retry, enabled, - active_mode + suspended_mode } return nCfg @@ -316,7 +316,7 @@ {/if} - + = $state({}) let retry: Retry | undefined = $state() - let active_mode = $state(true) + let suspended_mode = $state(true) let { useDrawer = true, description = undefined, @@ -190,7 +190,7 @@ can_write = canWrite(cfg?.path, cfg?.extra_perms, $userStore) error_handler_path = cfg?.error_handler_path error_handler_args = cfg?.error_handler_args ?? {} - active_mode = cfg?.active_mode ?? true + suspended_mode = cfg?.suspended_mode ?? true retry = cfg?.retry auto_acknowledge_msg = cfg?.auto_acknowledge_msg ?? true ack_deadline = cfg?.ack_deadline @@ -219,7 +219,7 @@ function getGcpConfig() { return { - active_mode, + suspended_mode, gcp_resource_path, subscription_mode, subscription_id, @@ -396,7 +396,7 @@
- + {/if} ({})) @@ -293,7 +293,7 @@ error_handler_args = cfg?.error_handler_args ?? {} retry = cfg?.retry errorHandlerSelected = getHandlerType(error_handler_path ?? '') - active_mode = cfg?.active_mode ?? true + suspended_mode = cfg?.suspended_mode ?? true } async function loadTrigger(defaultConfig?: Partial): Promise { @@ -363,7 +363,7 @@ error_handler_path, error_handler_args, retry, - active_mode + suspended_mode } return nCfg @@ -381,7 +381,6 @@ } } - // Update config for captures function getCaptureConfig() { const newCaptureConfig = { @@ -612,7 +611,7 @@
- + {/if} = $state({}) let retry: Retry | undefined = $state() - let active_mode = $state(true) + let suspended_mode = $state(true) const isValid = $derived( !!kafkaResourcePath && @@ -190,7 +190,7 @@ error_handler_args = cfg?.error_handler_args ?? {} retry = cfg?.retry errorHandlerSelected = getHandlerType(error_handler_path ?? '') - active_mode = cfg?.active_mode ?? true + suspended_mode = cfg?.suspended_mode ?? true } async function loadTrigger(defaultConfig?: Record): Promise { @@ -219,7 +219,7 @@ error_handler_path, error_handler_args, retry, - active_mode + suspended_mode } } @@ -387,7 +387,7 @@
- + {/if} = $state({}) let retry: Retry | undefined = $state() - let active_mode = $state(true) + let suspended_mode = $state(true) let optionTabSelected: 'connection_options' | 'error_handler' | 'retries' = $state('connection_options') @@ -204,7 +204,7 @@ error_handler_args = cfg?.error_handler_args ?? {} retry = cfg?.retry errorHandlerSelected = getHandlerType(error_handler_path ?? '') - active_mode = cfg?.active_mode ?? true + suspended_mode = cfg?.suspended_mode ?? true activateV5Options.topic_alias_maximum = Boolean(v5_config.topic_alias_maximum) activateV5Options.session_expiry_interval = Boolean(v5_config.session_expiry_interval) } catch (error) { @@ -244,7 +244,7 @@ error_handler_path, error_handler_args, retry, - active_mode + suspended_mode } } @@ -421,7 +421,7 @@ {/if} - + = $state({}) let retry: Retry | undefined = $state() - let active_mode = $state(true) + let suspended_mode = $state(true) const saveDisabled = $derived( pathError != '' || emptyString(script_path) || !can_write || !isValid @@ -192,7 +192,7 @@ error_handler_args = cfg?.error_handler_args ?? {} retry = cfg?.retry errorHandlerSelected = getHandlerType(error_handler_path ?? '') - active_mode = cfg?.active_mode ?? true + suspended_mode = cfg?.suspended_mode ?? true } async function loadTrigger(defaultConfig?: Record): Promise { @@ -222,7 +222,7 @@ error_handler_path, error_handler_args, retry, - active_mode + suspended_mode } } @@ -402,7 +402,7 @@ {/if} - + = $state({}) let retry: Retry | undefined = $state() - let active_mode = $state(true) + let suspended_mode = $state(true) const errorMessage = $derived.by(() => { if (relations && relations.length > 0) { @@ -302,7 +302,7 @@ error_handler_path, error_handler_args, retry, - active_mode + suspended_mode } return cfg } @@ -323,7 +323,7 @@ error_handler_args = cfg?.error_handler_args ?? {} retry = cfg?.retry errorHandlerSelected = getHandlerType(error_handler_path ?? '') - active_mode = cfg?.active_mode ?? true + suspended_mode = cfg?.suspended_mode ?? true } async function loadTrigger(defaultConfig?: Record): Promise { @@ -580,7 +580,7 @@ {/if} - +
{#snippet badge()} {#if isEditor} diff --git a/frontend/src/lib/components/triggers/postgres/utils.ts b/frontend/src/lib/components/triggers/postgres/utils.ts index 641b6ad692e04..2c29b0e004f5a 100644 --- a/frontend/src/lib/components/triggers/postgres/utils.ts +++ b/frontend/src/lib/components/triggers/postgres/utils.ts @@ -114,7 +114,7 @@ export async function savePostgresTriggerFromCfg( ? { error_handler_path: config.error_handler_path, error_handler_args: config.error_handler_path ? config.error_handler_args : undefined, - retry: config.retry, + retry: config.retry } : {} const requestBody: EditPostgresTrigger = { @@ -126,7 +126,7 @@ export async function savePostgresTriggerFromCfg( publication_name: config.publication_name, publication: config.publication, enabled: config.enabled, - active_mode: config.active_mode, + suspended_mode: config.suspended_mode, ...errorHandlerAndRetries } if (edit) { diff --git a/frontend/src/lib/components/triggers/sqs/SqsTriggerEditorInner.svelte b/frontend/src/lib/components/triggers/sqs/SqsTriggerEditorInner.svelte index 408f9004f3b52..95842ee422b59 100644 --- a/frontend/src/lib/components/triggers/sqs/SqsTriggerEditorInner.svelte +++ b/frontend/src/lib/components/triggers/sqs/SqsTriggerEditorInner.svelte @@ -89,7 +89,7 @@ let error_handler_path: string | undefined = $state() let error_handler_args: Record = $state({}) let retry: Retry | undefined = $state() - let active_mode = $state(true) + let suspended_mode = $state(true) const sqsConfig = $derived.by(getSaveCfg) const captureConfig = $derived.by(getCaptureConfig) @@ -178,7 +178,7 @@ error_handler_args = cfg?.error_handler_args ?? {} retry = cfg?.retry errorHandlerSelected = getHandlerType(error_handler_path ?? '') - active_mode = cfg?.active_mode ?? true + suspended_mode = cfg?.suspended_mode ?? true } catch (error) { sendUserToast(`Could not load SQS trigger config: ${error.body}`, true) } @@ -214,7 +214,7 @@ error_handler_path, error_handler_args, retry, - active_mode + suspended_mode } } @@ -388,7 +388,7 @@
- + {/if} = $state({}) let retry: Retry | undefined = $state() - let active_mode = $state(true) + let suspended_mode = $state(true) const websocketCfg = $derived.by(getSaveCfg) const captureConfig = $derived.by(isEditor ? getCaptureConfig : () => ({})) @@ -221,7 +221,7 @@ error_handler_args = cfg?.error_handler_args ?? {} retry = cfg?.retry errorHandlerSelected = getHandlerType(error_handler_path ?? '') - active_mode = cfg?.active_mode ?? true + suspended_mode = cfg?.suspended_mode ?? true } function getSaveCfg() { @@ -240,7 +240,7 @@ error_handler_path, error_handler_args, retry, - active_mode + suspended_mode } } @@ -494,7 +494,7 @@ /> - + Date: Fri, 28 Nov 2025 16:49:46 +0100 Subject: [PATCH 25/35] UI and http triggers --- backend/windmill-api/openapi.yaml | 65 ++- backend/windmill-api/src/jobs.rs | 163 ++++--- .../src/triggers/global_handler.rs | 241 ++++++++-- backend/windmill-api/src/triggers/handler.rs | 153 +++++- .../windmill-api/src/triggers/http/handler.rs | 13 +- .../src/triggers/trigger_helpers.rs | 111 +++-- backend/windmill-queue/src/jobs.rs | 12 +- backend/windmill-worker/src/worker.rs | 7 + .../src/lib/components/DropdownV2Inner.svelte | 4 + frontend/src/lib/components/RunsPage.svelte | 10 +- .../lib/components/common/modal/Modal2.svelte | 4 +- .../src/lib/components/runs/JobsLoader.svelte | 6 +- .../src/lib/components/runs/RunsFilter.svelte | 7 +- .../triggers/TriggerActiveMode.svelte | 146 ------ .../triggers/TriggerEditorToolbar.svelte | 70 ++- .../triggers/TriggerSuspendedJobsModal.svelte | 445 +++++++++++------- .../email/EmailTriggerEditorInner.svelte | 3 - .../triggers/gcp/GcpTriggerEditorInner.svelte | 3 - .../triggers/http/RouteEditorInner.svelte | 30 +- .../kafka/KafkaTriggerEditorInner.svelte | 3 - .../mqtt/MqttTriggerEditorInner.svelte | 3 - .../nats/NatsTriggerEditorInner.svelte | 3 - .../PostgresTriggerEditorInner.svelte | 2 - .../triggers/sqs/SqsTriggerEditorInner.svelte | 3 - frontend/src/lib/components/triggers/utils.ts | 8 +- .../WebsocketTriggerEditorInner.svelte | 3 - frontend/src/lib/utils.ts | 1 + 27 files changed, 971 insertions(+), 548 deletions(-) delete mode 100644 frontend/src/lib/components/triggers/TriggerActiveMode.svelte diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 228883b2a1a3b..eaa031f060be2 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -8638,6 +8638,20 @@ paths: type: string style: simple explode: false + requestBody: + description: Optional list of job IDs to reassign + required: false + content: + application/json: + schema: + type: object + properties: + job_ids: + type: array + items: + type: string + format: uuid + description: Optional list of specific job UUIDs to reassign. If not provided, all suspended jobs for the trigger will be reassigned. responses: "200": description: confirmation message @@ -8668,6 +8682,20 @@ paths: type: string style: simple explode: false + requestBody: + description: Optional list of job IDs to cancel + required: false + content: + application/json: + schema: + type: object + properties: + job_ids: + type: array + items: + type: string + format: uuid + description: Optional list of specific job UUIDs to cancel. If not provided, all suspended jobs for the trigger will be canceled. responses: "200": description: confirmation message @@ -10287,6 +10315,39 @@ paths: schema: type: string + /w/{workspace}/http_triggers/update_status/{path}: + post: + summary: update http trigger suspended mode and enabled status + operationId: updateHttpTriggerStatus + tags: + - http_trigger + parameters: + - $ref: "#/components/parameters/WorkspaceId" + - $ref: "#/components/parameters/Path" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + suspended_mode: + type: boolean + description: Whether the trigger is in suspended mode (queues jobs instead of running them) + enabled: + type: boolean + description: Whether the trigger is enabled + required: + - suspended_mode + - enabled + responses: + "200": + description: http trigger status updated + content: + text/plain: + schema: + type: string + /w/{workspace}/websocket_triggers/create: post: summary: create websocket trigger @@ -17344,7 +17405,7 @@ components: - args JobTriggerKind: - description: trigger kind (schedule, http, websocket...) + description: job trigger kind (schedule, http, websocket...) type: string enum: - webhook @@ -17359,8 +17420,6 @@ components: - mqtt - sqs - gcp - - poll - - cli TriggerExtraProperty: type: object diff --git a/backend/windmill-api/src/jobs.rs b/backend/windmill-api/src/jobs.rs index c8c4b3c555035..b4b0f63f814fb 100644 --- a/backend/windmill-api/src/jobs.rs +++ b/backend/windmill-api/src/jobs.rs @@ -3900,6 +3900,7 @@ async fn batch_rerun_handle_job( let result = push_flow_job_by_path_into_queue( authed.clone(), db.clone(), + None, user_db.clone(), w_id.clone(), StripPath(job.script_path.clone()), @@ -3908,7 +3909,7 @@ async fn batch_rerun_handle_job( None, ) .await; - if let Ok((uuid, _)) = result { + if let Ok((uuid, _, _)) = result { return Ok(uuid.to_string()); } } @@ -3917,6 +3918,7 @@ async fn batch_rerun_handle_job( push_script_job_by_path_into_queue( authed.clone(), db.clone(), + None, user_db.clone(), w_id.clone(), StripPath(job.script_path.clone()), @@ -3925,6 +3927,7 @@ async fn batch_rerun_handle_job( None, ) .await + .map(|r| r.0) } else { run_job_by_hash_inner( authed.clone(), @@ -3937,8 +3940,9 @@ async fn batch_rerun_handle_job( None, ) .await + .map(|r| r.0) }; - if let Ok((uuid, _)) = result { + if let Ok(uuid) = result { return Ok(uuid.to_string()); } } @@ -4056,17 +4060,18 @@ pub async fn run_flow_by_path( ) .await?; - let (uuid, _) = push_flow_job_by_path_into_queue( - authed, db, user_db, w_id, flow_path, run_query, args, None, + let (uuid, _, _) = push_flow_job_by_path_into_queue( + authed, db, None, user_db, w_id, flow_path, run_query, args, None, ) .await?; Ok((StatusCode::CREATED, uuid.to_string())) } -pub async fn run_flow( +pub async fn run_flow<'c>( authed: &ApiAuthed, db: &DB, + tx_o: Option>, user_db: UserDB, w_id: &str, flow_path: &str, @@ -4074,7 +4079,11 @@ pub async fn run_flow( run_query: RunJobQuery, args: PushArgsOwned, trigger: Option, -) -> error::Result<(Uuid, Option)> { +) -> error::Result<( + Uuid, + Option, + Option>, +)> { let FlowVersionInfo { version, tag, @@ -4092,22 +4101,30 @@ pub async fn run_flow( check_tag_available_for_workspace(&db, &w_id, &tag, &authed).await?; let scheduled_for = run_query.get_scheduled_for(&db).await?; - let (email, permissioned_as, push_authed, tx) = - if let Some(on_behalf_of_email) = on_behalf_of_email.as_ref() { - ( - on_behalf_of_email, - username_to_permissioned_as(&edited_by), - None, - PushIsolationLevel::IsolatedRoot(db.clone()), - ) - } else { - ( - &authed.email, - username_to_permissioned_as(&authed.username), - Some(authed.clone().into()), - PushIsolationLevel::Isolated(user_db.clone(), authed.clone().into()), - ) - }; + let return_tx = tx_o.is_some(); + + let (email, permissioned_as, push_authed, tx) = if let Some(tx) = tx_o { + ( + &authed.email, + username_to_permissioned_as(&authed.username), + Some(authed.clone().into()), + PushIsolationLevel::Transaction(tx), + ) + } else if let Some(on_behalf_of_email) = on_behalf_of_email.as_ref() { + ( + on_behalf_of_email, + username_to_permissioned_as(&edited_by), + None, + PushIsolationLevel::IsolatedRoot(db.clone()), + ) + } else { + ( + &authed.email, + username_to_permissioned_as(&authed.username), + Some(authed.clone().into()), + PushIsolationLevel::Isolated(user_db.clone(), authed.clone().into()), + ) + }; let (uuid, mut tx) = push( &db, @@ -4166,9 +4183,13 @@ pub async fn run_flow( .await?; } - tx.commit().await?; - - Ok((uuid, early_return)) + // If we were given a transaction, return it; otherwise commit it + if return_tx { + Ok((uuid, early_return, Some(tx))) + } else { + tx.commit().await?; + Ok((uuid, early_return, None)) + } } pub async fn run_flow_and_wait_result( @@ -4182,9 +4203,10 @@ pub async fn run_flow_and_wait_result( args: PushArgsOwned, trigger: Option, ) -> error::Result { - let (uuid, early_return) = run_flow( + let (uuid, early_return, _) = run_flow( authed, db, + None, user_db, w_id, flow_path, @@ -4198,16 +4220,21 @@ pub async fn run_flow_and_wait_result( run_wait_result(&db, uuid, w_id, early_return, &authed.username).await } -pub async fn push_flow_job_by_path_into_queue( +pub async fn push_flow_job_by_path_into_queue<'c>( authed: ApiAuthed, db: DB, + tx_o: Option>, user_db: UserDB, w_id: String, flow_path: StripPath, run_query: RunJobQuery, args: PushArgsOwned, trigger: Option, -) -> error::Result<(Uuid, Option)> { +) -> error::Result<( + Uuid, + Option, + Option>, +)> { #[cfg(feature = "enterprise")] check_license_key_valid().await?; @@ -4223,6 +4250,7 @@ pub async fn push_flow_job_by_path_into_queue( run_flow( &authed, &db, + tx_o, user_db, &w_id, flow_path, @@ -4293,9 +4321,10 @@ pub async fn run_flow_by_version_inner( let flow_version_info = get_flow_version_info_from_version(&db, version, &w_id, &flow_path).await?; - run_flow( + let (uuid, early_return, _) = run_flow( &authed, &db, + None, user_db, &w_id, &flow_path, @@ -4304,7 +4333,9 @@ pub async fn run_flow_by_version_inner( args, trigger, ) - .await + .await?; + + Ok((uuid, early_return)) } #[cfg(not(feature = "enterprise"))] @@ -4425,9 +4456,10 @@ pub async fn run_script_by_path( ) .await?; - let (uuid, _) = push_script_job_by_path_into_queue( + let (uuid, _, _) = push_script_job_by_path_into_queue( authed, db, + None, user_db, w_id, script_path, @@ -4440,16 +4472,21 @@ pub async fn run_script_by_path( Ok((StatusCode::CREATED, uuid.to_string())) } -pub async fn push_script_job_by_path_into_queue( +pub async fn push_script_job_by_path_into_queue<'c>( authed: ApiAuthed, db: DB, + tx_o: Option>, user_db: UserDB, w_id: String, script_path: StripPath, run_query: RunJobQuery, args: PushArgsOwned, trigger: Option, -) -> error::Result<(Uuid, Option)> { +) -> error::Result<( + Uuid, + Option, + Option>, +)> { #[cfg(feature = "enterprise")] check_license_key_valid().await?; @@ -4470,22 +4507,30 @@ pub async fn push_script_job_by_path_into_queue( let tag = run_query.tag.clone().or(tag); check_tag_available_for_workspace(&db, &w_id, &tag, &authed).await?; - let (email, permissioned_as, push_authed, tx) = - if let Some(on_behalf_of) = on_behalf_of.as_ref() { - ( - on_behalf_of.email.as_str(), - on_behalf_of.permissioned_as.clone(), - None, - PushIsolationLevel::IsolatedRoot(db.clone()), - ) - } else { - ( - authed.email.as_str(), - username_to_permissioned_as(&authed.username), - Some(authed.clone().into()), - PushIsolationLevel::Isolated(user_db, authed.clone().into()), - ) - }; + let return_tx = tx_o.is_some(); + + let (email, permissioned_as, push_authed, tx) = if let Some(tx) = tx_o { + ( + authed.email.as_str(), + username_to_permissioned_as(&authed.username), + Some(authed.clone().into()), + PushIsolationLevel::Transaction(tx), + ) + } else if let Some(on_behalf_of) = on_behalf_of.as_ref() { + ( + on_behalf_of.email.as_str(), + on_behalf_of.permissioned_as.clone(), + None, + PushIsolationLevel::IsolatedRoot(db.clone()), + ) + } else { + ( + authed.email.as_str(), + username_to_permissioned_as(&authed.username), + Some(authed.clone().into()), + PushIsolationLevel::Isolated(user_db, authed.clone().into()), + ) + }; let (uuid, tx) = push( &db, @@ -4524,9 +4569,14 @@ pub async fn push_script_job_by_path_into_queue( run_query.suspended_mode, ) .await?; - tx.commit().await?; - Ok((uuid, delete_after_use)) + // If we were given a transaction, return it; otherwise commit it + if return_tx { + Ok((uuid, delete_after_use, Some(tx))) + } else { + tx.commit().await?; + Ok((uuid, delete_after_use, None)) + } } #[derive(Deserialize)] @@ -5652,9 +5702,10 @@ pub async fn stream_job( let uuid = match runnable_id { RunnableId::ScriptId(ScriptId::ScriptPath(script_path)) | RunnableId::HubScript(script_path) => { - push_script_job_by_path_into_queue( + let (uuid, _, _) = push_script_job_by_path_into_queue( authed.clone(), db.clone(), + None, user_db, w_id.clone(), StripPath(script_path), @@ -5662,8 +5713,8 @@ pub async fn stream_job( args, None, ) - .await? - .0 + .await?; + uuid } RunnableId::ScriptId(ScriptId::ScriptHash(script_hash)) => { run_job_by_hash_inner( @@ -5683,6 +5734,7 @@ pub async fn stream_job( push_flow_job_by_path_into_queue( authed.clone(), db.clone(), + None, user_db, w_id.clone(), StripPath(flow_path), @@ -6738,9 +6790,10 @@ async fn run_dynamic_select( let push_args = PushArgsOwned { extra: None, args: script_args.clone() }; - let (uuid, _) = push_script_job_by_path_into_queue( + let (uuid, _, _) = push_script_job_by_path_into_queue( authed.clone(), db.clone(), + None, user_db.clone(), w_id.clone(), StripPath(path), diff --git a/backend/windmill-api/src/triggers/global_handler.rs b/backend/windmill-api/src/triggers/global_handler.rs index 831982c4fac8a..5df941e350b9a 100644 --- a/backend/windmill-api/src/triggers/global_handler.rs +++ b/backend/windmill-api/src/triggers/global_handler.rs @@ -1,10 +1,10 @@ use crate::{ db::{ApiAuthed, DB}, - triggers::{trigger_helpers::trigger_runnable_inner, TriggerForReassignment, Trigger, TriggerCrud}, + triggers::{trigger_helpers::trigger_runnable_inner, TriggerCrud, TriggerForReassignment}, }; #[cfg(feature = "http_trigger")] -use crate::triggers::http::{handler::HttpTrigger, HttpConfig}; +use crate::triggers::http::handler::HttpTrigger; #[cfg(feature = "mqtt_trigger")] use crate::triggers::mqtt::{MqttConfig, MqttTrigger}; @@ -13,7 +13,7 @@ use crate::triggers::mqtt::{MqttConfig, MqttTrigger}; use crate::triggers::postgres::{PostgresConfig, PostgresTrigger}; #[cfg(feature = "websocket")] -use crate::triggers::websocket::{WebsocketConfig, WebsocketTrigger}; +use crate::triggers::websocket::WebsocketTrigger; #[cfg(all(feature = "smtp", feature = "enterprise", feature = "private"))] use crate::triggers::email::{EmailConfig, EmailTrigger}; @@ -33,6 +33,7 @@ use axum::{ extract::{Extension, Path}, response::Json, }; +use serde::{Deserialize, Serialize}; use serde_json::value::RawValue; use std::collections::HashMap; use uuid::Uuid; @@ -41,13 +42,21 @@ use windmill_common::{db::UserDB, error, jobs::JobTriggerKind, triggers::Trigger struct JobWithArgs { id: Uuid, args: Option>>>, + created_at: chrono::DateTime, } -pub async fn reassign_suspended_jobs( +#[derive(Deserialize, Serialize, Default)] +pub struct ReassignJobsBody { + #[serde(default)] + pub job_ids: Option>, +} + +pub async fn resume_suspended_trigger_jobs( authed: ApiAuthed, Extension(db): Extension, Extension(user_db): Extension, Path((w_id, trigger_kind, trigger_path)): Path<(String, JobTriggerKind, String)>, + Json(body): Json, ) -> error::Result> { let mut tx = user_db.clone().begin(&authed).await?; @@ -185,70 +194,206 @@ pub async fn reassign_suspended_jobs( } }; - let jobs = sqlx::query_as!(JobWithArgs, - "SELECT id, args as \"args: _\" FROM v2_job WHERE workspace_id = $1 AND kind = 'unassigned'::JOB_KIND AND trigger_kind = $2 AND trigger = $3", - w_id, - trigger_kind as _, - trigger_path, - ).fetch_all(&mut *tx).await?; + let jobs = if let Some(job_ids) = body.job_ids.as_ref() { + if job_ids.is_empty() { + vec![] + } else { + sqlx::query_as!( + JobWithArgs, + "SELECT id, args as \"args: _\", created_at FROM v2_job + WHERE workspace_id = $1 + AND kind = 'unassigned'::JOB_KIND + AND trigger_kind = $2 + AND trigger = $3 + AND id = ANY($4)", + w_id, + trigger_kind as _, + trigger_path, + job_ids as _, + ) + .fetch_all(&mut *tx) + .await? + } + } else { + sqlx::query_as!( + JobWithArgs, + "SELECT id, args as \"args: _\", created_at FROM v2_job + WHERE workspace_id = $1 + AND kind = 'unassigned'::JOB_KIND + AND trigger_kind = $2 + AND trigger = $3", + w_id, + trigger_kind as _, + trigger_path, + ) + .fetch_all(&mut *tx) + .await? + }; let trigger_metadata = TriggerMetadata::new(Some(trigger_path.clone()), trigger_kind); let l = jobs.len(); for job in jobs { - trigger_runnable_inner( - &db, - Some(user_db.clone()), - authed.clone(), - &w_id, - &trigger.script_path, - trigger.is_flow, - windmill_queue::PushArgsOwned { - extra: None, - args: job.args.map(|a| a.0).unwrap_or_default(), - }, - trigger.retry.as_ref(), - trigger.error_handler_path.as_deref(), - trigger.error_handler_args.as_ref(), - trigger_path.clone(), - None, - trigger_metadata.clone(), - None, - ) - .await?; + // If job was created before trigger was edited, simply update it to unsuspend + // instead of deleting and repushing + if job.created_at > trigger.edited_at { + let job_kind = if trigger.is_flow { + windmill_common::jobs::JobKind::Flow + } else { + windmill_common::jobs::JobKind::Script + }; - // Delete the unassigned job from all related tables - sqlx::query!("DELETE FROM v2_job_queue WHERE id = $1", job.id) + sqlx::query!( + "UPDATE v2_job SET kind = $1 WHERE id = $2", + job_kind as _, + job.id + ) .execute(&mut *tx) .await?; - sqlx::query!("DELETE FROM v2_job_runtime WHERE id = $1", job.id) + // Update the job to unsuspend it and set the correct kind + sqlx::query!( + "UPDATE v2_job_queue SET scheduled_for = now() WHERE id = $1", + job.id + ) .execute(&mut *tx) .await?; - - sqlx::query!("DELETE FROM job_perms WHERE job_id = $1", job.id) - .execute(&mut *tx) + } else { + // Job was created after trigger edit - delete and repush with new configuration + // Pass the transaction to trigger_runnable_inner so everything is in the same transaction + let (_uuid, _delete_after_use, _early_return, tx_o) = trigger_runnable_inner( + &db, + Some(tx), + Some(user_db.clone()), + authed.clone(), + &w_id, + &trigger.script_path, + trigger.is_flow, + windmill_queue::PushArgsOwned { + extra: None, + args: job.args.map(|a| a.0).unwrap_or_default(), + }, + trigger.retry.as_ref(), + trigger.error_handler_path.as_deref(), + trigger.error_handler_args.as_ref(), + trigger_path.clone(), + None, + trigger_metadata.clone(), + None, + ) .await?; - sqlx::query!("DELETE FROM concurrency_key WHERE job_id = $1", job.id) - .execute(&mut *tx) - .await?; + tx = match tx_o { + Some(tx) => tx, + None => { + return Err(error::Error::internal_err( + "Transaction should be returned when passed in".to_string(), + )); + } + }; - sqlx::query!("DELETE FROM debounce_key WHERE job_id = $1", job.id) - .execute(&mut *tx) - .await?; + // Delete the unassigned job from all related tables + sqlx::query!("DELETE FROM v2_job_queue WHERE id = $1", job.id) + .execute(&mut *tx) + .await?; - sqlx::query!("DELETE FROM debounce_stale_data WHERE job_id = $1", job.id) - .execute(&mut *tx) - .await?; + sqlx::query!("DELETE FROM v2_job_runtime WHERE id = $1", job.id) + .execute(&mut *tx) + .await?; - sqlx::query!("DELETE FROM v2_job WHERE id = $1", job.id) - .execute(&mut *tx) - .await?; + sqlx::query!("DELETE FROM job_perms WHERE job_id = $1", job.id) + .execute(&mut *tx) + .await?; + + sqlx::query!("DELETE FROM concurrency_key WHERE job_id = $1", job.id) + .execute(&mut *tx) + .await?; + + sqlx::query!("DELETE FROM debounce_key WHERE job_id = $1", job.id) + .execute(&mut *tx) + .await?; + + sqlx::query!("DELETE FROM debounce_stale_data WHERE job_id = $1", job.id) + .execute(&mut *tx) + .await?; + + sqlx::query!("DELETE FROM v2_job WHERE id = $1", job.id) + .execute(&mut *tx) + .await?; + } } tx.commit().await?; Ok(Json(format!("Reassigned {} jobs", l))) } + +pub async fn cancel_suspended_trigger_jobs( + authed: ApiAuthed, + Extension(db): Extension, + Extension(user_db): Extension, + Path((w_id, trigger_kind, trigger_path)): Path<(String, JobTriggerKind, String)>, + Json(body): Json, +) -> error::Result> { + let mut tx = user_db.clone().begin(&authed).await?; + + // Get the list of job IDs to cancel + let jobs_to_cancel = if let Some(job_ids) = body.job_ids.as_ref() { + if job_ids.is_empty() { + vec![] + } else { + sqlx::query_scalar!( + "SELECT id FROM v2_job + WHERE workspace_id = $1 + AND kind = 'unassigned'::JOB_KIND + AND trigger_kind = $2 + AND trigger = $3 + AND id = ANY($4)", + w_id, + trigger_kind as _, + trigger_path, + job_ids as _, + ) + .fetch_all(&mut *tx) + .await? + } + } else { + sqlx::query_scalar!( + "SELECT id FROM v2_job + WHERE workspace_id = $1 + AND kind = 'unassigned'::JOB_KIND + AND trigger_kind = $2 + AND trigger = $3", + w_id, + trigger_kind as _, + trigger_path, + ) + .fetch_all(&mut *tx) + .await? + }; + + let count = jobs_to_cancel.len(); + + if count > 0 { + // Use the cancel_jobs helper from windmill_queue + for job_id in &jobs_to_cancel { + let (returned_tx, _) = windmill_queue::cancel_job( + &authed.username, + Some("canceled by trigger management".to_string()), + *job_id, + &w_id, + tx, + &db, + false, + false, + ) + .await?; + tx = returned_tx; + } + } + + tx.commit().await?; + + Ok(Json(format!("Canceled {} jobs", count))) +} diff --git a/backend/windmill-api/src/triggers/handler.rs b/backend/windmill-api/src/triggers/handler.rs index 76a2de6755a44..b65342a6b616b 100644 --- a/backend/windmill-api/src/triggers/handler.rs +++ b/backend/windmill-api/src/triggers/handler.rs @@ -37,8 +37,7 @@ pub struct TriggerForReassignment { pub email: String, pub edited_at: DateTime, pub error_handler_path: Option, - pub error_handler_args: - Option>>, + pub error_handler_args: Option>>, pub retry: Option>, } @@ -428,7 +427,8 @@ pub fn trigger_routes() -> Router { .route("/update/*path", post(update_trigger::)) .route("/delete/*path", delete(delete_trigger::)) .route("/exists/*path", get(exists_trigger::)) - .route("/setenabled/*path", post(set_enabled_trigger::)); + .route("/setenabled/*path", post(set_enabled_trigger::)) + .route("/update_status/*path", post(update_trigger_status::)); if T::SUPPORTS_TEST_CONNECTION { router = router.route("/test", post(test_connection::)); @@ -651,6 +651,123 @@ struct SetEnabledPayload { enabled: bool, } +#[derive(Deserialize)] +struct UpdateStatusPayload { + suspended_mode: bool, + enabled: bool, +} + +async fn update_trigger_status( + Extension(handler): Extension>, + authed: ApiAuthed, + Extension(user_db): Extension, + Extension(db): Extension, + Path((workspace_id, path)): Path<(String, StripPath)>, + Json(payload): Json, +) -> Result { + let path = path.to_path(); + check_scopes(&authed, || format!("{}:write", T::scope_domain_name()))?; + + let mut tx = user_db.begin(&authed).await?; + + let updated = if T::SUPPORTS_SERVER_STATE { + sqlx::query(&format!( + r#" + UPDATE + {} + SET + suspended_mode = $1, + enabled = $2, + email = $3, + edited_by = $4, + edited_at = now(), + server_id = NULL, + error = NULL + WHERE + workspace_id = $5 AND + path = $6 + "#, + T::TABLE_NAME + )) + .bind(payload.suspended_mode) + .bind(payload.suspended_mode || payload.enabled) + .bind(&authed.email) + .bind(&authed.username) + .bind(&workspace_id) + .bind(path) + .execute(&mut *tx) + .await? + .rows_affected() + } else { + sqlx::query(&format!( + r#" + UPDATE + {} + SET + suspended_mode = $1, + enabled = $2, + email = $3, + edited_by = $4, + edited_at = now() + WHERE + workspace_id = $5 AND + path = $6 + "#, + T::TABLE_NAME + )) + .bind(payload.suspended_mode) + .bind(payload.suspended_mode || payload.enabled) + .bind(&authed.email) + .bind(&authed.username) + .bind(&workspace_id) + .bind(path) + .execute(&mut *tx) + .await? + .rows_affected() + }; + + if updated == 0 { + return Err(Error::NotFound(format!( + "Trigger not found at path: {}", + path + ))); + } + + handler.set_enabled_extra_action(&mut *tx).await?; + + tx.commit().await?; + + handle_deployment_metadata( + &authed.email, + &authed.username, + &db, + &workspace_id, + T::get_deployed_object(path.to_owned()), + Some(format!( + "{} trigger '{}' status updated", + T::DEPLOYMENT_NAME, + path + )), + true, + ) + .await?; + + Ok(format!( + "Trigger '{}' updated: {} mode, {}", + path, + if payload.suspended_mode { + "suspended" + } else { + "active" + }, + if payload.enabled { + "enabled" + } else { + "disabled" + } + )) +} + async fn set_enabled_trigger( Extension(handler): Extension>, authed: ApiAuthed, @@ -825,21 +942,21 @@ pub fn generate_trigger_routers() -> Router { ); } - // { - // use crate::triggers::global_handler::{ - // cancel_suspended_trigger_jobs, resume_suspended_trigger_jobs, - // }; - - // router = router - // .route( - // "/trigger/:trigger_kind/resume_suspended_trigger_job/*trigger_path", - // post(resume_suspended_trigger_jobs), - // ) - // .route( - // "/trigger/:trigger_kind/cancel_suspended_trigger_job/*trigger_path", - // post(cancel_suspended_trigger_jobs), - // ); - // } + { + use crate::triggers::global_handler::{ + cancel_suspended_trigger_jobs, resume_suspended_trigger_jobs, + }; + + router = router + .route( + "/trigger/:trigger_kind/resume_suspended_trigger_job/*trigger_path", + post(resume_suspended_trigger_jobs), + ) + .route( + "/trigger/:trigger_kind/cancel_suspended_trigger_job/*trigger_path", + post(cancel_suspended_trigger_jobs), + ); + } router } diff --git a/backend/windmill-api/src/triggers/http/handler.rs b/backend/windmill-api/src/triggers/http/handler.rs index 0bbb2bc076070..055ff1223a10b 100644 --- a/backend/windmill-api/src/triggers/http/handler.rs +++ b/backend/windmill-api/src/triggers/http/handler.rs @@ -41,7 +41,7 @@ use windmill_common::{ db::UserDB, error::{Error, Result}, jobs::JobTriggerKind, - triggers::{TriggerMetadata, TriggerKind}, + triggers::{TriggerKind, TriggerMetadata}, utils::{not_found_if_none, require_admin, StripPath}, worker::CLOUD_HOSTED, }; @@ -1050,7 +1050,7 @@ async fn route_job( .map_err(|e| e.into_response())?; let trigger_info = TriggerMetadata::new(Some(trigger.path.clone()), JobTriggerKind::Http); - if !trigger.suspended_mode { + if trigger.suspended_mode { let _ = trigger_runnable( &db, Some(user_db), @@ -1064,7 +1064,7 @@ async fn route_job( trigger.error_handler_args.as_ref(), format!("http_trigger/{}", trigger.path), None, - trigger.suspended_mode, + true, trigger_info, ) .await @@ -1073,7 +1073,7 @@ async fn route_job( return Ok(( StatusCode::OK, format!( - "Trigger: {} in inactive mode, incoming request has been queued", + "Trigger {} is in suspended mode, jobs are added to the queue but suspended", &trigger.path ), ) @@ -1084,8 +1084,9 @@ async fn route_job( match trigger.request_type { RequestType::SyncSse => { // Trigger the job (always async when streaming) - let (uuid, _, _) = trigger_runnable_inner( + let (uuid, _, _, _) = trigger_runnable_inner( &db, + None, Some(user_db.clone()), authed.clone(), &trigger.workspace_id, @@ -1157,7 +1158,7 @@ async fn route_job( trigger.error_handler_args.as_ref(), format!("http_trigger/{}", trigger.path), None, - trigger.suspended_mode, + false, trigger_info, ) .await diff --git a/backend/windmill-api/src/triggers/trigger_helpers.rs b/backend/windmill-api/src/triggers/trigger_helpers.rs index e8d50aa692600..d3135c168b0bd 100644 --- a/backend/windmill-api/src/triggers/trigger_helpers.rs +++ b/backend/windmill-api/src/triggers/trigger_helpers.rs @@ -1,6 +1,5 @@ use anyhow::Context; use axum::response::IntoResponse; -use chrono::{DateTime, Utc}; use http::StatusCode; use serde::Deserialize; use serde_json::value::RawValue; @@ -505,8 +504,9 @@ pub trait TriggerJobArgs { } #[allow(dead_code)] -pub async fn trigger_runnable_inner( +pub async fn trigger_runnable_inner<'c>( db: &DB, + tx_o: Option>, user_db: Option, authed: ApiAuthed, workspace_id: &str, @@ -520,7 +520,12 @@ pub async fn trigger_runnable_inner( job_id: Option, trigger: TriggerMetadata, suspended_mode: Option, -) -> Result<(Uuid, Option, Option)> { +) -> Result<( + Uuid, + Option, + Option, + Option>, +)> { let error_handler_args = error_handler_args.map(|args| { let args = args .0 @@ -531,12 +536,13 @@ pub async fn trigger_runnable_inner( }); let user_db = user_db.unwrap_or_else(|| UserDB::new(db.clone())); - let (uuid, delete_after_use, early_return) = if is_flow { + let (uuid, delete_after_use, early_return, tx_out) = if is_flow { let run_query = RunJobQuery { job_id, suspended_mode, ..Default::default() }; let path = StripPath(runnable_path.to_string()); - let (uuid, early_return) = push_flow_job_by_path_into_queue( + let (uuid, early_return, tx_out) = push_flow_job_by_path_into_queue( authed, db.clone(), + tx_o, user_db, workspace_id.to_string(), path, @@ -545,10 +551,11 @@ pub async fn trigger_runnable_inner( Some(trigger), ) .await?; - (uuid, None, early_return) + (uuid, None, early_return, tx_out) } else { - let (uuid, delete_after_use) = trigger_script_internal( + let (uuid, delete_after_use, tx_out) = trigger_script_internal( db, + tx_o, user_db, authed, workspace_id, @@ -563,10 +570,10 @@ pub async fn trigger_runnable_inner( suspended_mode, ) .await?; - (uuid, delete_after_use, None) + (uuid, delete_after_use, None, tx_out) }; - Ok((uuid, delete_after_use, early_return)) + Ok((uuid, delete_after_use, early_return, tx_out)) } #[allow(dead_code)] @@ -588,6 +595,7 @@ pub async fn trigger_runnable( ) -> Result { let uuid = trigger_runnable_inner( db, + None, user_db, authed, workspace_id, @@ -623,8 +631,9 @@ pub async fn trigger_runnable_and_wait_for_result( trigger: TriggerMetadata, ) -> Result { let username = authed.username.clone(); - let (uuid, delete_after_use, early_return) = trigger_runnable_inner( + let (uuid, delete_after_use, early_return, _) = trigger_runnable_inner( db, + None, user_db, authed, workspace_id, @@ -666,8 +675,9 @@ pub async fn trigger_runnable_and_wait_for_raw_result( trigger: TriggerMetadata, ) -> Result<(Box, bool)> { let username = authed.username.clone(); - let (uuid, delete_after_use, early_return) = trigger_runnable_inner( + let (uuid, delete_after_use, early_return, _) = trigger_runnable_inner( db, + None, user_db, authed, workspace_id, @@ -743,8 +753,9 @@ pub async fn trigger_runnable_and_wait_for_raw_result_with_error_ctx( } } -async fn trigger_script_internal( +async fn trigger_script_internal<'c>( db: &DB, + tx_o: Option>, user_db: UserDB, authed: ApiAuthed, workspace_id: &str, @@ -757,13 +768,18 @@ async fn trigger_script_internal( job_id: Option, trigger: TriggerMetadata, suspended_mode: Option, -) -> Result<(Uuid, Option)> { +) -> Result<( + Uuid, + Option, + Option>, +)> { if retry.is_none() && error_handler_path.is_none() { let run_query = RunJobQuery { job_id, suspended_mode, ..Default::default() }; let path = StripPath(script_path.to_string()); - push_script_job_by_path_into_queue( + let (uuid, delete_after_use, tx_out) = push_script_job_by_path_into_queue( authed, db.clone(), + tx_o, user_db, workspace_id.to_string(), path, @@ -771,10 +787,12 @@ async fn trigger_script_internal( args, Some(trigger), ) - .await + .await?; + Ok((uuid, delete_after_use, tx_out)) } else { - trigger_script_with_retry_and_error_handler( + let (uuid, delete_after_use, tx_out) = trigger_script_with_retry_and_error_handler( db, + tx_o, user_db, authed, workspace_id, @@ -788,12 +806,14 @@ async fn trigger_script_internal( trigger, suspended_mode, ) - .await + .await?; + Ok((uuid, delete_after_use, tx_out)) } } -async fn trigger_script_with_retry_and_error_handler( +async fn trigger_script_with_retry_and_error_handler<'c>( db: &DB, + tx_o: Option>, user_db: UserDB, authed: ApiAuthed, workspace_id: &str, @@ -806,7 +826,11 @@ async fn trigger_script_with_retry_and_error_handler( job_id: Option, trigger: TriggerMetadata, suspended_mode: Option, -) -> Result<(Uuid, Option)> { +) -> Result<( + Uuid, + Option, + Option>, +)> { #[cfg(feature = "enterprise")] check_license_key_valid().await?; @@ -830,22 +854,30 @@ async fn trigger_script_with_retry_and_error_handler( check_tag_available_for_workspace(&db, &workspace_id, &tag, &authed).await?; - let (email, permissioned_as, push_authed, tx) = - if let Some(on_behalf_of) = on_behalf_of.as_ref() { - ( - on_behalf_of.email.as_str(), - on_behalf_of.permissioned_as.clone(), - None, - PushIsolationLevel::IsolatedRoot(db.clone()), - ) - } else { - ( - authed.email.as_str(), - username_to_permissioned_as(&authed.username), - Some(authed.clone().into()), - PushIsolationLevel::Isolated(user_db, authed.clone().into()), - ) - }; + let return_tx = tx_o.is_some(); + + let (email, permissioned_as, push_authed, tx) = if let Some(tx) = tx_o { + ( + authed.email.as_str(), + username_to_permissioned_as(&authed.username), + Some(authed.clone().into()), + PushIsolationLevel::Transaction(tx), + ) + } else if let Some(on_behalf_of) = on_behalf_of.as_ref() { + ( + on_behalf_of.email.as_str(), + on_behalf_of.permissioned_as.clone(), + None, + PushIsolationLevel::IsolatedRoot(db.clone()), + ) + } else { + ( + authed.email.as_str(), + username_to_permissioned_as(&authed.username), + Some(authed.clone().into()), + PushIsolationLevel::Isolated(user_db, authed.clone().into()), + ) + }; let push_args = PushArgs { args: &args.args, extra: args.extra }; @@ -921,7 +953,12 @@ async fn trigger_script_with_retry_and_error_handler( suspended_mode, ) .await?; - tx.commit().await?; - Ok((uuid, delete_after_use)) + // If we were given a transaction, return it; otherwise commit it + if return_tx { + Ok((uuid, delete_after_use, Some(tx))) + } else { + tx.commit().await?; + Ok((uuid, delete_after_use, None)) + } } diff --git a/backend/windmill-queue/src/jobs.rs b/backend/windmill-queue/src/jobs.rs index 637fe3165c109..58e9780485acd 100644 --- a/backend/windmill-queue/src/jobs.rs +++ b/backend/windmill-queue/src/jobs.rs @@ -5279,10 +5279,10 @@ pub async fn push<'c, 'd>( root_job }; - let (job_kind, suspend, suspend_until) = if suspended_mode.unwrap_or(false) { - (JobKind::Unassigned, Some(1), Some(Utc::now() + chrono::Duration::days(30))) + let (job_kind, scheduled_for_o) = if suspended_mode.unwrap_or(false) { + (JobKind::Unassigned, Some(Utc::now() + chrono::Duration::days(30))) } else { - (job_kind, None, None) + (job_kind, scheduled_for_o) }; sqlx::query!( @@ -5305,8 +5305,8 @@ pub async fn push<'c, 'd>( ON CONFLICT (job_id) DO UPDATE SET email = EXCLUDED.email, username = EXCLUDED.username, is_admin = EXCLUDED.is_admin, is_operator = EXCLUDED.is_operator, folders = EXCLUDED.folders, groups = EXCLUDED.groups, workspace_id = EXCLUDED.workspace_id, end_user_email = EXCLUDED.end_user_email ) INSERT INTO v2_job_queue - (workspace_id, id, running, scheduled_for, started_at, tag, priority, suspend, suspend_until) - VALUES ($2, $1, $28, COALESCE($29, now()), CASE WHEN $27 OR $40 THEN now() END, $30, $31, $42, $43)", + (workspace_id, id, running, scheduled_for, started_at, tag, priority) + VALUES ($2, $1, $28, COALESCE($29, now()), CASE WHEN $27 OR $40 THEN now() END, $30, $31)", job_id, workspace_id, raw_code, @@ -5352,8 +5352,6 @@ pub async fn push<'c, 'd>( trigger_kind as Option, running, end_user_email, - suspend, - suspend_until, ) .execute(&mut *tx) .warn_after_seconds(1) diff --git a/backend/windmill-worker/src/worker.rs b/backend/windmill-worker/src/worker.rs index 8d7caeda55188..82071690168b7 100644 --- a/backend/windmill-worker/src/worker.rs +++ b/backend/windmill-worker/src/worker.rs @@ -2634,6 +2634,13 @@ pub async fn handle_queued_job( return Err(Error::ExecutionErr(e.to_string())); } + match job.kind { + JobKind::Unassigned => { + return Err(Error::ExecutionError("Suspended job was not handled by the user within 30 days, job will not be executed.".to_string())); + } + _ => {} + } + #[cfg(any(not(feature = "enterprise"), feature = "sqlx"))] match conn { Connection::Sql(db) => { diff --git a/frontend/src/lib/components/DropdownV2Inner.svelte b/frontend/src/lib/components/DropdownV2Inner.svelte index bbf97a35ec22b..7515cc14509bb 100644 --- a/frontend/src/lib/components/DropdownV2Inner.svelte +++ b/frontend/src/lib/components/DropdownV2Inner.svelte @@ -4,6 +4,7 @@ import { twMerge } from 'tailwind-merge' import type { MenubarMenuElements } from '@melt-ui/svelte' import type { Item } from '$lib/utils' + import Tooltip from './Tooltip.svelte' interface Props { aiId?: string @@ -52,6 +53,9 @@

{item.displayName}

+ {#if item.tooltip} + {item.tooltip} + {/if} {@render item.extra?.()} {/each} diff --git a/frontend/src/lib/components/RunsPage.svelte b/frontend/src/lib/components/RunsPage.svelte index 86bcac405dba6..d5ffc19c36377 100644 --- a/frontend/src/lib/components/RunsPage.svelte +++ b/frontend/src/lib/components/RunsPage.svelte @@ -12,7 +12,8 @@ ScriptService, FlowService, type ExtendedJobs, - OpenAPI + OpenAPI, + type JobTriggerKind } from '$lib/gen' import { sendUserToast } from '$lib/toast' @@ -54,7 +55,6 @@ import ToggleButton from '$lib/components/common/toggleButton-v2/ToggleButton.svelte' import Select from '$lib/components/select/Select.svelte' import AnimatedPane from '$lib/components/splitPanes/AnimatedPane.svelte' - import type { JobTriggerType } from '$lib/components/triggers/utils' let { perPage = $bindable() }: { perPage: number } = $props() @@ -115,8 +115,8 @@ ? JSON.parse(decodeURIComponent(page.url.searchParams.get('result') ?? '{}')) : undefined ) - let jobTriggerKind: JobTriggerType | undefined = $state( - (page.url.searchParams.get('job_trigger_kind') as JobTriggerType) ?? undefined + let jobTriggerKind: JobTriggerKind | undefined = $state( + (page.url.searchParams.get('job_trigger_kind') as JobTriggerKind) ?? undefined ) // Handled on the main page @@ -167,7 +167,7 @@ resultFilter = page.url.searchParams.get('result') ? JSON.parse(decodeURIComponent(page.url.searchParams.get('result') ?? '{}')) : undefined - jobTriggerKind = (page.url.searchParams.get('job_trigger_kind') as JobTriggerType) ?? undefined + jobTriggerKind = (page.url.searchParams.get('job_trigger_kind') as JobTriggerKind) ?? undefined // Handled on the main page minTs = page.url.searchParams.get('min_ts') ?? undefined diff --git a/frontend/src/lib/components/common/modal/Modal2.svelte b/frontend/src/lib/components/common/modal/Modal2.svelte index 0fbefa59bed78..bec6efb3b4888 100644 --- a/frontend/src/lib/components/common/modal/Modal2.svelte +++ b/frontend/src/lib/components/common/modal/Modal2.svelte @@ -50,7 +50,7 @@ {#if isOpen}
@@ -59,7 +59,7 @@ css?.popup?.style || '' }`} class={twMerge( - 'max-h-screen-80 max-w-screen-80 rounded-lg relative bg-surface pt-2 px-4 pb-4', + 'max-h-screen-80 max-w-screen-80 rounded-lg relative bg-surface p-4', css?.popup?.class, 'wm-modal-form-popup' )} diff --git a/frontend/src/lib/components/runs/JobsLoader.svelte b/frontend/src/lib/components/runs/JobsLoader.svelte index 4da600b91d3c3..2868390c9f5b0 100644 --- a/frontend/src/lib/components/runs/JobsLoader.svelte +++ b/frontend/src/lib/components/runs/JobsLoader.svelte @@ -8,7 +8,8 @@ ConcurrencyGroupsService, type ObscuredJob, CancelablePromise, - CancelError + CancelError, + type JobTriggerKind } from '$lib/gen' import { sendUserToast } from '$lib/toast' @@ -16,7 +17,6 @@ import { tweened, type Tweened } from 'svelte/motion' import { subtractDaysFromDateString } from '$lib/utils' - import type { JobTriggerType } from '../triggers/utils' import { CancelablePromiseUtils } from '$lib/cancelable-promise-utils' interface Props { @@ -31,7 +31,7 @@ showFutureJobs?: boolean argFilter: string | undefined resultFilter?: string | undefined - jobTriggerKind?: JobTriggerType | undefined + jobTriggerKind?: JobTriggerKind | undefined schedulePath?: string | undefined jobKindsCat?: string | undefined minTs?: string | undefined diff --git a/frontend/src/lib/components/runs/RunsFilter.svelte b/frontend/src/lib/components/runs/RunsFilter.svelte index 0df73f1b42826..2c7ea5251b3f8 100644 --- a/frontend/src/lib/components/runs/RunsFilter.svelte +++ b/frontend/src/lib/components/runs/RunsFilter.svelte @@ -17,7 +17,8 @@ import DropdownSelect from '../DropdownSelect.svelte' import TooltipV2 from '$lib/components/meltComponents/Tooltip.svelte' import TextInput from '../text_input/TextInput.svelte' - import { jobTriggerTypes, triggerDisplayNamesMap, type JobTriggerType } from '../triggers/utils' + import { jobTriggerKinds, triggerDisplayNamesMap } from '../triggers/utils' + import type { JobTriggerKind } from '$lib/gen' interface Props { // Filters @@ -31,7 +32,7 @@ argFilter: string argError: string resultFilter: string - jobTriggerKind: JobTriggerType | undefined + jobTriggerKind: JobTriggerKind | undefined resultError: string jobKindsCat: string user?: string | null @@ -964,7 +965,7 @@ {`Filter by what kind of trigger started the run.`} +
+ + Created At + Script/Flow Path + + + {#if loading} + + {#each new Array(3) as _} + + {#each new Array(4) as _} + + + + {/each} + + {/each} + + {:else if queuedJobs.length === 0} +
+

No suspended jobs found.

- {/if} + {:else} + + {#each queuedJobs as job} + + +
+ toggleJobSelection(job.id)} + disabled={processingAction} + class="cursor-pointer" + /> +
+
-
-

- You are switching this trigger from inactive to active mode. What would you like to do - with the {hasMorePages - ? `${queuedJobs.length}+ suspended` - : `${queuedJobs.length} suspended`} job{queuedJobs.length === 1 ? '' : 's'}? -

-
- {/if} + {displayDate(job.created_at)} -
- {#if !loading && !error && queuedJobs.length > 0} - - - + + +
{job.script_path || '-'}
+
+ {#if editedAt && job.created_at && new Date(editedAt) > new Date(job.created_at)} + Outdated + Trigger was edited after these jobs were created and suspended. They will be + reassigned to match the new trigger configuration, in particular the + runnable, retry and error handling settings. + + + {/if} +
+ + {/each} + {/if} -
+ +
+ + +
+ {#if queuedJobs.length === 0} + + + + {:else if hasSelectedJobs} + + + + {:else} + + + {/if}
- -{/if} +
+
diff --git a/frontend/src/lib/components/triggers/email/EmailTriggerEditorInner.svelte b/frontend/src/lib/components/triggers/email/EmailTriggerEditorInner.svelte index 7ef99e60314e1..7135b65c85e62 100644 --- a/frontend/src/lib/components/triggers/email/EmailTriggerEditorInner.svelte +++ b/frontend/src/lib/components/triggers/email/EmailTriggerEditorInner.svelte @@ -25,7 +25,6 @@ import Tab from '$lib/components/common/tabs/Tab.svelte' import TriggerRetriesAndErrorHandler from '../TriggerRetriesAndErrorHandler.svelte' import { saveEmailTriggerFromCfg } from './utils' - import TriggerActiveMode from '../TriggerActiveMode.svelte' let { useDrawer = true, @@ -316,8 +315,6 @@ {/if} - - - - {/if} ({})) @@ -253,6 +253,7 @@ error_handler_args = defaultValues?.error_handler_args ?? {} retry = defaultValues?.retry ?? undefined errorHandlerSelected = getHandlerType(error_handler_path ?? '') + editedAt = undefined } finally { clearTimeout(loader) drawerLoading = false @@ -293,7 +294,8 @@ error_handler_args = cfg?.error_handler_args ?? {} retry = cfg?.retry errorHandlerSelected = getHandlerType(error_handler_path ?? '') - suspended_mode = cfg?.suspended_mode ?? true + suspended_mode = cfg?.suspended_mode ?? false + editedAt = cfg?.edited_at ?? undefined } async function loadTrigger(defaultConfig?: Partial): Promise { @@ -377,7 +379,22 @@ workspace: $workspaceStore ?? '', requestBody: { enabled: newEnabled } }) - sendUserToast(`${newEnabled ? 'enabled' : 'disabled'} HTTP trigger ${initialPath}`) + sendUserToast(`${newEnabled ? 'Enabled' : 'Disabled'} HTTP trigger ${initialPath}`) + } + } + + async function handleToggleSuspendedMode(newSuspendedMode: boolean, newEnabled: boolean = true) { + suspended_mode = newSuspendedMode + enabled = newSuspendedMode || newEnabled + if (!trigger?.draftConfig) { + await HttpTriggerService.updateHttpTriggerStatus({ + workspace: $workspaceStore ?? '', + path: initialPath, + requestBody: { suspended_mode: newSuspendedMode, enabled: newSuspendedMode || newEnabled } + }) + sendUserToast( + `${newSuspendedMode ? 'Suspended' : newEnabled ? 'Resumed' : 'Disabled'} HTTP trigger ${initialPath}` + ) } } @@ -610,8 +627,6 @@ {/if}
- - {/if} {/if} {/snippet} diff --git a/frontend/src/lib/components/triggers/kafka/KafkaTriggerEditorInner.svelte b/frontend/src/lib/components/triggers/kafka/KafkaTriggerEditorInner.svelte index b051266c85ee9..3dab6d0891ab9 100644 --- a/frontend/src/lib/components/triggers/kafka/KafkaTriggerEditorInner.svelte +++ b/frontend/src/lib/components/triggers/kafka/KafkaTriggerEditorInner.svelte @@ -19,7 +19,6 @@ import Tabs from '$lib/components/common/tabs/Tabs.svelte' import Tab from '$lib/components/common/tabs/Tab.svelte' import TriggerRetriesAndErrorHandler from '../TriggerRetriesAndErrorHandler.svelte' - import TriggerActiveMode from '../TriggerActiveMode.svelte' interface Props { useDrawer?: boolean @@ -386,8 +385,6 @@ {/if}
- - {/if} {/if} - - {/if} - - {/if} -
{#snippet badge()} {#if isEditor} diff --git a/frontend/src/lib/components/triggers/sqs/SqsTriggerEditorInner.svelte b/frontend/src/lib/components/triggers/sqs/SqsTriggerEditorInner.svelte index 95842ee422b59..7ac8fad636569 100644 --- a/frontend/src/lib/components/triggers/sqs/SqsTriggerEditorInner.svelte +++ b/frontend/src/lib/components/triggers/sqs/SqsTriggerEditorInner.svelte @@ -24,7 +24,6 @@ import Tabs from '$lib/components/common/tabs/Tabs.svelte' import Tab from '$lib/components/common/tabs/Tab.svelte' import TriggerRetriesAndErrorHandler from '../TriggerRetriesAndErrorHandler.svelte' - import TriggerActiveMode from '../TriggerActiveMode.svelte' interface Props { useDrawer?: boolean @@ -387,8 +386,6 @@ {/if}
- - {/if} - - Date: Fri, 28 Nov 2025 17:56:22 +0100 Subject: [PATCH 26/35] nits --- backend/windmill-worker/src/worker.rs | 2 +- .../(root)/(logged)/routes/+page.svelte | 21 ++++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/backend/windmill-worker/src/worker.rs b/backend/windmill-worker/src/worker.rs index 82071690168b7..d6bdc9b0be1ca 100644 --- a/backend/windmill-worker/src/worker.rs +++ b/backend/windmill-worker/src/worker.rs @@ -2636,7 +2636,7 @@ pub async fn handle_queued_job( match job.kind { JobKind::Unassigned => { - return Err(Error::ExecutionError("Suspended job was not handled by the user within 30 days, job will not be executed.".to_string())); + return Err(Error::ExecutionErr("Suspended job was not handled by the user within 30 days, job will not be executed.".to_string())); } _ => {} } diff --git a/frontend/src/routes/(root)/(logged)/routes/+page.svelte b/frontend/src/routes/(root)/(logged)/routes/+page.svelte index c87d1861e16d8..7b1ae5b899e4e 100644 --- a/frontend/src/routes/(root)/(logged)/routes/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/routes/+page.svelte @@ -48,6 +48,7 @@ import { getHttpRoute } from '$lib/components/triggers/http/utils' import RoutesGenerator from '$lib/components/triggers/http/RoutesGenerator.svelte' import OpenApiSpecGenerator from '$lib/components/triggers/http/OpenAPISpecGenerator.svelte' + import Badge from '$lib/components/common/badge/Badge.svelte' type TriggerW = HttpTrigger & { canWrite: boolean } @@ -314,7 +315,7 @@
No routes
{:else if items?.length}
- {#each items.slice(0, nbDisplayed) as { workspace_id, workspaced_route, enabled, path, edited_by, edited_at, script_path, route_path, is_flow, extra_perms, canWrite, marked, http_method, static_asset_config } (path)} + {#each items.slice(0, nbDisplayed) as { workspace_id, workspaced_route, enabled, path, edited_by, edited_at, script_path, route_path, is_flow, extra_perms, canWrite, marked, http_method, static_asset_config, suspended_mode } (path)} {@const href = `${is_flow ? '/flows/get' : '/scripts/get'}/${script_path}`}
- { - setTriggerEnabled(path, e.detail) - }} - /> + {#if suspended_mode} + Suspended + {:else} + { + setTriggerEnabled(path, e.detail) + }} + /> + {/if}
- {:else} - { - onToggleEnabled?.(detail) - }} - /> - - { - onToggleSuspendedMode?.(true) - }, - tooltip: - 'Suspend job executions for this trigger, allowing you to individually resume or cancel them and reassign them to a different runnable' - } - ]} - /> - {/if} + {#if edit} + {/if} {#if canSave} +
+ diff --git a/frontend/src/lib/components/triggers/TriggerSuspendedJobsModal.svelte b/frontend/src/lib/components/triggers/TriggerSuspendedJobsModal.svelte index 88a83a361f868..682e098c6a3e6 100644 --- a/frontend/src/lib/components/triggers/TriggerSuspendedJobsModal.svelte +++ b/frontend/src/lib/components/triggers/TriggerSuspendedJobsModal.svelte @@ -1,49 +1,60 @@ + + +{#snippet runnable({ + path, + kind, + outdated +}: { + path?: string + kind: QueuedJob['job_kind'] + outdated?: boolean +})} + {@const JobKindIcon = getJobKindIcon(kind)} +
+ + + {#snippet text()} + {mapJobKindToRunnableKind(kind)} + {/snippet} + +
{path || '-'}
+
+{/snippet} +
- {#if error} -
- {error} -
+ {#if action !== 'none'} + + You can only {action} the trigger when there are no more suspended jobs for this trigger. + + {/if} + {#if queuedJobs.length > 0 && hasChanged} + + You can only resume suspended jobs when the trigger has no unsaved changes. + + {:else if queuedJobs.length > 0} + + If you modify the trigger's configuration (such as changing the runnable, retry settings, or + error handler), resumed jobs will be run using the updated configuration. + {/if}
@@ -258,10 +317,9 @@ on:previous={prevPage} bind:currentPage hasMore={hasMorePages} - bind:contentHeight > - +
- Created At - Script/Flow Path + Created at + Runnable + Cancellation date {#if loading} @@ -297,8 +356,15 @@ {:else} {#each queuedJobs as job} - - + {@const changedRunnable = + runnableConfig.kind !== mapJobKindToRunnableKind(job.job_kind) || + runnableConfig.path !== job.script_path} + + window.open(`/run/${job.id}?workspace=${workspace}`, '_blank')} + > +
{displayDate(job.created_at)} - - -
{job.script_path || '-'}
-
- {#if editedAt && job.created_at && new Date(editedAt) > new Date(job.created_at)} - Outdated - Trigger was edited after these jobs were created and suspended. They will be - reassigned to match the new trigger configuration, in particular the - runnable, retry and error handling settings. - - + + {@render runnable({ + path: job.script_path, + kind: job.job_kind, + outdated: changedRunnable + })} + {#if changedRunnable} + {@render runnable({ + path: runnableConfig.path, + kind: runnableConfig.kind + })} + {/if} + {#if (job.job_kind === 'unassigned_singlestepflow' && (!runnableConfig.retry || !runnableConfig.errorHandlerPath)) || ((runnableConfig.retry || runnableConfig.errorHandlerPath) && runnableConfig.editedAt && job.created_at && new Date(runnableConfig.editedAt) > new Date(job.created_at))} + Changed retry/error handler {/if} + {displayDate(job.scheduled_for)} {/each} @@ -339,15 +404,7 @@
- {#if queuedJobs.length === 0} - - - - {:else if hasSelectedJobs} + {#if hasSelectedJobs} {:else} {/if}
diff --git a/frontend/src/lib/components/triggers/http/RouteEditorInner.svelte b/frontend/src/lib/components/triggers/http/RouteEditorInner.svelte index 1d4e1d1b6bc17..a5c14904ddd96 100644 --- a/frontend/src/lib/components/triggers/http/RouteEditorInner.svelte +++ b/frontend/src/lib/components/triggers/http/RouteEditorInner.svelte @@ -12,10 +12,11 @@ type ErrorHandler, type HttpTrigger, type NewHttpTrigger, - type Retry + type Retry, + type TriggerMode } from '$lib/gen' import { usedTriggerKinds, userStore, workspaceStore } from '$lib/stores' - import { canWrite, emptyString, sendUserToast } from '$lib/utils' + import { canWrite, capitalize, emptyString, sendUserToast } from '$lib/utils' import Section from '$lib/components/Section.svelte' import { Loader2, Pipette, Plus } from 'lucide-svelte' import Label from '$lib/components/Label.svelte' @@ -45,6 +46,9 @@ import Tabs from '$lib/components/common/tabs/Tabs.svelte' import Tab from '$lib/components/common/tabs/Tab.svelte' import TriggerRetriesAndErrorHandler from '../TriggerRetriesAndErrorHandler.svelte' + import { deepEqual } from 'fast-equals' + import TriggerSuspendedJobsAlert from '../TriggerSuspendedJobsAlert.svelte' + import TriggerSuspendedJobsModal from '../TriggerSuspendedJobsModal.svelte' let { useDrawer = true, @@ -83,7 +87,7 @@ let static_asset_config = $state<{ s3: string; storage?: string; filename?: string } | undefined>( undefined ) - let enabled: boolean = $state(false) + let mode = $state('enabled') let is_static_website = $state(false) let s3FileUploadRawMode = $state(false) let workspaced_route = $state(false) @@ -111,8 +115,13 @@ let deploymentLoading = $state(false) let optionTabSelected: 'request_options' | 'error_handler' | 'retries' = $state('request_options') let errorHandlerSelected: ErrorHandler = $state('slack') - let suspended_mode = $state(true) let editedAt: string | undefined = $state(undefined) + + let suspendedJobsModal = $state(null) + let originalConfig = $state(undefined) + + let hasChanged = $derived(!deepEqual(getRouteConfig(), originalConfig ?? {})) + const isAdmin = $derived($userStore?.is_admin || $userStore?.is_super_admin) const routeConfig = $derived.by(getRouteConfig) const captureConfig = $derived.by(isEditor ? getCaptureConfig : () => ({})) @@ -121,7 +130,8 @@ !can_write || pathError != '' || !isValid || - (!static_asset_config && emptyString(script_path)) + (!static_asset_config && emptyString(script_path)) || + !hasChanged ) $effect(() => { @@ -196,6 +206,7 @@ dirtyPath = false dirtyRoutePath = false await loadTrigger(defaultConfig) + originalConfig = structuredClone($state.snapshot(getRouteConfig())) } catch (err) { sendUserToast(`Could not load route: ${err}`, true) } finally { @@ -238,7 +249,7 @@ s3FileUploadRawMode = defaultValues?.s3FileUploadRawMode ?? false path = defaultValues?.path ?? '' initialPath = '' - enabled = defaultValues?.enabled ?? false + mode = defaultValues?.mode ?? 'enabled' dirtyPath = false is_static_website = defaultValues?.is_static_website ?? false workspaced_route = defaultValues?.workspaced_route ?? false @@ -254,6 +265,7 @@ retry = defaultValues?.retry ?? undefined errorHandlerSelected = getHandlerType(error_handler_path ?? '') editedAt = undefined + originalConfig = structuredClone($state.snapshot(getRouteConfig())) } finally { clearTimeout(loader) drawerLoading = false @@ -273,7 +285,7 @@ wrap_body = cfg?.wrap_body ?? false raw_string = cfg?.raw_string ?? false summary = cfg?.summary ?? '' - enabled = cfg?.enabled ?? false + mode = cfg?.mode ?? 'enabled' routeDescription = cfg?.description ?? '' authentication_resource_path = cfg?.authentication_resource_path ?? '' if (cfg?.authentication_method === 'custom_script') { @@ -294,7 +306,6 @@ error_handler_args = cfg?.error_handler_args ?? {} retry = cfg?.retry errorHandlerSelected = getHandlerType(error_handler_path ?? '') - suspended_mode = cfg?.suspended_mode ?? false editedAt = cfg?.edited_at ?? undefined } @@ -329,7 +340,10 @@ ) if (isSaved) { onUpdate(saveCfg.path) - drawer?.closeDrawer() + originalConfig = structuredClone($state.snapshot(getRouteConfig())) + if (mode !== 'suspended') { + drawer?.closeDrawer() + } } deploymentLoading = false } @@ -352,7 +366,7 @@ http_method, request_type, workspaced_route, - enabled, + mode, wrap_body, raw_string, authentication_resource_path, @@ -364,37 +378,24 @@ description: routeDescription, error_handler_path, error_handler_args, - retry, - suspended_mode + retry } return nCfg } - async function handleToggleEnabled(newEnabled: boolean) { - enabled = newEnabled + async function handleToggleMode(newMode: TriggerMode) { + mode = newMode if (!trigger?.draftConfig) { - await HttpTriggerService.setHttpTriggerEnabled({ + await HttpTriggerService.setHttpTriggerMode({ path: initialPath, workspace: $workspaceStore ?? '', - requestBody: { enabled: newEnabled } + requestBody: { mode: newMode } }) - sendUserToast(`${newEnabled ? 'Enabled' : 'Disabled'} HTTP trigger ${initialPath}`) + sendUserToast(`${capitalize(newMode)} HTTP trigger ${initialPath}`) } - } - - async function handleToggleSuspendedMode(newSuspendedMode: boolean, newEnabled: boolean = true) { - suspended_mode = newSuspendedMode - enabled = newSuspendedMode || newEnabled - if (!trigger?.draftConfig) { - await HttpTriggerService.updateHttpTriggerStatus({ - workspace: $workspaceStore ?? '', - path: initialPath, - requestBody: { suspended_mode: newSuspendedMode, enabled: newSuspendedMode || newEnabled } - }) - sendUserToast( - `${newSuspendedMode ? 'Suspended' : newEnabled ? 'Resumed' : 'Disabled'} HTTP trigger ${initialPath}` - ) + if (originalConfig) { + originalConfig['mode'] = newMode } } @@ -436,6 +437,24 @@ /> {/if} +{#if mode === 'suspended'} + +{/if} + {#snippet config()} {#if drawerLoading} {#if showLoader} @@ -443,6 +462,9 @@ {/if} {:else}
+ {#if mode === 'suspended'} + + {/if}