This commit is contained in:
Atridad Lahiji 2023-10-11 00:58:00 -06:00
parent 5d44872591
commit e119ff1496
No known key found for this signature in database
4 changed files with 387 additions and 253 deletions

View file

@ -2,6 +2,9 @@
import { AblyProvider } from "ably/react";
import * as Ably from "ably";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
const queryClient = new QueryClient();
export default function RootLayout({
children,
@ -12,5 +15,9 @@ export default function RootLayout({
authUrl: "/api/internal/ably",
});
return <AblyProvider client={client}>{children}</AblyProvider>;
return (
<QueryClientProvider client={queryClient}>
<AblyProvider client={client}>{children}</AblyProvider>{" "}
</QueryClientProvider>
);
}

View file

@ -3,8 +3,7 @@
import { EventTypes } from "@/_utils/types";
import Image from "next/image";
import { useEffect, useState } from "react";
import { experimental_useOptimistic } from "react";
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
import LoadingIndicator from "@/_components/LoadingIndicator";
import type { PresenceItem, RoomResponse, VoteResponse } from "@/_utils/types";
@ -29,105 +28,134 @@ import { RiVipCrownFill } from "react-icons/ri";
import NoRoomUI from "./NoRoomUI";
const VoteUI = () => {
// State
// =================================
const params = useParams();
const roomId = params?.id as string;
const { user } = useUser();
const [storyNameText, setStoryNameText] = useState<string>("");
const [roomScale, setRoomScale] = useState<string>("");
const [copied, setCopied] = useState<boolean>(false);
const [roomFromDb, setRoomFromDb] = useState<RoomResponse>();
const [votesFromDb, setVotesFromDb] = useState<VoteResponse>(undefined);
const queryClient = useQueryClient();
const [optimisticVotes, setOptimisticVotes] =
experimental_useOptimistic(votesFromDb);
const { data: roomFromDb } = useQuery({
queryKey: ["room"],
queryFn: getRoomHandler,
});
const getRoomHandler = () => {
fetch(`/api/internal/room/${roomId}`, {
const { data: votesFromDb } = useQuery({
queryKey: ["votes"],
queryFn: getVotesHandler,
});
const { mutate: setVote } = useMutation({
mutationFn: setVoteHandler,
// When mutate is called:
onMutate: async (newVote) => {
// Cancel any outgoing refetches
// (so they don't overwrite our optimistic update)
await queryClient.cancelQueries({ queryKey: ["votes"] });
// Snapshot the previous value
const previousVotes = queryClient.getQueryData(["votes"]);
// Optimistically update to the new value
queryClient.setQueryData<VoteResponse>(["votes"], (old) =>
old?.map((vote) => {
if (vote.userId === user?.id) {
return {
...vote,
value: newVote,
};
} else {
return vote;
}
})
);
// Return a context object with the snapshotted value
return { previousVotes };
},
// If the mutation fails,
// use the context returned from onMutate to roll back
onError: (err, newTodo, context) => {
queryClient.setQueryData(["votes"], context?.previousVotes);
},
// Always refetch after error or success:
onSettled: () => {
void queryClient.invalidateQueries({ queryKey: ["votes"] });
},
});
const { mutate: setRoom } = useMutation({
mutationFn: setRoomHandler,
// When mutate is called:
onMutate: async (data: {
visible: boolean;
reset: boolean;
log: boolean;
}) => {
// Cancel any outgoing refetches
// (so they don't overwrite our optimistic update)
await queryClient.cancelQueries({ queryKey: ["room"] });
// Snapshot the previous value
const previousRoom = queryClient.getQueryData(["room"]);
// Optimistically update to the new value
queryClient.setQueryData<RoomResponse>(["room"], (old) => {
return old?.created_at || old?.id || old?.userId
? {
roomName: old?.roomName,
created_at: old?.created_at,
id: old?.id,
userId: old?.userId,
logs: old?.logs,
storyName: storyNameText,
visible: data.visible,
scale: roomScale,
reset: data.reset,
log: data.log,
}
: old;
});
// Return a context object with the snapshotted value
return { previousRoom };
},
// If the mutation fails,
// use the context returned from onMutate to roll back
onError: (err, newTodo, context) => {
queryClient.setQueryData(["room"], context?.previousRoom);
},
// Always refetch after error or success:
onSettled: () => {
void queryClient.invalidateQueries({ queryKey: ["room"] });
},
});
// Handlers
// =================================
async function getRoomHandler() {
const response = await fetch(`/api/internal/room/${roomId}`, {
cache: "no-cache",
method: "GET",
})
.then(async (response) => {
const dbRoom = (await response.json()) as RoomResponse;
setRoomFromDb(dbRoom);
})
.catch(() => {
setRoomFromDb(null);
});
};
});
const getVotesHandler = async () => {
return (await response.json()) as RoomResponse;
}
async function getVotesHandler() {
const dbVotesResponse = await fetch(`/api/internal/room/${roomId}/votes`, {
cache: "no-cache",
method: "GET",
});
const dbVotes = (await dbVotesResponse.json()) as VoteResponse;
setVotesFromDb(dbVotes);
};
useChannel(
{
channelName: `${env.NEXT_PUBLIC_APP_ENV}-${roomId}`,
},
({ name }: { name: string }) => {
if (name === EventTypes.ROOM_UPDATE) {
void getVotesHandler();
void getRoomHandler();
} else if (name === EventTypes.VOTE_UPDATE) {
void getVotesHandler();
}
}
);
const { presenceData } = usePresence<PresenceItem>(
`${env.NEXT_PUBLIC_APP_ENV}-${roomId}`,
{
name: (user?.fullName ?? user?.username) || "",
image: user?.imageUrl || "",
client_id: user?.id || "unknown",
isAdmin: isAdmin(user?.publicMetadata),
isVIP: isVIP(user?.publicMetadata),
}
);
// Init Story name
useEffect(() => {
if (roomFromDb) {
setStoryNameText(roomFromDb.storyName || "");
setRoomScale(roomFromDb.scale || "ERROR");
} else {
void getRoomHandler();
void getVotesHandler();
}
}, [roomFromDb, roomId, user]);
// Helper functions
const getVoteForCurrentUser = () => {
if (roomFromDb) {
return (
optimisticVotes &&
optimisticVotes.find((vote) => vote.userId === user?.id)
);
} else {
return null;
}
};
const setVoteHandler = async (value: string) => {
const newVotes = optimisticVotes?.map((vote) => {
if (vote.userId === user?.id) {
return {
...vote,
value,
};
} else {
return vote;
}
});
setOptimisticVotes(newVotes);
return dbVotes;
}
async function setVoteHandler(value: string) {
if (roomFromDb) {
await fetch(`/api/internal/room/${roomId}/vote`, {
cache: "no-cache",
@ -137,30 +165,42 @@ const VoteUI = () => {
}),
});
}
};
}
const setRoomHandler = async (
visible: boolean,
reset = false,
log = false
) => {
async function setRoomHandler(data: {
visible: boolean;
reset: boolean | undefined;
log: boolean | undefined;
}) {
if (roomFromDb) {
await fetch(`/api/internal/room/${roomId}`, {
cache: "no-cache",
method: "PUT",
body: JSON.stringify({
name: storyNameText,
visible,
visible: data.visible,
scale: roomScale,
reset,
log,
reset: data.reset ? data.reset : false,
log: data.log ? data.log : false,
}),
});
}
}
// Helpers
// =================================
const getVoteForCurrentUser = () => {
if (roomFromDb) {
return (
votesFromDb && votesFromDb.find((vote) => vote.userId === user?.id)
);
} else {
return null;
}
};
const downloadLogs = () => {
if (roomFromDb && optimisticVotes) {
if (roomFromDb && votesFromDb) {
const jsonObject = roomFromDb?.logs
.map((item) => {
return {
@ -169,7 +209,7 @@ const VoteUI = () => {
userId: item.userId,
roomId: item.roomId,
roomName: item.roomName,
storyName: item.storyName,
topicName: item.storyName,
scale: item.scale,
votes: item.votes,
};
@ -180,9 +220,9 @@ const VoteUI = () => {
userId: roomFromDb.userId,
roomId: roomFromDb.id,
roomName: roomFromDb.roomName,
storyName: storyNameText,
topicName: storyNameText,
scale: roomScale,
votes: optimisticVotes.map((vote) => {
votes: votesFromDb.map((vote) => {
return {
value: vote.value,
};
@ -232,6 +272,45 @@ const VoteUI = () => {
}
};
// Hooks
// =================================
useChannel(
{
channelName: `${env.NEXT_PUBLIC_APP_ENV}-${roomId}`,
},
({ name }: { name: string }) => {
if (name === EventTypes.ROOM_UPDATE) {
void queryClient.invalidateQueries({ queryKey: ["votes"] });
void queryClient.invalidateQueries({ queryKey: ["room"] });
} else if (name === EventTypes.VOTE_UPDATE) {
void queryClient.invalidateQueries({ queryKey: ["votes"] });
}
}
);
const { presenceData } = usePresence<PresenceItem>(
`${env.NEXT_PUBLIC_APP_ENV}-${roomId}`,
{
name: (user?.fullName ?? user?.username) || "",
image: user?.imageUrl || "",
client_id: user?.id || "unknown",
isAdmin: isAdmin(user?.publicMetadata),
isVIP: isVIP(user?.publicMetadata),
}
);
useEffect(() => {
if (roomFromDb) {
setStoryNameText(roomFromDb.storyName || "");
setRoomScale(roomFromDb.scale || "ERROR");
} else {
void getRoomHandler();
void getVotesHandler();
}
}, [roomFromDb, roomId, user]);
// UI
// =================================
// Room is loading
if (roomFromDb === undefined) {
return <LoadingIndicator />;
@ -260,7 +339,7 @@ const VoteUI = () => {
<div className="card card-compact bg-base-100 shadow-xl">
<div className="card-body">
<h2 className="card-title mx-auto">
Story: {roomFromDb.storyName}
Topic: {roomFromDb.storyName}
</h2>
<ul className="p-0 flex flex-row flex-wrap justify-center items-center text-ceter gap-4">
@ -319,10 +398,10 @@ const VoteUI = () => {
</p>
{roomFromDb &&
optimisticVotes &&
votesFromDb &&
voteString(
roomFromDb.visible,
optimisticVotes,
votesFromDb,
presenceItem.data
)}
</li>
@ -340,7 +419,7 @@ const VoteUI = () => {
? "btn btn-active btn-primary"
: "btn"
}`}
onClick={() => void setVoteHandler(scaleItem)}
onClick={() => void setVote(scaleItem)}
>
{scaleItem}
</button>
@ -372,11 +451,11 @@ const VoteUI = () => {
}}
/>
<label className="label">{"Story Name:"} </label>
<label className="label">{"Topic Name:"} </label>
<input
type="text"
placeholder="Story Name"
placeholder="Topic Name"
className="input input-bordered"
value={storyNameText}
onChange={(event) => {
@ -388,7 +467,11 @@ const VoteUI = () => {
<div>
<button
onClick={() =>
void setRoomHandler(!roomFromDb.visible, false)
void setRoom({
visible: !roomFromDb.visible,
reset: false,
log: false,
})
}
className="btn btn-primary inline-flex"
>
@ -409,14 +492,15 @@ const VoteUI = () => {
<div>
<button
onClick={() =>
void setRoomHandler(
false,
true,
roomFromDb.storyName === storyNameText ||
optimisticVotes?.length === 0
? false
: true
)
void setRoom({
visible: false,
reset: true,
log:
roomFromDb.storyName === storyNameText ||
votesFromDb?.length === 0
? false
: true,
})
}
className="btn btn-primary inline-flex"
disabled={
@ -426,7 +510,7 @@ const VoteUI = () => {
}
>
{roomFromDb.storyName === storyNameText ||
optimisticVotes?.length === 0 ? (
votesFromDb?.length === 0 ? (
<>
<IoReloadOutline className="text-xl mr-1" /> Reset
</>
@ -438,9 +522,9 @@ const VoteUI = () => {
</button>
</div>
{optimisticVotes &&
{votesFromDb &&
(roomFromDb.logs.length > 0 ||
optimisticVotes.length > 0) && (
votesFromDb.length > 0) && (
<div>
<button
onClick={() => downloadLogs()}

View file

@ -1,6 +1,6 @@
{
"name": "sprintpadawan",
"version": "3.1.4",
"version": "3.1.5",
"description": "Plan. Sprint. Repeat.",
"private": true,
"scripts": {
@ -19,9 +19,10 @@
"@libsql/client": "^0.3.5",
"@paralleldrive/cuid2": "^2.2.2",
"@t3-oss/env-nextjs": "^0.7.0",
"@tanstack/react-query": "^4.36.1",
"@unkey/api": "^0.10.0",
"@upstash/ratelimit": "^0.4.4",
"@upstash/redis": "^1.22.1",
"@upstash/redis": "^1.23.3",
"@vercel/analytics": "^1.1.0",
"ably": "^1.2.45",
"autoprefixer": "^10.4.16",
@ -39,12 +40,13 @@
"zod": "^3.22.4"
},
"devDependencies": {
"@types/eslint": "^8.44.3",
"@types/node": "^20.8.3",
"@types/react": "^18.2.25",
"@typescript-eslint/eslint-plugin": "^6.7.4",
"@typescript-eslint/parser": "^6.7.4",
"better-sqlite3": "^8.7.0",
"@tanstack/eslint-plugin-query": "^4.36.1",
"@types/eslint": "^8.44.4",
"@types/node": "^20.8.4",
"@types/react": "^18.2.28",
"@typescript-eslint/eslint-plugin": "^6.7.5",
"@typescript-eslint/parser": "^6.7.5",
"better-sqlite3": "^9.0.0",
"bufferutil": "^4.0.7",
"daisyui": "^3.9.2",
"drizzle-kit": "^0.19.13",

301
pnpm-lock.yaml generated
View file

@ -20,6 +20,9 @@ dependencies:
'@t3-oss/env-nextjs':
specifier: ^0.7.0
version: 0.7.0(typescript@5.2.2)(zod@3.22.4)
'@tanstack/react-query':
specifier: ^4.36.1
version: 4.36.1(react-dom@18.2.0)(react@18.2.0)
'@unkey/api':
specifier: ^0.10.0
version: 0.10.0
@ -27,8 +30,8 @@ dependencies:
specifier: ^0.4.4
version: 0.4.4
'@upstash/redis':
specifier: ^1.22.1
version: 1.22.1
specifier: ^1.23.3
version: 1.23.3
'@vercel/analytics':
specifier: ^1.1.0
version: 1.1.0
@ -46,7 +49,7 @@ dependencies:
version: 16.3.1
drizzle-orm:
specifier: ^0.28.6
version: 0.28.6(@libsql/client@0.3.5)(better-sqlite3@8.7.0)
version: 0.28.6(@libsql/client@0.3.5)(better-sqlite3@9.0.0)
next:
specifier: ^13.5.4
version: 13.5.4(react-dom@18.2.0)(react@18.2.0)
@ -76,24 +79,27 @@ dependencies:
version: 3.22.4
devDependencies:
'@tanstack/eslint-plugin-query':
specifier: ^4.36.1
version: 4.36.1(eslint@8.51.0)
'@types/eslint':
specifier: ^8.44.3
version: 8.44.3
specifier: ^8.44.4
version: 8.44.4
'@types/node':
specifier: ^20.8.3
version: 20.8.3
specifier: ^20.8.4
version: 20.8.4
'@types/react':
specifier: ^18.2.25
version: 18.2.25
specifier: ^18.2.28
version: 18.2.28
'@typescript-eslint/eslint-plugin':
specifier: ^6.7.4
version: 6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.51.0)(typescript@5.2.2)
specifier: ^6.7.5
version: 6.7.5(@typescript-eslint/parser@6.7.5)(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/parser':
specifier: ^6.7.4
version: 6.7.4(eslint@8.51.0)(typescript@5.2.2)
specifier: ^6.7.5
version: 6.7.5(eslint@8.51.0)(typescript@5.2.2)
better-sqlite3:
specifier: ^8.7.0
version: 8.7.0
specifier: ^9.0.0
version: 9.0.0
bufferutil:
specifier: ^4.0.7
version: 4.0.7
@ -544,23 +550,23 @@ packages:
dependencies:
'@libsql/hrana-client': 0.5.5(bufferutil@4.0.7)(utf-8-validate@6.0.3)
js-base64: 3.7.5
libsql: 0.1.25
libsql: 0.1.28
transitivePeerDependencies:
- bufferutil
- encoding
- utf-8-validate
dev: false
/@libsql/darwin-arm64@0.1.25:
resolution: {integrity: sha512-yJBs5NGgzDB50ik4ytFHvDiF8Y8exIhXCOq7KUZhQV3obz0M/+rzOyXG3w1h0nqnAjGFTJgeFdk2HFfIEhy8lQ==}
/@libsql/darwin-arm64@0.1.28:
resolution: {integrity: sha512-p4nldHUOhcl9ibnH1F6oiXV5Dl3PAcPB9VIjdjVvO3/URo5J7mhqRMuwJMKO5DZJJGtkKJ5IO0gu0hc90rnKIg==}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: false
optional: true
/@libsql/darwin-x64@0.1.25:
resolution: {integrity: sha512-pEq3DbzQcCf5zs1PSdVsdhRKk2VebwixYRdBeXIIlkqjy/kxlbW/pZs0U6QcK2MVaW+ge/Po3RvPN+Pmf31j2w==}
/@libsql/darwin-x64@0.1.28:
resolution: {integrity: sha512-WaEK+Z+wP5sr0h8EcusSGHv4Mqc3smYICeG4P/wsbRDKQ2WUMWqZrpgqaBsm+WPbXogU2vpf+qGc8BnpFZ0ggw==}
cpu: [x64]
os: [darwin]
requiresBuild: true
@ -592,39 +598,39 @@ packages:
/@libsql/isomorphic-ws@0.1.5(bufferutil@4.0.7)(utf-8-validate@6.0.3):
resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==}
dependencies:
'@types/ws': 8.5.6
'@types/ws': 8.5.7
ws: 8.14.2(bufferutil@4.0.7)(utf-8-validate@6.0.3)
transitivePeerDependencies:
- bufferutil
- utf-8-validate
dev: false
/@libsql/linux-arm64-gnu@0.1.25:
resolution: {integrity: sha512-KgceGjfJ1Fl6Gnk6o2hqQQlSy2/LwBDW0ZBv8GQ6qaapJXJI6fIMJsxAgU+MujYYjXBXCRxC4J0xAHSUw4nhZg==}
/@libsql/linux-arm64-gnu@0.1.28:
resolution: {integrity: sha512-a17ANBuOqH2L8gdyET4Kg3XggQvxWnoA+7x7sDEX5NyWNyvr7P04WzNPAT0xAOWLclC1fDD6jM5sh/fbJk/7NA==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@libsql/linux-x64-gnu@0.1.25:
resolution: {integrity: sha512-+M4PnnxJ0zBDaiLvK1qOBGcawd3ld2d7yQt8S13wDMX3Qm2XVeorNspTtVOIaz+DRiNONOaZdHbh+UBJiIycTg==}
/@libsql/linux-x64-gnu@0.1.28:
resolution: {integrity: sha512-dkg+Ou7ApV0PHpZWd9c6NrYyc/WSNn5h/ScKotaMTLWlLL96XAMNwrYLpZpUj61I2y7QzU98XtMfiSD1Ux+VaA==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@libsql/linux-x64-musl@0.1.25:
resolution: {integrity: sha512-baYCmaqMfE3TuiJcdFbSV4snC2XfoMTpUwzuh6YdkTf1MuV4bmqxke8CDujat3KprLuyRPQLAEEEDh2i1Hug4Q==}
/@libsql/linux-x64-musl@0.1.28:
resolution: {integrity: sha512-ZuOxCDYlG+f1IDsxstmaxLtgG9HvlLuUKs0X3um4f5F5V+P+PF8qr08gSdD1IP2pj+JBOiwhQffaEpR1wupxhQ==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@libsql/win32-x64-msvc@0.1.25:
resolution: {integrity: sha512-keGaG4y2xBbn2GAcB9QJkzeXxUuhK3zijgfMeZS/i6BZDsym5aYkqqHXVUEsOsBmO9t24ZaDwnS71lB0nxdUiA==}
/@libsql/win32-x64-msvc@0.1.28:
resolution: {integrity: sha512-2cmUiMIsJLHpetebGeeYqUYaCPWEnwMjqxwu1ZEEbA5x8r+DNmIhLrc0QSQ29p7a5u14vbZnShNOtT/XG7vKew==}
cpu: [x64]
os: [win32]
requiresBuild: true
@ -837,11 +843,41 @@ packages:
zod: 3.22.4
dev: false
/@tanstack/eslint-plugin-query@4.36.1(eslint@8.51.0):
resolution: {integrity: sha512-qFIYV/BuwWzg0t5mSRMcb+rzrOVtCO9EizYxeClFxuFq/c54cNhAQCnDrA3iCxFz/fqRv7I9rxxnR/ZWkX15cQ==}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
eslint: 8.51.0
dev: true
/@tanstack/query-core@4.36.1:
resolution: {integrity: sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA==}
dev: false
/@tanstack/react-query@4.36.1(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
react-native: '*'
peerDependenciesMeta:
react-dom:
optional: true
react-native:
optional: true
dependencies:
'@tanstack/query-core': 4.36.1
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
use-sync-external-store: 1.2.0(react@18.2.0)
dev: false
/@types/body-parser@1.19.3:
resolution: {integrity: sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==}
dependencies:
'@types/connect': 3.4.36
'@types/node': 20.8.3
'@types/node': 20.8.4
dev: false
/@types/cacheable-request@6.0.3:
@ -849,14 +885,14 @@ packages:
dependencies:
'@types/http-cache-semantics': 4.0.2
'@types/keyv': 3.1.4
'@types/node': 20.8.3
'@types/node': 20.8.4
'@types/responselike': 1.0.1
dev: false
/@types/connect@3.4.36:
resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.4
dev: false
/@types/cookies@0.7.7:
@ -865,11 +901,11 @@ packages:
'@types/connect': 3.4.36
'@types/express': 4.17.14
'@types/keygrip': 1.0.3
'@types/node': 20.8.3
'@types/node': 20.8.4
dev: false
/@types/eslint@8.44.3:
resolution: {integrity: sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g==}
/@types/eslint@8.44.4:
resolution: {integrity: sha512-lOzjyfY/D9QR4hY9oblZ76B90MYTB3RrQ4z2vBIJKj9ROCRqdkYl2gSUx1x1a4IWPjKJZLL4Aw1Zfay7eMnmnA==}
dependencies:
'@types/estree': 1.0.2
'@types/json-schema': 7.0.13
@ -882,7 +918,7 @@ packages:
/@types/express-serve-static-core@4.17.37:
resolution: {integrity: sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.4
'@types/qs': 6.9.8
'@types/range-parser': 1.2.5
'@types/send': 0.17.2
@ -920,7 +956,7 @@ packages:
/@types/keyv@3.1.4:
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.4
dev: false
/@types/mime@1.3.3:
@ -934,14 +970,14 @@ packages:
/@types/node-fetch@2.6.2:
resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.4
form-data: 3.0.1
dev: false
/@types/node-fetch@2.6.6:
resolution: {integrity: sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.4
form-data: 4.0.0
dev: false
@ -949,8 +985,10 @@ packages:
resolution: {integrity: sha512-vmYJF0REqDyyU0gviezF/KHq/fYaUbFhkcNbQCuPGFQj6VTbXuHZoxs/Y7mutWe73C8AC6l9fFu8mSYiBAqkGA==}
dev: false
/@types/node@20.8.3:
resolution: {integrity: sha512-jxiZQFpb+NlH5kjW49vXxvxTjeeqlbsnTAdBTKpzEdPs9itay7MscYXz3Fo9VYFEsfQ6LJFitHad3faerLAjCw==}
/@types/node@20.8.4:
resolution: {integrity: sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==}
dependencies:
undici-types: 5.25.3
/@types/prop-types@15.7.8:
resolution: {integrity: sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==}
@ -964,8 +1002,8 @@ packages:
resolution: {integrity: sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==}
dev: false
/@types/react@18.2.25:
resolution: {integrity: sha512-24xqse6+VByVLIr+xWaQ9muX1B4bXJKXBbjszbld/UEDslGLY53+ZucF44HCmLbMPejTzGG9XgR+3m2/Wqu1kw==}
/@types/react@18.2.28:
resolution: {integrity: sha512-ad4aa/RaaJS3hyGz0BGegdnSRXQBkd1CCYDCdNjBPg90UUpLgo+WlJqb9fMYUxtehmzF3PJaTWqRZjko6BRzBg==}
dependencies:
'@types/prop-types': 15.7.8
'@types/scheduler': 0.16.4
@ -975,7 +1013,7 @@ packages:
/@types/responselike@1.0.1:
resolution: {integrity: sha512-TiGnitEDxj2X0j+98Eqk5lv/Cij8oHd32bU4D/Yw6AOq7vvTk0gSD2GPj0G/HkvhMoVsdlhYF4yqqlyPBTM6Sg==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.4
dev: false
/@types/scheduler@0.16.4:
@ -990,7 +1028,7 @@ packages:
resolution: {integrity: sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==}
dependencies:
'@types/mime': 1.3.3
'@types/node': 20.8.3
'@types/node': 20.8.4
dev: false
/@types/serve-static@1.15.3:
@ -998,17 +1036,17 @@ packages:
dependencies:
'@types/http-errors': 2.0.2
'@types/mime': 3.0.2
'@types/node': 20.8.3
'@types/node': 20.8.4
dev: false
/@types/ws@8.5.6:
resolution: {integrity: sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==}
/@types/ws@8.5.7:
resolution: {integrity: sha512-6UrLjiDUvn40CMrAubXuIVtj2PEfKDffJS7ychvnPU44j+KVeXmdHHTgqcM/dxLUTHxlXHiFM8Skmb8ozGdTnQ==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.4
dev: false
/@typescript-eslint/eslint-plugin@6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.51.0)(typescript@5.2.2):
resolution: {integrity: sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA==}
/@typescript-eslint/eslint-plugin@6.7.5(@typescript-eslint/parser@6.7.5)(eslint@8.51.0)(typescript@5.2.2):
resolution: {integrity: sha512-JhtAwTRhOUcP96D0Y6KYnwig/MRQbOoLGXTON2+LlyB/N35SP9j1boai2zzwXb7ypKELXMx3DVk9UTaEq1vHEw==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
'@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
@ -1019,11 +1057,11 @@ packages:
optional: true
dependencies:
'@eslint-community/regexpp': 4.9.1
'@typescript-eslint/parser': 6.7.4(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/scope-manager': 6.7.4
'@typescript-eslint/type-utils': 6.7.4(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/utils': 6.7.4(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.7.4
'@typescript-eslint/parser': 6.7.5(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/scope-manager': 6.7.5
'@typescript-eslint/type-utils': 6.7.5(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/utils': 6.7.5(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.7.5
debug: 4.3.4
eslint: 8.51.0
graphemer: 1.4.0
@ -1036,8 +1074,8 @@ packages:
- supports-color
dev: true
/@typescript-eslint/parser@6.7.4(eslint@8.51.0)(typescript@5.2.2):
resolution: {integrity: sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==}
/@typescript-eslint/parser@6.7.5(eslint@8.51.0)(typescript@5.2.2):
resolution: {integrity: sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
@ -1046,10 +1084,10 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/scope-manager': 6.7.4
'@typescript-eslint/types': 6.7.4
'@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.7.4
'@typescript-eslint/scope-manager': 6.7.5
'@typescript-eslint/types': 6.7.5
'@typescript-eslint/typescript-estree': 6.7.5(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.7.5
debug: 4.3.4
eslint: 8.51.0
typescript: 5.2.2
@ -1057,16 +1095,16 @@ packages:
- supports-color
dev: true
/@typescript-eslint/scope-manager@6.7.4:
resolution: {integrity: sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==}
/@typescript-eslint/scope-manager@6.7.5:
resolution: {integrity: sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
'@typescript-eslint/types': 6.7.4
'@typescript-eslint/visitor-keys': 6.7.4
'@typescript-eslint/types': 6.7.5
'@typescript-eslint/visitor-keys': 6.7.5
dev: true
/@typescript-eslint/type-utils@6.7.4(eslint@8.51.0)(typescript@5.2.2):
resolution: {integrity: sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ==}
/@typescript-eslint/type-utils@6.7.5(eslint@8.51.0)(typescript@5.2.2):
resolution: {integrity: sha512-Gs0qos5wqxnQrvpYv+pf3XfcRXW6jiAn9zE/K+DlmYf6FcpxeNYN0AIETaPR7rHO4K2UY+D0CIbDP9Ut0U4m1g==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
@ -1075,8 +1113,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2)
'@typescript-eslint/utils': 6.7.4(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/typescript-estree': 6.7.5(typescript@5.2.2)
'@typescript-eslint/utils': 6.7.5(eslint@8.51.0)(typescript@5.2.2)
debug: 4.3.4
eslint: 8.51.0
ts-api-utils: 1.0.3(typescript@5.2.2)
@ -1085,13 +1123,13 @@ packages:
- supports-color
dev: true
/@typescript-eslint/types@6.7.4:
resolution: {integrity: sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==}
/@typescript-eslint/types@6.7.5:
resolution: {integrity: sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==}
engines: {node: ^16.0.0 || >=18.0.0}
dev: true
/@typescript-eslint/typescript-estree@6.7.4(typescript@5.2.2):
resolution: {integrity: sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==}
/@typescript-eslint/typescript-estree@6.7.5(typescript@5.2.2):
resolution: {integrity: sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
typescript: '*'
@ -1099,8 +1137,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/types': 6.7.4
'@typescript-eslint/visitor-keys': 6.7.4
'@typescript-eslint/types': 6.7.5
'@typescript-eslint/visitor-keys': 6.7.5
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
@ -1111,8 +1149,8 @@ packages:
- supports-color
dev: true
/@typescript-eslint/utils@6.7.4(eslint@8.51.0)(typescript@5.2.2):
resolution: {integrity: sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA==}
/@typescript-eslint/utils@6.7.5(eslint@8.51.0)(typescript@5.2.2):
resolution: {integrity: sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
@ -1120,9 +1158,9 @@ packages:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0)
'@types/json-schema': 7.0.13
'@types/semver': 7.5.3
'@typescript-eslint/scope-manager': 6.7.4
'@typescript-eslint/types': 6.7.4
'@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2)
'@typescript-eslint/scope-manager': 6.7.5
'@typescript-eslint/types': 6.7.5
'@typescript-eslint/typescript-estree': 6.7.5(typescript@5.2.2)
eslint: 8.51.0
semver: 7.5.4
transitivePeerDependencies:
@ -1130,11 +1168,11 @@ packages:
- typescript
dev: true
/@typescript-eslint/visitor-keys@6.7.4:
resolution: {integrity: sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==}
/@typescript-eslint/visitor-keys@6.7.5:
resolution: {integrity: sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
'@typescript-eslint/types': 6.7.4
'@typescript-eslint/types': 6.7.5
eslint-visitor-keys: 3.4.3
dev: true
@ -1146,7 +1184,7 @@ packages:
resolution: {integrity: sha512-cpPSR0XJAJs4Ddz9nq3tINlPS5aLfWVCqhhtHnXt4p7qr5+/Znlt1Es736poB/9rnl1hAHrOsOvVj46NEXcVqA==}
engines: {node: '>=16.0.0'}
dependencies:
'@upstash/redis': 1.22.1
'@upstash/redis': 1.23.3
transitivePeerDependencies:
- encoding
dev: false
@ -1159,8 +1197,8 @@ packages:
- encoding
dev: false
/@upstash/redis@1.22.1:
resolution: {integrity: sha512-7ec2eCMkVxZzuHNb+hPKonX4b/Pu0BdDeSBsEy+jKIqiweXzCs5Dpu9642vJgf57YnEsfwgXnQMVEataarvyeQ==}
/@upstash/redis@1.23.3:
resolution: {integrity: sha512-6b66nGdkbWl/BZ4Hs9cG9szNNXF8UDgPTUyC/4fcZvDLTs552SlItMSQnmwAKMz0EHjpbVH51VQ4waHNnDy/Xw==}
dependencies:
isomorphic-fetch: 3.0.0
transitivePeerDependencies:
@ -1368,7 +1406,7 @@ packages:
postcss: ^8.1.0
dependencies:
browserslist: 4.22.1
caniuse-lite: 1.0.30001546
caniuse-lite: 1.0.30001547
fraction.js: 4.3.6
normalize-range: 0.1.2
picocolors: 1.0.0
@ -1408,8 +1446,8 @@ packages:
/base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
/better-sqlite3@8.7.0:
resolution: {integrity: sha512-99jZU4le+f3G6aIl6PmmV0cxUIWqKieHxsiF7G34CVFiE+/UabpYqkU0NJIkY/96mQKikHeBjtR27vFfs5JpEw==}
/better-sqlite3@9.0.0:
resolution: {integrity: sha512-lDxQ9qg/XuUHZG6xzrQaMHkNWl37t35/LPB/VJGV8DdScSuGFNfFSqgscXEd8UIuyk/d9wU8iaMxQa4If5Wqog==}
requiresBuild: true
dependencies:
bindings: 1.5.0
@ -1464,8 +1502,8 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
caniuse-lite: 1.0.30001546
electron-to-chromium: 1.4.544
caniuse-lite: 1.0.30001547
electron-to-chromium: 1.4.549
node-releases: 2.0.13
update-browserslist-db: 1.0.13(browserslist@4.22.1)
dev: false
@ -1548,8 +1586,8 @@ packages:
engines: {node: '>=14.16'}
dev: true
/caniuse-lite@1.0.30001546:
resolution: {integrity: sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==}
/caniuse-lite@1.0.30001547:
resolution: {integrity: sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==}
dev: false
/chalk@4.1.2:
@ -1882,7 +1920,7 @@ packages:
- supports-color
dev: true
/drizzle-orm@0.28.6(@libsql/client@0.3.5)(better-sqlite3@8.7.0):
/drizzle-orm@0.28.6(@libsql/client@0.3.5)(better-sqlite3@9.0.0):
resolution: {integrity: sha512-yBe+F9htrlYER7uXgDJUQsTHFoIrI5yMm5A0bg0GiZ/kY5jNXTWoEy4KQtg35cE27sw1VbgzoMWHAgCckUUUww==}
peerDependencies:
'@aws-sdk/client-rds-data': '>=3'
@ -1945,11 +1983,11 @@ packages:
optional: true
dependencies:
'@libsql/client': 0.3.5(bufferutil@4.0.7)(utf-8-validate@6.0.3)
better-sqlite3: 8.7.0
better-sqlite3: 9.0.0
dev: false
/electron-to-chromium@1.4.544:
resolution: {integrity: sha512-54z7squS1FyFRSUqq/knOFSptjjogLZXbKcYk3B0qkE1KZzvqASwRZnY2KzZQJqIYLVD38XZeoiMRflYSwyO4w==}
/electron-to-chromium@1.4.549:
resolution: {integrity: sha512-gpXfJslSi4hYDkA0mTLEpYKRv9siAgSUgZ+UWyk+J5Cttpd1ThCVwdclzIwQSclz3hYn049+M2fgrP1WpvF8xg==}
dev: false
/emoji-regex@9.2.2:
@ -2157,11 +2195,11 @@ packages:
dependencies:
'@next/eslint-plugin-next': 13.5.4
'@rushstack/eslint-patch': 1.5.1
'@typescript-eslint/parser': 6.7.4(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/parser': 6.7.5(eslint@8.51.0)(typescript@5.2.2)
eslint: 8.51.0
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.51.0)
eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0)
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.51.0)
eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0)
eslint-plugin-jsx-a11y: 6.7.1(eslint@8.51.0)
eslint-plugin-react: 7.33.2(eslint@8.51.0)
eslint-plugin-react-hooks: 4.6.0(eslint@8.51.0)
@ -2176,12 +2214,12 @@ packages:
dependencies:
debug: 3.2.7
is-core-module: 2.13.0
resolve: 1.22.6
resolve: 1.22.8
transitivePeerDependencies:
- supports-color
dev: true
/eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.51.0):
/eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.51.0):
resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@ -2191,8 +2229,8 @@ packages:
debug: 4.3.4
enhanced-resolve: 5.15.0
eslint: 8.51.0
eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0)
eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0)
eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0)
eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0)
fast-glob: 3.3.1
get-tsconfig: 4.7.2
is-core-module: 2.13.0
@ -2204,7 +2242,7 @@ packages:
- supports-color
dev: true
/eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0):
/eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0):
resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
engines: {node: '>=4'}
peerDependencies:
@ -2225,16 +2263,16 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
'@typescript-eslint/parser': 6.7.4(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/parser': 6.7.5(eslint@8.51.0)(typescript@5.2.2)
debug: 3.2.7
eslint: 8.51.0
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.51.0)
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.51.0)
transitivePeerDependencies:
- supports-color
dev: true
/eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0):
/eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0):
resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==}
engines: {node: '>=4'}
peerDependencies:
@ -2244,7 +2282,7 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
'@typescript-eslint/parser': 6.7.4(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/parser': 6.7.5(eslint@8.51.0)(typescript@5.2.2)
array-includes: 3.1.7
array.prototype.findlastindex: 1.2.3
array.prototype.flat: 1.3.2
@ -2253,7 +2291,7 @@ packages:
doctrine: 2.1.0
eslint: 8.51.0
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0)
eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0)
has: 1.0.4
is-core-module: 2.13.0
is-glob: 4.0.3
@ -2323,7 +2361,7 @@ packages:
object.hasown: 1.1.3
object.values: 1.1.7
prop-types: 15.8.1
resolve: 2.0.0-next.4
resolve: 2.0.0-next.5
semver: 6.3.1
string.prototype.matchall: 4.0.10
dev: true
@ -3126,20 +3164,20 @@ packages:
type-check: 0.4.0
dev: true
/libsql@0.1.25:
resolution: {integrity: sha512-Wq3vmbFA64o5PCa8qIpNvMwqJB0WdINlwpEG6qOeeUbzMqyLNpB4BQaTqR9spQpLMPbmH6igjqublWp0tz9AyA==}
/libsql@0.1.28:
resolution: {integrity: sha512-yCKlT0ntV8ZIWTPGNClhQQeH/LNAzLjbbEgBvgLb+jfQwAuTbyvPpVVLwkZzesqja1nbkWApztW0pX81Jp0pkw==}
cpu: [x64, arm64]
os: [darwin, linux, win32]
dependencies:
'@neon-rs/load': 0.0.4
detect-libc: 2.0.2
optionalDependencies:
'@libsql/darwin-arm64': 0.1.25
'@libsql/darwin-x64': 0.1.25
'@libsql/linux-arm64-gnu': 0.1.25
'@libsql/linux-x64-gnu': 0.1.25
'@libsql/linux-x64-musl': 0.1.25
'@libsql/win32-x64-msvc': 0.1.25
'@libsql/darwin-arm64': 0.1.28
'@libsql/darwin-x64': 0.1.28
'@libsql/linux-arm64-gnu': 0.1.28
'@libsql/linux-x64-gnu': 0.1.28
'@libsql/linux-x64-musl': 0.1.28
'@libsql/win32-x64-msvc': 0.1.28
dev: false
/lilconfig@2.1.0:
@ -3323,7 +3361,7 @@ packages:
'@next/env': 13.5.4
'@swc/helpers': 0.5.2
busboy: 1.6.0
caniuse-lite: 1.0.30001546
caniuse-lite: 1.0.30001547
postcss: 8.4.31
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@ -3360,8 +3398,8 @@ packages:
tslib: 2.4.1
dev: false
/node-abi@3.47.0:
resolution: {integrity: sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==}
/node-abi@3.49.0:
resolution: {integrity: sha512-ji8IK8VT2zAQv9BeOqwnpuvJnCivxPCe2HNiPe8P1z1SDhqEFpm7GqctqTWkujb8mLfZ1PWDrjMeiq6l9TN7fA==}
engines: {node: '>=10'}
dependencies:
semver: 7.5.4
@ -3592,7 +3630,7 @@ packages:
postcss: 8.4.31
postcss-value-parser: 4.2.0
read-cache: 1.0.0
resolve: 1.22.6
resolve: 1.22.8
dev: true
/postcss-js@4.0.1(postcss@8.4.31):
@ -3662,7 +3700,7 @@ packages:
minimist: 1.2.8
mkdirp-classic: 0.5.3
napi-build-utils: 1.0.2
node-abi: 3.47.0
node-abi: 3.49.0
pump: 3.0.0
rc: 1.2.8
simple-get: 4.0.1
@ -3827,8 +3865,8 @@ packages:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
dev: true
/resolve@1.22.6:
resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==}
/resolve@1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true
dependencies:
is-core-module: 2.13.0
@ -3836,8 +3874,8 @@ packages:
supports-preserve-symlinks-flag: 1.0.0
dev: true
/resolve@2.0.0-next.4:
resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==}
/resolve@2.0.0-next.5:
resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
hasBin: true
dependencies:
is-core-module: 2.13.0
@ -4196,7 +4234,7 @@ packages:
postcss-load-config: 4.0.1(postcss@8.4.31)
postcss-nested: 6.0.1(postcss@8.4.31)
postcss-selector-parser: 6.0.13
resolve: 1.22.6
resolve: 1.22.8
sucrase: 3.34.0
transitivePeerDependencies:
- ts-node
@ -4408,6 +4446,9 @@ packages:
which-boxed-primitive: 1.0.2
dev: true
/undici-types@5.25.3:
resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==}
/update-browserslist-db@1.0.13(browserslist@4.22.1):
resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
hasBin: true