mirror of
https://github.com/LukeHagar/better-auth.git
synced 2025-12-09 20:27:44 +00:00
docs: v1.2 release notes (#1602)
This commit is contained in:
@@ -5,28 +5,51 @@ import {
|
||||
Card,
|
||||
CardContent,
|
||||
CardDescription,
|
||||
CardFooter,
|
||||
CardHeader,
|
||||
CardTitle,
|
||||
} from "@/components/ui/card";
|
||||
import { Checkbox } from "@/components/ui/checkbox";
|
||||
import { Input } from "@/components/ui/input";
|
||||
import { Label } from "@/components/ui/label";
|
||||
import { PasswordInput } from "@/components/ui/password-input";
|
||||
import { signIn } from "@/lib/auth-client";
|
||||
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 { useRouter } from "next/navigation";
|
||||
import { useState } from "react";
|
||||
import { useState, useEffect } from "react";
|
||||
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() {
|
||||
const [email, setEmail] = useState("");
|
||||
const [password, setPassword] = useState("");
|
||||
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 [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 (
|
||||
<Card className="z-50 rounded-md rounded-t-none max-w-md">
|
||||
<CardHeader>
|
||||
@@ -46,9 +69,13 @@ export default function SignIn() {
|
||||
required
|
||||
onChange={(e) => {
|
||||
setEmail(e.target.value);
|
||||
setTouched((prev) => ({ ...prev, email: true }));
|
||||
}}
|
||||
value={email}
|
||||
/>
|
||||
{touched.email && errors.email && (
|
||||
<p className="text-red-500 text-sm">{errors.email}</p>
|
||||
)}
|
||||
</div>
|
||||
<div className="grid gap-2">
|
||||
<div className="flex items-center">
|
||||
@@ -63,24 +90,21 @@ export default function SignIn() {
|
||||
<PasswordInput
|
||||
id="password"
|
||||
value={password}
|
||||
onChange={(e) => setPassword(e.target.value)}
|
||||
onChange={(e) => {
|
||||
setPassword(e.target.value);
|
||||
setTouched((prev) => ({ ...prev, password: true }));
|
||||
}}
|
||||
autoComplete="password"
|
||||
placeholder="Password"
|
||||
/>
|
||||
{touched.password && errors.password && (
|
||||
<p className="text-red-500 text-sm">{errors.password}</p>
|
||||
)}
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
<Checkbox
|
||||
onClick={() => {
|
||||
setRememberMe(!rememberMe);
|
||||
}}
|
||||
/>
|
||||
<Label>Remember me</Label>
|
||||
</div>
|
||||
|
||||
<Button
|
||||
type="submit"
|
||||
className="w-full"
|
||||
disabled={loading}
|
||||
disabled={!isValid || loading}
|
||||
onClick={async () => {
|
||||
await signIn.email(
|
||||
{
|
||||
@@ -90,21 +114,16 @@ export default function SignIn() {
|
||||
rememberMe,
|
||||
},
|
||||
{
|
||||
onRequest: () => {
|
||||
setLoading(true);
|
||||
},
|
||||
onResponse: () => {
|
||||
setLoading(false);
|
||||
},
|
||||
onError: (ctx) => {
|
||||
toast.error(ctx.error.message);
|
||||
},
|
||||
onRequest: () => setLoading(true),
|
||||
onResponse: () => setLoading(false),
|
||||
onError: (ctx) => toast.error(ctx.error.message),
|
||||
},
|
||||
);
|
||||
}}
|
||||
>
|
||||
{loading ? <Loader2 size={16} className="animate-spin" /> : "Login"}
|
||||
</Button>
|
||||
|
||||
<div className="grid grid-cols-4 gap-2">
|
||||
<Button
|
||||
variant="outline"
|
||||
@@ -262,34 +281,8 @@ export default function SignIn() {
|
||||
</svg>
|
||||
</Button>
|
||||
</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>
|
||||
</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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,48 +1,102 @@
|
||||
"use client";
|
||||
|
||||
import Image from "next/image";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import {
|
||||
Card,
|
||||
CardContent,
|
||||
CardDescription,
|
||||
CardFooter,
|
||||
CardHeader,
|
||||
CardTitle,
|
||||
} from "@/components/ui/card";
|
||||
import { toast } from "sonner";
|
||||
import { Input } from "@/components/ui/input";
|
||||
import { Label } from "@/components/ui/label";
|
||||
import { PasswordInput } from "@/components/ui/password-input";
|
||||
import { DiscordLogoIcon, GitHubLogoIcon } from "@radix-ui/react-icons";
|
||||
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 { signUp, signIn } from "@/lib/auth-client";
|
||||
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() {
|
||||
const [firstName, setFirstName] = useState("");
|
||||
const [lastName, setLastName] = useState("");
|
||||
const [email, setEmail] = useState("");
|
||||
const [password, setPassword] = useState("");
|
||||
const [passwordConfirmation, setPasswordConfirmation] = useState("");
|
||||
const [formData, setFormData] = useState<FormDataType>({
|
||||
firstName: "",
|
||||
lastName: "",
|
||||
email: "",
|
||||
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 [imagePreview, setImagePreview] = useState<string | null>(null);
|
||||
const router = useRouter();
|
||||
|
||||
const handleImageChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
const file = e.target.files?.[0];
|
||||
if (file) {
|
||||
setImage(file);
|
||||
const reader = new FileReader();
|
||||
reader.onloadend = () => {
|
||||
setImagePreview(reader.result as string);
|
||||
useEffect(() => {
|
||||
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) {
|
||||
const reader = new FileReader();
|
||||
reader.onload = () => setImagePreview(reader.result as string);
|
||||
reader.readAsDataURL(file);
|
||||
} else {
|
||||
setImagePreview(null);
|
||||
}
|
||||
};
|
||||
const [loading, setLoading] = useState(false);
|
||||
|
||||
return (
|
||||
<Card className="z-50 rounded-md rounded-t-none max-w-md">
|
||||
<CardHeader>
|
||||
@@ -55,28 +109,28 @@ export function SignUp() {
|
||||
<div className="grid gap-4">
|
||||
<div className="grid grid-cols-2 gap-4">
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor="first-name">First name</Label>
|
||||
<Label htmlFor="firstName">First name</Label>
|
||||
<Input
|
||||
id="first-name"
|
||||
id="firstName"
|
||||
placeholder="Max"
|
||||
required
|
||||
onChange={(e) => {
|
||||
setFirstName(e.target.value);
|
||||
}}
|
||||
value={firstName}
|
||||
value={formData.firstName}
|
||||
onChange={handleChange}
|
||||
/>
|
||||
{touched.firstName && errors.firstName && (
|
||||
<p className="text-red-500 text-sm">{errors.firstName}</p>
|
||||
)}
|
||||
</div>
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor="last-name">Last name</Label>
|
||||
<Label htmlFor="lastName">Last name</Label>
|
||||
<Input
|
||||
id="last-name"
|
||||
id="lastName"
|
||||
placeholder="Robinson"
|
||||
required
|
||||
onChange={(e) => {
|
||||
setLastName(e.target.value);
|
||||
}}
|
||||
value={lastName}
|
||||
value={formData.lastName}
|
||||
onChange={handleChange}
|
||||
/>
|
||||
{touched.lastName && errors.lastName && (
|
||||
<p className="text-red-500 text-sm">{errors.lastName}</p>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<div className="grid gap-2">
|
||||
@@ -85,32 +139,38 @@ export function SignUp() {
|
||||
id="email"
|
||||
type="email"
|
||||
placeholder="m@example.com"
|
||||
required
|
||||
onChange={(e) => {
|
||||
setEmail(e.target.value);
|
||||
}}
|
||||
value={email}
|
||||
value={formData.email}
|
||||
onChange={handleChange}
|
||||
/>
|
||||
{touched.email && errors.email && (
|
||||
<p className="text-red-500 text-sm">{errors.email}</p>
|
||||
)}
|
||||
</div>
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor="password">Password</Label>
|
||||
<PasswordInput
|
||||
id="password"
|
||||
value={password}
|
||||
onChange={(e) => setPassword(e.target.value)}
|
||||
autoComplete="new-password"
|
||||
value={formData.password}
|
||||
onChange={handleChange}
|
||||
placeholder="Password"
|
||||
/>
|
||||
{touched.password && errors.password && (
|
||||
<p className="text-red-500 text-sm">{errors.password}</p>
|
||||
)}
|
||||
</div>
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor="password">Confirm Password</Label>
|
||||
<Label htmlFor="passwordConfirmation">Confirm Password</Label>
|
||||
<PasswordInput
|
||||
id="password_confirmation"
|
||||
value={passwordConfirmation}
|
||||
onChange={(e) => setPasswordConfirmation(e.target.value)}
|
||||
autoComplete="new-password"
|
||||
id="passwordConfirmation"
|
||||
value={formData.passwordConfirmation}
|
||||
onChange={handleChange}
|
||||
placeholder="Confirm Password"
|
||||
/>
|
||||
{touched.passwordConfirmation && errors.passwordConfirmation && (
|
||||
<p className="text-red-500 text-sm">
|
||||
{errors.passwordConfirmation}
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor="image">Profile Image (optional)</Label>
|
||||
@@ -125,7 +185,6 @@ export function SignUp() {
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
<div className="flex items-center gap-2 w-full">
|
||||
<Input
|
||||
id="image"
|
||||
type="file"
|
||||
@@ -144,23 +203,18 @@ export function SignUp() {
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<Button
|
||||
type="submit"
|
||||
className="w-full"
|
||||
disabled={loading}
|
||||
disabled={!isValid || loading}
|
||||
onClick={async () => {
|
||||
if (password !== passwordConfirmation) {
|
||||
toast.error(
|
||||
"Please ensure your password and confirm password match.",
|
||||
);
|
||||
return;
|
||||
}
|
||||
setLoading(true);
|
||||
await signUp.email({
|
||||
email,
|
||||
password,
|
||||
name: `${firstName} ${lastName}`,
|
||||
image: image ? await convertImageToBase64(image) : "",
|
||||
email: formData.email,
|
||||
password: formData.password,
|
||||
name: `${formData.firstName} ${formData.lastName}`,
|
||||
image: formData.image
|
||||
? await convertImageToBase64(formData.image)
|
||||
: "",
|
||||
callbackURL: "/dashboard",
|
||||
fetchOptions: {
|
||||
onResponse: () => {
|
||||
@@ -177,6 +231,8 @@ export function SignUp() {
|
||||
},
|
||||
},
|
||||
});
|
||||
setLoading(false);
|
||||
router.push("/dashboard");
|
||||
}}
|
||||
>
|
||||
{loading ? (
|
||||
@@ -269,17 +325,9 @@ export function SignUp() {
|
||||
</div>
|
||||
</div>
|
||||
</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>
|
||||
);
|
||||
}
|
||||
|
||||
async function convertImageToBase64(file: File): Promise<string> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const reader = new FileReader();
|
||||
|
||||
173
docs/app/api/og-release/route.tsx
Normal file
173
docs/app/api/og-release/route.tsx
Normal 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 });
|
||||
}
|
||||
}
|
||||
228
docs/app/changelogs/[[...slug]]/page.tsx
Normal file
228
docs/app/changelogs/[[...slug]]/page.tsx
Normal 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>
|
||||
);
|
||||
};
|
||||
@@ -1,10 +1,10 @@
|
||||
import Link from "next/link";
|
||||
import { useId } from "react";
|
||||
import { cn } from "@/lib/utils";
|
||||
import { IconLink } from "./_components/changelog-layout";
|
||||
import { BookIcon, GitHubIcon, XIcon } from "./_components/icons";
|
||||
import { IconLink } from "./changelog-layout";
|
||||
import { BookIcon, GitHubIcon, XIcon } from "./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 Markdown from "react-markdown";
|
||||
import defaultMdxComponents from "fumadocs-ui/mdx";
|
||||
@@ -141,10 +141,19 @@ const ChangelogPage = async () => {
|
||||
</div>
|
||||
<Link
|
||||
href={
|
||||
`#${props.children
|
||||
props.children
|
||||
?.toString()
|
||||
.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()}
|
||||
@@ -206,7 +215,7 @@ ${message.content}
|
||||
|
||||
export default ChangelogPage;
|
||||
|
||||
function Glow() {
|
||||
export function Glow() {
|
||||
let id = useId();
|
||||
|
||||
return (
|
||||
5
docs/app/changelogs/layout.tsx
Normal file
5
docs/app/changelogs/layout.tsx
Normal file
@@ -0,0 +1,5 @@
|
||||
import type { ReactNode } from "react";
|
||||
|
||||
export default function Layout({ children }: { children: ReactNode }) {
|
||||
return <div>{children}</div>;
|
||||
}
|
||||
@@ -147,7 +147,9 @@ export async function generateStaticParams() {
|
||||
|
||||
export async function generateMetadata({
|
||||
params,
|
||||
}: { params: Promise<{ slug?: string[] }> }) {
|
||||
}: {
|
||||
params: Promise<{ slug?: string[] }>;
|
||||
}) {
|
||||
const { slug } = await params;
|
||||
const page = source.getPage(slug);
|
||||
if (page == null) notFound();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { source } from "@/app/source";
|
||||
import { source, changelogs } from "@/app/source";
|
||||
import {
|
||||
DocsNavbarMobileBtn,
|
||||
DocsNavbarMobileTitle,
|
||||
@@ -27,3 +27,7 @@ export const docsOptions = {
|
||||
...baseOptions,
|
||||
tree: source.pageTree,
|
||||
};
|
||||
export const changelogOptions = {
|
||||
...baseOptions,
|
||||
tree: changelogs.pageTree,
|
||||
};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { docs, meta } from "@/.source";
|
||||
import { changelogCollection, docs, meta } from "@/.source";
|
||||
import { createMDXSource } from "fumadocs-mdx";
|
||||
import { loader } from "fumadocs-core/source";
|
||||
import { createOpenAPI } from "fumadocs-openapi/server";
|
||||
@@ -7,5 +7,9 @@ export const source = loader({
|
||||
baseUrl: "/docs",
|
||||
source: createMDXSource(docs, meta),
|
||||
});
|
||||
export const changelogs = loader({
|
||||
baseUrl: "/changelogs",
|
||||
source: createMDXSource(changelogCollection),
|
||||
});
|
||||
|
||||
export const openapi = createOpenAPI({});
|
||||
|
||||
41
docs/components/ui/stepper.tsx
Normal file
41
docs/components/ui/stepper.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
94
docs/content/changelogs/1-2.mdx
Normal file
94
docs/content/changelogs/1-2.mdx
Normal 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!** 🚀
|
||||
52
docs/content/changelogs/1.0.mdx
Normal file
52
docs/content/changelogs/1.0.mdx
Normal 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, it’s 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 you’re 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 can’t 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
|
||||
```
|
||||
@@ -1,6 +1,5 @@
|
||||
import { clsx, type ClassValue } from "clsx";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
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) * 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(",", "");
|
||||
}
|
||||
|
||||
@@ -40,6 +40,9 @@ export default withMDX({
|
||||
{
|
||||
hostname: "github.com",
|
||||
},
|
||||
{
|
||||
hostname: "hebbkx1anhila5yf.public.blob.vercel-storage.com",
|
||||
},
|
||||
],
|
||||
},
|
||||
devIndicators: {
|
||||
|
||||
1
docs/public/plus.svg
Normal file
1
docs/public/plus.svg
Normal 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 |
@@ -17,11 +17,13 @@ export default defineConfig({
|
||||
},
|
||||
});
|
||||
|
||||
export const changelog = defineCollections({
|
||||
export const changelogCollection = defineCollections({
|
||||
type: "doc",
|
||||
dir: "./content/changelog",
|
||||
dir: "./content/changelogs",
|
||||
schema: z.object({
|
||||
title: z.string(),
|
||||
description: z.string(),
|
||||
date: z.date(),
|
||||
}),
|
||||
});
|
||||
|
||||
|
||||
@@ -184,7 +184,7 @@ export const anonymous = (options?: AnonymousOptions) => {
|
||||
return;
|
||||
}
|
||||
/**
|
||||
* Make sure the use had an anonymous session.
|
||||
* Make sure the user had an anonymous session.
|
||||
*/
|
||||
const session = await getSessionFromCtx<{ isAnonymous: boolean }>(
|
||||
ctx,
|
||||
|
||||
357
pnpm-lock.yaml
generated
357
pnpm-lock.yaml
generated
@@ -13,8 +13,8 @@ catalogs:
|
||||
specifier: ^1.0.3
|
||||
version: 1.0.3
|
||||
typescript:
|
||||
specifier: ^5.7.2
|
||||
version: 5.7.2
|
||||
specifier: ^5.7.3
|
||||
version: 5.7.3
|
||||
unbuild:
|
||||
specifier: ^3.5.0
|
||||
version: 3.5.0
|
||||
@@ -981,7 +981,7 @@ importers:
|
||||
dependencies:
|
||||
'@radix-icons/vue':
|
||||
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':
|
||||
specifier: ^7.6.12
|
||||
version: 7.6.12
|
||||
@@ -990,13 +990,13 @@ importers:
|
||||
version: 1.4.3-beta.0
|
||||
'@unovis/vue':
|
||||
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':
|
||||
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':
|
||||
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:
|
||||
specifier: workspace:*
|
||||
version: link:../../packages/better-auth
|
||||
@@ -1011,13 +1011,13 @@ importers:
|
||||
version: 2.1.1
|
||||
embla-carousel-vue:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
specifier: ^0.10.4
|
||||
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)
|
||||
v-calendar:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
specifier: latest
|
||||
version: 3.5.13(typescript@5.7.2)
|
||||
version: 3.5.13(typescript@5.7.3)
|
||||
vue-router:
|
||||
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:
|
||||
specifier: ^1.3.0
|
||||
version: 1.3.0
|
||||
@@ -1522,7 +1522,7 @@ importers:
|
||||
version: 0.11.3
|
||||
valibot:
|
||||
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:
|
||||
specifier: ^3.24.1
|
||||
version: 3.24.1
|
||||
@@ -1592,16 +1592,16 @@ importers:
|
||||
version: 18.6.1
|
||||
typescript:
|
||||
specifier: 'catalog:'
|
||||
version: 5.7.2
|
||||
version: 5.7.3
|
||||
unbuild:
|
||||
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:
|
||||
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)
|
||||
vue:
|
||||
specifier: ^3.5.13
|
||||
version: 3.5.13(typescript@5.7.2)
|
||||
version: 3.5.13(typescript@5.7.3)
|
||||
|
||||
packages/cli:
|
||||
dependencies:
|
||||
@@ -1683,10 +1683,10 @@ importers:
|
||||
version: 11.0.4
|
||||
typescript:
|
||||
specifier: 'catalog:'
|
||||
version: 5.7.2
|
||||
version: 5.7.3
|
||||
unbuild:
|
||||
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:
|
||||
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)
|
||||
@@ -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))
|
||||
unbuild:
|
||||
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:
|
||||
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)
|
||||
@@ -19396,6 +19421,11 @@ packages:
|
||||
engines: {node: '>=14.17'}
|
||||
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:
|
||||
resolution: {integrity: sha512-IZ6acm6RhQHNibSt7+c09hhvsKy9WUr4DVbeq9U8o71qxyYtJpQeDxQnMrVqnIFMLcQjHO0I9wgfO2vIahht4w==}
|
||||
hasBin: true
|
||||
@@ -23510,11 +23540,11 @@ snapshots:
|
||||
|
||||
'@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:
|
||||
'@floating-ui/dom': 1.6.12
|
||||
'@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:
|
||||
- '@vue/composition-api'
|
||||
- vue
|
||||
@@ -24516,13 +24546,13 @@ snapshots:
|
||||
rc9: 2.1.2
|
||||
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:
|
||||
'@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-wizard': 1.6.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
|
||||
birpc: 0.2.19
|
||||
consola: 3.2.3
|
||||
@@ -24635,12 +24665,12 @@ snapshots:
|
||||
- rollup
|
||||
- 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:
|
||||
'@nuxt/kit': 3.14.1592(magicast@0.3.5)(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-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': 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.3))
|
||||
autoprefixer: 10.4.20(postcss@8.4.49)
|
||||
clear: 0.1.0
|
||||
consola: 3.2.3
|
||||
@@ -24669,8 +24699,8 @@ snapshots:
|
||||
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-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))
|
||||
vue: 3.5.13(typescript@5.7.2)
|
||||
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.3)
|
||||
vue-bundle-renderer: 2.1.1
|
||||
transitivePeerDependencies:
|
||||
- '@biomejs/biome'
|
||||
@@ -25976,9 +26006,9 @@ snapshots:
|
||||
dependencies:
|
||||
'@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:
|
||||
vue: 3.5.13(typescript@5.7.2)
|
||||
vue: 3.5.13(typescript@5.7.3)
|
||||
|
||||
'@radix-ui/number@1.1.0': {}
|
||||
|
||||
@@ -29111,10 +29141,10 @@ snapshots:
|
||||
|
||||
'@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:
|
||||
'@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': {}
|
||||
|
||||
@@ -29908,14 +29938,14 @@ snapshots:
|
||||
'@unhead/schema': 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:
|
||||
'@unhead/schema': 1.11.13
|
||||
'@unhead/shared': 1.11.13
|
||||
defu: 6.1.4
|
||||
hookable: 5.5.3
|
||||
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':
|
||||
dependencies:
|
||||
@@ -29963,10 +29993,10 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- 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:
|
||||
'@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)':
|
||||
dependencies:
|
||||
@@ -30032,10 +30062,10 @@ snapshots:
|
||||
|
||||
'@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:
|
||||
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
|
||||
transitivePeerDependencies:
|
||||
- vue
|
||||
@@ -30154,20 +30184,20 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- 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:
|
||||
'@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)
|
||||
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:
|
||||
- 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:
|
||||
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':
|
||||
dependencies:
|
||||
@@ -30292,7 +30322,7 @@ snapshots:
|
||||
|
||||
'@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:
|
||||
'@babel/types': 7.26.5
|
||||
'@rollup/pluginutils': 5.1.3(rollup@4.31.0)
|
||||
@@ -30301,7 +30331,7 @@ snapshots:
|
||||
local-pkg: 0.5.1
|
||||
magic-string-ast: 0.6.2
|
||||
optionalDependencies:
|
||||
vue: 3.5.13(typescript@5.7.2)
|
||||
vue: 3.5.13(typescript@5.7.3)
|
||||
transitivePeerDependencies:
|
||||
- rollup
|
||||
|
||||
@@ -30401,7 +30431,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@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:
|
||||
'@vue/devtools-kit': 7.6.2
|
||||
'@vue/devtools-shared': 7.6.2
|
||||
@@ -30409,7 +30439,7 @@ snapshots:
|
||||
nanoid: 3.3.8
|
||||
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))
|
||||
vue: 3.5.13(typescript@5.7.2)
|
||||
vue: 3.5.13(typescript@5.7.3)
|
||||
transitivePeerDependencies:
|
||||
- vite
|
||||
|
||||
@@ -30482,32 +30512,32 @@ snapshots:
|
||||
'@vue/shared': 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:
|
||||
'@vue/compiler-ssr': 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.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:
|
||||
'@types/web-bluetooth': 0.0.20
|
||||
'@vueuse/metadata': 10.11.1
|
||||
'@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.2))
|
||||
vue-demi: 0.14.10(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.3))
|
||||
transitivePeerDependencies:
|
||||
- '@vue/composition-api'
|
||||
- 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:
|
||||
'@types/web-bluetooth': 0.0.20
|
||||
'@vueuse/metadata': 11.3.0
|
||||
'@vueuse/shared': 11.3.0(vue@3.5.13(typescript@5.7.2))
|
||||
vue-demi: 0.14.10(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.3))
|
||||
transitivePeerDependencies:
|
||||
- '@vue/composition-api'
|
||||
- vue
|
||||
@@ -30516,16 +30546,16 @@ snapshots:
|
||||
|
||||
'@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:
|
||||
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:
|
||||
- '@vue/composition-api'
|
||||
- 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:
|
||||
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:
|
||||
- '@vue/composition-api'
|
||||
- vue
|
||||
@@ -33454,11 +33484,11 @@ snapshots:
|
||||
embla-carousel-reactive-utils: 8.5.1(embla-carousel@8.5.1)
|
||||
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:
|
||||
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: {}
|
||||
|
||||
@@ -38632,7 +38662,7 @@ snapshots:
|
||||
|
||||
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:
|
||||
autoprefixer: 10.4.20(postcss@8.4.49)
|
||||
citty: 0.1.6
|
||||
@@ -38649,8 +38679,8 @@ snapshots:
|
||||
tinyglobby: 0.2.12
|
||||
optionalDependencies:
|
||||
sass: 1.83.1
|
||||
typescript: 5.7.2
|
||||
vue: 3.5.13(typescript@5.7.2)
|
||||
typescript: 5.7.3
|
||||
vue: 3.5.13(typescript@5.7.3)
|
||||
|
||||
mlly@1.7.3:
|
||||
dependencies:
|
||||
@@ -39010,6 +39040,98 @@ snapshots:
|
||||
- supports-color
|
||||
- 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:
|
||||
dependencies:
|
||||
'@types/nlcst': 2.0.3
|
||||
@@ -39182,18 +39304,18 @@ snapshots:
|
||||
|
||||
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:
|
||||
'@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/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/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/shared': 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
|
||||
acorn: 8.14.0
|
||||
c12: 2.0.1(magicast@0.3.5)
|
||||
@@ -39219,7 +39341,7 @@ snapshots:
|
||||
magic-string: 0.30.14
|
||||
mlly: 1.7.3
|
||||
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
|
||||
nypm: 0.3.12
|
||||
ofetch: 1.4.1
|
||||
@@ -39241,13 +39363,13 @@ snapshots:
|
||||
unhead: 1.11.13
|
||||
unimport: 3.14.4(rollup@4.31.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)
|
||||
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-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:
|
||||
'@parcel/watcher': 2.4.1
|
||||
'@types/node': 22.10.7
|
||||
@@ -39460,6 +39582,18 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- 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:
|
||||
dependencies:
|
||||
deep-is: 0.1.4
|
||||
@@ -40708,20 +40842,20 @@ snapshots:
|
||||
|
||||
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:
|
||||
'@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/number': 3.5.4
|
||||
'@tanstack/vue-virtual': 3.10.8(vue@3.5.13(typescript@5.7.2))
|
||||
'@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.7.2))
|
||||
'@vueuse/shared': 10.11.1(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.3))
|
||||
'@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.3))
|
||||
aria-hidden: 1.2.4
|
||||
defu: 6.1.4
|
||||
fast-deep-equal: 3.1.3
|
||||
nanoid: 5.0.9
|
||||
vue: 3.5.13(typescript@5.7.2)
|
||||
vue: 3.5.13(typescript@5.7.3)
|
||||
transitivePeerDependencies:
|
||||
- '@vue/composition-api'
|
||||
|
||||
@@ -41774,11 +41908,11 @@ snapshots:
|
||||
|
||||
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:
|
||||
magic-string: 0.30.17
|
||||
rollup: 4.34.8
|
||||
typescript: 5.7.2
|
||||
typescript: 5.7.3
|
||||
optionalDependencies:
|
||||
'@babel/code-frame': 7.26.2
|
||||
|
||||
@@ -43317,6 +43451,8 @@ snapshots:
|
||||
|
||||
typescript@5.7.2: {}
|
||||
|
||||
typescript@5.7.3: {}
|
||||
|
||||
ua-parser-js@0.7.39: {}
|
||||
|
||||
ua-parser-js@1.0.39: {}
|
||||
@@ -43332,7 +43468,7 @@ snapshots:
|
||||
has-symbols: 1.0.3
|
||||
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:
|
||||
'@rollup/plugin-alias': 5.1.1(rollup@4.34.8)
|
||||
'@rollup/plugin-commonjs': 28.0.2(rollup@4.34.8)
|
||||
@@ -43348,18 +43484,18 @@ snapshots:
|
||||
hookable: 5.5.3
|
||||
jiti: 2.4.2
|
||||
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
|
||||
pathe: 2.0.3
|
||||
pkg-types: 2.0.0
|
||||
pretty-bytes: 6.1.1
|
||||
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
|
||||
tinyglobby: 0.2.12
|
||||
untyped: 2.0.0
|
||||
optionalDependencies:
|
||||
typescript: 5.7.2
|
||||
typescript: 5.7.3
|
||||
transitivePeerDependencies:
|
||||
- sass
|
||||
- vue
|
||||
@@ -43602,11 +43738,11 @@ snapshots:
|
||||
|
||||
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:
|
||||
'@babel/types': 7.26.5
|
||||
'@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
|
||||
chokidar: 3.6.0
|
||||
fast-glob: 3.3.3
|
||||
@@ -43619,7 +43755,7 @@ snapshots:
|
||||
unplugin: 1.16.0
|
||||
yaml: 2.6.0
|
||||
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:
|
||||
- rollup
|
||||
- vue
|
||||
@@ -43790,7 +43926,7 @@ snapshots:
|
||||
kleur: 4.1.5
|
||||
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:
|
||||
'@popperjs/core': 2.11.8
|
||||
'@types/lodash': 4.17.13
|
||||
@@ -43798,8 +43934,8 @@ snapshots:
|
||||
date-fns: 2.30.0
|
||||
date-fns-tz: 2.0.1(date-fns@2.30.0)
|
||||
lodash: 4.17.21
|
||||
vue: 3.5.13(typescript@5.7.2)
|
||||
vue-screen-utils: 1.0.0-beta.13(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.3))
|
||||
|
||||
valibot@0.31.1:
|
||||
optional: true
|
||||
@@ -43811,6 +43947,11 @@ snapshots:
|
||||
valibot@1.0.0-beta.15(typescript@5.7.2):
|
||||
optionalDependencies:
|
||||
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: {}
|
||||
|
||||
@@ -43835,11 +43976,11 @@ snapshots:
|
||||
bits-ui: 0.21.16(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:
|
||||
'@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.7.2))
|
||||
radix-vue: 1.9.11(vue@3.5.13(typescript@5.7.2))
|
||||
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.3))
|
||||
vue: 3.5.13(typescript@5.7.3)
|
||||
transitivePeerDependencies:
|
||||
- '@vue/composition-api'
|
||||
|
||||
@@ -43861,11 +44002,11 @@ snapshots:
|
||||
- '@types/react'
|
||||
- '@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:
|
||||
'@vue/devtools-api': 7.6.2
|
||||
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:
|
||||
dependencies:
|
||||
@@ -44105,7 +44246,7 @@ snapshots:
|
||||
- supports-color
|
||||
- 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:
|
||||
'@babel/code-frame': 7.26.2
|
||||
ansi-escapes: 4.3.2
|
||||
@@ -44126,7 +44267,7 @@ snapshots:
|
||||
'@biomejs/biome': 1.9.4
|
||||
eslint: 8.57.1
|
||||
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)):
|
||||
dependencies:
|
||||
@@ -44434,20 +44575,20 @@ snapshots:
|
||||
dependencies:
|
||||
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:
|
||||
vue: 3.5.13(typescript@5.7.2)
|
||||
vue: 3.5.13(typescript@5.7.3)
|
||||
|
||||
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:
|
||||
'@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:
|
||||
vue: 3.5.13(typescript@5.7.2)
|
||||
vue: 3.5.13(typescript@5.7.3)
|
||||
|
||||
vue-sonner@1.3.0: {}
|
||||
|
||||
@@ -44459,15 +44600,15 @@ snapshots:
|
||||
'@vue/server-renderer': 3.3.4(vue@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:
|
||||
'@vue/compiler-dom': 3.5.13
|
||||
'@vue/compiler-sfc': 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
|
||||
optionalDependencies:
|
||||
typescript: 5.7.2
|
||||
typescript: 5.7.3
|
||||
|
||||
w3c-keyname@2.2.8: {}
|
||||
|
||||
|
||||
@@ -14,4 +14,4 @@ catalog:
|
||||
"better-call": "^1.0.3"
|
||||
"@better-fetch/fetch": "^1.1.15"
|
||||
"unbuild": "^3.5.0"
|
||||
"typescript": "^5.7.2"
|
||||
"typescript": "^5.7.3"
|
||||
Reference in New Issue
Block a user