docs: v1.2 release notes (#1602)

This commit is contained in:
Bereket Engida
2025-03-01 02:22:32 +03:00
committed by GitHub
parent 015a43b254
commit 86cbf70684
19 changed files with 1086 additions and 276 deletions

View File

@@ -5,28 +5,51 @@ import {
Card, Card,
CardContent, CardContent,
CardDescription, CardDescription,
CardFooter,
CardHeader, CardHeader,
CardTitle, CardTitle,
} from "@/components/ui/card"; } from "@/components/ui/card";
import { Checkbox } from "@/components/ui/checkbox";
import { Input } from "@/components/ui/input"; import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label"; import { Label } from "@/components/ui/label";
import { PasswordInput } from "@/components/ui/password-input"; import { PasswordInput } from "@/components/ui/password-input";
import { signIn } from "@/lib/auth-client"; import { signIn } from "@/lib/auth-client";
import { DiscordLogoIcon, GitHubLogoIcon } from "@radix-ui/react-icons"; import { DiscordLogoIcon, GitHubLogoIcon } from "@radix-ui/react-icons";
import { Key, Loader2 } from "lucide-react"; import { Loader2 } from "lucide-react";
import Link from "next/link"; import Link from "next/link";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { useState } from "react"; import { useState, useEffect } from "react";
import { toast } from "sonner"; import { toast } from "sonner";
import { z } from "zod";
const signInSchema = z.object({
email: z.string().email("Invalid email address"),
password: z.string().min(8, "Password must be at least 8 characters"),
});
export default function SignIn() { export default function SignIn() {
const [email, setEmail] = useState(""); const [email, setEmail] = useState("");
const [password, setPassword] = useState(""); const [password, setPassword] = useState("");
const [rememberMe, setRememberMe] = useState(false); const [rememberMe, setRememberMe] = useState(false);
const [errors, setErrors] = useState({ email: "", password: "" });
const [isValid, setIsValid] = useState(false);
const [touched, setTouched] = useState({ email: false, password: false });
const router = useRouter(); const router = useRouter();
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
useEffect(() => {
const validationResult = signInSchema.safeParse({ email, password });
if (!validationResult.success) {
const newErrors: any = {};
validationResult.error.errors.forEach((err) => {
newErrors[err.path[0]] = err.message;
});
setErrors(newErrors);
setIsValid(false);
} else {
setErrors({ email: "", password: "" });
setIsValid(true);
}
}, [email, password]);
return ( return (
<Card className="z-50 rounded-md rounded-t-none max-w-md"> <Card className="z-50 rounded-md rounded-t-none max-w-md">
<CardHeader> <CardHeader>
@@ -46,9 +69,13 @@ export default function SignIn() {
required required
onChange={(e) => { onChange={(e) => {
setEmail(e.target.value); setEmail(e.target.value);
setTouched((prev) => ({ ...prev, email: true }));
}} }}
value={email} value={email}
/> />
{touched.email && errors.email && (
<p className="text-red-500 text-sm">{errors.email}</p>
)}
</div> </div>
<div className="grid gap-2"> <div className="grid gap-2">
<div className="flex items-center"> <div className="flex items-center">
@@ -63,24 +90,21 @@ export default function SignIn() {
<PasswordInput <PasswordInput
id="password" id="password"
value={password} value={password}
onChange={(e) => setPassword(e.target.value)} onChange={(e) => {
setPassword(e.target.value);
setTouched((prev) => ({ ...prev, password: true }));
}}
autoComplete="password" autoComplete="password"
placeholder="Password" placeholder="Password"
/> />
{touched.password && errors.password && (
<p className="text-red-500 text-sm">{errors.password}</p>
)}
</div> </div>
<div className="flex items-center gap-2">
<Checkbox
onClick={() => {
setRememberMe(!rememberMe);
}}
/>
<Label>Remember me</Label>
</div>
<Button <Button
type="submit" type="submit"
className="w-full" className="w-full"
disabled={loading} disabled={!isValid || loading}
onClick={async () => { onClick={async () => {
await signIn.email( await signIn.email(
{ {
@@ -90,21 +114,16 @@ export default function SignIn() {
rememberMe, rememberMe,
}, },
{ {
onRequest: () => { onRequest: () => setLoading(true),
setLoading(true); onResponse: () => setLoading(false),
}, onError: (ctx) => toast.error(ctx.error.message),
onResponse: () => {
setLoading(false);
},
onError: (ctx) => {
toast.error(ctx.error.message);
},
}, },
); );
}} }}
> >
{loading ? <Loader2 size={16} className="animate-spin" /> : "Login"} {loading ? <Loader2 size={16} className="animate-spin" /> : "Login"}
</Button> </Button>
<div className="grid grid-cols-4 gap-2"> <div className="grid grid-cols-4 gap-2">
<Button <Button
variant="outline" variant="outline"
@@ -262,34 +281,8 @@ export default function SignIn() {
</svg> </svg>
</Button> </Button>
</div> </div>
<Button
variant="outline"
className="gap-2"
onClick={async () => {
await signIn.passkey({
fetchOptions: {
onSuccess(context) {
router.push("/dashboard");
},
onError(context) {
toast.error(context.error.message);
},
},
});
}}
>
<Key size={16} />
Sign-in with Passkey
</Button>
</div> </div>
</CardContent> </CardContent>
<CardFooter>
<div className="flex justify-center w-full border-t py-4">
<p className="text-center text-xs text-neutral-500">
Secured by <span className="text-orange-400">better-auth.</span>
</p>
</div>
</CardFooter>
</Card> </Card>
); );
} }

View File

@@ -1,48 +1,102 @@
"use client"; "use client";
import Image from "next/image";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { import {
Card, Card,
CardContent, CardContent,
CardDescription, CardDescription,
CardFooter,
CardHeader, CardHeader,
CardTitle, CardTitle,
} from "@/components/ui/card"; } from "@/components/ui/card";
import { toast } from "sonner";
import { Input } from "@/components/ui/input"; import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label"; import { Label } from "@/components/ui/label";
import { PasswordInput } from "@/components/ui/password-input"; import { PasswordInput } from "@/components/ui/password-input";
import { DiscordLogoIcon, GitHubLogoIcon } from "@radix-ui/react-icons"; import { signUp, signIn } from "@/lib/auth-client";
import { useState } from "react";
import { signIn, signUp } from "@/lib/auth-client";
import Image from "next/image";
import { Loader2, X } from "lucide-react";
import { toast } from "sonner";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { useState, useEffect, ChangeEvent } from "react";
import { z } from "zod";
import { DiscordLogoIcon, GitHubLogoIcon } from "@radix-ui/react-icons";
import { Loader2, X } from "lucide-react";
const signUpSchema = z
.object({
firstName: z.string().min(1, "First name is required"),
lastName: z.string().min(1, "Last name is required"),
email: z.string().email("Invalid email address"),
image: z
.instanceof(File)
.optional()
.refine((file) => !file || file.type.startsWith("image/"), {
message: "Invalid file type. Only images are allowed.",
path: ["image"],
}),
password: z.string().min(6, "Password must be at least 6 characters"),
passwordConfirmation: z
.string()
.min(6, "Password must be at least 6 characters"),
})
.refine((data) => data.password === data.passwordConfirmation, {
message: "Passwords do not match",
path: ["passwordConfirmation"],
});
type FormDataType = z.infer<typeof signUpSchema>;
type ErrorsType = Partial<Record<keyof FormDataType, string>>;
type TouchedType = Partial<Record<keyof FormDataType, boolean>>;
export function SignUp() { export function SignUp() {
const [firstName, setFirstName] = useState(""); const [formData, setFormData] = useState<FormDataType>({
const [lastName, setLastName] = useState(""); firstName: "",
const [email, setEmail] = useState(""); lastName: "",
const [password, setPassword] = useState(""); email: "",
const [passwordConfirmation, setPasswordConfirmation] = useState(""); password: "",
image: undefined,
passwordConfirmation: "",
});
const [errors, setErrors] = useState<ErrorsType>({});
const [isValid, setIsValid] = useState(false);
const [touched, setTouched] = useState<TouchedType>({});
const [loading, setLoading] = useState(false);
const [image, setImage] = useState<File | null>(null); const [image, setImage] = useState<File | null>(null);
const [imagePreview, setImagePreview] = useState<string | null>(null); const [imagePreview, setImagePreview] = useState<string | null>(null);
const router = useRouter(); const router = useRouter();
const handleImageChange = (e: React.ChangeEvent<HTMLInputElement>) => { useEffect(() => {
const file = e.target.files?.[0]; const validationResult = signUpSchema.safeParse(formData);
if (!validationResult.success) {
const newErrors: ErrorsType = {};
validationResult.error.errors.forEach((err) => {
if (err.path[0])
newErrors[err.path[0] as keyof FormDataType] = err.message;
});
setErrors(newErrors);
setIsValid(false);
} else {
setErrors({});
setIsValid(true);
}
}, [formData]);
const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
const { id, value } = e.target;
setFormData((prev) => ({ ...prev, [id]: value }));
setTouched((prev) => ({ ...prev, [id]: true }));
};
const handleImageChange = (e: ChangeEvent<HTMLInputElement>) => {
const file = e.target.files?.[0] || null;
setImage(file);
setFormData((prev) => ({ ...prev, image: file || undefined }));
if (file) { if (file) {
setImage(file);
const reader = new FileReader(); const reader = new FileReader();
reader.onloadend = () => { reader.onload = () => setImagePreview(reader.result as string);
setImagePreview(reader.result as string);
};
reader.readAsDataURL(file); reader.readAsDataURL(file);
} else {
setImagePreview(null);
} }
}; };
const [loading, setLoading] = useState(false);
return ( return (
<Card className="z-50 rounded-md rounded-t-none max-w-md"> <Card className="z-50 rounded-md rounded-t-none max-w-md">
<CardHeader> <CardHeader>
@@ -55,28 +109,28 @@ export function SignUp() {
<div className="grid gap-4"> <div className="grid gap-4">
<div className="grid grid-cols-2 gap-4"> <div className="grid grid-cols-2 gap-4">
<div className="grid gap-2"> <div className="grid gap-2">
<Label htmlFor="first-name">First name</Label> <Label htmlFor="firstName">First name</Label>
<Input <Input
id="first-name" id="firstName"
placeholder="Max" placeholder="Max"
required value={formData.firstName}
onChange={(e) => { onChange={handleChange}
setFirstName(e.target.value);
}}
value={firstName}
/> />
{touched.firstName && errors.firstName && (
<p className="text-red-500 text-sm">{errors.firstName}</p>
)}
</div> </div>
<div className="grid gap-2"> <div className="grid gap-2">
<Label htmlFor="last-name">Last name</Label> <Label htmlFor="lastName">Last name</Label>
<Input <Input
id="last-name" id="lastName"
placeholder="Robinson" placeholder="Robinson"
required value={formData.lastName}
onChange={(e) => { onChange={handleChange}
setLastName(e.target.value);
}}
value={lastName}
/> />
{touched.lastName && errors.lastName && (
<p className="text-red-500 text-sm">{errors.lastName}</p>
)}
</div> </div>
</div> </div>
<div className="grid gap-2"> <div className="grid gap-2">
@@ -85,32 +139,38 @@ export function SignUp() {
id="email" id="email"
type="email" type="email"
placeholder="m@example.com" placeholder="m@example.com"
required value={formData.email}
onChange={(e) => { onChange={handleChange}
setEmail(e.target.value);
}}
value={email}
/> />
{touched.email && errors.email && (
<p className="text-red-500 text-sm">{errors.email}</p>
)}
</div> </div>
<div className="grid gap-2"> <div className="grid gap-2">
<Label htmlFor="password">Password</Label> <Label htmlFor="password">Password</Label>
<PasswordInput <PasswordInput
id="password" id="password"
value={password} value={formData.password}
onChange={(e) => setPassword(e.target.value)} onChange={handleChange}
autoComplete="new-password"
placeholder="Password" placeholder="Password"
/> />
{touched.password && errors.password && (
<p className="text-red-500 text-sm">{errors.password}</p>
)}
</div> </div>
<div className="grid gap-2"> <div className="grid gap-2">
<Label htmlFor="password">Confirm Password</Label> <Label htmlFor="passwordConfirmation">Confirm Password</Label>
<PasswordInput <PasswordInput
id="password_confirmation" id="passwordConfirmation"
value={passwordConfirmation} value={formData.passwordConfirmation}
onChange={(e) => setPasswordConfirmation(e.target.value)} onChange={handleChange}
autoComplete="new-password"
placeholder="Confirm Password" placeholder="Confirm Password"
/> />
{touched.passwordConfirmation && errors.passwordConfirmation && (
<p className="text-red-500 text-sm">
{errors.passwordConfirmation}
</p>
)}
</div> </div>
<div className="grid gap-2"> <div className="grid gap-2">
<Label htmlFor="image">Profile Image (optional)</Label> <Label htmlFor="image">Profile Image (optional)</Label>
@@ -125,42 +185,36 @@ export function SignUp() {
/> />
</div> </div>
)} )}
<div className="flex items-center gap-2 w-full"> <Input
<Input id="image"
id="image" type="file"
type="file" accept="image/*"
accept="image/*" onChange={handleImageChange}
onChange={handleImageChange} className="w-full"
className="w-full" />
{imagePreview && (
<X
className="cursor-pointer"
onClick={() => {
setImage(null);
setImagePreview(null);
}}
/> />
{imagePreview && ( )}
<X
className="cursor-pointer"
onClick={() => {
setImage(null);
setImagePreview(null);
}}
/>
)}
</div>
</div> </div>
</div> </div>
<Button <Button
type="submit"
className="w-full" className="w-full"
disabled={loading} disabled={!isValid || loading}
onClick={async () => { onClick={async () => {
if (password !== passwordConfirmation) { setLoading(true);
toast.error(
"Please ensure your password and confirm password match.",
);
return;
}
await signUp.email({ await signUp.email({
email, email: formData.email,
password, password: formData.password,
name: `${firstName} ${lastName}`, name: `${formData.firstName} ${formData.lastName}`,
image: image ? await convertImageToBase64(image) : "", image: formData.image
? await convertImageToBase64(formData.image)
: "",
callbackURL: "/dashboard", callbackURL: "/dashboard",
fetchOptions: { fetchOptions: {
onResponse: () => { onResponse: () => {
@@ -177,6 +231,8 @@ export function SignUp() {
}, },
}, },
}); });
setLoading(false);
router.push("/dashboard");
}} }}
> >
{loading ? ( {loading ? (
@@ -269,17 +325,9 @@ export function SignUp() {
</div> </div>
</div> </div>
</CardContent> </CardContent>
<CardFooter>
<div className="flex justify-center w-full border-t py-4">
<p className="text-center text-xs text-neutral-500">
Secured by <span className="text-orange-400">better-auth.</span>
</p>
</div>
</CardFooter>
</Card> </Card>
); );
} }
async function convertImageToBase64(file: File): Promise<string> { async function convertImageToBase64(file: File): Promise<string> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const reader = new FileReader(); const reader = new FileReader();

View File

@@ -0,0 +1,173 @@
import { ImageResponse } from "@vercel/og";
import { z } from "zod";
export const runtime = "edge";
const ogSchema = z.object({
heading: z.string(),
description: z.string().optional(),
date: z.string().optional(),
});
export async function GET(req: Request) {
try {
const geist = await fetch(
new URL("../../../assets/Geist.ttf", import.meta.url),
).then((res) => res.arrayBuffer());
const url = new URL(req.url);
const urlParamsValues = Object.fromEntries(url.searchParams);
const validParams = ogSchema.parse(urlParamsValues);
const { heading, description, date } = validParams;
const trueHeading =
heading.length > 140 ? `${heading.substring(0, 140)}...` : heading;
return new ImageResponse(
(
<div
tw="flex w-full h-full relative flex-col"
style={{
background:
"radial-gradient(circle 230px at 0% 0%, #000000, #000000)",
fontFamily: "Geist",
color: "white",
}}
>
<div
tw="flex w-full h-full relative"
style={{
borderRadius: "10px",
border: "1px solid rgba(32, 34, 34, 0.5)",
}}
>
<div
tw="absolute"
style={{
width: "350px",
height: "120px",
borderRadius: "100px",
background: "#c7c7c7",
opacity: 0.21,
filter: "blur(35px)",
transform: "rotate(50deg)",
top: "18%",
// zIndex: 999,
left: "0%",
}}
/>
<div
tw="flex flex-col w-full relative h-full p-8"
style={{
gap: "14px",
position: "relative",
zIndex: 999,
}}
>
<div
tw="absolute bg-repeat w-full h-full"
style={{
width: "100%",
height: "100%",
zIndex: 999,
background:
"url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOnN2Z2pzPSJodHRwOi8vc3ZnanMuZGV2L3N2Z2pzIiB2aWV3Qm94PSIwIDAgODAwIDgwMCIgd2lkdGg9IjgwMCIgaGVpZ2h0PSI4MDAiPjxnIHN0cm9rZS13aWR0aD0iMy41IiBzdHJva2U9ImhzbGEoMCwgMCUsIDEwMCUsIDEuMDApIiBmaWxsPSJub25lIiBvcGFjaXR5PSIwLjUiPjxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIiB4PSIwIiB5PSIwIiBvcGFjaXR5PSIwLjE1Ij48L3JlY3Q+PGNpcmNsZSByPSIxMC44NTUyNjMxNTc4OTQ3MzYiIGN4PSIwIiBjeT0iMCIgZmlsbD0iaHNsYSgwLCAwJSwgMTAwJSwgMS4wMCkiIHN0cm9rZT0ibm9uZSI+PC9jaXJjbGU+PHJlY3Qgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiIHg9IjQwMCIgeT0iMCIgb3BhY2l0eT0iMC4xNSI+PC9yZWN0PjxjaXJjbGUgcj0iMTAuODU1MjYzMTU3ODk0NzM2IiBjeD0iNDAwIiBjeT0iMCIgZmlsbD0iaHNsYSgwLCAwJSwgMTAwJSwgMS4wMCkiIHN0cm9rZT0ibm9uZSI+PC9jaXJjbGU+PHJlY3Qgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiIHg9IjgwMCIgeT0iMCIgb3BhY2l0eT0iMC4xNSI+PC9yZWN0PjxjaXJjbGUgcj0iMTAuODU1MjYzMTU3ODk0NzM2IiBjeD0iODAwIiBjeT0iMCIgZmlsbD0iaHNsYSgwLCAwJSwgMTAwJSwgMS4wMCkiIHN0cm9rZT0ibm9uZSI+PC9jaXJjbGU+PHJlY3Qgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiIHg9IjAiIHk9IjQwMCIgb3BhY2l0eT0iMC4xNSI+PC9yZWN0PjxjaXJjbGUgcj0iMTAuODU1MjYzMTU3ODk0NzM2IiBjeD0iMCIgY3k9IjQwMCIgZmlsbD0iaHNsYSgwLCAwJSwgMTAwJSwgMS4wMCkiIHN0cm9rZT0ibm9uZSI+PC9jaXJjbGU+PHJlY3Qgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiIHg9IjQwMCIgeT0iNDAwIiBvcGFjaXR5PSIwLjE1Ij48L3JlY3Q+PGNpcmNsZSByPSIxMC44NTUyNjMxNTc4OTQ3MzYiIGN4PSI0MDAiIGN5PSI0MDAiIGZpbGw9ImhzbGEoMCwgMCUsIDEwMCUsIDEuMDApIiBzdHJva2U9Im5vbmUiPjwvY2lyY2xlPjxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIiB4PSI4MDAiIHk9IjQwMCIgb3BhY2l0eT0iMC4xNSI+PC9yZWN0PjxjaXJjbGUgcj0iMTAuODU1MjYzMTU3ODk0NzM2IiBjeD0iODAwIiBjeT0iNDAwIiBmaWxsPSJoc2xhKDAsIDAlLCAxMDAlLCAxLjAwKSIgc3Ryb2tlPSJub25lIj48L2NpcmNsZT48cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCIgeD0iMCIgeT0iODAwIiBvcGFjaXR5PSIwLjE1Ij48L3JlY3Q+PGNpcmNsZSByPSIxMC44NTUyNjMxNTc4OTQ3MzYiIGN4PSIwIiBjeT0iODAwIiBmaWxsPSJoc2xhKDAsIDAlLCAxMDAlLCAxLjAwKSIgc3Ryb2tlPSJub25lIj48L2NpcmNsZT48cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCIgeD0iNDAwIiB5PSI4MDAiIG9wYWNpdHk9IjAuMTUiPjwvcmVjdD48Y2lyY2xlIHI9IjEwLjg1NTI2MzE1Nzg5NDczNiIgY3g9IjQwMCIgY3k9IjgwMCIgZmlsbD0iaHNsYSgwLCAwJSwgMTAwJSwgMS4wMCkiIHN0cm9rZT0ibm9uZSI+PC9jaXJjbGU+PHJlY3Qgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiIHg9IjgwMCIgeT0iODAwIiBvcGFjaXR5PSIwLjE1Ij48L3JlY3Q+PGNpcmNsZSByPSIxMC44NTUyNjM1NTc4OTQ3MzYiIGN4PSI4MDAiIGN5PSI4MDAiIGZpbGw9ImhzbGEoMCwgMCUsIDEwMCUsIDEuMDApIiBzdHJva2U9Im5vbmUiPjwvY2lyY2xlPjwvZz48L3N2Zz4=')",
backgroundSize: "25px 25px",
display: "flex",
alignItems: "flex-start",
justifyContent: "flex-start",
position: "relative",
flexDirection: "column",
textAlign: "left",
gap: "14px",
}}
/>
<div
tw="flex text-6xl absolute bottom-56 isolate font-bold"
style={{
paddingLeft: "145px",
paddingTop: "200px",
background: "linear-gradient(45deg, #000000 4%, #fff, #000)",
backgroundClip: "text",
color: "transparent",
}}
>
{trueHeading}
</div>
<div
tw="flex absolute bottom-44 z-[999] text-2xl"
style={{
paddingLeft: "145px",
background:
"linear-gradient(10deg, #d4d4d8, 04%, #fff, #d4d4d8)",
backgroundClip: "text",
opacity: 0.7,
color: "transparent",
}}
>
{description}
</div>
<div
tw="flex text-2xl absolute bottom-28 z-[999]"
style={{
paddingLeft: "145px",
background:
"linear-gradient(10deg, #d4d4d8, 04%, #fff, #d4d4d8)",
backgroundClip: "text",
opacity: 0.8,
color: "transparent",
}}
>
{date}
</div>
</div>
{/* Lines */}
<div
tw="absolute top-10% w-full h-px"
style={{
background: "linear-gradient(90deg, #888888 30%, #1d1f1f 70%)",
}}
/>
<div
tw="absolute bottom-10% w-full h-px"
style={{
background: "#2c2c2c",
}}
/>
<div
tw="absolute left-10% h-full w-px"
style={{
background: "linear-gradient(180deg, #747474 30%, #222424 70%)",
}}
/>
<div
tw="absolute right-10% h-full w-px"
style={{
background: "#2c2c2c",
}}
/>
</div>
</div>
),
{
width: 1200,
height: 630,
fonts: [
{
name: "Geist",
data: geist,
weight: 400,
style: "normal",
},
],
},
);
} catch (err) {
console.log({ err });
return new Response("Failed to generate the OG image", { status: 500 });
}
}

View File

@@ -0,0 +1,228 @@
import { changelogs } from "@/app/source";
import { notFound } from "next/navigation";
import { absoluteUrl, formatDate } from "@/lib/utils";
import DatabaseTable from "@/components/mdx/database-tables";
import { cn } from "@/lib/utils";
import { Step, Steps } from "fumadocs-ui/components/steps";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { GenerateSecret } from "@/components/generate-secret";
import { AnimatePresence } from "@/components/ui/fade-in";
import { TypeTable } from "fumadocs-ui/components/type-table";
import { Features } from "@/components/blocks/features";
import { ForkButton } from "@/components/fork-button";
import Link from "next/link";
import defaultMdxComponents from "fumadocs-ui/mdx";
import { File, Folder, Files } from "fumadocs-ui/components/files";
import { Accordion, Accordions } from "fumadocs-ui/components/accordion";
import { Pre } from "fumadocs-ui/components/codeblock";
import { DocsBody } from "fumadocs-ui/page";
import ChangelogPage, { Glow } from "../_components/default-changelog";
import { IconLink } from "../_components/changelog-layout";
import { BookIcon, GitHubIcon, XIcon } from "../_components/icons";
import { DiscordLogoIcon } from "@radix-ui/react-icons";
import { StarField } from "../_components/stat-field";
import { CalendarClockIcon } from "lucide-react";
export default async function Page({
params,
}: {
params: Promise<{ slug?: string[] }>;
}) {
const { slug } = await params;
const page = changelogs.getPage(slug);
if (!slug) {
//@ts-ignore
return <ChangelogPage />;
}
if (!page) {
notFound();
}
const MDX = page.data?.body;
const toc = page.data?.toc;
const { title, description, date } = page.data;
return (
<div className="grid md:grid-cols-2 items-start">
<div className="bg-gradient-to-tr overflow-hidden px-12 py-24 md:py-0 -mt-[100px] md:h-dvh relative md:sticky top-0 from-transparent dark:via-stone-950/5 via-stone-100/30 to-stone-200/20 dark:to-transparent/10">
<StarField className="top-1/2 -translate-y-1/2 left-1/2 -translate-x-1/2" />
<Glow />
<div className="flex flex-col md:justify-center max-w-xl mx-auto h-full">
<h1 className="mt-14 font-sans font-semibold tracking-tighter text-5xl">
{title}{" "}
</h1>
<p className="text-sm text-gray-600 dark:text-gray-300">
{description}
</p>
<div className="text-gray-600 dark:text-gray-300 flex items-center gap-x-1">
<CalendarClockIcon className="w-4 h-4" />
<p>{formatDate(date)}</p>
</div>
<hr className="h-px bg-gray-300 mt-5" />
<div className="mt-8 flex flex-wrap text-gray-600 dark:text-gray-300 gap-x-1 gap-y-3 sm:gap-x-2">
<IconLink
href="/docs"
icon={BookIcon}
className="flex-none text-gray-600 dark:text-gray-300"
>
Documentation
</IconLink>
<IconLink
href="https://github.com/better-auth/better-auth"
icon={GitHubIcon}
className="flex-none text-gray-600 dark:text-gray-300"
>
GitHub
</IconLink>
<IconLink
href="https://discord.gg/GYC3W7tZzb"
icon={DiscordLogoIcon}
className="flex-none text-gray-600 dark:text-gray-300"
>
Community
</IconLink>
</div>
<p className="flex items-baseline absolute bottom-4 max-md:left-1/2 max-md:-translate-x-1/2 gap-x-2 text-[0.8125rem]/6 text-gray-500">
<IconLink href="https://x.com/better_auth" icon={XIcon} compact>
BETTER-AUTH.
</IconLink>
</p>
</div>
</div>
<div className="px-4 relative md:px-8 pb-12 md:py-12">
<div className="absolute top-0 left-0 h-full -translate-x-full w-px bg-gradient-to-b from-black/5 dark:from-white/10 via-black/3 dark:via-white/5 to-transparent"></div>
<Link
href="/changelogs"
className="mb-6 inline-flex items-center text-sm font-medium text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 transition-colors"
>
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
className="mr-2"
>
<path d="m15 18-6-6 6-6" />
</svg>
Back to Changelogs
</Link>
<DocsBody>
<MDX
components={{
...defaultMdxComponents,
Link: ({
className,
...props
}: React.ComponentProps<typeof Link>) => (
<Link
className={cn(
"font-medium underline underline-offset-4",
className,
)}
{...props}
/>
),
Step,
Steps,
File,
Folder,
Files,
Tab,
Tabs,
Pre: Pre,
GenerateSecret,
AnimatePresence,
TypeTable,
Features,
ForkButton,
DatabaseTable,
Accordion,
Accordions,
}}
/>
</DocsBody>
</div>
</div>
);
}
export async function generateMetadata({
params,
}: {
params: Promise<{ slug?: string[] }>;
}) {
const { slug } = await params;
if (!slug) {
return {
title: "Changelogs",
description: "Changelogs",
};
}
const page = changelogs.getPage(slug);
if (page == null) notFound();
const baseUrl = process.env.NEXT_PUBLIC_URL || process.env.VERCEL_URL;
const url = new URL(`${baseUrl}/api/og-release`);
const { title, description, date } = page.data;
const dateString = formatDate(date);
const pageSlug = page.file.path;
url.searchParams.set("type", "Version Release");
url.searchParams.set("mode", "dark");
url.searchParams.set("heading", `${title}`);
url.searchParams.set("description", `${description}`);
url.searchParams.set("date", `${dateString}`);
return {
title,
description,
openGraph: {
title,
description,
type: "website",
url: absoluteUrl(`v/${pageSlug}`),
images: [
{
url: url.toString(),
width: 1200,
height: 630,
alt: title,
},
],
},
twitter: {
card: "summary_large_image",
title,
description,
images: [url.toString()],
},
};
}
export function generateStaticParams() {
return changelogs.generateParams();
}
const Icon = ({ className, ...rest }: any) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
width={24}
height={30}
strokeWidth="1"
stroke="currentColor"
{...rest}
className={cn(
"dark:text-white/50 text-black/50 size-6 absolute",
className,
)}
>
<path strokeLinecap="round" strokeLinejoin="round" d="M12 6v12m6-6H6" />
</svg>
);
};

View File

@@ -1,10 +1,10 @@
import Link from "next/link"; import Link from "next/link";
import { useId } from "react"; import { useId } from "react";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
import { IconLink } from "./_components/changelog-layout"; import { IconLink } from "./changelog-layout";
import { BookIcon, GitHubIcon, XIcon } from "./_components/icons"; import { BookIcon, GitHubIcon, XIcon } from "./icons";
import { DiscordLogoIcon } from "@radix-ui/react-icons"; import { DiscordLogoIcon } from "@radix-ui/react-icons";
import { StarField } from "./_components/stat-field"; import { StarField } from "./stat-field";
import { betterFetch } from "@better-fetch/fetch"; import { betterFetch } from "@better-fetch/fetch";
import Markdown from "react-markdown"; import Markdown from "react-markdown";
import defaultMdxComponents from "fumadocs-ui/mdx"; import defaultMdxComponents from "fumadocs-ui/mdx";
@@ -141,10 +141,19 @@ const ChangelogPage = async () => {
</div> </div>
<Link <Link
href={ href={
`#${props.children props.children
?.toString() ?.toString()
.split("date=")[0] .split("date=")[0]
.trim()}` || "#" .trim()
.endsWith(".00")
? `/changelogs/${props.children
?.toString()
.split("date=")[0]
.trim()}`
: `#${props.children
?.toString()
.split("date=")[0]
.trim()}`
} }
> >
{props.children?.toString().split("date=")[0].trim()} {props.children?.toString().split("date=")[0].trim()}
@@ -206,7 +215,7 @@ ${message.content}
export default ChangelogPage; export default ChangelogPage;
function Glow() { export function Glow() {
let id = useId(); let id = useId();
return ( return (

View File

@@ -0,0 +1,5 @@
import type { ReactNode } from "react";
export default function Layout({ children }: { children: ReactNode }) {
return <div>{children}</div>;
}

View File

@@ -147,7 +147,9 @@ export async function generateStaticParams() {
export async function generateMetadata({ export async function generateMetadata({
params, params,
}: { params: Promise<{ slug?: string[] }> }) { }: {
params: Promise<{ slug?: string[] }>;
}) {
const { slug } = await params; const { slug } = await params;
const page = source.getPage(slug); const page = source.getPage(slug);
if (page == null) notFound(); if (page == null) notFound();

View File

@@ -1,4 +1,4 @@
import { source } from "@/app/source"; import { source, changelogs } from "@/app/source";
import { import {
DocsNavbarMobileBtn, DocsNavbarMobileBtn,
DocsNavbarMobileTitle, DocsNavbarMobileTitle,
@@ -27,3 +27,7 @@ export const docsOptions = {
...baseOptions, ...baseOptions,
tree: source.pageTree, tree: source.pageTree,
}; };
export const changelogOptions = {
...baseOptions,
tree: changelogs.pageTree,
};

View File

@@ -1,11 +1,15 @@
import { docs, meta } from "@/.source"; import { changelogCollection, docs, meta } from "@/.source";
import { createMDXSource } from "fumadocs-mdx"; import { createMDXSource } from "fumadocs-mdx";
import { loader } from "fumadocs-core/source"; import { loader } from "fumadocs-core/source";
import { createOpenAPI } from "fumadocs-openapi/server"; import { createOpenAPI } from "fumadocs-openapi/server";
export const source = loader({ export const source = loader({
baseUrl: "/docs", baseUrl: "/docs",
source: createMDXSource(docs, meta), source: createMDXSource(docs, meta),
});
export const changelogs = loader({
baseUrl: "/changelogs",
source: createMDXSource(changelogCollection),
}); });
export const openapi = createOpenAPI({}); export const openapi = createOpenAPI({});

View File

@@ -0,0 +1,41 @@
import { cn } from "@/lib/utils";
import clsx from "clsx";
import { Children, PropsWithChildren } from "react";
export function Stepper({ children }: PropsWithChildren) {
const length = Children.count(children);
return (
<div className="flex flex-col">
{Children.map(children, (child, index) => {
return (
<div
className={cn(
"border-l pl-9 ml-3 relative",
clsx({
"pb-5 ": index < length - 1,
}),
)}
>
<div className="bg-muted w-8 h-8 text-xs font-medium rounded-md border flex items-center justify-center absolute -left-4 font-code">
{index + 1}
</div>
{child}
</div>
);
})}
</div>
);
}
export function StepperItem({
children,
title,
}: PropsWithChildren & { title?: string }) {
return (
<div className="pt-0.5">
<h4 className="mt-0">{title}</h4>
<div>{children}</div>
</div>
);
}

View File

@@ -0,0 +1,94 @@
---
title: 1.2 Release
description: Stripe, Captcha, API Keys, Teams, Init CLI, and more.
date: 2025-02-27
---
# Better Auth 1.2 Stripe, Captcha, API Keys, Teams, Init CLI, and more
```package-install
npm install better-auth@1.2.0
```
---
## 🔌 New Plugins
### **Stripe Plugin (Beta)**
Stripe integration for customer management, subscriptions, and webhooks. [Learn more](/docs/plugins/stripe)
### **Captcha Plugin**
Protect your authentication flows with Google reCAPTCHA and Cloudflare Turnstile. Works for signup, signin, and password resets. [Learn more](/docs/plugins/captcha)
### **API Key Plugin**
Generate and manage API keys with rate limiting, expiration, and metadata. Supports session creation from API keys. [Learn more](/docs/plugins/api-keys)
---
## 🔄 Plugin Enhancements
### **Username Plugin**
- Added `displayName` for case-insensitive lookups while preserving original formatting.
- Built-in validation.
<Callout type="info">
If you're using the Username plugin, make sure to add the `displayName` field to your schema.
</Callout>
### **Organization Plugin**
- **Teams & Access Control** Custom roles and permissions for org members, no extra work needed. [Learn more](/docs/plugins/organization)
- **Multiple Roles per User** Assign more than one role to a user.
### **Admin Plugin**
- Manage roles and permissions directly within the admin panel. [Learn more](/docs/plugins/admin)
- `adminUserIds` option to grant specific users admin privileges. [Learn more](/docs/plugins/admin#usage)
---
## 🎭 New Social Providers
- TikTok
- Roblox
- VK
---
## ✨ Core Enhancements
- **Auto Cleanup** for expired verification data
- **Improved Google One Tap** integration with JWT verification and enhanced prompt handling
- **Phone-based Password Reset** functionality
- **Provider Control Options**:
- Disable signups for specific providers
- Disable implicit signups for specific providers
- Control default scopes and allow custom scopes on request
- **Enhanced Database Hooks** with additional context information
---
## 🚀 Performance Boosts
We rewrote **better-call** (the core library behind Better Auth) to fix TypeScript editor lag. Your IDE should now feel much snappier when working with Better Auth.
---
## ⚡ CLI Enhancements
### **`init` Command**
The CLI now includes an `init` command to speed up setup:
- Scaffold new projects
- Generate schemas
- Run migrations
[Learn more](/docs/concepts/cli)
---
## 🛠 Bug Fixes & Stability Improvements
A lot of fixes and refinements to make everything smoother, faster, and more reliable. Check out the [changelog](https://github.com/better-auth/better-auth/blob/main/packages/better-auth/CHANGELOG.md) for more details.
---
```package-install
npm install better-auth@1.2.0
```
**Upgrade now and take advantage of these powerful new features!** 🚀

View File

@@ -0,0 +1,52 @@
---
title: v1.0
description: Built in CLI for managing your project.
date: 2021-10-01
---
Version update
Better Auth comes with a built-in CLI to help you manage the database schema needed for both core functionality and plugins.
## Generate
The `generate` command creates the schema required by Better Auth. If you're using a database adapter like Prisma or Drizzle, this command will generate the right schema for your ORM. If you're using the built-in Kysely adapter, it will generate an SQL file you can run directly on your database.
```bash title="Terminal"
npx @better-auth/cli@latest generate
```
### Options
- `--output` - Where to save the generated schema. For Prisma, it will be saved in prisma/schema.prisma. For Drizzle, it goes to schema.ts in your project root. For Kysely, its an SQL file saved as schema.sql in your project root.
- `--config` - The path to your Better Auth config file. By default, the CLI will search for a better-auth.ts file in **./**, **./utils**, **./lib**, or any of these directories under `src` directory.
- `--y` - Skip the confirmation prompt and generate the schema directly.
## Migrate
The migrate command applies the Better Auth schema directly to your database. This is available if youre using the built-in Kysely adapter.
```bash title="Terminal"
npx @better-auth/cli@latest migrate
```
### Options
- `--config` - The path to your Better Auth config file. By default, the CLI will search for a better-auth.ts file in **./**, **./utils**, **./lib**, or any of these directories under `src` directory.
- `--y` - Skip the confirmation prompt and apply the schema directly.
## Common Issues
**Error: Cannot find module X**
If you see this error, it means the CLI cant resolve imported modules in your Better Auth config file. We're working on a fix for many of these issues, but in the meantime, you can try the following:
- Remove any import aliases in your config file and use relative paths instead. After running the CLI, you can revert to using aliases.
## Secret
The CLI also provides a way to generate a secret key for your Better Auth instance.
```bash title="Terminal"
npx @better-auth/cli@latest secret
```

View File

@@ -1,6 +1,5 @@
import { clsx, type ClassValue } from "clsx"; import { clsx, type ClassValue } from "clsx";
import { twMerge } from "tailwind-merge"; import { twMerge } from "tailwind-merge";
export function cn(...inputs: ClassValue[]) { export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs)); return twMerge(clsx(inputs));
} }
@@ -12,3 +11,14 @@ export function kFormatter(num: number) {
? Math.sign(num) * parseFloat((Math.abs(num) / 1000).toFixed(1)) + "k" ? Math.sign(num) * parseFloat((Math.abs(num) / 1000).toFixed(1)) + "k"
: Math.sign(num) * Math.abs(num); : Math.sign(num) * Math.abs(num);
} }
export const baseUrl =
process.env.NODE_ENV === "development" || !process.env.VERCEL_URL
? new URL("http://localhost:3000")
: new URL(`https://${process.env.VERCEL_URL}`);
export function formatDate(date: Date) {
let d = new Date(date);
return d
.toLocaleDateString("en-US", { month: "short", day: "numeric" })
.replace(",", "");
}

View File

@@ -40,6 +40,9 @@ export default withMDX({
{ {
hostname: "github.com", hostname: "github.com",
}, },
{
hostname: "hebbkx1anhila5yf.public.blob.vercel-storage.com",
},
], ],
}, },
devIndicators: { devIndicators: {

1
docs/public/plus.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" viewBox="0 0 800 800" width="800" height="800"><g stroke-width="3.5" stroke="hsla(0, 0%, 100%, 1.00)" fill="none"><rect width="200" height="8.578947368421051" x="-100" y="-4.289473684210526" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="-4.289473684210526" y="-100" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="200" height="8.578947368421051" x="300" y="-4.289473684210526" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="395.7105263157895" y="-100" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="200" height="8.578947368421051" x="700" y="-4.289473684210526" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="795.7105263157895" y="-100" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="200" height="8.578947368421051" x="-100" y="395.7105263157895" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="-4.289473684210526" y="300" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="200" height="8.578947368421051" x="300" y="395.7105263157895" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="395.7105263157895" y="300" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="200" height="8.578947368421051" x="700" y="395.7105263157895" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="795.7105263157895" y="300" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="200" height="8.578947368421051" x="-100" y="795.7105263157895" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="-4.289473684210526" y="700" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="200" height="8.578947368421051" x="300" y="795.7105263157895" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="395.7105263157895" y="700" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="200" height="8.578947368421051" x="700" y="795.7105263157895" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="795.7105263157895" y="700" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect></g></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -3,28 +3,30 @@ import { defineConfig } from "fumadocs-mdx/config";
import { remarkInstall } from "fumadocs-docgen"; import { remarkInstall } from "fumadocs-docgen";
import { z } from "zod"; import { z } from "zod";
export default defineConfig({ export default defineConfig({
mdxOptions: { mdxOptions: {
remarkPlugins: [ remarkPlugins: [
[ [
remarkInstall, remarkInstall,
{ {
persist: { persist: {
id: "persist-install", id: "persist-install",
}, },
}, },
], ],
], ],
}, },
}); });
export const changelog = defineCollections({ export const changelogCollection = defineCollections({
type: "doc", type: "doc",
dir: "./content/changelog", dir: "./content/changelogs",
schema: z.object({ schema: z.object({
title: z.string(), title: z.string(),
}), description: z.string(),
date: z.date(),
}),
}); });
export const { docs, meta } = defineDocs({ export const { docs, meta } = defineDocs({
dir: "./content/docs", dir: "./content/docs",
}); });

View File

@@ -184,7 +184,7 @@ export const anonymous = (options?: AnonymousOptions) => {
return; return;
} }
/** /**
* Make sure the use had an anonymous session. * Make sure the user had an anonymous session.
*/ */
const session = await getSessionFromCtx<{ isAnonymous: boolean }>( const session = await getSessionFromCtx<{ isAnonymous: boolean }>(
ctx, ctx,

357
pnpm-lock.yaml generated
View File

@@ -13,8 +13,8 @@ catalogs:
specifier: ^1.0.3 specifier: ^1.0.3
version: 1.0.3 version: 1.0.3
typescript: typescript:
specifier: ^5.7.2 specifier: ^5.7.3
version: 5.7.2 version: 5.7.3
unbuild: unbuild:
specifier: ^3.5.0 specifier: ^3.5.0
version: 3.5.0 version: 3.5.0
@@ -981,7 +981,7 @@ importers:
dependencies: dependencies:
'@radix-icons/vue': '@radix-icons/vue':
specifier: ^1.0.0 specifier: ^1.0.0
version: 1.0.0(vue@3.5.13(typescript@5.7.2)) version: 1.0.0(vue@3.5.13(typescript@5.7.3))
'@types/better-sqlite3': '@types/better-sqlite3':
specifier: ^7.6.12 specifier: ^7.6.12
version: 7.6.12 version: 7.6.12
@@ -990,13 +990,13 @@ importers:
version: 1.4.3-beta.0 version: 1.4.3-beta.0
'@unovis/vue': '@unovis/vue':
specifier: 1.4.3-beta.0 specifier: 1.4.3-beta.0
version: 1.4.3-beta.0(@unovis/ts@1.4.3-beta.0)(vue@3.5.13(typescript@5.7.2)) version: 1.4.3-beta.0(@unovis/ts@1.4.3-beta.0)(vue@3.5.13(typescript@5.7.3))
'@vee-validate/zod': '@vee-validate/zod':
specifier: ^4.14.7 specifier: ^4.14.7
version: 4.14.7(vue@3.5.13(typescript@5.7.2)) version: 4.14.7(vue@3.5.13(typescript@5.7.3))
'@vueuse/core': '@vueuse/core':
specifier: ^11.3.0 specifier: ^11.3.0
version: 11.3.0(vue@3.5.13(typescript@5.7.2)) version: 11.3.0(vue@3.5.13(typescript@5.7.3))
better-auth: better-auth:
specifier: workspace:* specifier: workspace:*
version: link:../../packages/better-auth version: link:../../packages/better-auth
@@ -1011,13 +1011,13 @@ importers:
version: 2.1.1 version: 2.1.1
embla-carousel-vue: embla-carousel-vue:
specifier: ^8.5.1 specifier: ^8.5.1
version: 8.5.1(vue@3.5.13(typescript@5.7.2)) version: 8.5.1(vue@3.5.13(typescript@5.7.3))
nuxt: nuxt:
specifier: ^3.14.1592 specifier: ^3.14.1592
version: 3.14.1592(@azure/identity@4.6.0)(@biomejs/biome@1.9.4)(@libsql/client@0.12.0)(@parcel/watcher@2.4.1)(@types/node@22.10.7)(better-sqlite3@11.6.0)(drizzle-orm@0.39.3(@cloudflare/workers-types@4.20250214.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.12.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.12)(@types/pg@8.11.10)(better-sqlite3@11.6.0)(bun-types@1.2.4)(kysely@0.27.4)(mysql2@3.11.5)(pg@8.13.1)(prisma@5.22.0))(encoding@0.1.13)(eslint@8.57.1)(ioredis@5.4.1)(less@4.2.1)(lightningcss@1.27.0)(magicast@0.3.5)(mysql2@3.11.5)(optionator@0.9.4)(rollup@4.31.0)(sass@1.83.1)(terser@5.36.0)(typescript@5.7.2)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)) version: 3.14.1592(@azure/identity@4.6.0)(@biomejs/biome@1.9.4)(@libsql/client@0.12.0)(@parcel/watcher@2.4.1)(@types/node@22.10.7)(better-sqlite3@11.6.0)(drizzle-orm@0.39.3(@cloudflare/workers-types@4.20250214.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.12.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.12)(@types/pg@8.11.10)(better-sqlite3@11.6.0)(bun-types@1.2.4)(kysely@0.27.4)(mysql2@3.11.5)(pg@8.13.1)(prisma@5.22.0))(encoding@0.1.13)(eslint@8.57.1)(ioredis@5.4.1)(less@4.2.1)(lightningcss@1.27.0)(magicast@0.3.5)(mysql2@3.11.5)(optionator@0.9.4)(rollup@4.31.0)(sass@1.83.1)(terser@5.36.0)(typescript@5.7.3)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))
radix-vue: radix-vue:
specifier: ^1.9.11 specifier: ^1.9.11
version: 1.9.11(vue@3.5.13(typescript@5.7.2)) version: 1.9.11(vue@3.5.13(typescript@5.7.3))
shadcn-nuxt: shadcn-nuxt:
specifier: ^0.10.4 specifier: ^0.10.4
version: 0.10.4(magicast@0.3.5)(rollup@4.31.0) version: 0.10.4(magicast@0.3.5)(rollup@4.31.0)
@@ -1029,19 +1029,19 @@ importers:
version: 1.0.7(tailwindcss@3.4.16) version: 1.0.7(tailwindcss@3.4.16)
v-calendar: v-calendar:
specifier: ^3.1.2 specifier: ^3.1.2
version: 3.1.2(@popperjs/core@2.11.8)(vue@3.5.13(typescript@5.7.2)) version: 3.1.2(@popperjs/core@2.11.8)(vue@3.5.13(typescript@5.7.3))
vaul-vue: vaul-vue:
specifier: ^0.2.0 specifier: ^0.2.0
version: 0.2.0(radix-vue@1.9.11(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)) version: 0.2.0(radix-vue@1.9.11(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))
vee-validate: vee-validate:
specifier: ^4.14.7 specifier: ^4.14.7
version: 4.14.7(vue@3.5.13(typescript@5.7.2)) version: 4.14.7(vue@3.5.13(typescript@5.7.3))
vue: vue:
specifier: latest specifier: latest
version: 3.5.13(typescript@5.7.2) version: 3.5.13(typescript@5.7.3)
vue-router: vue-router:
specifier: latest specifier: latest
version: 4.5.0(vue@3.5.13(typescript@5.7.2)) version: 4.5.0(vue@3.5.13(typescript@5.7.3))
vue-sonner: vue-sonner:
specifier: ^1.3.0 specifier: ^1.3.0
version: 1.3.0 version: 1.3.0
@@ -1522,7 +1522,7 @@ importers:
version: 0.11.3 version: 0.11.3
valibot: valibot:
specifier: 1.0.0-beta.15 specifier: 1.0.0-beta.15
version: 1.0.0-beta.15(typescript@5.7.2) version: 1.0.0-beta.15(typescript@5.7.3)
zod: zod:
specifier: ^3.24.1 specifier: ^3.24.1
version: 3.24.1 version: 3.24.1
@@ -1592,16 +1592,16 @@ importers:
version: 18.6.1 version: 18.6.1
typescript: typescript:
specifier: 'catalog:' specifier: 'catalog:'
version: 5.7.2 version: 5.7.3
unbuild: unbuild:
specifier: 'catalog:' specifier: 'catalog:'
version: 3.5.0(sass@1.83.1)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)) version: 3.5.0(sass@1.83.1)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3))
vitest: vitest:
specifier: ^1.6.0 specifier: ^1.6.0
version: 1.6.0(@types/node@22.10.7)(happy-dom@15.11.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0) version: 1.6.0(@types/node@22.10.7)(happy-dom@15.11.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
vue: vue:
specifier: ^3.5.13 specifier: ^3.5.13
version: 3.5.13(typescript@5.7.2) version: 3.5.13(typescript@5.7.3)
packages/cli: packages/cli:
dependencies: dependencies:
@@ -1683,10 +1683,10 @@ importers:
version: 11.0.4 version: 11.0.4
typescript: typescript:
specifier: 'catalog:' specifier: 'catalog:'
version: 5.7.2 version: 5.7.3
unbuild: unbuild:
specifier: 'catalog:' specifier: 'catalog:'
version: 3.5.0(sass@1.83.1)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)) version: 3.5.0(sass@1.83.1)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3))
vitest: vitest:
specifier: ^1.6.0 specifier: ^1.6.0
version: 1.6.0(@types/node@22.10.7)(happy-dom@15.11.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0) version: 1.6.0(@types/node@22.10.7)(happy-dom@15.11.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
@@ -1726,7 +1726,32 @@ importers:
version: 13.0.3(expo@52.0.25(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.9(encoding@0.1.13))(@types/react@18.3.14)(encoding@0.1.13)(react@19.0.0-rc-7771d3a7-20240827)))(encoding@0.1.13)(graphql@15.8.0)(react-native@0.76.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.9(encoding@0.1.13))(@types/react@18.3.14)(encoding@0.1.13)(react@19.0.0-rc-7771d3a7-20240827))(react@19.0.0-rc-7771d3a7-20240827)) version: 13.0.3(expo@52.0.25(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.9(encoding@0.1.13))(@types/react@18.3.14)(encoding@0.1.13)(react@19.0.0-rc-7771d3a7-20240827)))(encoding@0.1.13)(graphql@15.8.0)(react-native@0.76.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.9(encoding@0.1.13))(@types/react@18.3.14)(encoding@0.1.13)(react@19.0.0-rc-7771d3a7-20240827))(react@19.0.0-rc-7771d3a7-20240827))
unbuild: unbuild:
specifier: ^3.5.0 specifier: ^3.5.0
version: 3.5.0(sass@1.83.1)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)) version: 3.5.0(sass@1.83.1)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3))
vitest:
specifier: ^1.6.0
version: 1.6.0(@types/node@22.10.7)(happy-dom@15.11.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
packages/stripe:
dependencies:
better-auth:
specifier: workspace:^
version: link:../better-auth
zod:
specifier: ^3.24.1
version: 3.24.2
devDependencies:
'@types/better-sqlite3':
specifier: ^7.6.12
version: 7.6.12
better-call:
specifier: 'catalog:'
version: 1.0.3
better-sqlite3:
specifier: ^11.6.0
version: 11.6.0
stripe:
specifier: ^17.7.0
version: 17.7.0
vitest: vitest:
specifier: ^1.6.0 specifier: ^1.6.0
version: 1.6.0(@types/node@22.10.7)(happy-dom@15.11.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0) version: 1.6.0(@types/node@22.10.7)(happy-dom@15.11.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
@@ -19396,6 +19421,11 @@ packages:
engines: {node: '>=14.17'} engines: {node: '>=14.17'}
hasBin: true hasBin: true
typescript@5.7.3:
resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==}
engines: {node: '>=14.17'}
hasBin: true
ua-parser-js@0.7.39: ua-parser-js@0.7.39:
resolution: {integrity: sha512-IZ6acm6RhQHNibSt7+c09hhvsKy9WUr4DVbeq9U8o71qxyYtJpQeDxQnMrVqnIFMLcQjHO0I9wgfO2vIahht4w==} resolution: {integrity: sha512-IZ6acm6RhQHNibSt7+c09hhvsKy9WUr4DVbeq9U8o71qxyYtJpQeDxQnMrVqnIFMLcQjHO0I9wgfO2vIahht4w==}
hasBin: true hasBin: true
@@ -23510,11 +23540,11 @@ snapshots:
'@floating-ui/utils@0.2.8': {} '@floating-ui/utils@0.2.8': {}
'@floating-ui/vue@1.1.5(vue@3.5.13(typescript@5.7.2))': '@floating-ui/vue@1.1.5(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
'@floating-ui/dom': 1.6.12 '@floating-ui/dom': 1.6.12
'@floating-ui/utils': 0.2.8 '@floating-ui/utils': 0.2.8
vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2)) vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3))
transitivePeerDependencies: transitivePeerDependencies:
- '@vue/composition-api' - '@vue/composition-api'
- vue - vue
@@ -24516,13 +24546,13 @@ snapshots:
rc9: 2.1.2 rc9: 2.1.2
semver: 7.7.1 semver: 7.7.1
'@nuxt/devtools@1.6.0(rollup@4.31.0)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2))': '@nuxt/devtools@1.6.0(rollup@4.31.0)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
'@antfu/utils': 0.7.10 '@antfu/utils': 0.7.10
'@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.31.0)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)) '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.31.0)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))
'@nuxt/devtools-wizard': 1.6.0 '@nuxt/devtools-wizard': 1.6.0
'@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.31.0) '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.31.0)
'@vue/devtools-core': 7.4.4(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2)) '@vue/devtools-core': 7.4.4(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.3))
'@vue/devtools-kit': 7.4.4 '@vue/devtools-kit': 7.4.4
birpc: 0.2.19 birpc: 0.2.19
consola: 3.2.3 consola: 3.2.3
@@ -24635,12 +24665,12 @@ snapshots:
- rollup - rollup
- supports-color - supports-color
'@nuxt/vite-builder@3.14.1592(@biomejs/biome@1.9.4)(@types/node@22.10.7)(eslint@8.57.1)(less@4.2.1)(lightningcss@1.27.0)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.31.0)(sass@1.83.1)(terser@5.36.0)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2))': '@nuxt/vite-builder@3.14.1592(@biomejs/biome@1.9.4)(@types/node@22.10.7)(eslint@8.57.1)(less@4.2.1)(lightningcss@1.27.0)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.31.0)(sass@1.83.1)(terser@5.36.0)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
'@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.31.0) '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.31.0)
'@rollup/plugin-replace': 6.0.1(rollup@4.31.0) '@rollup/plugin-replace': 6.0.1(rollup@4.31.0)
'@vitejs/plugin-vue': 5.2.1(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2)) '@vitejs/plugin-vue': 5.2.1(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.3))
'@vitejs/plugin-vue-jsx': 4.1.1(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2)) '@vitejs/plugin-vue-jsx': 4.1.1(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.3))
autoprefixer: 10.4.20(postcss@8.4.49) autoprefixer: 10.4.20(postcss@8.4.49)
clear: 0.1.0 clear: 0.1.0
consola: 3.2.3 consola: 3.2.3
@@ -24669,8 +24699,8 @@ snapshots:
unplugin: 1.16.0 unplugin: 1.16.0
vite: 5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0) vite: 5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
vite-node: 2.1.8(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0) vite-node: 2.1.8(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
vite-plugin-checker: 0.8.0(@biomejs/biome@1.9.4)(eslint@8.57.1)(optionator@0.9.4)(typescript@5.7.2)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)) vite-plugin-checker: 0.8.0(@biomejs/biome@1.9.4)(eslint@8.57.1)(optionator@0.9.4)(typescript@5.7.3)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
vue-bundle-renderer: 2.1.1 vue-bundle-renderer: 2.1.1
transitivePeerDependencies: transitivePeerDependencies:
- '@biomejs/biome' - '@biomejs/biome'
@@ -25976,9 +26006,9 @@ snapshots:
dependencies: dependencies:
'@prisma/debug': 5.22.0 '@prisma/debug': 5.22.0
'@radix-icons/vue@1.0.0(vue@3.5.13(typescript@5.7.2))': '@radix-icons/vue@1.0.0(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
'@radix-ui/number@1.1.0': {} '@radix-ui/number@1.1.0': {}
@@ -29111,10 +29141,10 @@ snapshots:
'@tanstack/virtual-file-routes@1.81.9': {} '@tanstack/virtual-file-routes@1.81.9': {}
'@tanstack/vue-virtual@3.10.8(vue@3.5.13(typescript@5.7.2))': '@tanstack/vue-virtual@3.10.8(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
'@tanstack/virtual-core': 3.10.8 '@tanstack/virtual-core': 3.10.8
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
'@trysound/sax@0.2.0': {} '@trysound/sax@0.2.0': {}
@@ -29908,14 +29938,14 @@ snapshots:
'@unhead/schema': 1.11.13 '@unhead/schema': 1.11.13
'@unhead/shared': 1.11.13 '@unhead/shared': 1.11.13
'@unhead/vue@1.11.13(vue@3.5.13(typescript@5.7.2))': '@unhead/vue@1.11.13(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
'@unhead/schema': 1.11.13 '@unhead/schema': 1.11.13
'@unhead/shared': 1.11.13 '@unhead/shared': 1.11.13
defu: 6.1.4 defu: 6.1.4
hookable: 5.5.3 hookable: 5.5.3
unhead: 1.11.13 unhead: 1.11.13
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
'@unovis/dagre-layout@0.8.8-2': '@unovis/dagre-layout@0.8.8-2':
dependencies: dependencies:
@@ -29963,10 +29993,10 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@unovis/vue@1.4.3-beta.0(@unovis/ts@1.4.3-beta.0)(vue@3.5.13(typescript@5.7.2))': '@unovis/vue@1.4.3-beta.0(@unovis/ts@1.4.3-beta.0)(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
'@unovis/ts': 1.4.3-beta.0 '@unovis/ts': 1.4.3-beta.0
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
'@urql/core@5.1.0(graphql@15.8.0)': '@urql/core@5.1.0(graphql@15.8.0)':
dependencies: dependencies:
@@ -30032,10 +30062,10 @@ snapshots:
'@vanilla-extract/private@1.0.6': {} '@vanilla-extract/private@1.0.6': {}
'@vee-validate/zod@4.14.7(vue@3.5.13(typescript@5.7.2))': '@vee-validate/zod@4.14.7(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
type-fest: 4.26.1 type-fest: 4.26.1
vee-validate: 4.14.7(vue@3.5.13(typescript@5.7.2)) vee-validate: 4.14.7(vue@3.5.13(typescript@5.7.3))
zod: 3.24.1 zod: 3.24.1
transitivePeerDependencies: transitivePeerDependencies:
- vue - vue
@@ -30154,20 +30184,20 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@vitejs/plugin-vue-jsx@4.1.1(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2))': '@vitejs/plugin-vue-jsx@4.1.1(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
'@babel/core': 7.26.0 '@babel/core': 7.26.0
'@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0)
'@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.0) '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.0)
vite: 5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0) vite: 5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@vitejs/plugin-vue@5.2.1(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2))': '@vitejs/plugin-vue@5.2.1(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
vite: 5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0) vite: 5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
'@vitest/expect@1.6.0': '@vitest/expect@1.6.0':
dependencies: dependencies:
@@ -30292,7 +30322,7 @@ snapshots:
'@vscode/l10n@0.0.18': {} '@vscode/l10n@0.0.18': {}
'@vue-macros/common@1.15.0(rollup@4.31.0)(vue@3.5.13(typescript@5.7.2))': '@vue-macros/common@1.15.0(rollup@4.31.0)(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
'@babel/types': 7.26.5 '@babel/types': 7.26.5
'@rollup/pluginutils': 5.1.3(rollup@4.31.0) '@rollup/pluginutils': 5.1.3(rollup@4.31.0)
@@ -30301,7 +30331,7 @@ snapshots:
local-pkg: 0.5.1 local-pkg: 0.5.1
magic-string-ast: 0.6.2 magic-string-ast: 0.6.2
optionalDependencies: optionalDependencies:
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
@@ -30401,7 +30431,7 @@ snapshots:
dependencies: dependencies:
'@vue/devtools-kit': 7.6.2 '@vue/devtools-kit': 7.6.2
'@vue/devtools-core@7.4.4(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2))': '@vue/devtools-core@7.4.4(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
'@vue/devtools-kit': 7.6.2 '@vue/devtools-kit': 7.6.2
'@vue/devtools-shared': 7.6.2 '@vue/devtools-shared': 7.6.2
@@ -30409,7 +30439,7 @@ snapshots:
nanoid: 3.3.8 nanoid: 3.3.8
pathe: 1.1.2 pathe: 1.1.2
vite-hot-client: 0.2.3(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)) vite-hot-client: 0.2.3(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
transitivePeerDependencies: transitivePeerDependencies:
- vite - vite
@@ -30482,32 +30512,32 @@ snapshots:
'@vue/shared': 3.3.4 '@vue/shared': 3.3.4
vue: 3.3.4 vue: 3.3.4
'@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.7.2))': '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
'@vue/compiler-ssr': 3.5.13 '@vue/compiler-ssr': 3.5.13
'@vue/shared': 3.5.13 '@vue/shared': 3.5.13
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
'@vue/shared@3.3.4': {} '@vue/shared@3.3.4': {}
'@vue/shared@3.5.13': {} '@vue/shared@3.5.13': {}
'@vueuse/core@10.11.1(vue@3.5.13(typescript@5.7.2))': '@vueuse/core@10.11.1(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
'@types/web-bluetooth': 0.0.20 '@types/web-bluetooth': 0.0.20
'@vueuse/metadata': 10.11.1 '@vueuse/metadata': 10.11.1
'@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.2)) '@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.3))
vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2)) vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3))
transitivePeerDependencies: transitivePeerDependencies:
- '@vue/composition-api' - '@vue/composition-api'
- vue - vue
'@vueuse/core@11.3.0(vue@3.5.13(typescript@5.7.2))': '@vueuse/core@11.3.0(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
'@types/web-bluetooth': 0.0.20 '@types/web-bluetooth': 0.0.20
'@vueuse/metadata': 11.3.0 '@vueuse/metadata': 11.3.0
'@vueuse/shared': 11.3.0(vue@3.5.13(typescript@5.7.2)) '@vueuse/shared': 11.3.0(vue@3.5.13(typescript@5.7.3))
vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2)) vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3))
transitivePeerDependencies: transitivePeerDependencies:
- '@vue/composition-api' - '@vue/composition-api'
- vue - vue
@@ -30516,16 +30546,16 @@ snapshots:
'@vueuse/metadata@11.3.0': {} '@vueuse/metadata@11.3.0': {}
'@vueuse/shared@10.11.1(vue@3.5.13(typescript@5.7.2))': '@vueuse/shared@10.11.1(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2)) vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3))
transitivePeerDependencies: transitivePeerDependencies:
- '@vue/composition-api' - '@vue/composition-api'
- vue - vue
'@vueuse/shared@11.3.0(vue@3.5.13(typescript@5.7.2))': '@vueuse/shared@11.3.0(vue@3.5.13(typescript@5.7.3))':
dependencies: dependencies:
vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2)) vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3))
transitivePeerDependencies: transitivePeerDependencies:
- '@vue/composition-api' - '@vue/composition-api'
- vue - vue
@@ -33454,11 +33484,11 @@ snapshots:
embla-carousel-reactive-utils: 8.5.1(embla-carousel@8.5.1) embla-carousel-reactive-utils: 8.5.1(embla-carousel@8.5.1)
svelte: 4.2.19 svelte: 4.2.19
embla-carousel-vue@8.5.1(vue@3.5.13(typescript@5.7.2)): embla-carousel-vue@8.5.1(vue@3.5.13(typescript@5.7.3)):
dependencies: dependencies:
embla-carousel: 8.5.1 embla-carousel: 8.5.1
embla-carousel-reactive-utils: 8.5.1(embla-carousel@8.5.1) embla-carousel-reactive-utils: 8.5.1(embla-carousel@8.5.1)
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
embla-carousel@8.5.1: {} embla-carousel@8.5.1: {}
@@ -38632,7 +38662,7 @@ snapshots:
mkdirp@1.0.4: {} mkdirp@1.0.4: {}
mkdist@2.2.0(sass@1.83.1)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)): mkdist@2.2.0(sass@1.83.1)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3)):
dependencies: dependencies:
autoprefixer: 10.4.20(postcss@8.4.49) autoprefixer: 10.4.20(postcss@8.4.49)
citty: 0.1.6 citty: 0.1.6
@@ -38649,8 +38679,8 @@ snapshots:
tinyglobby: 0.2.12 tinyglobby: 0.2.12
optionalDependencies: optionalDependencies:
sass: 1.83.1 sass: 1.83.1
typescript: 5.7.2 typescript: 5.7.3
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
mlly@1.7.3: mlly@1.7.3:
dependencies: dependencies:
@@ -39010,6 +39040,98 @@ snapshots:
- supports-color - supports-color
- typescript - typescript
nitropack@2.10.4(@azure/identity@4.6.0)(@libsql/client@0.12.0)(better-sqlite3@11.6.0)(drizzle-orm@0.39.3(@cloudflare/workers-types@4.20250214.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.12.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.12)(@types/pg@8.11.10)(better-sqlite3@11.6.0)(bun-types@1.2.4)(kysely@0.27.4)(mysql2@3.11.5)(pg@8.13.1)(prisma@5.22.0))(encoding@0.1.13)(mysql2@3.11.5)(typescript@5.7.3):
dependencies:
'@cloudflare/kv-asset-handler': 0.3.4
'@netlify/functions': 2.8.2
'@rollup/plugin-alias': 5.1.1(rollup@4.31.0)
'@rollup/plugin-commonjs': 28.0.1(rollup@4.31.0)
'@rollup/plugin-inject': 5.0.5(rollup@4.31.0)
'@rollup/plugin-json': 6.1.0(rollup@4.31.0)
'@rollup/plugin-node-resolve': 15.3.0(rollup@4.31.0)
'@rollup/plugin-replace': 6.0.1(rollup@4.31.0)
'@rollup/plugin-terser': 0.4.4(rollup@4.31.0)
'@rollup/pluginutils': 5.1.3(rollup@4.31.0)
'@types/http-proxy': 1.17.15
'@vercel/nft': 0.27.5(encoding@0.1.13)
archiver: 7.0.1
c12: 2.0.1(magicast@0.3.5)
chokidar: 3.6.0
citty: 0.1.6
compatx: 0.1.8
confbox: 0.1.8
consola: 3.2.3
cookie-es: 1.2.2
croner: 9.0.0
crossws: 0.3.1
db0: 0.2.1(@libsql/client@0.12.0)(better-sqlite3@11.6.0)(drizzle-orm@0.39.3(@cloudflare/workers-types@4.20250214.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.12.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.12)(@types/pg@8.11.10)(better-sqlite3@11.6.0)(bun-types@1.2.4)(kysely@0.27.4)(mysql2@3.11.5)(pg@8.13.1)(prisma@5.22.0))(mysql2@3.11.5)
defu: 6.1.4
destr: 2.0.3
dot-prop: 9.0.0
esbuild: 0.24.2
escape-string-regexp: 5.0.0
etag: 1.8.1
fs-extra: 11.3.0
globby: 14.0.2
gzip-size: 7.0.0
h3: 1.13.0
hookable: 5.5.3
httpxy: 0.1.5
ioredis: 5.4.1
jiti: 2.4.0
klona: 2.0.6
knitwork: 1.1.0
listhen: 1.9.0
magic-string: 0.30.14
magicast: 0.3.5
mime: 4.0.4
mlly: 1.7.4
node-fetch-native: 1.6.4
ofetch: 1.4.1
ohash: 1.1.4
openapi-typescript: 7.4.2(encoding@0.1.13)(typescript@5.7.3)
pathe: 1.1.2
perfect-debounce: 1.0.0
pkg-types: 1.3.1
pretty-bytes: 6.1.1
radix3: 1.1.2
rollup: 4.31.0
rollup-plugin-visualizer: 5.12.0(rollup@4.31.0)
scule: 1.3.0
semver: 7.7.1
serve-placeholder: 2.0.2
serve-static: 1.16.2
std-env: 3.8.0
ufo: 1.5.4
uncrypto: 0.1.3
unctx: 2.3.1
unenv: 1.10.0
unimport: 3.14.4(rollup@4.31.0)
unstorage: 1.13.1(@azure/identity@4.6.0)(ioredis@5.4.1)
untyped: 1.5.1
unwasm: 0.3.9
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
- '@azure/data-tables'
- '@azure/identity'
- '@azure/keyvault-secrets'
- '@azure/storage-blob'
- '@capacitor/preferences'
- '@electric-sql/pglite'
- '@libsql/client'
- '@netlify/blobs'
- '@planetscale/database'
- '@upstash/redis'
- '@vercel/kv'
- better-sqlite3
- drizzle-orm
- encoding
- idb-keyval
- mysql2
- supports-color
- typescript
nlcst-to-string@4.0.0: nlcst-to-string@4.0.0:
dependencies: dependencies:
'@types/nlcst': 2.0.3 '@types/nlcst': 2.0.3
@@ -39182,18 +39304,18 @@ snapshots:
nuxi@3.15.0: {} nuxi@3.15.0: {}
nuxt@3.14.1592(@azure/identity@4.6.0)(@biomejs/biome@1.9.4)(@libsql/client@0.12.0)(@parcel/watcher@2.4.1)(@types/node@22.10.7)(better-sqlite3@11.6.0)(drizzle-orm@0.39.3(@cloudflare/workers-types@4.20250214.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.12.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.12)(@types/pg@8.11.10)(better-sqlite3@11.6.0)(bun-types@1.2.4)(kysely@0.27.4)(mysql2@3.11.5)(pg@8.13.1)(prisma@5.22.0))(encoding@0.1.13)(eslint@8.57.1)(ioredis@5.4.1)(less@4.2.1)(lightningcss@1.27.0)(magicast@0.3.5)(mysql2@3.11.5)(optionator@0.9.4)(rollup@4.31.0)(sass@1.83.1)(terser@5.36.0)(typescript@5.7.2)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)): nuxt@3.14.1592(@azure/identity@4.6.0)(@biomejs/biome@1.9.4)(@libsql/client@0.12.0)(@parcel/watcher@2.4.1)(@types/node@22.10.7)(better-sqlite3@11.6.0)(drizzle-orm@0.39.3(@cloudflare/workers-types@4.20250214.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.12.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.12)(@types/pg@8.11.10)(better-sqlite3@11.6.0)(bun-types@1.2.4)(kysely@0.27.4)(mysql2@3.11.5)(pg@8.13.1)(prisma@5.22.0))(encoding@0.1.13)(eslint@8.57.1)(ioredis@5.4.1)(less@4.2.1)(lightningcss@1.27.0)(magicast@0.3.5)(mysql2@3.11.5)(optionator@0.9.4)(rollup@4.31.0)(sass@1.83.1)(terser@5.36.0)(typescript@5.7.3)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)):
dependencies: dependencies:
'@nuxt/devalue': 2.0.2 '@nuxt/devalue': 2.0.2
'@nuxt/devtools': 1.6.0(rollup@4.31.0)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2)) '@nuxt/devtools': 1.6.0(rollup@4.31.0)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.3))
'@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.31.0) '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.31.0)
'@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@4.31.0) '@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@4.31.0)
'@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@4.31.0) '@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@4.31.0)
'@nuxt/vite-builder': 3.14.1592(@biomejs/biome@1.9.4)(@types/node@22.10.7)(eslint@8.57.1)(less@4.2.1)(lightningcss@1.27.0)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.31.0)(sass@1.83.1)(terser@5.36.0)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)) '@nuxt/vite-builder': 3.14.1592(@biomejs/biome@1.9.4)(@types/node@22.10.7)(eslint@8.57.1)(less@4.2.1)(lightningcss@1.27.0)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.31.0)(sass@1.83.1)(terser@5.36.0)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3))
'@unhead/dom': 1.11.13 '@unhead/dom': 1.11.13
'@unhead/shared': 1.11.13 '@unhead/shared': 1.11.13
'@unhead/ssr': 1.11.13 '@unhead/ssr': 1.11.13
'@unhead/vue': 1.11.13(vue@3.5.13(typescript@5.7.2)) '@unhead/vue': 1.11.13(vue@3.5.13(typescript@5.7.3))
'@vue/shared': 3.5.13 '@vue/shared': 3.5.13
acorn: 8.14.0 acorn: 8.14.0
c12: 2.0.1(magicast@0.3.5) c12: 2.0.1(magicast@0.3.5)
@@ -39219,7 +39341,7 @@ snapshots:
magic-string: 0.30.14 magic-string: 0.30.14
mlly: 1.7.3 mlly: 1.7.3
nanotar: 0.1.1 nanotar: 0.1.1
nitropack: 2.10.4(@azure/identity@4.6.0)(@libsql/client@0.12.0)(better-sqlite3@11.6.0)(drizzle-orm@0.39.3(@cloudflare/workers-types@4.20250214.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.12.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.12)(@types/pg@8.11.10)(better-sqlite3@11.6.0)(bun-types@1.2.4)(kysely@0.27.4)(mysql2@3.11.5)(pg@8.13.1)(prisma@5.22.0))(encoding@0.1.13)(mysql2@3.11.5)(typescript@5.7.2) nitropack: 2.10.4(@azure/identity@4.6.0)(@libsql/client@0.12.0)(better-sqlite3@11.6.0)(drizzle-orm@0.39.3(@cloudflare/workers-types@4.20250214.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.12.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.12)(@types/pg@8.11.10)(better-sqlite3@11.6.0)(bun-types@1.2.4)(kysely@0.27.4)(mysql2@3.11.5)(pg@8.13.1)(prisma@5.22.0))(encoding@0.1.13)(mysql2@3.11.5)(typescript@5.7.3)
nuxi: 3.15.0 nuxi: 3.15.0
nypm: 0.3.12 nypm: 0.3.12
ofetch: 1.4.1 ofetch: 1.4.1
@@ -39241,13 +39363,13 @@ snapshots:
unhead: 1.11.13 unhead: 1.11.13
unimport: 3.14.4(rollup@4.31.0) unimport: 3.14.4(rollup@4.31.0)
unplugin: 1.16.0 unplugin: 1.16.0
unplugin-vue-router: 0.10.8(rollup@4.31.0)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)) unplugin-vue-router: 0.10.8(rollup@4.31.0)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))
unstorage: 1.13.1(@azure/identity@4.6.0)(ioredis@5.4.1) unstorage: 1.13.1(@azure/identity@4.6.0)(ioredis@5.4.1)
untyped: 1.5.1 untyped: 1.5.1
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
vue-bundle-renderer: 2.1.1 vue-bundle-renderer: 2.1.1
vue-devtools-stub: 0.1.0 vue-devtools-stub: 0.1.0
vue-router: 4.5.0(vue@3.5.13(typescript@5.7.2)) vue-router: 4.5.0(vue@3.5.13(typescript@5.7.3))
optionalDependencies: optionalDependencies:
'@parcel/watcher': 2.4.1 '@parcel/watcher': 2.4.1
'@types/node': 22.10.7 '@types/node': 22.10.7
@@ -39460,6 +39582,18 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- encoding - encoding
openapi-typescript@7.4.2(encoding@0.1.13)(typescript@5.7.3):
dependencies:
'@redocly/openapi-core': 1.25.10(encoding@0.1.13)(supports-color@9.4.0)
ansi-colors: 4.1.3
change-case: 5.4.4
parse-json: 8.1.0
supports-color: 9.4.0
typescript: 5.7.3
yargs-parser: 21.1.1
transitivePeerDependencies:
- encoding
optionator@0.9.4: optionator@0.9.4:
dependencies: dependencies:
deep-is: 0.1.4 deep-is: 0.1.4
@@ -40708,20 +40842,20 @@ snapshots:
quickselect@2.0.0: {} quickselect@2.0.0: {}
radix-vue@1.9.11(vue@3.5.13(typescript@5.7.2)): radix-vue@1.9.11(vue@3.5.13(typescript@5.7.3)):
dependencies: dependencies:
'@floating-ui/dom': 1.6.12 '@floating-ui/dom': 1.6.12
'@floating-ui/vue': 1.1.5(vue@3.5.13(typescript@5.7.2)) '@floating-ui/vue': 1.1.5(vue@3.5.13(typescript@5.7.3))
'@internationalized/date': 3.6.0 '@internationalized/date': 3.6.0
'@internationalized/number': 3.5.4 '@internationalized/number': 3.5.4
'@tanstack/vue-virtual': 3.10.8(vue@3.5.13(typescript@5.7.2)) '@tanstack/vue-virtual': 3.10.8(vue@3.5.13(typescript@5.7.3))
'@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.7.2)) '@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.7.3))
'@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.2)) '@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.3))
aria-hidden: 1.2.4 aria-hidden: 1.2.4
defu: 6.1.4 defu: 6.1.4
fast-deep-equal: 3.1.3 fast-deep-equal: 3.1.3
nanoid: 5.0.9 nanoid: 5.0.9
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
transitivePeerDependencies: transitivePeerDependencies:
- '@vue/composition-api' - '@vue/composition-api'
@@ -41774,11 +41908,11 @@ snapshots:
robust-predicates@3.0.2: {} robust-predicates@3.0.2: {}
rollup-plugin-dts@6.1.1(rollup@4.34.8)(typescript@5.7.2): rollup-plugin-dts@6.1.1(rollup@4.34.8)(typescript@5.7.3):
dependencies: dependencies:
magic-string: 0.30.17 magic-string: 0.30.17
rollup: 4.34.8 rollup: 4.34.8
typescript: 5.7.2 typescript: 5.7.3
optionalDependencies: optionalDependencies:
'@babel/code-frame': 7.26.2 '@babel/code-frame': 7.26.2
@@ -43317,6 +43451,8 @@ snapshots:
typescript@5.7.2: {} typescript@5.7.2: {}
typescript@5.7.3: {}
ua-parser-js@0.7.39: {} ua-parser-js@0.7.39: {}
ua-parser-js@1.0.39: {} ua-parser-js@1.0.39: {}
@@ -43332,7 +43468,7 @@ snapshots:
has-symbols: 1.0.3 has-symbols: 1.0.3
which-boxed-primitive: 1.0.2 which-boxed-primitive: 1.0.2
unbuild@3.5.0(sass@1.83.1)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)): unbuild@3.5.0(sass@1.83.1)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3)):
dependencies: dependencies:
'@rollup/plugin-alias': 5.1.1(rollup@4.34.8) '@rollup/plugin-alias': 5.1.1(rollup@4.34.8)
'@rollup/plugin-commonjs': 28.0.2(rollup@4.34.8) '@rollup/plugin-commonjs': 28.0.2(rollup@4.34.8)
@@ -43348,18 +43484,18 @@ snapshots:
hookable: 5.5.3 hookable: 5.5.3
jiti: 2.4.2 jiti: 2.4.2
magic-string: 0.30.17 magic-string: 0.30.17
mkdist: 2.2.0(sass@1.83.1)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)) mkdist: 2.2.0(sass@1.83.1)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3))
mlly: 1.7.4 mlly: 1.7.4
pathe: 2.0.3 pathe: 2.0.3
pkg-types: 2.0.0 pkg-types: 2.0.0
pretty-bytes: 6.1.1 pretty-bytes: 6.1.1
rollup: 4.34.8 rollup: 4.34.8
rollup-plugin-dts: 6.1.1(rollup@4.34.8)(typescript@5.7.2) rollup-plugin-dts: 6.1.1(rollup@4.34.8)(typescript@5.7.3)
scule: 1.3.0 scule: 1.3.0
tinyglobby: 0.2.12 tinyglobby: 0.2.12
untyped: 2.0.0 untyped: 2.0.0
optionalDependencies: optionalDependencies:
typescript: 5.7.2 typescript: 5.7.3
transitivePeerDependencies: transitivePeerDependencies:
- sass - sass
- vue - vue
@@ -43602,11 +43738,11 @@ snapshots:
unpipe@1.0.0: {} unpipe@1.0.0: {}
unplugin-vue-router@0.10.8(rollup@4.31.0)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)): unplugin-vue-router@0.10.8(rollup@4.31.0)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)):
dependencies: dependencies:
'@babel/types': 7.26.5 '@babel/types': 7.26.5
'@rollup/pluginutils': 5.1.3(rollup@4.31.0) '@rollup/pluginutils': 5.1.3(rollup@4.31.0)
'@vue-macros/common': 1.15.0(rollup@4.31.0)(vue@3.5.13(typescript@5.7.2)) '@vue-macros/common': 1.15.0(rollup@4.31.0)(vue@3.5.13(typescript@5.7.3))
ast-walker-scope: 0.6.2 ast-walker-scope: 0.6.2
chokidar: 3.6.0 chokidar: 3.6.0
fast-glob: 3.3.3 fast-glob: 3.3.3
@@ -43619,7 +43755,7 @@ snapshots:
unplugin: 1.16.0 unplugin: 1.16.0
yaml: 2.6.0 yaml: 2.6.0
optionalDependencies: optionalDependencies:
vue-router: 4.5.0(vue@3.5.13(typescript@5.7.2)) vue-router: 4.5.0(vue@3.5.13(typescript@5.7.3))
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
- vue - vue
@@ -43790,7 +43926,7 @@ snapshots:
kleur: 4.1.5 kleur: 4.1.5
sade: 1.8.1 sade: 1.8.1
v-calendar@3.1.2(@popperjs/core@2.11.8)(vue@3.5.13(typescript@5.7.2)): v-calendar@3.1.2(@popperjs/core@2.11.8)(vue@3.5.13(typescript@5.7.3)):
dependencies: dependencies:
'@popperjs/core': 2.11.8 '@popperjs/core': 2.11.8
'@types/lodash': 4.17.13 '@types/lodash': 4.17.13
@@ -43798,8 +43934,8 @@ snapshots:
date-fns: 2.30.0 date-fns: 2.30.0
date-fns-tz: 2.0.1(date-fns@2.30.0) date-fns-tz: 2.0.1(date-fns@2.30.0)
lodash: 4.17.21 lodash: 4.17.21
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
vue-screen-utils: 1.0.0-beta.13(vue@3.5.13(typescript@5.7.2)) vue-screen-utils: 1.0.0-beta.13(vue@3.5.13(typescript@5.7.3))
valibot@0.31.1: valibot@0.31.1:
optional: true optional: true
@@ -43811,6 +43947,11 @@ snapshots:
valibot@1.0.0-beta.15(typescript@5.7.2): valibot@1.0.0-beta.15(typescript@5.7.2):
optionalDependencies: optionalDependencies:
typescript: 5.7.2 typescript: 5.7.2
optional: true
valibot@1.0.0-beta.15(typescript@5.7.3):
optionalDependencies:
typescript: 5.7.3
validate-html-nesting@1.2.2: {} validate-html-nesting@1.2.2: {}
@@ -43835,11 +43976,11 @@ snapshots:
bits-ui: 0.21.16(svelte@4.2.19) bits-ui: 0.21.16(svelte@4.2.19)
svelte: 4.2.19 svelte: 4.2.19
vaul-vue@0.2.0(radix-vue@1.9.11(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)): vaul-vue@0.2.0(radix-vue@1.9.11(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)):
dependencies: dependencies:
'@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.7.2)) '@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.7.3))
radix-vue: 1.9.11(vue@3.5.13(typescript@5.7.2)) radix-vue: 1.9.11(vue@3.5.13(typescript@5.7.3))
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
transitivePeerDependencies: transitivePeerDependencies:
- '@vue/composition-api' - '@vue/composition-api'
@@ -43861,11 +44002,11 @@ snapshots:
- '@types/react' - '@types/react'
- '@types/react-dom' - '@types/react-dom'
vee-validate@4.14.7(vue@3.5.13(typescript@5.7.2)): vee-validate@4.14.7(vue@3.5.13(typescript@5.7.3)):
dependencies: dependencies:
'@vue/devtools-api': 7.6.2 '@vue/devtools-api': 7.6.2
type-fest: 4.26.1 type-fest: 4.26.1
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
vfile-location@5.0.3: vfile-location@5.0.3:
dependencies: dependencies:
@@ -44105,7 +44246,7 @@ snapshots:
- supports-color - supports-color
- terser - terser
vite-plugin-checker@0.8.0(@biomejs/biome@1.9.4)(eslint@8.57.1)(optionator@0.9.4)(typescript@5.7.2)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)): vite-plugin-checker@0.8.0(@biomejs/biome@1.9.4)(eslint@8.57.1)(optionator@0.9.4)(typescript@5.7.3)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)):
dependencies: dependencies:
'@babel/code-frame': 7.26.2 '@babel/code-frame': 7.26.2
ansi-escapes: 4.3.2 ansi-escapes: 4.3.2
@@ -44126,7 +44267,7 @@ snapshots:
'@biomejs/biome': 1.9.4 '@biomejs/biome': 1.9.4
eslint: 8.57.1 eslint: 8.57.1
optionator: 0.9.4 optionator: 0.9.4
typescript: 5.7.2 typescript: 5.7.3
vite-plugin-inspect@0.8.7(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.31.0))(rollup@4.31.0)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)): vite-plugin-inspect@0.8.7(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.31.0))(rollup@4.31.0)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)):
dependencies: dependencies:
@@ -44434,20 +44575,20 @@ snapshots:
dependencies: dependencies:
ufo: 1.5.4 ufo: 1.5.4
vue-demi@0.14.10(vue@3.5.13(typescript@5.7.2)): vue-demi@0.14.10(vue@3.5.13(typescript@5.7.3)):
dependencies: dependencies:
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
vue-devtools-stub@0.1.0: {} vue-devtools-stub@0.1.0: {}
vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)): vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)):
dependencies: dependencies:
'@vue/devtools-api': 6.6.4 '@vue/devtools-api': 6.6.4
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
vue-screen-utils@1.0.0-beta.13(vue@3.5.13(typescript@5.7.2)): vue-screen-utils@1.0.0-beta.13(vue@3.5.13(typescript@5.7.3)):
dependencies: dependencies:
vue: 3.5.13(typescript@5.7.2) vue: 3.5.13(typescript@5.7.3)
vue-sonner@1.3.0: {} vue-sonner@1.3.0: {}
@@ -44459,15 +44600,15 @@ snapshots:
'@vue/server-renderer': 3.3.4(vue@3.3.4) '@vue/server-renderer': 3.3.4(vue@3.3.4)
'@vue/shared': 3.3.4 '@vue/shared': 3.3.4
vue@3.5.13(typescript@5.7.2): vue@3.5.13(typescript@5.7.3):
dependencies: dependencies:
'@vue/compiler-dom': 3.5.13 '@vue/compiler-dom': 3.5.13
'@vue/compiler-sfc': 3.5.13 '@vue/compiler-sfc': 3.5.13
'@vue/runtime-dom': 3.5.13 '@vue/runtime-dom': 3.5.13
'@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.7.2)) '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.7.3))
'@vue/shared': 3.5.13 '@vue/shared': 3.5.13
optionalDependencies: optionalDependencies:
typescript: 5.7.2 typescript: 5.7.3
w3c-keyname@2.2.8: {} w3c-keyname@2.2.8: {}

View File

@@ -14,4 +14,4 @@ catalog:
"better-call": "^1.0.3" "better-call": "^1.0.3"
"@better-fetch/fetch": "^1.1.15" "@better-fetch/fetch": "^1.1.15"
"unbuild": "^3.5.0" "unbuild": "^3.5.0"
"typescript": "^5.7.2" "typescript": "^5.7.3"