Commit 1776bb7a authored by 何 广一's avatar 何 广一
Browse files

created docker image

parent 9bf2ef80
module.exports = {
ignorePatterns: ['src/generated/prisma/**'],
extends: ['next/core-web-vitals'],
rules: {},
};
\ No newline at end of file
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
FROM node:20-alpine AS base FROM node:20-alpine AS base
WORKDIR /app WORKDIR /app
COPY package.json pnpm-lock.yaml ./ COPY package.json pnpm-lock.yaml ./
RUN npm install -g pnpm && pnpm install --frozen-lockfile --shamefully-hoist RUN npm install -g pnpm && pnpm install --shamefully-hoist
# ---------- Prisma + SQLite ---------- # ---------- Prisma + SQLite ----------
COPY prisma ./prisma COPY prisma ./prisma
...@@ -14,15 +14,17 @@ RUN pnpm prisma migrate deploy --schema ./prisma/schema.prisma ...@@ -14,15 +14,17 @@ RUN pnpm prisma migrate deploy --schema ./prisma/schema.prisma
# ---------- 构建 ---------- # ---------- 构建 ----------
COPY . . COPY . .
ENV REDIS_URL=
RUN pnpm build RUN pnpm build
# ---------- 运行时 ---------- # ---------- 运行时 ----------
FROM node:20-alpine AS runner FROM node:20-alpine AS runner
WORKDIR /app WORKDIR /app
RUN apk add --no-cache redis RUN apk add --no-cache redis
COPY --from=base /app/.next ./.next
COPY --from=base /app/node_modules ./node_modules COPY --from=base /app/.next/standalone ./
COPY --from=base /app/package.json ./package.json COPY --from=base /app/.next/static ./.next/static
COPY --from=base /app/public ./public
COPY --from=base /app/prisma ./prisma COPY --from=base /app/prisma ./prisma
COPY --from=base /app/.env.docker ./.env COPY --from=base /app/.env.docker ./.env
......
...@@ -11,6 +11,10 @@ const compat = new FlatCompat({ ...@@ -11,6 +11,10 @@ const compat = new FlatCompat({
const eslintConfig = [ const eslintConfig = [
...compat.extends("next/core-web-vitals", "next/typescript"), ...compat.extends("next/core-web-vitals", "next/typescript"),
{
ignores: ["src/generated/prisma/**"],
},
]; ];
export default eslintConfig; export default eslintConfig;
import type { NextConfig } from "next"; import type { NextConfig } from "next";
const nextConfig: NextConfig = { const nextConfig: NextConfig = {
output: 'standalone'
/* config options here */ /* config options here */
}; };
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
"redis": "start redis-server --port 6379" "redis": "start redis-server --port 6379"
}, },
"dependencies": { "dependencies": {
"@types/node": "^20",
"@types/react": "^19", "@types/react": "^19",
"@types/react-dom": "^19", "@types/react-dom": "^19",
"@prisma/client": "6.14.0", "@prisma/client": "6.14.0",
......
...@@ -11,12 +11,15 @@ importers: ...@@ -11,12 +11,15 @@ importers:
'@prisma/client': '@prisma/client':
specifier: 6.14.0 specifier: 6.14.0
version: 6.14.0(prisma@6.14.0(typescript@5.9.2))(typescript@5.9.2) version: 6.14.0(prisma@6.14.0(typescript@5.9.2))(typescript@5.9.2)
'@types/node':
specifier: ^20
version: 20.19.11
'@types/react': '@types/react':
specifier: ^19 specifier: ^19
version: 19.1.9 version: 19.1.11
'@types/react-dom': '@types/react-dom':
specifier: ^19 specifier: ^19
version: 19.1.7(@types/react@19.1.9) version: 19.1.8(@types/react@19.1.11)
next: next:
specifier: 15.4.6 specifier: 15.4.6
version: 15.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) version: 15.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
...@@ -34,32 +37,29 @@ importers: ...@@ -34,32 +37,29 @@ importers:
version: 5.8.2 version: 5.8.2
zod: zod:
specifier: ^4.1.1 specifier: ^4.1.1
version: 4.1.1 version: 4.1.3
devDependencies: devDependencies:
'@eslint/eslintrc': '@eslint/eslintrc':
specifier: ^3 specifier: ^3
version: 3.3.1 version: 3.3.1
'@tailwindcss/postcss': '@tailwindcss/postcss':
specifier: ^4 specifier: ^4
version: 4.1.11 version: 4.1.12
'@types/node':
specifier: ^20
version: 20.19.10
concurrently: concurrently:
specifier: ^9.2.0 specifier: ^9.2.0
version: 9.2.0 version: 9.2.1
eslint: eslint:
specifier: ^9 specifier: ^9
version: 9.33.0(jiti@2.5.1) version: 9.34.0(jiti@2.5.1)
eslint-config-next: eslint-config-next:
specifier: 15.4.6 specifier: 15.4.6
version: 15.4.6(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) version: 15.4.6(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
prisma: prisma:
specifier: 6.14.0 specifier: 6.14.0
version: 6.14.0(typescript@5.9.2) version: 6.14.0(typescript@5.9.2)
tailwindcss: tailwindcss:
specifier: ^4 specifier: ^4
version: 4.1.11 version: 4.1.12
typescript: typescript:
specifier: ^5 specifier: ^5
version: 5.9.2 version: 5.9.2
...@@ -70,10 +70,6 @@ packages: ...@@ -70,10 +70,6 @@ packages:
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'} engines: {node: '>=10'}
'@ampproject/remapping@2.3.0':
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
'@emnapi/core@1.4.5': '@emnapi/core@1.4.5':
resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==}
...@@ -109,8 +105,8 @@ packages: ...@@ -109,8 +105,8 @@ packages:
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.33.0': '@eslint/js@9.34.0':
resolution: {integrity: sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==} resolution: {integrity: sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.6': '@eslint/object-schema@2.1.6':
...@@ -267,18 +263,21 @@ packages: ...@@ -267,18 +263,21 @@ packages:
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
'@jridgewell/gen-mapping@0.3.12': '@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
'@jridgewell/remapping@2.3.5':
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
'@jridgewell/resolve-uri@3.1.2': '@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'} engines: {node: '>=6.0.0'}
'@jridgewell/sourcemap-codec@1.5.4': '@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
'@jridgewell/trace-mapping@0.3.29': '@jridgewell/trace-mapping@0.3.30':
resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==}
'@napi-rs/wasm-runtime@0.2.12': '@napi-rs/wasm-runtime@0.2.12':
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
...@@ -423,65 +422,65 @@ packages: ...@@ -423,65 +422,65 @@ packages:
'@swc/helpers@0.5.15': '@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
'@tailwindcss/node@4.1.11': '@tailwindcss/node@4.1.12':
resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} resolution: {integrity: sha512-3hm9brwvQkZFe++SBt+oLjo4OLDtkvlE8q2WalaD/7QWaeM7KEJbAiY/LJZUaCs7Xa8aUu4xy3uoyX4q54UVdQ==}
'@tailwindcss/oxide-android-arm64@4.1.11': '@tailwindcss/oxide-android-arm64@4.1.12':
resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==} resolution: {integrity: sha512-oNY5pq+1gc4T6QVTsZKwZaGpBb2N1H1fsc1GD4o7yinFySqIuRZ2E4NvGasWc6PhYJwGK2+5YT1f9Tp80zUQZQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [android] os: [android]
'@tailwindcss/oxide-darwin-arm64@4.1.11': '@tailwindcss/oxide-darwin-arm64@4.1.12':
resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==} resolution: {integrity: sha512-cq1qmq2HEtDV9HvZlTtrj671mCdGB93bVY6J29mwCyaMYCP/JaUBXxrQQQm7Qn33AXXASPUb2HFZlWiiHWFytw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@tailwindcss/oxide-darwin-x64@4.1.11': '@tailwindcss/oxide-darwin-x64@4.1.12':
resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==} resolution: {integrity: sha512-6UCsIeFUcBfpangqlXay9Ffty9XhFH1QuUFn0WV83W8lGdX8cD5/+2ONLluALJD5+yJ7k8mVtwy3zMZmzEfbLg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@tailwindcss/oxide-freebsd-x64@4.1.11': '@tailwindcss/oxide-freebsd-x64@4.1.12':
resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==} resolution: {integrity: sha512-JOH/f7j6+nYXIrHobRYCtoArJdMJh5zy5lr0FV0Qu47MID/vqJAY3r/OElPzx1C/wdT1uS7cPq+xdYYelny1ww==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12':
resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==} resolution: {integrity: sha512-v4Ghvi9AU1SYgGr3/j38PD8PEe6bRfTnNSUE3YCMIRrrNigCFtHZ2TCm8142X8fcSqHBZBceDx+JlFJEfNg5zQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@tailwindcss/oxide-linux-arm64-gnu@4.1.11': '@tailwindcss/oxide-linux-arm64-gnu@4.1.12':
resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==} resolution: {integrity: sha512-YP5s1LmetL9UsvVAKusHSyPlzSRqYyRB0f+Kl/xcYQSPLEw/BvGfxzbH+ihUciePDjiXwHh+p+qbSP3SlJw+6g==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@tailwindcss/oxide-linux-arm64-musl@4.1.11': '@tailwindcss/oxide-linux-arm64-musl@4.1.12':
resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==} resolution: {integrity: sha512-V8pAM3s8gsrXcCv6kCHSuwyb/gPsd863iT+v1PGXC4fSL/OJqsKhfK//v8P+w9ThKIoqNbEnsZqNy+WDnwQqCA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@tailwindcss/oxide-linux-x64-gnu@4.1.11': '@tailwindcss/oxide-linux-x64-gnu@4.1.12':
resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==} resolution: {integrity: sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@tailwindcss/oxide-linux-x64-musl@4.1.11': '@tailwindcss/oxide-linux-x64-musl@4.1.12':
resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==} resolution: {integrity: sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@tailwindcss/oxide-wasm32-wasi@4.1.11': '@tailwindcss/oxide-wasm32-wasi@4.1.12':
resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==} resolution: {integrity: sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
cpu: [wasm32] cpu: [wasm32]
bundledDependencies: bundledDependencies:
...@@ -492,24 +491,24 @@ packages: ...@@ -492,24 +491,24 @@ packages:
- '@emnapi/wasi-threads' - '@emnapi/wasi-threads'
- tslib - tslib
'@tailwindcss/oxide-win32-arm64-msvc@4.1.11': '@tailwindcss/oxide-win32-arm64-msvc@4.1.12':
resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==} resolution: {integrity: sha512-iGLyD/cVP724+FGtMWslhcFyg4xyYyM+5F4hGvKA7eifPkXHRAUDFaimu53fpNg9X8dfP75pXx/zFt/jlNF+lg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@tailwindcss/oxide-win32-x64-msvc@4.1.11': '@tailwindcss/oxide-win32-x64-msvc@4.1.12':
resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==} resolution: {integrity: sha512-NKIh5rzw6CpEodv/++r0hGLlfgT/gFN+5WNdZtvh6wpU2BpGNgdjvj6H2oFc8nCM839QM1YOhjpgbAONUb4IxA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@tailwindcss/oxide@4.1.11': '@tailwindcss/oxide@4.1.12':
resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} resolution: {integrity: sha512-gM5EoKHW/ukmlEtphNwaGx45fGoEmP10v51t9unv55voWh6WrOL19hfuIdo2FjxIaZzw776/BUQg7Pck++cIVw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
'@tailwindcss/postcss@4.1.11': '@tailwindcss/postcss@4.1.12':
resolution: {integrity: sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==} resolution: {integrity: sha512-5PpLYhCAwf9SJEeIsSmCDLgyVfdBhdBpzX1OJ87anT9IVR0Z9pjM0FNixCAUAHGnMBGB8K99SwAheXrT0Kh6QQ==}
'@tybys/wasm-util@0.10.0': '@tybys/wasm-util@0.10.0':
resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==}
...@@ -523,74 +522,74 @@ packages: ...@@ -523,74 +522,74 @@ packages:
'@types/json5@0.0.29': '@types/json5@0.0.29':
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
'@types/node@20.19.10': '@types/node@20.19.11':
resolution: {integrity: sha512-iAFpG6DokED3roLSP0K+ybeDdIX6Bc0Vd3mLW5uDqThPWtNos3E+EqOM11mPQHKzfWHqEBuLjIlsBQQ8CsISmQ==} resolution: {integrity: sha512-uug3FEEGv0r+jrecvUUpbY8lLisvIjg6AAic6a2bSP5OEOLeJsDSnvhCDov7ipFFMXS3orMpzlmi0ZcuGkBbow==}
'@types/react-dom@19.1.7': '@types/react-dom@19.1.8':
resolution: {integrity: sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==} resolution: {integrity: sha512-xG7xaBMJCpcK0RpN8jDbAACQo54ycO6h4dSSmgv8+fu6ZIAdANkx/WsawASUjVXYfy+J9AbUpRMNNEsXCDfDBQ==}
peerDependencies: peerDependencies:
'@types/react': ^19.0.0 '@types/react': ^19.0.0
'@types/react@19.1.9': '@types/react@19.1.11':
resolution: {integrity: sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==} resolution: {integrity: sha512-lr3jdBw/BGj49Eps7EvqlUaoeA0xpj3pc0RoJkHpYaCHkVK7i28dKyImLQb3JVlqs3aYSXf7qYuWOW/fgZnTXQ==}
'@typescript-eslint/eslint-plugin@8.39.0': '@typescript-eslint/eslint-plugin@8.41.0':
resolution: {integrity: sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==} resolution: {integrity: sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
'@typescript-eslint/parser': ^8.39.0 '@typescript-eslint/parser': ^8.41.0
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/parser@8.39.0': '@typescript-eslint/parser@8.41.0':
resolution: {integrity: sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==} resolution: {integrity: sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/project-service@8.39.0': '@typescript-eslint/project-service@8.41.0':
resolution: {integrity: sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==} resolution: {integrity: sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/scope-manager@8.39.0': '@typescript-eslint/scope-manager@8.41.0':
resolution: {integrity: sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==} resolution: {integrity: sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/tsconfig-utils@8.39.0': '@typescript-eslint/tsconfig-utils@8.41.0':
resolution: {integrity: sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==} resolution: {integrity: sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/type-utils@8.39.0': '@typescript-eslint/type-utils@8.41.0':
resolution: {integrity: sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==} resolution: {integrity: sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/types@8.39.0': '@typescript-eslint/types@8.41.0':
resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==} resolution: {integrity: sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.39.0': '@typescript-eslint/typescript-estree@8.41.0':
resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==} resolution: {integrity: sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/utils@8.39.0': '@typescript-eslint/utils@8.41.0':
resolution: {integrity: sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==} resolution: {integrity: sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/visitor-keys@8.39.0': '@typescript-eslint/visitor-keys@8.41.0':
resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==} resolution: {integrity: sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@unrs/resolver-binding-android-arm-eabi@1.11.1': '@unrs/resolver-binding-android-arm-eabi@1.11.1':
...@@ -804,8 +803,8 @@ packages: ...@@ -804,8 +803,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'} engines: {node: '>=6'}
caniuse-lite@1.0.30001734: caniuse-lite@1.0.30001737:
resolution: {integrity: sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==} resolution: {integrity: sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==}
chalk@4.1.2: chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
...@@ -850,8 +849,8 @@ packages: ...@@ -850,8 +849,8 @@ packages:
concat-map@0.0.1: concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
concurrently@9.2.0: concurrently@9.2.1:
resolution: {integrity: sha512-IsB/fiXTupmagMW4MNp2lx2cdSN2FfZq78vF90LBB+zZHArbIQZjQtzXCiXnvTxCZSvXanTqFLWBjw2UkLx1SQ==} resolution: {integrity: sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==}
engines: {node: '>=18'} engines: {node: '>=18'}
hasBin: true hasBin: true
...@@ -1081,8 +1080,8 @@ packages: ...@@ -1081,8 +1080,8 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint@9.33.0: eslint@9.34.0:
resolution: {integrity: sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==} resolution: {integrity: sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
...@@ -1138,8 +1137,9 @@ packages: ...@@ -1138,8 +1137,9 @@ packages:
fastq@1.19.1: fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
fdir@6.4.6: fdir@6.5.0:
resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
peerDependencies: peerDependencies:
picomatch: ^3 || ^4 picomatch: ^3 || ^4
peerDependenciesMeta: peerDependenciesMeta:
...@@ -1508,15 +1508,12 @@ packages: ...@@ -1508,15 +1508,12 @@ packages:
lodash.merge@4.6.2: lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
loose-envify@1.4.0: loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true hasBin: true
magic-string@0.30.17: magic-string@0.30.18:
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==}
math-intrinsics@1.1.0: math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
...@@ -1933,11 +1930,11 @@ packages: ...@@ -1933,11 +1930,11 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
tailwindcss@4.1.11: tailwindcss@4.1.12:
resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} resolution: {integrity: sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==}
tapable@2.2.2: tapable@2.2.3:
resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==}
engines: {node: '>=6'} engines: {node: '>=6'}
tar@7.4.3: tar@7.4.3:
...@@ -2058,18 +2055,13 @@ packages: ...@@ -2058,18 +2055,13 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'} engines: {node: '>=10'}
zod@4.1.1: zod@4.1.3:
resolution: {integrity: sha512-SgMZK/h8Tigt9nnKkfJMvB/mKjiJXaX26xegP4sa+0wHIFVFWVlsQGdhklDmuargBD3Hsi3rsQRIzwJIhTPJHA==} resolution: {integrity: sha512-1neef4bMce1hNTrxvHVKxWjKfGDn0oAli3Wy1Uwb7TRO1+wEwoZUZNP1NXIEESybOBiFnBOhI6a4m6tCLE8dog==}
snapshots: snapshots:
'@alloc/quick-lru@5.2.0': {} '@alloc/quick-lru@5.2.0': {}
'@ampproject/remapping@2.3.0':
dependencies:
'@jridgewell/gen-mapping': 0.3.12
'@jridgewell/trace-mapping': 0.3.29
'@emnapi/core@1.4.5': '@emnapi/core@1.4.5':
dependencies: dependencies:
'@emnapi/wasi-threads': 1.0.4 '@emnapi/wasi-threads': 1.0.4
...@@ -2086,9 +2078,9 @@ snapshots: ...@@ -2086,9 +2078,9 @@ snapshots:
tslib: 2.8.1 tslib: 2.8.1
optional: true optional: true
'@eslint-community/eslint-utils@4.7.0(eslint@9.33.0(jiti@2.5.1))': '@eslint-community/eslint-utils@4.7.0(eslint@9.34.0(jiti@2.5.1))':
dependencies: dependencies:
eslint: 9.33.0(jiti@2.5.1) eslint: 9.34.0(jiti@2.5.1)
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {} '@eslint-community/regexpp@4.12.1': {}
...@@ -2121,7 +2113,7 @@ snapshots: ...@@ -2121,7 +2113,7 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@eslint/js@9.33.0': {} '@eslint/js@9.34.0': {}
'@eslint/object-schema@2.1.6': {} '@eslint/object-schema@2.1.6': {}
...@@ -2233,19 +2225,24 @@ snapshots: ...@@ -2233,19 +2225,24 @@ snapshots:
dependencies: dependencies:
minipass: 7.1.2 minipass: 7.1.2
'@jridgewell/gen-mapping@0.3.12': '@jridgewell/gen-mapping@0.3.13':
dependencies: dependencies:
'@jridgewell/sourcemap-codec': 1.5.4 '@jridgewell/sourcemap-codec': 1.5.5
'@jridgewell/trace-mapping': 0.3.29 '@jridgewell/trace-mapping': 0.3.30
'@jridgewell/remapping@2.3.5':
dependencies:
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.30
'@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/resolve-uri@3.1.2': {}
'@jridgewell/sourcemap-codec@1.5.4': {} '@jridgewell/sourcemap-codec@1.5.5': {}
'@jridgewell/trace-mapping@0.3.29': '@jridgewell/trace-mapping@0.3.30':
dependencies: dependencies:
'@jridgewell/resolve-uri': 3.1.2 '@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.4 '@jridgewell/sourcemap-codec': 1.5.5
'@napi-rs/wasm-runtime@0.2.12': '@napi-rs/wasm-runtime@0.2.12':
dependencies: dependencies:
...@@ -2363,77 +2360,77 @@ snapshots: ...@@ -2363,77 +2360,77 @@ snapshots:
dependencies: dependencies:
tslib: 2.8.1 tslib: 2.8.1
'@tailwindcss/node@4.1.11': '@tailwindcss/node@4.1.12':
dependencies: dependencies:
'@ampproject/remapping': 2.3.0 '@jridgewell/remapping': 2.3.5
enhanced-resolve: 5.18.3 enhanced-resolve: 5.18.3
jiti: 2.5.1 jiti: 2.5.1
lightningcss: 1.30.1 lightningcss: 1.30.1
magic-string: 0.30.17 magic-string: 0.30.18
source-map-js: 1.2.1 source-map-js: 1.2.1
tailwindcss: 4.1.11 tailwindcss: 4.1.12
'@tailwindcss/oxide-android-arm64@4.1.11': '@tailwindcss/oxide-android-arm64@4.1.12':
optional: true optional: true
'@tailwindcss/oxide-darwin-arm64@4.1.11': '@tailwindcss/oxide-darwin-arm64@4.1.12':
optional: true optional: true
'@tailwindcss/oxide-darwin-x64@4.1.11': '@tailwindcss/oxide-darwin-x64@4.1.12':
optional: true optional: true
'@tailwindcss/oxide-freebsd-x64@4.1.11': '@tailwindcss/oxide-freebsd-x64@4.1.12':
optional: true optional: true
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12':
optional: true optional: true
'@tailwindcss/oxide-linux-arm64-gnu@4.1.11': '@tailwindcss/oxide-linux-arm64-gnu@4.1.12':
optional: true optional: true
'@tailwindcss/oxide-linux-arm64-musl@4.1.11': '@tailwindcss/oxide-linux-arm64-musl@4.1.12':
optional: true optional: true
'@tailwindcss/oxide-linux-x64-gnu@4.1.11': '@tailwindcss/oxide-linux-x64-gnu@4.1.12':
optional: true optional: true
'@tailwindcss/oxide-linux-x64-musl@4.1.11': '@tailwindcss/oxide-linux-x64-musl@4.1.12':
optional: true optional: true
'@tailwindcss/oxide-wasm32-wasi@4.1.11': '@tailwindcss/oxide-wasm32-wasi@4.1.12':
optional: true optional: true
'@tailwindcss/oxide-win32-arm64-msvc@4.1.11': '@tailwindcss/oxide-win32-arm64-msvc@4.1.12':
optional: true optional: true
'@tailwindcss/oxide-win32-x64-msvc@4.1.11': '@tailwindcss/oxide-win32-x64-msvc@4.1.12':
optional: true optional: true
'@tailwindcss/oxide@4.1.11': '@tailwindcss/oxide@4.1.12':
dependencies: dependencies:
detect-libc: 2.0.4 detect-libc: 2.0.4
tar: 7.4.3 tar: 7.4.3
optionalDependencies: optionalDependencies:
'@tailwindcss/oxide-android-arm64': 4.1.11 '@tailwindcss/oxide-android-arm64': 4.1.12
'@tailwindcss/oxide-darwin-arm64': 4.1.11 '@tailwindcss/oxide-darwin-arm64': 4.1.12
'@tailwindcss/oxide-darwin-x64': 4.1.11 '@tailwindcss/oxide-darwin-x64': 4.1.12
'@tailwindcss/oxide-freebsd-x64': 4.1.11 '@tailwindcss/oxide-freebsd-x64': 4.1.12
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.11 '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.12
'@tailwindcss/oxide-linux-arm64-gnu': 4.1.11 '@tailwindcss/oxide-linux-arm64-gnu': 4.1.12
'@tailwindcss/oxide-linux-arm64-musl': 4.1.11 '@tailwindcss/oxide-linux-arm64-musl': 4.1.12
'@tailwindcss/oxide-linux-x64-gnu': 4.1.11 '@tailwindcss/oxide-linux-x64-gnu': 4.1.12
'@tailwindcss/oxide-linux-x64-musl': 4.1.11 '@tailwindcss/oxide-linux-x64-musl': 4.1.12
'@tailwindcss/oxide-wasm32-wasi': 4.1.11 '@tailwindcss/oxide-wasm32-wasi': 4.1.12
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.11 '@tailwindcss/oxide-win32-arm64-msvc': 4.1.12
'@tailwindcss/oxide-win32-x64-msvc': 4.1.11 '@tailwindcss/oxide-win32-x64-msvc': 4.1.12
'@tailwindcss/postcss@4.1.11': '@tailwindcss/postcss@4.1.12':
dependencies: dependencies:
'@alloc/quick-lru': 5.2.0 '@alloc/quick-lru': 5.2.0
'@tailwindcss/node': 4.1.11 '@tailwindcss/node': 4.1.12
'@tailwindcss/oxide': 4.1.11 '@tailwindcss/oxide': 4.1.12
postcss: 8.5.6 postcss: 8.5.6
tailwindcss: 4.1.11 tailwindcss: 4.1.12
'@tybys/wasm-util@0.10.0': '@tybys/wasm-util@0.10.0':
dependencies: dependencies:
...@@ -2446,27 +2443,27 @@ snapshots: ...@@ -2446,27 +2443,27 @@ snapshots:
'@types/json5@0.0.29': {} '@types/json5@0.0.29': {}
'@types/node@20.19.10': '@types/node@20.19.11':
dependencies: dependencies:
undici-types: 6.21.0 undici-types: 6.21.0
'@types/react-dom@19.1.7(@types/react@19.1.9)': '@types/react-dom@19.1.8(@types/react@19.1.11)':
dependencies: dependencies:
'@types/react': 19.1.9 '@types/react': 19.1.11
'@types/react@19.1.9': '@types/react@19.1.11':
dependencies: dependencies:
csstype: 3.1.3 csstype: 3.1.3
'@typescript-eslint/eslint-plugin@8.39.0(@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': '@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.12.1 '@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/scope-manager': 8.39.0 '@typescript-eslint/scope-manager': 8.41.0
'@typescript-eslint/type-utils': 8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/type-utils': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/utils': 8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/visitor-keys': 8.39.0 '@typescript-eslint/visitor-keys': 8.41.0
eslint: 9.33.0(jiti@2.5.1) eslint: 9.34.0(jiti@2.5.1)
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 7.0.5 ignore: 7.0.5
natural-compare: 1.4.0 natural-compare: 1.4.0
...@@ -2475,56 +2472,56 @@ snapshots: ...@@ -2475,56 +2472,56 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': '@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies: dependencies:
'@typescript-eslint/scope-manager': 8.39.0 '@typescript-eslint/scope-manager': 8.41.0
'@typescript-eslint/types': 8.39.0 '@typescript-eslint/types': 8.41.0
'@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2)
'@typescript-eslint/visitor-keys': 8.39.0 '@typescript-eslint/visitor-keys': 8.41.0
debug: 4.4.1 debug: 4.4.1
eslint: 9.33.0(jiti@2.5.1) eslint: 9.34.0(jiti@2.5.1)
typescript: 5.9.2 typescript: 5.9.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/project-service@8.39.0(typescript@5.9.2)': '@typescript-eslint/project-service@8.41.0(typescript@5.9.2)':
dependencies: dependencies:
'@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2)
'@typescript-eslint/types': 8.39.0 '@typescript-eslint/types': 8.41.0
debug: 4.4.1 debug: 4.4.1
typescript: 5.9.2 typescript: 5.9.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/scope-manager@8.39.0': '@typescript-eslint/scope-manager@8.41.0':
dependencies: dependencies:
'@typescript-eslint/types': 8.39.0 '@typescript-eslint/types': 8.41.0
'@typescript-eslint/visitor-keys': 8.39.0 '@typescript-eslint/visitor-keys': 8.41.0
'@typescript-eslint/tsconfig-utils@8.39.0(typescript@5.9.2)': '@typescript-eslint/tsconfig-utils@8.41.0(typescript@5.9.2)':
dependencies: dependencies:
typescript: 5.9.2 typescript: 5.9.2
'@typescript-eslint/type-utils@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': '@typescript-eslint/type-utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies: dependencies:
'@typescript-eslint/types': 8.39.0 '@typescript-eslint/types': 8.41.0
'@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2)
'@typescript-eslint/utils': 8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
debug: 4.4.1 debug: 4.4.1
eslint: 9.33.0(jiti@2.5.1) eslint: 9.34.0(jiti@2.5.1)
ts-api-utils: 2.1.0(typescript@5.9.2) ts-api-utils: 2.1.0(typescript@5.9.2)
typescript: 5.9.2 typescript: 5.9.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/types@8.39.0': {} '@typescript-eslint/types@8.41.0': {}
'@typescript-eslint/typescript-estree@8.39.0(typescript@5.9.2)': '@typescript-eslint/typescript-estree@8.41.0(typescript@5.9.2)':
dependencies: dependencies:
'@typescript-eslint/project-service': 8.39.0(typescript@5.9.2) '@typescript-eslint/project-service': 8.41.0(typescript@5.9.2)
'@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2)
'@typescript-eslint/types': 8.39.0 '@typescript-eslint/types': 8.41.0
'@typescript-eslint/visitor-keys': 8.39.0 '@typescript-eslint/visitor-keys': 8.41.0
debug: 4.4.1 debug: 4.4.1
fast-glob: 3.3.3 fast-glob: 3.3.3
is-glob: 4.0.3 is-glob: 4.0.3
...@@ -2535,20 +2532,20 @@ snapshots: ...@@ -2535,20 +2532,20 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/utils@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': '@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1))
'@typescript-eslint/scope-manager': 8.39.0 '@typescript-eslint/scope-manager': 8.41.0
'@typescript-eslint/types': 8.39.0 '@typescript-eslint/types': 8.41.0
'@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2)
eslint: 9.33.0(jiti@2.5.1) eslint: 9.34.0(jiti@2.5.1)
typescript: 5.9.2 typescript: 5.9.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/visitor-keys@8.39.0': '@typescript-eslint/visitor-keys@8.41.0':
dependencies: dependencies:
'@typescript-eslint/types': 8.39.0 '@typescript-eslint/types': 8.41.0
eslint-visitor-keys: 4.2.1 eslint-visitor-keys: 4.2.1
'@unrs/resolver-binding-android-arm-eabi@1.11.1': '@unrs/resolver-binding-android-arm-eabi@1.11.1':
...@@ -2761,7 +2758,7 @@ snapshots: ...@@ -2761,7 +2758,7 @@ snapshots:
callsites@3.1.0: {} callsites@3.1.0: {}
caniuse-lite@1.0.30001734: {} caniuse-lite@1.0.30001737: {}
chalk@4.1.2: chalk@4.1.2:
dependencies: dependencies:
...@@ -2808,10 +2805,9 @@ snapshots: ...@@ -2808,10 +2805,9 @@ snapshots:
concat-map@0.0.1: {} concat-map@0.0.1: {}
concurrently@9.2.0: concurrently@9.2.1:
dependencies: dependencies:
chalk: 4.1.2 chalk: 4.1.2
lodash: 4.17.21
rxjs: 7.8.2 rxjs: 7.8.2
shell-quote: 1.8.3 shell-quote: 1.8.3
supports-color: 8.1.1 supports-color: 8.1.1
...@@ -2906,7 +2902,7 @@ snapshots: ...@@ -2906,7 +2902,7 @@ snapshots:
enhanced-resolve@5.18.3: enhanced-resolve@5.18.3:
dependencies: dependencies:
graceful-fs: 4.2.11 graceful-fs: 4.2.11
tapable: 2.2.2 tapable: 2.2.3
es-abstract@1.24.0: es-abstract@1.24.0:
dependencies: dependencies:
...@@ -3013,19 +3009,19 @@ snapshots: ...@@ -3013,19 +3009,19 @@ snapshots:
escape-string-regexp@4.0.0: {} escape-string-regexp@4.0.0: {}
eslint-config-next@15.4.6(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): eslint-config-next@15.4.6(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2):
dependencies: dependencies:
'@next/eslint-plugin-next': 15.4.6 '@next/eslint-plugin-next': 15.4.6
'@rushstack/eslint-patch': 1.12.0 '@rushstack/eslint-patch': 1.12.0
'@typescript-eslint/eslint-plugin': 8.39.0(@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/parser': 8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
eslint: 9.33.0(jiti@2.5.1) eslint: 9.34.0(jiti@2.5.1)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.33.0(jiti@2.5.1)) eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1))
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.33.0(jiti@2.5.1)) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.5.1))
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.33.0(jiti@2.5.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.34.0(jiti@2.5.1))
eslint-plugin-react: 7.37.5(eslint@9.33.0(jiti@2.5.1)) eslint-plugin-react: 7.37.5(eslint@9.34.0(jiti@2.5.1))
eslint-plugin-react-hooks: 5.2.0(eslint@9.33.0(jiti@2.5.1)) eslint-plugin-react-hooks: 5.2.0(eslint@9.34.0(jiti@2.5.1))
optionalDependencies: optionalDependencies:
typescript: 5.9.2 typescript: 5.9.2
transitivePeerDependencies: transitivePeerDependencies:
...@@ -3041,33 +3037,33 @@ snapshots: ...@@ -3041,33 +3037,33 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.33.0(jiti@2.5.1)): eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1)):
dependencies: dependencies:
'@nolyfill/is-core-module': 1.0.39 '@nolyfill/is-core-module': 1.0.39
debug: 4.4.1 debug: 4.4.1
eslint: 9.33.0(jiti@2.5.1) eslint: 9.34.0(jiti@2.5.1)
get-tsconfig: 4.10.1 get-tsconfig: 4.10.1
is-bun-module: 2.0.0 is-bun-module: 2.0.0
stable-hash: 0.0.5 stable-hash: 0.0.5
tinyglobby: 0.2.14 tinyglobby: 0.2.14
unrs-resolver: 1.11.1 unrs-resolver: 1.11.1
optionalDependencies: optionalDependencies:
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.33.0(jiti@2.5.1)) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.5.1))
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.33.0(jiti@2.5.1)): eslint-module-utils@2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.5.1)):
dependencies: dependencies:
debug: 3.2.7 debug: 3.2.7
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
eslint: 9.33.0(jiti@2.5.1) eslint: 9.34.0(jiti@2.5.1)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.33.0(jiti@2.5.1)) eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.5.1))
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.33.0(jiti@2.5.1)): eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.5.1)):
dependencies: dependencies:
'@rtsao/scc': 1.1.0 '@rtsao/scc': 1.1.0
array-includes: 3.1.9 array-includes: 3.1.9
...@@ -3076,9 +3072,9 @@ snapshots: ...@@ -3076,9 +3072,9 @@ snapshots:
array.prototype.flatmap: 1.3.3 array.prototype.flatmap: 1.3.3
debug: 3.2.7 debug: 3.2.7
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 9.33.0(jiti@2.5.1) eslint: 9.34.0(jiti@2.5.1)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.33.0(jiti@2.5.1)) eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.5.1))
hasown: 2.0.2 hasown: 2.0.2
is-core-module: 2.16.1 is-core-module: 2.16.1
is-glob: 4.0.3 is-glob: 4.0.3
...@@ -3090,13 +3086,13 @@ snapshots: ...@@ -3090,13 +3086,13 @@ snapshots:
string.prototype.trimend: 1.0.9 string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0 tsconfig-paths: 3.15.0
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
transitivePeerDependencies: transitivePeerDependencies:
- eslint-import-resolver-typescript - eslint-import-resolver-typescript
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
- supports-color - supports-color
eslint-plugin-jsx-a11y@6.10.2(eslint@9.33.0(jiti@2.5.1)): eslint-plugin-jsx-a11y@6.10.2(eslint@9.34.0(jiti@2.5.1)):
dependencies: dependencies:
aria-query: 5.3.2 aria-query: 5.3.2
array-includes: 3.1.9 array-includes: 3.1.9
...@@ -3106,7 +3102,7 @@ snapshots: ...@@ -3106,7 +3102,7 @@ snapshots:
axobject-query: 4.1.0 axobject-query: 4.1.0
damerau-levenshtein: 1.0.8 damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2 emoji-regex: 9.2.2
eslint: 9.33.0(jiti@2.5.1) eslint: 9.34.0(jiti@2.5.1)
hasown: 2.0.2 hasown: 2.0.2
jsx-ast-utils: 3.3.5 jsx-ast-utils: 3.3.5
language-tags: 1.0.9 language-tags: 1.0.9
...@@ -3115,11 +3111,11 @@ snapshots: ...@@ -3115,11 +3111,11 @@ snapshots:
safe-regex-test: 1.1.0 safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1 string.prototype.includes: 2.0.1
eslint-plugin-react-hooks@5.2.0(eslint@9.33.0(jiti@2.5.1)): eslint-plugin-react-hooks@5.2.0(eslint@9.34.0(jiti@2.5.1)):
dependencies: dependencies:
eslint: 9.33.0(jiti@2.5.1) eslint: 9.34.0(jiti@2.5.1)
eslint-plugin-react@7.37.5(eslint@9.33.0(jiti@2.5.1)): eslint-plugin-react@7.37.5(eslint@9.34.0(jiti@2.5.1)):
dependencies: dependencies:
array-includes: 3.1.9 array-includes: 3.1.9
array.prototype.findlast: 1.2.5 array.prototype.findlast: 1.2.5
...@@ -3127,7 +3123,7 @@ snapshots: ...@@ -3127,7 +3123,7 @@ snapshots:
array.prototype.tosorted: 1.1.4 array.prototype.tosorted: 1.1.4
doctrine: 2.1.0 doctrine: 2.1.0
es-iterator-helpers: 1.2.1 es-iterator-helpers: 1.2.1
eslint: 9.33.0(jiti@2.5.1) eslint: 9.34.0(jiti@2.5.1)
estraverse: 5.3.0 estraverse: 5.3.0
hasown: 2.0.2 hasown: 2.0.2
jsx-ast-utils: 3.3.5 jsx-ast-utils: 3.3.5
...@@ -3150,15 +3146,15 @@ snapshots: ...@@ -3150,15 +3146,15 @@ snapshots:
eslint-visitor-keys@4.2.1: {} eslint-visitor-keys@4.2.1: {}
eslint@9.33.0(jiti@2.5.1): eslint@9.34.0(jiti@2.5.1):
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1))
'@eslint-community/regexpp': 4.12.1 '@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.21.0 '@eslint/config-array': 0.21.0
'@eslint/config-helpers': 0.3.1 '@eslint/config-helpers': 0.3.1
'@eslint/core': 0.15.2 '@eslint/core': 0.15.2
'@eslint/eslintrc': 3.3.1 '@eslint/eslintrc': 3.3.1
'@eslint/js': 9.33.0 '@eslint/js': 9.34.0
'@eslint/plugin-kit': 0.3.5 '@eslint/plugin-kit': 0.3.5
'@humanfs/node': 0.16.6 '@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/module-importer': 1.0.1
...@@ -3242,7 +3238,7 @@ snapshots: ...@@ -3242,7 +3238,7 @@ snapshots:
dependencies: dependencies:
reusify: 1.1.0 reusify: 1.1.0
fdir@6.4.6(picomatch@4.0.3): fdir@6.5.0(picomatch@4.0.3):
optionalDependencies: optionalDependencies:
picomatch: 4.0.3 picomatch: 4.0.3
...@@ -3602,15 +3598,13 @@ snapshots: ...@@ -3602,15 +3598,13 @@ snapshots:
lodash.merge@4.6.2: {} lodash.merge@4.6.2: {}
lodash@4.17.21: {}
loose-envify@1.4.0: loose-envify@1.4.0:
dependencies: dependencies:
js-tokens: 4.0.0 js-tokens: 4.0.0
magic-string@0.30.17: magic-string@0.30.18:
dependencies: dependencies:
'@jridgewell/sourcemap-codec': 1.5.4 '@jridgewell/sourcemap-codec': 1.5.5
math-intrinsics@1.1.0: {} math-intrinsics@1.1.0: {}
...@@ -3651,7 +3645,7 @@ snapshots: ...@@ -3651,7 +3645,7 @@ snapshots:
dependencies: dependencies:
'@next/env': 15.4.6 '@next/env': 15.4.6
'@swc/helpers': 0.5.15 '@swc/helpers': 0.5.15
caniuse-lite: 1.0.30001734 caniuse-lite: 1.0.30001737
postcss: 8.4.31 postcss: 8.4.31
react: 19.1.0 react: 19.1.0
react-dom: 19.1.0(react@19.1.0) react-dom: 19.1.0(react@19.1.0)
...@@ -4090,9 +4084,9 @@ snapshots: ...@@ -4090,9 +4084,9 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {} supports-preserve-symlinks-flag@1.0.0: {}
tailwindcss@4.1.11: {} tailwindcss@4.1.12: {}
tapable@2.2.2: {} tapable@2.2.3: {}
tar@7.4.3: tar@7.4.3:
dependencies: dependencies:
...@@ -4107,7 +4101,7 @@ snapshots: ...@@ -4107,7 +4101,7 @@ snapshots:
tinyglobby@0.2.14: tinyglobby@0.2.14:
dependencies: dependencies:
fdir: 6.4.6(picomatch@4.0.3) fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3 picomatch: 4.0.3
to-regex-range@5.0.1: to-regex-range@5.0.1:
...@@ -4276,4 +4270,4 @@ snapshots: ...@@ -4276,4 +4270,4 @@ snapshots:
yocto-queue@0.1.0: {} yocto-queue@0.1.0: {}
zod@4.1.1: {} zod@4.1.3: {}
...@@ -238,8 +238,8 @@ export async function AddMessage(data: Ty.MessageAddArgs): Promise<Ty.BackendRes ...@@ -238,8 +238,8 @@ export async function AddMessage(data: Ty.MessageAddArgs): Promise<Ty.BackendRes
export async function StartAuthSession() : Promise<Ty.BackendResponse<Auth.Session>> { export async function StartAuthSession() : Promise<Ty.BackendResponse<Auth.Session>> {
const sessionId = getRandomToken(); const sessionId = getRandomToken();
redis.set(`Session:${sessionId}`, "{}"); redis?.set(`Session:${sessionId}`, "{}");
redis.expire(`Session:${sessionId}`, 60 * 5); // 5分钟内登录/注册有效 redis?.expire(`Session:${sessionId}`, 60 * 5); // 5分钟内登录/注册有效
return { return {
code: 0, code: 0,
...@@ -252,7 +252,7 @@ export async function StartAuthSession() : Promise<Ty.BackendResponse<Auth.Sessi ...@@ -252,7 +252,7 @@ export async function StartAuthSession() : Promise<Ty.BackendResponse<Auth.Sessi
export async function Login(args: Auth.AuthArgs) : Promise<Ty.BackendResponse<Auth.LoginResult | null>> { export async function Login(args: Auth.AuthArgs) : Promise<Ty.BackendResponse<Auth.LoginResult | null>> {
const { sessionId, username, password, userAgent, userIP } = args; const { sessionId, username, password, userAgent, userIP } = args;
const sessionStr = await redis.get(`Session:${sessionId}`); const sessionStr = await redis?.get(`Session:${sessionId}`);
if(!sessionStr) if(!sessionStr)
{ {
return { return {
...@@ -289,7 +289,7 @@ export async function Login(args: Auth.AuthArgs) : Promise<Ty.BackendResponse<Au ...@@ -289,7 +289,7 @@ export async function Login(args: Auth.AuthArgs) : Promise<Ty.BackendResponse<Au
} }
}); });
await redis.del(`Session:${sessionId}`); await redis?.del(`Session:${sessionId}`);
return { return {
code: 0, code: 0,
...@@ -337,7 +337,7 @@ export async function AutoLogin(args: Auth.AutoLoginArgs) : Promise<Ty.BackendRe ...@@ -337,7 +337,7 @@ export async function AutoLogin(args: Auth.AutoLoginArgs) : Promise<Ty.BackendRe
export async function Register(args: Auth.AuthArgs) : Promise<Ty.BackendResponse<Auth.RegisterResult | null>> { export async function Register(args: Auth.AuthArgs) : Promise<Ty.BackendResponse<Auth.RegisterResult | null>> {
const { sessionId, username, password } = args; const { sessionId, username, password } = args;
const sessionStr = await redis.get(`Session:${sessionId}`); const sessionStr = await redis?.get(`Session:${sessionId}`);
if(!sessionStr) if(!sessionStr)
{ {
return { return {
...@@ -372,7 +372,7 @@ export async function Register(args: Auth.AuthArgs) : Promise<Ty.BackendResponse ...@@ -372,7 +372,7 @@ export async function Register(args: Auth.AuthArgs) : Promise<Ty.BackendResponse
} }
}); });
await redis.del(`Session:${sessionId}`); await redis?.del(`Session:${sessionId}`);
return { return {
code: 0, code: 0,
......
...@@ -6,27 +6,30 @@ import UsernameCheck from './username-check'; ...@@ -6,27 +6,30 @@ import UsernameCheck from './username-check';
import PageHeaderProvider from './header' import PageHeaderProvider from './header'
import ConfirmModalProvider from './confirm-modal'; import ConfirmModalProvider from './confirm-modal';
import { RoomProvider } from './room-context' import { RoomProvider } from './room-context'
import { Suspense } from 'react';
export default function Home() { export default function Home() {
return ( return (
<RoomProvider> <Suspense fallback={<div>Loading...</div>}>
<UsernameCheck /> <RoomProvider>
<ConfirmModalProvider /> <UsernameCheck />
<div className="bg-gray-100 flex-col flex h-screen"> <ConfirmModalProvider />
<PageHeaderProvider /> <div className="bg-gray-100 flex-col flex h-screen">
<div className="flex flex-1 overflow-hidden"> <PageHeaderProvider />
<div className="w-1/4 bg-white p-4 overflow-y-auto"> <div className="flex flex-1 overflow-hidden">
<h2 className="text-lg font-bold mb-4">房间列表</h2> <div className="w-1/4 bg-white p-4 overflow-y-auto">
<RoomListProvider /> <h2 className="text-lg font-bold mb-4">房间列表</h2>
<RoomListProvider />
</div>
<div className="w-3/4 bg-gray-100 p-4">
<RoomHeaderProvider />
<RoomMessageProvider />
<SendMessageProvider />
</div>
</div>
</div> </div>
<div className="w-3/4 bg-gray-100 p-4"> </RoomProvider>
<RoomHeaderProvider /> </Suspense>
<RoomMessageProvider />
<SendMessageProvider />
</div>
</div>
</div>
</RoomProvider>
); );
} }
...@@ -8,14 +8,20 @@ declare global{ ...@@ -8,14 +8,20 @@ declare global{
var rateLimiter:RateLimiterRedis | undefined; var rateLimiter:RateLimiterRedis | undefined;
} }
const connectRedisClient = async () => { const connectRedisClient = async () => {
const client = createClient(); const isBuild = process.env.NEXT_PHASE === 'phase-production-build';
client.on('error', (err) => console.error('Redis Client Error', err));
await client.connect(); const client = isBuild ? undefined : createClient();
client?.on('error', (err) => console.error('Redis Client Error', err));
await client?.connect();
return client; return client;
}; };
const getRateLimiter = () => { const getRateLimiter = () => {
const isBuild = process.env.NEXT_PHASE === 'phase-production-build';
if(isBuild) return undefined;
const rateLimiter = new RateLimiterRedis({ const rateLimiter = new RateLimiterRedis({
storeClient: redis, storeClient: redis,
keyPrefix: 'rateLimiter', keyPrefix: 'rateLimiter',
...@@ -25,6 +31,8 @@ const getRateLimiter = () => { ...@@ -25,6 +31,8 @@ const getRateLimiter = () => {
return rateLimiter; return rateLimiter;
}; };
export const prisma = global.prisma || new PrismaClient(); export const prisma = global.prisma || new PrismaClient();
export const redis = global.redisClient || await connectRedisClient(); export const redis = global.redisClient || await connectRedisClient();
export const rateLimiter = global.rateLimiter || getRateLimiter(); export const rateLimiter = global.rateLimiter || getRateLimiter();
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment