2 Commits

Author SHA1 Message Date
ad4759e29a Update dependency eslint-plugin-react-dom to ^1.53.1
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing
2025-11-04 00:16:04 +00:00
4cd448208b Improve backend code quality
Some checks failed
continuous-integration/drone/push Build is failing
2025-11-03 19:08:46 +01:00
8 changed files with 133 additions and 156 deletions

View File

@@ -22,10 +22,6 @@ pub struct AppConfig {
#[clap(short = 'S', long, env, default_value = "")]
secret: String,
/// Specify whether the cookie should be transmitted only over secure connections
#[clap(long, env)]
pub cookie_secure: bool,
/// Unsecure : for development, bypass authentication, using the account with the given
/// email address by default
#[clap(long, env)]
@@ -161,23 +157,6 @@ impl AppConfig {
self.unsecure_auto_login_email().is_some()
}
/// Get auth cookie domain
pub fn cookie_domain(&self) -> Option<String> {
if cfg!(debug_assertions) {
let domain = self.website_origin.split_once("://")?.1;
Some(
domain
.split_once(':')
.map(|s| s.0)
.unwrap_or(domain)
.to_string(),
)
} else {
// In release mode, the web app is hosted on the same origin as the API
None
}
}
/// Get app secret
pub fn secret(&self) -> &str {
let mut secret = self.secret.as_str();

View File

@@ -63,21 +63,20 @@ pub async fn download(
pub async fn serve_file(req: HttpRequest, file: &File, download_file: bool) -> HttpResult {
if !download_file {
// Check if the browser already knows the etag
if let Some(c) = req.headers().get(header::IF_NONE_MATCH) {
if c.to_str().unwrap_or("") == file.sha512.as_str() {
return Ok(HttpResponse::NotModified().finish());
}
if let Some(c) = req.headers().get(header::IF_NONE_MATCH)
&& c.to_str().unwrap_or("") == file.sha512.as_str()
{
return Ok(HttpResponse::NotModified().finish());
}
// Check if the browser already knows the file by date
if let Some(c) = req.headers().get(header::IF_MODIFIED_SINCE) {
let date_str = c.to_str().unwrap_or("");
if let Ok(date) = httpdate::parse_http_date(date_str) {
if date.add(Duration::from_secs(1))
if let Ok(date) = httpdate::parse_http_date(date_str)
&& date.add(Duration::from_secs(1))
>= time_utils::unix_to_system_time(file.time_create as u64)
{
return Ok(HttpResponse::NotModified().finish());
}
{
return Ok(HttpResponse::NotModified().finish());
}
}
}

View File

@@ -64,10 +64,10 @@ pub async fn get_list_of_account(
});
}
if let Some(limit) = query.limit {
if list.len() > limit {
list = list[..limit].to_vec();
}
if let Some(limit) = query.limit
&& list.len() > limit
{
list = list[..limit].to_vec();
}
Ok(HttpResponse::Ok().json(list))

View File

@@ -120,16 +120,16 @@ impl FromRequest for AuthExtractor {
}
// Check IP restriction
if let Some(net) = token.ip_net() {
if !net.contains(&remote_ip.0) {
log::error!(
"Trying to use token {:?} from unauthorized IP address: {remote_ip:?}",
token.id()
);
return Err(actix_web::error::ErrorForbidden(
"This token cannot be used from this IP address!",
));
}
if let Some(net) = token.ip_net()
&& !net.contains(&remote_ip.0)
{
log::error!(
"Trying to use token {:?} from unauthorized IP address: {remote_ip:?}",
token.id()
);
return Err(actix_web::error::ErrorForbidden(
"This token cannot be used from this IP address!",
));
}
// Check for write access
@@ -163,10 +163,10 @@ impl FromRequest for AuthExtractor {
};
// Update last use (if needed)
if token.shall_update_time_used() {
if let Err(e) = tokens_service::update_time_used(&token).await {
log::error!("Failed to refresh last usage of token! {e}");
}
if token.shall_update_time_used()
&& let Err(e) = tokens_service::update_time_used(&token).await
{
log::error!("Failed to refresh last usage of token! {e}");
}
// Handle tokens expiration

View File

@@ -23,10 +23,10 @@ impl UpdateInboxEntryQuery {
let constraints = ServerConstraints::default();
// Check inbox entry label
if let Some(label) = &self.label {
if !constraints.inbox_entry_label.check_str(label) {
return Ok(Some("Invalid inbox entry label length!"));
}
if let Some(label) = &self.label
&& !constraints.inbox_entry_label.check_str(label)
{
return Ok(Some("Invalid inbox entry label length!"));
}
// Check the referenced movement

View File

@@ -55,12 +55,11 @@ impl UpdateMovementQuery {
if let Ok(movement) =
get_by_account_label_amount_time(self.account_id, &self.label, self.amount, self.time)
.await
&& Some(movement.id()) != ref_movement
{
if Some(movement.id()) != ref_movement {
return Ok(Some(
"A movement taken at the same time with the same label and the same amount already exists!",
));
}
return Ok(Some(
"A movement taken at the same time with the same label and the same amount already exists!",
));
}
Ok(None)

View File

@@ -35,7 +35,7 @@
"@types/react-dom": "^19.2.2",
"@vitejs/plugin-react": "^4.7.0",
"eslint": "^9.32.0",
"eslint-plugin-react-dom": "^1.52.4",
"eslint-plugin-react-dom": "^1.53.1",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^00.4.20",
"eslint-plugin-react-x": "^1.52.9",
@@ -3983,21 +3983,21 @@
}
},
"node_modules/eslint-plugin-react-dom": {
"version": "1.52.4",
"resolved": "https://registry.npmjs.org/eslint-plugin-react-dom/-/eslint-plugin-react-dom-1.52.4.tgz",
"integrity": "sha512-UVt3T48F48Nbl40eqSzwkjpUnLnobj0St7EwpbItMhEOgcwjle8Jrxe2odetQBCuwPZ0dkeH0yE1PbAlNfQU/A==",
"version": "1.53.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-react-dom/-/eslint-plugin-react-dom-1.53.1.tgz",
"integrity": "sha512-UYrWJ2cS4HpJ1A5XBuf1HfMpPoLdfGil+27g/ldXfGemb4IXqlxHt4ANLyC8l2CWcE3SXGJW7mTslL34MG0qTQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-react/ast": "1.52.4",
"@eslint-react/core": "1.52.4",
"@eslint-react/eff": "1.52.4",
"@eslint-react/kit": "1.52.4",
"@eslint-react/shared": "1.52.4",
"@eslint-react/var": "1.52.4",
"@typescript-eslint/scope-manager": "^8.39.1",
"@typescript-eslint/types": "^8.39.1",
"@typescript-eslint/utils": "^8.39.1",
"@eslint-react/ast": "1.53.1",
"@eslint-react/core": "1.53.1",
"@eslint-react/eff": "1.53.1",
"@eslint-react/kit": "1.53.1",
"@eslint-react/shared": "1.53.1",
"@eslint-react/var": "1.53.1",
"@typescript-eslint/scope-manager": "^8.43.0",
"@typescript-eslint/types": "^8.43.0",
"@typescript-eslint/utils": "^8.43.0",
"compare-versions": "^6.1.1",
"string-ts": "^2.2.1",
"ts-pattern": "^5.8.0"
@@ -4019,16 +4019,16 @@
}
},
"node_modules/eslint-plugin-react-dom/node_modules/@eslint-react/ast": {
"version": "1.52.4",
"resolved": "https://registry.npmjs.org/@eslint-react/ast/-/ast-1.52.4.tgz",
"integrity": "sha512-zsNZXrVzFhtnc+Wx6TiREwek6zKDEkFEaW1DyG6K3iR8ibGm9PuR16iYWDWsRL/YfQz9ZGHVapHO7jNthDVSvg==",
"version": "1.53.1",
"resolved": "https://registry.npmjs.org/@eslint-react/ast/-/ast-1.53.1.tgz",
"integrity": "sha512-qvUC99ewtriJp9quVEOvZ6+RHcsMLfVQ0OhZ4/LupZUDhjW7GiX1dxJsFaxHdJ9rLNLhQyLSPmbAToeqUrSruQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-react/eff": "1.52.4",
"@typescript-eslint/types": "^8.39.1",
"@typescript-eslint/typescript-estree": "^8.39.1",
"@typescript-eslint/utils": "^8.39.1",
"@eslint-react/eff": "1.53.1",
"@typescript-eslint/types": "^8.43.0",
"@typescript-eslint/typescript-estree": "^8.43.0",
"@typescript-eslint/utils": "^8.43.0",
"string-ts": "^2.2.1",
"ts-pattern": "^5.8.0"
},
@@ -4037,21 +4037,21 @@
}
},
"node_modules/eslint-plugin-react-dom/node_modules/@eslint-react/core": {
"version": "1.52.4",
"resolved": "https://registry.npmjs.org/@eslint-react/core/-/core-1.52.4.tgz",
"integrity": "sha512-cqS4FbQ3wSowk/73+NHI21jC9sbnAbCWIAPRWe8EpM+g5yrqYMydriI1vTMO7g93LSTAknc+mGdwI/Fi8Y991A==",
"version": "1.53.1",
"resolved": "https://registry.npmjs.org/@eslint-react/core/-/core-1.53.1.tgz",
"integrity": "sha512-8prroos5/Uvvh8Tjl1HHCpq4HWD3hV9tYkm7uXgKA6kqj0jHlgRcQzuO6ZPP7feBcK3uOeug7xrq03BuG8QKCA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-react/ast": "1.52.4",
"@eslint-react/eff": "1.52.4",
"@eslint-react/kit": "1.52.4",
"@eslint-react/shared": "1.52.4",
"@eslint-react/var": "1.52.4",
"@typescript-eslint/scope-manager": "^8.39.1",
"@typescript-eslint/type-utils": "^8.39.1",
"@typescript-eslint/types": "^8.39.1",
"@typescript-eslint/utils": "^8.39.1",
"@eslint-react/ast": "1.53.1",
"@eslint-react/eff": "1.53.1",
"@eslint-react/kit": "1.53.1",
"@eslint-react/shared": "1.53.1",
"@eslint-react/var": "1.53.1",
"@typescript-eslint/scope-manager": "^8.43.0",
"@typescript-eslint/type-utils": "^8.43.0",
"@typescript-eslint/types": "^8.43.0",
"@typescript-eslint/utils": "^8.43.0",
"birecord": "^0.1.1",
"ts-pattern": "^5.8.0"
},
@@ -4060,9 +4060,9 @@
}
},
"node_modules/eslint-plugin-react-dom/node_modules/@eslint-react/eff": {
"version": "1.52.4",
"resolved": "https://registry.npmjs.org/@eslint-react/eff/-/eff-1.52.4.tgz",
"integrity": "sha512-n2r2ncw8pTA7WuMI4aM9R4kPNiXaF8o0lH6X/pa/XP/hhVKO6u6R2uoLV8ltm53UZVVY+6qz92hRiLoTwefd3A==",
"version": "1.53.1",
"resolved": "https://registry.npmjs.org/@eslint-react/eff/-/eff-1.53.1.tgz",
"integrity": "sha512-uq20lPRAmsWRjIZm+mAV/2kZsU2nDqn5IJslxGWe3Vfdw23hoyhEw3S1KKlxbftwbTvsZjKvVP0iw3bZo/NUpg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4070,50 +4070,50 @@
}
},
"node_modules/eslint-plugin-react-dom/node_modules/@eslint-react/kit": {
"version": "1.52.4",
"resolved": "https://registry.npmjs.org/@eslint-react/kit/-/kit-1.52.4.tgz",
"integrity": "sha512-w1o8Qh/3rWQBIFB/ENS9A/EeGhUkAheYWeA4uHLuLMZ4ULwXU2c6aw3QZ9MW12lJ5JNWKiu3MuszVHTQmYUM/Q==",
"version": "1.53.1",
"resolved": "https://registry.npmjs.org/@eslint-react/kit/-/kit-1.53.1.tgz",
"integrity": "sha512-zOi2le9V4rMrJvQV4OeedGvMGvDT46OyFPOwXKs7m0tQu5vXVJ8qwIPaVQT1n/WIuvOg49OfmAVaHpGxK++xLQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-react/eff": "1.52.4",
"@typescript-eslint/utils": "^8.39.1",
"@eslint-react/eff": "1.53.1",
"@typescript-eslint/utils": "^8.43.0",
"ts-pattern": "^5.8.0",
"zod": "^4.0.17"
"zod": "^4.1.5"
},
"engines": {
"node": ">=18.18.0"
}
},
"node_modules/eslint-plugin-react-dom/node_modules/@eslint-react/shared": {
"version": "1.52.4",
"resolved": "https://registry.npmjs.org/@eslint-react/shared/-/shared-1.52.4.tgz",
"integrity": "sha512-ckRfgtBpsEGQgS9x2N/u+TB67UeASzYclQdlbhn29Y3/G3lvYTrXEyo49jZKVkpBW8ewSQAlwqUeipOrfv27XA==",
"version": "1.53.1",
"resolved": "https://registry.npmjs.org/@eslint-react/shared/-/shared-1.53.1.tgz",
"integrity": "sha512-gomJQmFqQgQVI3Ra4vTMG/s6a4bx3JqeNiTBjxBJt4C9iGaBj458GkP4LJHX7TM6xUzX+fMSKOPX7eV3C/+UCw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-react/eff": "1.52.4",
"@eslint-react/kit": "1.52.4",
"@typescript-eslint/utils": "^8.39.1",
"@eslint-react/eff": "1.53.1",
"@eslint-react/kit": "1.53.1",
"@typescript-eslint/utils": "^8.43.0",
"ts-pattern": "^5.8.0",
"zod": "^4.0.17"
"zod": "^4.1.5"
},
"engines": {
"node": ">=18.18.0"
}
},
"node_modules/eslint-plugin-react-dom/node_modules/@eslint-react/var": {
"version": "1.52.4",
"resolved": "https://registry.npmjs.org/@eslint-react/var/-/var-1.52.4.tgz",
"integrity": "sha512-tckDIawDTtpG3UVg/XEqxULq669B7Br2q84Hh3d3pTPojUamRZ+zbWY3gwyS+JS9iQ1lI9aOInQISdKzRuGWKQ==",
"version": "1.53.1",
"resolved": "https://registry.npmjs.org/@eslint-react/var/-/var-1.53.1.tgz",
"integrity": "sha512-yzwopvPntcHU7mmDvWzRo1fb8QhjD8eDRRohD11rTV1u7nWO4QbJi0pOyugQakvte1/W11Y0Vr8Of0Ojk/A6zg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-react/ast": "1.52.4",
"@eslint-react/eff": "1.52.4",
"@typescript-eslint/scope-manager": "^8.39.1",
"@typescript-eslint/types": "^8.39.1",
"@typescript-eslint/utils": "^8.39.1",
"@eslint-react/ast": "1.53.1",
"@eslint-react/eff": "1.53.1",
"@typescript-eslint/scope-manager": "^8.43.0",
"@typescript-eslint/types": "^8.43.0",
"@typescript-eslint/utils": "^8.43.0",
"string-ts": "^2.2.1",
"ts-pattern": "^5.8.0"
},
@@ -4122,14 +4122,14 @@
}
},
"node_modules/eslint-plugin-react-dom/node_modules/@typescript-eslint/project-service": {
"version": "8.39.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.39.1.tgz",
"integrity": "sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw==",
"version": "8.46.3",
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.3.tgz",
"integrity": "sha512-Fz8yFXsp2wDFeUElO88S9n4w1I4CWDTXDqDr9gYvZgUpwXQqmZBr9+NTTql5R3J7+hrJZPdpiWaB9VNhAKYLuQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/tsconfig-utils": "^8.39.1",
"@typescript-eslint/types": "^8.39.1",
"@typescript-eslint/tsconfig-utils": "^8.46.3",
"@typescript-eslint/types": "^8.46.3",
"debug": "^4.3.4"
},
"engines": {
@@ -4144,14 +4144,14 @@
}
},
"node_modules/eslint-plugin-react-dom/node_modules/@typescript-eslint/scope-manager": {
"version": "8.39.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.1.tgz",
"integrity": "sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw==",
"version": "8.46.3",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.3.tgz",
"integrity": "sha512-FCi7Y1zgrmxp3DfWfr+3m9ansUUFoy8dkEdeQSgA9gbm8DaHYvZCdkFRQrtKiedFf3Ha6VmoqoAaP68+i+22kg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.39.1",
"@typescript-eslint/visitor-keys": "8.39.1"
"@typescript-eslint/types": "8.46.3",
"@typescript-eslint/visitor-keys": "8.46.3"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4162,9 +4162,9 @@
}
},
"node_modules/eslint-plugin-react-dom/node_modules/@typescript-eslint/tsconfig-utils": {
"version": "8.39.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.1.tgz",
"integrity": "sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA==",
"version": "8.46.3",
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.3.tgz",
"integrity": "sha512-GLupljMniHNIROP0zE7nCcybptolcH8QZfXOpCfhQDAdwJ/ZTlcaBOYebSOZotpti/3HrHSw7D3PZm75gYFsOA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4179,15 +4179,15 @@
}
},
"node_modules/eslint-plugin-react-dom/node_modules/@typescript-eslint/type-utils": {
"version": "8.39.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.39.1.tgz",
"integrity": "sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA==",
"version": "8.46.3",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.3.tgz",
"integrity": "sha512-ZPCADbr+qfz3aiTTYNNkCbUt+cjNwI/5McyANNrFBpVxPt7GqpEYz5ZfdwuFyGUnJ9FdDXbGODUu6iRCI6XRXw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.39.1",
"@typescript-eslint/typescript-estree": "8.39.1",
"@typescript-eslint/utils": "8.39.1",
"@typescript-eslint/types": "8.46.3",
"@typescript-eslint/typescript-estree": "8.46.3",
"@typescript-eslint/utils": "8.46.3",
"debug": "^4.3.4",
"ts-api-utils": "^2.1.0"
},
@@ -4204,9 +4204,9 @@
}
},
"node_modules/eslint-plugin-react-dom/node_modules/@typescript-eslint/types": {
"version": "8.39.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.1.tgz",
"integrity": "sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==",
"version": "8.46.3",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.3.tgz",
"integrity": "sha512-G7Ok9WN/ggW7e/tOf8TQYMaxgID3Iujn231hfi0Pc7ZheztIJVpO44ekY00b7akqc6nZcvregk0Jpah3kep6hA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4218,16 +4218,16 @@
}
},
"node_modules/eslint-plugin-react-dom/node_modules/@typescript-eslint/typescript-estree": {
"version": "8.39.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.1.tgz",
"integrity": "sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==",
"version": "8.46.3",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.3.tgz",
"integrity": "sha512-f/NvtRjOm80BtNM5OQtlaBdM5BRFUv7gf381j9wygDNL+qOYSNOgtQ/DCndiYi80iIOv76QqaTmp4fa9hwI0OA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/project-service": "8.39.1",
"@typescript-eslint/tsconfig-utils": "8.39.1",
"@typescript-eslint/types": "8.39.1",
"@typescript-eslint/visitor-keys": "8.39.1",
"@typescript-eslint/project-service": "8.46.3",
"@typescript-eslint/tsconfig-utils": "8.46.3",
"@typescript-eslint/types": "8.46.3",
"@typescript-eslint/visitor-keys": "8.46.3",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
@@ -4247,16 +4247,16 @@
}
},
"node_modules/eslint-plugin-react-dom/node_modules/@typescript-eslint/utils": {
"version": "8.39.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.1.tgz",
"integrity": "sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==",
"version": "8.46.3",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.3.tgz",
"integrity": "sha512-VXw7qmdkucEx9WkmR3ld/u6VhRyKeiF1uxWwCy/iuNfokjJ7VhsgLSOTjsol8BunSw190zABzpwdNsze2Kpo4g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.7.0",
"@typescript-eslint/scope-manager": "8.39.1",
"@typescript-eslint/types": "8.39.1",
"@typescript-eslint/typescript-estree": "8.39.1"
"@typescript-eslint/scope-manager": "8.46.3",
"@typescript-eslint/types": "8.46.3",
"@typescript-eslint/typescript-estree": "8.46.3"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4271,13 +4271,13 @@
}
},
"node_modules/eslint-plugin-react-dom/node_modules/@typescript-eslint/visitor-keys": {
"version": "8.39.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.1.tgz",
"integrity": "sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A==",
"version": "8.46.3",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.3.tgz",
"integrity": "sha512-uk574k8IU0rOF/AjniX8qbLSGURJVUCeM5e4MIMKBFFi8weeiLrG1fyQejyLXQpRZbU/1BuQasleV/RfHC3hHg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.39.1",
"@typescript-eslint/types": "8.46.3",
"eslint-visitor-keys": "^4.2.1"
},
"engines": {
@@ -4315,9 +4315,9 @@
}
},
"node_modules/eslint-plugin-react-dom/node_modules/semver": {
"version": "7.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"version": "7.7.3",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
"integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"dev": true,
"license": "ISC",
"bin": {

View File

@@ -37,7 +37,7 @@
"@types/react-dom": "^19.2.2",
"@vitejs/plugin-react": "^4.7.0",
"eslint": "^9.32.0",
"eslint-plugin-react-dom": "^1.52.4",
"eslint-plugin-react-dom": "^1.53.1",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^00.4.20",
"eslint-plugin-react-x": "^1.52.9",