Switch to HCaptcha for Auth-related captchas (#2945)
* Switch to HCaptcha for Auth-related captchas * run fmt
This commit is contained in:
parent
5ab1263495
commit
b188b3feb3
@ -343,8 +343,6 @@ export default defineNuxtConfig({
|
|||||||
globalThis.CF_PAGES_COMMIT_SHA ||
|
globalThis.CF_PAGES_COMMIT_SHA ||
|
||||||
"unknown",
|
"unknown",
|
||||||
|
|
||||||
turnstile: { siteKey: "0x4AAAAAAAW3guHM6Eunbgwu" },
|
|
||||||
|
|
||||||
stripePublishableKey:
|
stripePublishableKey:
|
||||||
process.env.STRIPE_PUBLISHABLE_KEY ||
|
process.env.STRIPE_PUBLISHABLE_KEY ||
|
||||||
globalThis.STRIPE_PUBLISHABLE_KEY ||
|
globalThis.STRIPE_PUBLISHABLE_KEY ||
|
||||||
@ -362,7 +360,7 @@ export default defineNuxtConfig({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
modules: ["@vintl/nuxt", "@nuxtjs/turnstile", "@pinia/nuxt"],
|
modules: ["@vintl/nuxt", "@pinia/nuxt"],
|
||||||
vintl: {
|
vintl: {
|
||||||
defaultLocale: "en-US",
|
defaultLocale: "en-US",
|
||||||
locales: [
|
locales: [
|
||||||
|
|||||||
@ -15,7 +15,6 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@formatjs/cli": "^6.2.12",
|
"@formatjs/cli": "^6.2.12",
|
||||||
"@nuxt/devtools": "^1.3.3",
|
"@nuxt/devtools": "^1.3.3",
|
||||||
"@nuxtjs/turnstile": "^0.8.0",
|
|
||||||
"@types/dompurify": "^3.0.5",
|
"@types/dompurify": "^3.0.5",
|
||||||
"@types/node": "^20.1.0",
|
"@types/node": "^20.1.0",
|
||||||
"@vintl/compact-number": "^2.0.5",
|
"@vintl/compact-number": "^2.0.5",
|
||||||
|
|||||||
53
apps/frontend/src/components/ui/HCaptcha.vue
Normal file
53
apps/frontend/src/components/ui/HCaptcha.vue
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<script setup>
|
||||||
|
const token = defineModel();
|
||||||
|
|
||||||
|
useHead({
|
||||||
|
script: [
|
||||||
|
{
|
||||||
|
src: "https://js.hcaptcha.com/1/api.js",
|
||||||
|
async: true,
|
||||||
|
defer: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
function updateToken(newToken) {
|
||||||
|
token.value = newToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
window.updateCatpchaToken = updateToken;
|
||||||
|
});
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
reset: () => {
|
||||||
|
token.value = null;
|
||||||
|
window.hcaptcha.reset();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div
|
||||||
|
id="h-captcha"
|
||||||
|
class="h-captcha"
|
||||||
|
data-sitekey="4a7a2c80-68f2-4190-9d52-131c76e0c14e"
|
||||||
|
:data-theme="$theme.active === 'light' ? 'light' : 'dark'"
|
||||||
|
data-callback="updateCatpchaToken"
|
||||||
|
></div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.h-captcha {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
overflow: hidden;
|
||||||
|
border-radius: var(--radius-md);
|
||||||
|
border: 2px solid var(--color-button-bg);
|
||||||
|
height: 78px;
|
||||||
|
|
||||||
|
iframe {
|
||||||
|
margin: -1px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -60,20 +60,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.turnstile {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
overflow: hidden;
|
|
||||||
border-radius: var(--radius-md);
|
|
||||||
border: 2px solid var(--color-button-bg);
|
|
||||||
height: 66px;
|
|
||||||
|
|
||||||
iframe {
|
|
||||||
margin: -1px;
|
|
||||||
min-width: calc(100% + 2px);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.auth-form {
|
.auth-form {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|||||||
@ -22,12 +22,7 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<NuxtTurnstile
|
<HCaptcha ref="captcha" v-model="token" />
|
||||||
ref="turnstile"
|
|
||||||
v-model="token"
|
|
||||||
class="turnstile"
|
|
||||||
:options="{ theme: $theme.active === 'light' ? 'light' : 'dark' }"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<button class="btn btn-primary centered-btn" :disabled="!token" @click="recovery">
|
<button class="btn btn-primary centered-btn" :disabled="!token" @click="recovery">
|
||||||
<SendIcon /> {{ formatMessage(methodChoiceMessages.action) }}
|
<SendIcon /> {{ formatMessage(methodChoiceMessages.action) }}
|
||||||
@ -73,6 +68,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import { SendIcon, MailIcon, KeyIcon } from "@modrinth/assets";
|
import { SendIcon, MailIcon, KeyIcon } from "@modrinth/assets";
|
||||||
|
import HCaptcha from "@/components/ui/HCaptcha.vue";
|
||||||
|
|
||||||
const { formatMessage } = useVIntl();
|
const { formatMessage } = useVIntl();
|
||||||
|
|
||||||
@ -165,7 +161,7 @@ if (route.query.flow) {
|
|||||||
step.value = "passed_challenge";
|
step.value = "passed_challenge";
|
||||||
}
|
}
|
||||||
|
|
||||||
const turnstile = ref();
|
const captcha = ref();
|
||||||
|
|
||||||
const email = ref("");
|
const email = ref("");
|
||||||
const token = ref("");
|
const token = ref("");
|
||||||
@ -194,7 +190,7 @@ async function recovery() {
|
|||||||
text: err.data ? err.data.description : err,
|
text: err.data ? err.data.description : err,
|
||||||
type: "error",
|
type: "error",
|
||||||
});
|
});
|
||||||
turnstile.value?.reset();
|
captcha.value?.reset();
|
||||||
}
|
}
|
||||||
stopLoading();
|
stopLoading();
|
||||||
}
|
}
|
||||||
@ -227,7 +223,7 @@ async function changePassword() {
|
|||||||
text: err.data ? err.data.description : err,
|
text: err.data ? err.data.description : err,
|
||||||
type: "error",
|
type: "error",
|
||||||
});
|
});
|
||||||
turnstile.value?.reset();
|
captcha.value?.reset();
|
||||||
}
|
}
|
||||||
stopLoading();
|
stopLoading();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -81,12 +81,7 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<NuxtTurnstile
|
<HCaptcha ref="captcha" v-model="token" />
|
||||||
ref="turnstile"
|
|
||||||
v-model="token"
|
|
||||||
class="turnstile"
|
|
||||||
:options="{ theme: $theme.active === 'light' ? 'light' : 'dark' }"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<button
|
<button
|
||||||
class="btn btn-primary continue-btn centered-btn"
|
class="btn btn-primary continue-btn centered-btn"
|
||||||
@ -127,6 +122,7 @@ import {
|
|||||||
KeyIcon,
|
KeyIcon,
|
||||||
MailIcon,
|
MailIcon,
|
||||||
} from "@modrinth/assets";
|
} from "@modrinth/assets";
|
||||||
|
import HCaptcha from "@/components/ui/HCaptcha.vue";
|
||||||
|
|
||||||
const { formatMessage } = useVIntl();
|
const { formatMessage } = useVIntl();
|
||||||
|
|
||||||
@ -189,7 +185,7 @@ if (auth.value.user) {
|
|||||||
await finishSignIn();
|
await finishSignIn();
|
||||||
}
|
}
|
||||||
|
|
||||||
const turnstile = ref();
|
const captcha = ref();
|
||||||
|
|
||||||
const email = ref("");
|
const email = ref("");
|
||||||
const password = ref("");
|
const password = ref("");
|
||||||
@ -225,7 +221,7 @@ async function beginPasswordSignIn() {
|
|||||||
text: err.data ? err.data.description : err,
|
text: err.data ? err.data.description : err,
|
||||||
type: "error",
|
type: "error",
|
||||||
});
|
});
|
||||||
turnstile.value?.reset();
|
captcha.value?.reset();
|
||||||
}
|
}
|
||||||
stopLoading();
|
stopLoading();
|
||||||
}
|
}
|
||||||
@ -250,7 +246,7 @@ async function begin2FASignIn() {
|
|||||||
text: err.data ? err.data.description : err,
|
text: err.data ? err.data.description : err,
|
||||||
type: "error",
|
type: "error",
|
||||||
});
|
});
|
||||||
turnstile.value?.reset();
|
captcha.value?.reset();
|
||||||
}
|
}
|
||||||
stopLoading();
|
stopLoading();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -106,12 +106,7 @@
|
|||||||
</IntlFormatted>
|
</IntlFormatted>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<NuxtTurnstile
|
<HCaptcha ref="captcha" v-model="token" />
|
||||||
ref="turnstile"
|
|
||||||
v-model="token"
|
|
||||||
class="turnstile"
|
|
||||||
:options="{ theme: $theme.active === 'light' ? 'light' : 'dark' }"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<button
|
<button
|
||||||
class="btn btn-primary continue-btn centered-btn"
|
class="btn btn-primary continue-btn centered-btn"
|
||||||
@ -145,6 +140,7 @@ import {
|
|||||||
SSOGitLabIcon,
|
SSOGitLabIcon,
|
||||||
} from "@modrinth/assets";
|
} from "@modrinth/assets";
|
||||||
import { Checkbox } from "@modrinth/ui";
|
import { Checkbox } from "@modrinth/ui";
|
||||||
|
import HCaptcha from "@/components/ui/HCaptcha.vue";
|
||||||
|
|
||||||
const { formatMessage } = useVIntl();
|
const { formatMessage } = useVIntl();
|
||||||
|
|
||||||
@ -209,7 +205,7 @@ if (auth.value.user) {
|
|||||||
await navigateTo("/dashboard");
|
await navigateTo("/dashboard");
|
||||||
}
|
}
|
||||||
|
|
||||||
const turnstile = ref();
|
const captcha = ref();
|
||||||
|
|
||||||
const email = ref("");
|
const email = ref("");
|
||||||
const username = ref("");
|
const username = ref("");
|
||||||
@ -235,7 +231,7 @@ async function createAccount() {
|
|||||||
}),
|
}),
|
||||||
type: "error",
|
type: "error",
|
||||||
});
|
});
|
||||||
turnstile.value?.reset();
|
captcha.value?.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
const res = await useBaseFetch("auth/create", {
|
const res = await useBaseFetch("auth/create", {
|
||||||
@ -264,7 +260,7 @@ async function createAccount() {
|
|||||||
text: err.data ? err.data.description : err,
|
text: err.data ? err.data.description : err,
|
||||||
type: "error",
|
type: "error",
|
||||||
});
|
});
|
||||||
turnstile.value?.reset();
|
captcha.value?.reset();
|
||||||
}
|
}
|
||||||
stopLoading();
|
stopLoading();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -76,7 +76,7 @@ TREMENDOUS_API_KEY=none
|
|||||||
TREMENDOUS_PRIVATE_KEY=none
|
TREMENDOUS_PRIVATE_KEY=none
|
||||||
TREMENDOUS_CAMPAIGN_ID=none
|
TREMENDOUS_CAMPAIGN_ID=none
|
||||||
|
|
||||||
TURNSTILE_SECRET=none
|
HCAPTCHA_SECRET=none
|
||||||
|
|
||||||
SMTP_USERNAME=none
|
SMTP_USERNAME=none
|
||||||
SMTP_PASSWORD=none
|
SMTP_PASSWORD=none
|
||||||
|
|||||||
@ -450,7 +450,7 @@ pub fn check_env_vars() -> bool {
|
|||||||
failed |= check_var::<String>("PAYPAL_CLIENT_ID");
|
failed |= check_var::<String>("PAYPAL_CLIENT_ID");
|
||||||
failed |= check_var::<String>("PAYPAL_CLIENT_SECRET");
|
failed |= check_var::<String>("PAYPAL_CLIENT_SECRET");
|
||||||
|
|
||||||
failed |= check_var::<String>("TURNSTILE_SECRET");
|
failed |= check_var::<String>("HCAPTCHA_SECRET");
|
||||||
|
|
||||||
failed |= check_var::<String>("SMTP_USERNAME");
|
failed |= check_var::<String>("SMTP_USERNAME");
|
||||||
failed |= check_var::<String>("SMTP_PASSWORD");
|
failed |= check_var::<String>("SMTP_PASSWORD");
|
||||||
|
|||||||
@ -12,7 +12,7 @@ use crate::queue::session::AuthQueue;
|
|||||||
use crate::queue::socket::ActiveSockets;
|
use crate::queue::socket::ActiveSockets;
|
||||||
use crate::routes::internal::session::issue_session;
|
use crate::routes::internal::session::issue_session;
|
||||||
use crate::routes::ApiError;
|
use crate::routes::ApiError;
|
||||||
use crate::util::captcha::check_turnstile_captcha;
|
use crate::util::captcha::check_hcaptcha;
|
||||||
use crate::util::env::parse_strings_from_var;
|
use crate::util::env::parse_strings_from_var;
|
||||||
use crate::util::ext::get_image_ext;
|
use crate::util::ext::get_image_ext;
|
||||||
use crate::util::img::upload_image_optimized;
|
use crate::util::img::upload_image_optimized;
|
||||||
@ -1468,8 +1468,6 @@ pub struct NewAccount {
|
|||||||
pub sign_up_newsletter: Option<bool>,
|
pub sign_up_newsletter: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
const NEW_ACCOUNT_LIMITER_NAMESPACE: &str = "new_account_ips";
|
|
||||||
|
|
||||||
#[post("create")]
|
#[post("create")]
|
||||||
pub async fn create_account_with_password(
|
pub async fn create_account_with_password(
|
||||||
req: HttpRequest,
|
req: HttpRequest,
|
||||||
@ -1481,7 +1479,7 @@ pub async fn create_account_with_password(
|
|||||||
ApiError::InvalidInput(validation_errors_to_string(err, None))
|
ApiError::InvalidInput(validation_errors_to_string(err, None))
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
if !check_turnstile_captcha(&req, &new_account.challenge).await? {
|
if !check_hcaptcha(&req, &new_account.challenge).await? {
|
||||||
return Err(ApiError::Turnstile);
|
return Err(ApiError::Turnstile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1566,36 +1564,6 @@ pub async fn create_account_with_password(
|
|||||||
let session = issue_session(req, user_id, &mut transaction, &redis).await?;
|
let session = issue_session(req, user_id, &mut transaction, &redis).await?;
|
||||||
let res = crate::models::sessions::Session::from(session, true, None);
|
let res = crate::models::sessions::Session::from(session, true, None);
|
||||||
|
|
||||||
// We limit each ip to creating 5 accounts in a six hour period
|
|
||||||
let ip = crate::util::ip::convert_to_ip_v6(&res.ip).map_err(|_| {
|
|
||||||
ApiError::InvalidInput("unable to parse user ip!".to_string())
|
|
||||||
})?;
|
|
||||||
let stripped_ip = crate::util::ip::strip_ip(ip).to_string();
|
|
||||||
|
|
||||||
let mut conn = redis.connect().await?;
|
|
||||||
let uses = if let Some(res) = conn
|
|
||||||
.get(NEW_ACCOUNT_LIMITER_NAMESPACE, &stripped_ip)
|
|
||||||
.await?
|
|
||||||
{
|
|
||||||
res.parse::<u64>().unwrap_or(0)
|
|
||||||
} else {
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
if uses >= 5 {
|
|
||||||
return Err(ApiError::InvalidInput(
|
|
||||||
"IP has been rate-limited.".to_string(),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
conn.set(
|
|
||||||
NEW_ACCOUNT_LIMITER_NAMESPACE,
|
|
||||||
&stripped_ip,
|
|
||||||
&(uses + 1).to_string(),
|
|
||||||
Some(60 * 60 * 6),
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let flow = Flow::ConfirmEmail {
|
let flow = Flow::ConfirmEmail {
|
||||||
user_id,
|
user_id,
|
||||||
confirm_email: new_account.email.clone(),
|
confirm_email: new_account.email.clone(),
|
||||||
@ -1632,7 +1600,7 @@ pub async fn login_password(
|
|||||||
redis: Data<RedisPool>,
|
redis: Data<RedisPool>,
|
||||||
login: web::Json<Login>,
|
login: web::Json<Login>,
|
||||||
) -> Result<HttpResponse, ApiError> {
|
) -> Result<HttpResponse, ApiError> {
|
||||||
if !check_turnstile_captcha(&req, &login.challenge).await? {
|
if !check_hcaptcha(&req, &login.challenge).await? {
|
||||||
return Err(ApiError::Turnstile);
|
return Err(ApiError::Turnstile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2082,7 +2050,7 @@ pub async fn reset_password_begin(
|
|||||||
redis: Data<RedisPool>,
|
redis: Data<RedisPool>,
|
||||||
reset_password: web::Json<ResetPassword>,
|
reset_password: web::Json<ResetPassword>,
|
||||||
) -> Result<HttpResponse, ApiError> {
|
) -> Result<HttpResponse, ApiError> {
|
||||||
if !check_turnstile_captcha(&req, &reset_password.challenge).await? {
|
if !check_hcaptcha(&req, &reset_password.challenge).await? {
|
||||||
return Err(ApiError::Turnstile);
|
return Err(ApiError::Turnstile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,9 +2,9 @@ use crate::routes::ApiError;
|
|||||||
use crate::util::env::parse_var;
|
use crate::util::env::parse_var;
|
||||||
use actix_web::HttpRequest;
|
use actix_web::HttpRequest;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde_json::json;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
pub async fn check_turnstile_captcha(
|
pub async fn check_hcaptcha(
|
||||||
req: &HttpRequest,
|
req: &HttpRequest,
|
||||||
challenge: &str,
|
challenge: &str,
|
||||||
) -> Result<bool, ApiError> {
|
) -> Result<bool, ApiError> {
|
||||||
@ -19,6 +19,8 @@ pub async fn check_turnstile_captcha(
|
|||||||
conn_info.peer_addr()
|
conn_info.peer_addr()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let ip_addr = ip_addr.ok_or(ApiError::Turnstile)?;
|
||||||
|
|
||||||
let client = reqwest::Client::new();
|
let client = reqwest::Client::new();
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
@ -26,13 +28,16 @@ pub async fn check_turnstile_captcha(
|
|||||||
success: bool,
|
success: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut form = HashMap::new();
|
||||||
|
|
||||||
|
let secret = dotenvy::var("HCAPTCHA_SECRET")?;
|
||||||
|
form.insert("response", challenge);
|
||||||
|
form.insert("secret", &*secret);
|
||||||
|
form.insert("remoteip", ip_addr);
|
||||||
|
|
||||||
let val: Response = client
|
let val: Response = client
|
||||||
.post("https://challenges.cloudflare.com/turnstile/v0/siteverify")
|
.post("https://api.hcaptcha.com/siteverify")
|
||||||
.json(&json!({
|
.form(&form)
|
||||||
"secret": dotenvy::var("TURNSTILE_SECRET")?,
|
|
||||||
"response": challenge,
|
|
||||||
"remoteip": ip_addr,
|
|
||||||
}))
|
|
||||||
.send()
|
.send()
|
||||||
.await
|
.await
|
||||||
.map_err(|_| ApiError::Turnstile)?
|
.map_err(|_| ApiError::Turnstile)?
|
||||||
|
|||||||
141
pnpm-lock.yaml
generated
141
pnpm-lock.yaml
generated
@ -79,7 +79,7 @@ importers:
|
|||||||
version: 1.11.11
|
version: 1.11.11
|
||||||
floating-vue:
|
floating-vue:
|
||||||
specifier: ^5.2.2
|
specifier: ^5.2.2
|
||||||
version: 5.2.2(@nuxt/kit@3.12.3(magicast@0.3.5))(vue@3.4.31(typescript@5.5.4))
|
version: 5.2.2(@nuxt/kit@3.12.3)(vue@3.4.31(typescript@5.5.4))
|
||||||
ofetch:
|
ofetch:
|
||||||
specifier: ^1.3.4
|
specifier: ^1.3.4
|
||||||
version: 1.3.4
|
version: 1.3.4
|
||||||
@ -276,9 +276,6 @@ importers:
|
|||||||
'@nuxt/devtools':
|
'@nuxt/devtools':
|
||||||
specifier: ^1.3.3
|
specifier: ^1.3.3
|
||||||
version: 1.3.9(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(sass@1.77.6)(terser@5.31.6))
|
version: 1.3.9(rollup@4.18.0)(vite@5.3.3(@types/node@20.14.9)(sass@1.77.6)(terser@5.31.6))
|
||||||
'@nuxtjs/turnstile':
|
|
||||||
specifier: ^0.8.0
|
|
||||||
version: 0.8.0(magicast@0.3.4)(rollup@4.18.0)
|
|
||||||
'@types/dompurify':
|
'@types/dompurify':
|
||||||
specifier: ^3.0.5
|
specifier: ^3.0.5
|
||||||
version: 3.0.5
|
version: 3.0.5
|
||||||
@ -413,7 +410,7 @@ importers:
|
|||||||
version: 1.11.11
|
version: 1.11.11
|
||||||
floating-vue:
|
floating-vue:
|
||||||
specifier: 2.0.0-beta.24
|
specifier: 2.0.0-beta.24
|
||||||
version: 2.0.0-beta.24(@nuxt/kit@3.12.3(magicast@0.3.5)(rollup@3.29.4))(vue@3.4.31(typescript@5.5.4))
|
version: 2.0.0-beta.24(@nuxt/kit@3.12.3(rollup@3.29.4))(vue@3.4.31(typescript@5.5.4))
|
||||||
highlight.js:
|
highlight.js:
|
||||||
specifier: ^11.9.0
|
specifier: ^11.9.0
|
||||||
version: 11.9.0
|
version: 11.9.0
|
||||||
@ -441,7 +438,7 @@ importers:
|
|||||||
version: 6.2.12(@vue/compiler-core@3.4.31)(vue@3.4.31(typescript@5.5.4))
|
version: 6.2.12(@vue/compiler-core@3.4.31)(vue@3.4.31(typescript@5.5.4))
|
||||||
'@vintl/unplugin':
|
'@vintl/unplugin':
|
||||||
specifier: ^1.5.1
|
specifier: ^1.5.1
|
||||||
version: 1.5.2(@vue/compiler-core@3.4.31)(rollup@3.29.4)(vite@4.5.3(@types/node@22.4.1)(sass@1.77.6)(terser@5.31.6))(vue@3.4.31(typescript@5.5.4))(webpack@5.92.1)
|
version: 1.5.2(@vue/compiler-core@3.4.31)(rollup@3.29.4)(vite@4.5.3)(vue@3.4.31(typescript@5.5.4))(webpack@5.92.1)
|
||||||
'@vintl/vintl':
|
'@vintl/vintl':
|
||||||
specifier: ^4.4.1
|
specifier: ^4.4.1
|
||||||
version: 4.4.1(typescript@5.5.4)(vue@3.4.31(typescript@5.5.4))
|
version: 4.4.1(typescript@5.5.4)(vue@3.4.31(typescript@5.5.4))
|
||||||
@ -1917,9 +1914,6 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^8.23.0
|
eslint: ^8.23.0
|
||||||
|
|
||||||
'@nuxtjs/turnstile@0.8.0':
|
|
||||||
resolution: {integrity: sha512-m4u/fVKVKF1fz1nH8LYYXY51jGzd1ROfujh0cfiGAYtQtn9D+V3nKdHFG9iHmRtfZxqzbL6z32V0k+6YYD6iig==}
|
|
||||||
|
|
||||||
'@opentelemetry/api-logs@0.52.1':
|
'@opentelemetry/api-logs@0.52.1':
|
||||||
resolution: {integrity: sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==}
|
resolution: {integrity: sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==}
|
||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
@ -9592,6 +9586,34 @@ snapshots:
|
|||||||
- supports-color
|
- supports-color
|
||||||
- typescript
|
- typescript
|
||||||
|
|
||||||
|
'@nuxt/kit@3.12.3':
|
||||||
|
dependencies:
|
||||||
|
'@nuxt/schema': 3.12.3
|
||||||
|
c12: 1.11.1(magicast@0.3.4)
|
||||||
|
consola: 3.2.3
|
||||||
|
defu: 6.1.4
|
||||||
|
destr: 2.0.3
|
||||||
|
globby: 14.0.2
|
||||||
|
hash-sum: 2.0.0
|
||||||
|
ignore: 5.3.1
|
||||||
|
jiti: 1.21.6
|
||||||
|
klona: 2.0.6
|
||||||
|
knitwork: 1.1.0
|
||||||
|
mlly: 1.7.1
|
||||||
|
pathe: 1.1.2
|
||||||
|
pkg-types: 1.1.3
|
||||||
|
scule: 1.3.0
|
||||||
|
semver: 7.6.2
|
||||||
|
ufo: 1.5.3
|
||||||
|
unctx: 2.3.1
|
||||||
|
unimport: 3.7.2
|
||||||
|
untyped: 1.4.2
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- magicast
|
||||||
|
- rollup
|
||||||
|
- supports-color
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@nuxt/kit@3.12.3(magicast@0.3.4)(rollup@4.18.0)':
|
'@nuxt/kit@3.12.3(magicast@0.3.4)(rollup@4.18.0)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nuxt/schema': 3.12.3(rollup@4.18.0)
|
'@nuxt/schema': 3.12.3(rollup@4.18.0)
|
||||||
@ -9619,38 +9641,10 @@ snapshots:
|
|||||||
- rollup
|
- rollup
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@nuxt/kit@3.12.3(magicast@0.3.5)':
|
'@nuxt/kit@3.12.3(rollup@3.29.4)':
|
||||||
dependencies:
|
|
||||||
'@nuxt/schema': 3.12.3
|
|
||||||
c12: 1.11.1(magicast@0.3.5)
|
|
||||||
consola: 3.2.3
|
|
||||||
defu: 6.1.4
|
|
||||||
destr: 2.0.3
|
|
||||||
globby: 14.0.2
|
|
||||||
hash-sum: 2.0.0
|
|
||||||
ignore: 5.3.1
|
|
||||||
jiti: 1.21.6
|
|
||||||
klona: 2.0.6
|
|
||||||
knitwork: 1.1.0
|
|
||||||
mlly: 1.7.1
|
|
||||||
pathe: 1.1.2
|
|
||||||
pkg-types: 1.1.3
|
|
||||||
scule: 1.3.0
|
|
||||||
semver: 7.6.2
|
|
||||||
ufo: 1.5.3
|
|
||||||
unctx: 2.3.1
|
|
||||||
unimport: 3.7.2
|
|
||||||
untyped: 1.4.2
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- magicast
|
|
||||||
- rollup
|
|
||||||
- supports-color
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
'@nuxt/kit@3.12.3(magicast@0.3.5)(rollup@3.29.4)':
|
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nuxt/schema': 3.12.3(rollup@3.29.4)
|
'@nuxt/schema': 3.12.3(rollup@3.29.4)
|
||||||
c12: 1.11.1(magicast@0.3.5)
|
c12: 1.11.1(magicast@0.3.4)
|
||||||
consola: 3.2.3
|
consola: 3.2.3
|
||||||
defu: 6.1.4
|
defu: 6.1.4
|
||||||
destr: 2.0.3
|
destr: 2.0.3
|
||||||
@ -9814,7 +9808,7 @@ snapshots:
|
|||||||
|
|
||||||
'@nuxtjs/eslint-config-typescript@12.1.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3)':
|
'@nuxtjs/eslint-config-typescript@12.1.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nuxtjs/eslint-config': 12.0.0(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@1.21.6))
|
'@nuxtjs/eslint-config': 12.0.0(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@9.13.0(jiti@1.21.6)))(eslint@9.13.0(jiti@1.21.6))
|
||||||
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3)
|
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3)
|
||||||
'@typescript-eslint/parser': 6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3)
|
'@typescript-eslint/parser': 6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3)
|
||||||
eslint: 9.13.0(jiti@1.21.6)
|
eslint: 9.13.0(jiti@1.21.6)
|
||||||
@ -9827,10 +9821,10 @@ snapshots:
|
|||||||
- supports-color
|
- supports-color
|
||||||
- typescript
|
- typescript
|
||||||
|
|
||||||
'@nuxtjs/eslint-config@12.0.0(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@1.21.6))':
|
'@nuxtjs/eslint-config@12.0.0(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@9.13.0(jiti@1.21.6)))(eslint@9.13.0(jiti@1.21.6))':
|
||||||
dependencies:
|
dependencies:
|
||||||
eslint: 9.13.0(jiti@1.21.6)
|
eslint: 9.13.0(jiti@1.21.6)
|
||||||
eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@15.7.0(eslint@9.13.0(jiti@1.21.6)))(eslint-plugin-promise@6.4.0(eslint@9.13.0(jiti@1.21.6)))(eslint@9.13.0(jiti@1.21.6))
|
eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@1.21.6)))(eslint-plugin-n@15.7.0(eslint@9.13.0(jiti@1.21.6)))(eslint-plugin-promise@6.4.0(eslint@9.13.0(jiti@1.21.6)))(eslint@9.13.0(jiti@1.21.6))
|
||||||
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@1.21.6))
|
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@1.21.6))
|
||||||
eslint-plugin-n: 15.7.0(eslint@9.13.0(jiti@1.21.6))
|
eslint-plugin-n: 15.7.0(eslint@9.13.0(jiti@1.21.6))
|
||||||
eslint-plugin-node: 11.1.0(eslint@9.13.0(jiti@1.21.6))
|
eslint-plugin-node: 11.1.0(eslint@9.13.0(jiti@1.21.6))
|
||||||
@ -9844,16 +9838,6 @@ snapshots:
|
|||||||
- eslint-import-resolver-webpack
|
- eslint-import-resolver-webpack
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@nuxtjs/turnstile@0.8.0(magicast@0.3.4)(rollup@4.18.0)':
|
|
||||||
dependencies:
|
|
||||||
'@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0)
|
|
||||||
defu: 6.1.4
|
|
||||||
pathe: 1.1.2
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- magicast
|
|
||||||
- rollup
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
'@opentelemetry/api-logs@0.52.1':
|
'@opentelemetry/api-logs@0.52.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@opentelemetry/api': 1.9.0
|
'@opentelemetry/api': 1.9.0
|
||||||
@ -10224,13 +10208,6 @@ snapshots:
|
|||||||
estree-walker: 2.0.2
|
estree-walker: 2.0.2
|
||||||
picomatch: 2.3.1
|
picomatch: 2.3.1
|
||||||
|
|
||||||
'@rollup/pluginutils@5.1.0':
|
|
||||||
dependencies:
|
|
||||||
'@types/estree': 1.0.5
|
|
||||||
estree-walker: 2.0.2
|
|
||||||
picomatch: 2.3.1
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
'@rollup/pluginutils@5.1.0(rollup@3.29.4)':
|
'@rollup/pluginutils@5.1.0(rollup@3.29.4)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/estree': 1.0.5
|
'@types/estree': 1.0.5
|
||||||
@ -10966,7 +10943,7 @@ snapshots:
|
|||||||
- vue
|
- vue
|
||||||
- webpack
|
- webpack
|
||||||
|
|
||||||
'@vintl/unplugin@1.5.2(@vue/compiler-core@3.4.31)(rollup@3.29.4)(vite@4.5.3(@types/node@22.4.1)(sass@1.77.6)(terser@5.31.6))(vue@3.4.31(typescript@5.5.4))(webpack@5.92.1)':
|
'@vintl/unplugin@1.5.2(@vue/compiler-core@3.4.31)(rollup@3.29.4)(vite@4.5.3)(vue@3.4.31(typescript@5.5.4))(webpack@5.92.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@formatjs/cli-lib': 6.4.2(@vue/compiler-core@3.4.31)(vue@3.4.31(typescript@5.5.4))
|
'@formatjs/cli-lib': 6.4.2(@vue/compiler-core@3.4.31)(vue@3.4.31(typescript@5.5.4))
|
||||||
'@formatjs/icu-messageformat-parser': 2.7.8
|
'@formatjs/icu-messageformat-parser': 2.7.8
|
||||||
@ -10977,7 +10954,7 @@ snapshots:
|
|||||||
unplugin: 1.11.0
|
unplugin: 1.11.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
rollup: 3.29.4
|
rollup: 3.29.4
|
||||||
vite: 4.5.3(@types/node@22.4.1)(sass@1.77.6)(terser@5.31.6)
|
vite: 4.5.3
|
||||||
webpack: 5.92.1
|
webpack: 5.92.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@glimmer/env'
|
- '@glimmer/env'
|
||||||
@ -11904,24 +11881,6 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
magicast: 0.3.4
|
magicast: 0.3.4
|
||||||
|
|
||||||
c12@1.11.1(magicast@0.3.5):
|
|
||||||
dependencies:
|
|
||||||
chokidar: 3.6.0
|
|
||||||
confbox: 0.1.7
|
|
||||||
defu: 6.1.4
|
|
||||||
dotenv: 16.4.5
|
|
||||||
giget: 1.2.3
|
|
||||||
jiti: 1.21.6
|
|
||||||
mlly: 1.7.1
|
|
||||||
ohash: 1.1.3
|
|
||||||
pathe: 1.1.2
|
|
||||||
perfect-debounce: 1.0.0
|
|
||||||
pkg-types: 1.1.3
|
|
||||||
rc9: 2.1.2
|
|
||||||
optionalDependencies:
|
|
||||||
magicast: 0.3.5
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
cac@6.7.14: {}
|
cac@6.7.14: {}
|
||||||
|
|
||||||
call-bind@1.0.7:
|
call-bind@1.0.7:
|
||||||
@ -12637,10 +12596,10 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
eslint: 9.13.0(jiti@1.21.6)
|
eslint: 9.13.0(jiti@1.21.6)
|
||||||
|
|
||||||
eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@15.7.0(eslint@9.13.0(jiti@1.21.6)))(eslint-plugin-promise@6.4.0(eslint@9.13.0(jiti@1.21.6)))(eslint@9.13.0(jiti@1.21.6)):
|
eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@1.21.6)))(eslint-plugin-n@15.7.0(eslint@9.13.0(jiti@1.21.6)))(eslint-plugin-promise@6.4.0(eslint@9.13.0(jiti@1.21.6)))(eslint@9.13.0(jiti@1.21.6)):
|
||||||
dependencies:
|
dependencies:
|
||||||
eslint: 9.13.0(jiti@1.21.6)
|
eslint: 9.13.0(jiti@1.21.6)
|
||||||
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.16.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint@9.13.0(jiti@1.21.6))
|
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@1.21.6))
|
||||||
eslint-plugin-n: 15.7.0(eslint@9.13.0(jiti@1.21.6))
|
eslint-plugin-n: 15.7.0(eslint@9.13.0(jiti@1.21.6))
|
||||||
eslint-plugin-promise: 6.4.0(eslint@9.13.0(jiti@1.21.6))
|
eslint-plugin-promise: 6.4.0(eslint@9.13.0(jiti@1.21.6))
|
||||||
|
|
||||||
@ -12666,7 +12625,7 @@ snapshots:
|
|||||||
debug: 4.3.5
|
debug: 4.3.5
|
||||||
enhanced-resolve: 5.17.0
|
enhanced-resolve: 5.17.0
|
||||||
eslint: 9.13.0(jiti@1.21.6)
|
eslint: 9.13.0(jiti@1.21.6)
|
||||||
eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@1.21.6))
|
eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@9.13.0(jiti@1.21.6)))(eslint@9.13.0(jiti@1.21.6))
|
||||||
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.16.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint@9.13.0(jiti@1.21.6))
|
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.16.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint@9.13.0(jiti@1.21.6))
|
||||||
fast-glob: 3.3.2
|
fast-glob: 3.3.2
|
||||||
get-tsconfig: 4.7.5
|
get-tsconfig: 4.7.5
|
||||||
@ -12678,12 +12637,13 @@ snapshots:
|
|||||||
- eslint-import-resolver-webpack
|
- eslint-import-resolver-webpack
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@9.13.0(jiti@1.21.6)):
|
eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@9.13.0(jiti@1.21.6)))(eslint@9.13.0(jiti@1.21.6)):
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 3.2.7
|
debug: 3.2.7
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@typescript-eslint/parser': 6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3)
|
'@typescript-eslint/parser': 6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3)
|
||||||
eslint: 9.13.0(jiti@1.21.6)
|
eslint: 9.13.0(jiti@1.21.6)
|
||||||
|
eslint-import-resolver-node: 0.3.9
|
||||||
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@9.13.0(jiti@1.21.6))
|
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@9.13.0(jiti@1.21.6))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@ -13266,21 +13226,21 @@ snapshots:
|
|||||||
vue: 3.4.31(typescript@5.5.3)
|
vue: 3.4.31(typescript@5.5.3)
|
||||||
vue-resize: 2.0.0-alpha.1(vue@3.4.31(typescript@5.5.3))
|
vue-resize: 2.0.0-alpha.1(vue@3.4.31(typescript@5.5.3))
|
||||||
|
|
||||||
floating-vue@2.0.0-beta.24(@nuxt/kit@3.12.3(magicast@0.3.5)(rollup@3.29.4))(vue@3.4.31(typescript@5.5.4)):
|
floating-vue@2.0.0-beta.24(@nuxt/kit@3.12.3(rollup@3.29.4))(vue@3.4.31(typescript@5.5.4)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@floating-ui/dom': 1.1.1
|
'@floating-ui/dom': 1.1.1
|
||||||
vue: 3.4.31(typescript@5.5.4)
|
vue: 3.4.31(typescript@5.5.4)
|
||||||
vue-resize: 2.0.0-alpha.1(vue@3.4.31(typescript@5.5.4))
|
vue-resize: 2.0.0-alpha.1(vue@3.4.31(typescript@5.5.4))
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@nuxt/kit': 3.12.3(magicast@0.3.5)(rollup@3.29.4)
|
'@nuxt/kit': 3.12.3(rollup@3.29.4)
|
||||||
|
|
||||||
floating-vue@5.2.2(@nuxt/kit@3.12.3(magicast@0.3.5))(vue@3.4.31(typescript@5.5.4)):
|
floating-vue@5.2.2(@nuxt/kit@3.12.3)(vue@3.4.31(typescript@5.5.4)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@floating-ui/dom': 1.1.1
|
'@floating-ui/dom': 1.1.1
|
||||||
vue: 3.4.31(typescript@5.5.4)
|
vue: 3.4.31(typescript@5.5.4)
|
||||||
vue-resize: 2.0.0-alpha.1(vue@3.4.31(typescript@5.5.4))
|
vue-resize: 2.0.0-alpha.1(vue@3.4.31(typescript@5.5.4))
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@nuxt/kit': 3.12.3(magicast@0.3.5)
|
'@nuxt/kit': 3.12.3
|
||||||
|
|
||||||
for-each@0.3.3:
|
for-each@0.3.3:
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -16789,7 +16749,7 @@ snapshots:
|
|||||||
|
|
||||||
unimport@3.7.2:
|
unimport@3.7.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@rollup/pluginutils': 5.1.0
|
'@rollup/pluginutils': 5.1.0(rollup@4.18.0)
|
||||||
acorn: 8.12.1
|
acorn: 8.12.1
|
||||||
escape-string-regexp: 5.0.0
|
escape-string-regexp: 5.0.0
|
||||||
estree-walker: 3.0.3
|
estree-walker: 3.0.3
|
||||||
@ -17099,16 +17059,13 @@ snapshots:
|
|||||||
svgo: 3.3.2
|
svgo: 3.3.2
|
||||||
vue: 3.4.31(typescript@5.5.4)
|
vue: 3.4.31(typescript@5.5.4)
|
||||||
|
|
||||||
vite@4.5.3(@types/node@22.4.1)(sass@1.77.6)(terser@5.31.6):
|
vite@4.5.3:
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild: 0.18.20
|
esbuild: 0.18.20
|
||||||
postcss: 8.4.45
|
postcss: 8.4.45
|
||||||
rollup: 3.29.4
|
rollup: 3.29.4
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@types/node': 22.4.1
|
|
||||||
fsevents: 2.3.3
|
fsevents: 2.3.3
|
||||||
sass: 1.77.6
|
|
||||||
terser: 5.31.6
|
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
vite@5.3.3(@types/node@20.14.9)(sass@1.77.6)(terser@5.31.6):
|
vite@5.3.3(@types/node@20.14.9)(sass@1.77.6)(terser@5.31.6):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user