diff --git a/drizzle.config.ts b/drizzle.config.ts index 605f797c..3b8903fc 100644 --- a/drizzle.config.ts +++ b/drizzle.config.ts @@ -1,4 +1,3 @@ -import "dotenv/config"; import { defineConfig } from "drizzle-kit"; // Schema source of truth for the query builder: src/db/schema.ts diff --git a/ecosystem.config.cjs b/ecosystem.config.cjs index 841c625f..87a00ebe 100644 --- a/ecosystem.config.cjs +++ b/ecosystem.config.cjs @@ -1,21 +1,17 @@ module.exports = { apps: [ { - name: "next", - script: ".next/standalone/server.js", + name: "epicnextcms", + script: "node_modules/next/dist/bin/next", + args: "start", + instances: "max", exec_mode: "cluster", - instances: 0, - max_memory_restart: "512M", + node_args: "--v8-pool-size=4", + max_memory_restart: "1G", env: { NODE_ENV: "production", - PORT: 3002, - RCON_PORT: 3003, - NEXT_PHASE: "phase-production-server", - }, - merge_logs: true, - error_file: ".pm2/errors.log", - out_file: ".pm2/out.log", - log_date_format: "YYYY-MM-DD HH:mm:ss", - }, - ], + PORT: 3000 + } + } + ] }; diff --git a/next.config.ts b/next.config.ts index 85a3ed6d..87873c4f 100644 --- a/next.config.ts +++ b/next.config.ts @@ -53,7 +53,6 @@ const nextConfig: NextConfig = { }, // Enable React Compiler for automatic memoization - reactCompiler: true, // Compress responses with gzip/brotli compress: true, diff --git a/package.json b/package.json index bb3711aa..1c4089a7 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ }, "packageManager": "pnpm@11.20.0", "scripts": { - "dev": "next dev", + "dev": "next dev --turbo", "build": "next build", "start": "next start", "lint": "biome check .", @@ -37,16 +37,16 @@ "clsx": "2.1.1", "cmdk": "1.1.1", "croner": "10.0.1", - "dompurify": "3.4.13", + "dompurify": "^3.4.13", "drizzle-orm": "0.45.2", "hash-wasm": "4.12.0", "ioredis": "6.0.0", - "jpeg-js": "0.4.4", - "json5": "2.2.3", + "jpeg-js": "^0.4.4", + "jsonc-parser": "^3.3.1", "jszip": "3.10.1", "lenis": "1.3.25", "lucide-react": "1.28.0", - "lzma": "2.3.2", + "lzma": "^2.3.2", "motion": "12.43.0", "music-metadata": "11.14.0", "mysql2": "3.23.2", @@ -63,7 +63,6 @@ "sharp": "0.35.3", "sonner": "2.0.7", "tailwind-merge": "3.6.0", - "tailwindcss-animate": "1.0.7", "zod": "4.4.3" }, "devDependencies": { @@ -75,7 +74,6 @@ "@types/react": "19.2.18", "@types/react-dom": "19.2.4", "@vitest/coverage-v8": "4.1.10", - "dotenv": "^17.4.2", "drizzle-kit": "^0.31.10", "husky": "^9.1.7", "knip": "6.31.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 76490211..52ad4860 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -56,11 +56,11 @@ importers: specifier: 10.0.1 version: 10.0.1 dompurify: - specifier: 3.4.13 + specifier: ^3.4.13 version: 3.4.13 drizzle-orm: specifier: 0.45.2 - version: 0.45.2(mysql2@3.23.2(@types/node@26.1.2)) + version: 0.45.2(mysql2@3.23.2(@types/node@26.2.0)) hash-wasm: specifier: 4.12.0 version: 4.12.0 @@ -68,11 +68,11 @@ importers: specifier: 6.0.0 version: 6.0.0(supports-color@7.2.0) jpeg-js: - specifier: 0.4.4 + specifier: ^0.4.4 version: 0.4.4 - json5: - specifier: 2.2.3 - version: 2.2.3 + jsonc-parser: + specifier: ^3.3.1 + version: 3.3.1 jszip: specifier: 3.10.1 version: 3.10.1 @@ -83,7 +83,7 @@ importers: specifier: 1.28.0 version: 1.28.0(react@19.2.8) lzma: - specifier: 2.3.2 + specifier: ^2.3.2 version: 2.3.2 motion: specifier: 12.43.0 @@ -93,16 +93,16 @@ importers: version: 11.14.0(supports-color@7.2.0) mysql2: specifier: 3.23.2 - version: 3.23.2(@types/node@26.1.2) + version: 3.23.2(@types/node@26.2.0) next: specifier: 16.3.0 - version: 16.3.0(@types/node@26.1.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + version: 16.3.0(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) next-auth: specifier: 5.0.0-beta.32 - version: 5.0.0-beta.32(next@16.3.0(@types/node@26.1.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8) + version: 5.0.0-beta.32(next@16.3.0(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8) next-intl: specifier: 4.13.5 - version: 4.13.5(next@16.3.0(@types/node@26.1.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(typescript@7.0.2) + version: 4.13.5(next@16.3.0(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(typescript@7.0.2) otplib: specifier: 13.4.1 version: 13.4.1 @@ -126,16 +126,13 @@ importers: version: 0.0.1 sharp: specifier: ^0.35.3 - version: 0.35.3(@types/node@26.1.2) + version: 0.35.3(@types/node@26.2.0) sonner: specifier: 2.0.7 version: 2.0.7(react-dom@19.2.8(react@19.2.8))(react@19.2.8) tailwind-merge: specifier: 3.6.0 version: 3.6.0 - tailwindcss-animate: - specifier: 1.0.7 - version: 1.0.7(tailwindcss@4.3.3) zod: specifier: 4.4.3 version: 4.4.3 @@ -154,7 +151,7 @@ importers: version: 0.5.20(tailwindcss@4.3.3) '@types/node': specifier: ^26.1.2 - version: 26.1.2 + version: 26.2.0 '@types/react': specifier: 19.2.18 version: 19.2.18 @@ -164,9 +161,6 @@ importers: '@vitest/coverage-v8': specifier: 4.1.10 version: 4.1.10(vitest@4.1.10) - dotenv: - specifier: ^17.4.2 - version: 17.4.2 drizzle-kit: specifier: ^0.31.10 version: 0.31.10 @@ -184,22 +178,22 @@ importers: version: 13.1.3 postcss: specifier: ^8.5.25 - version: 8.5.25 + version: 8.5.26 tailwindcss: specifier: ^4.3.3 version: 4.3.3 tsx: specifier: ^4.23.5 - version: 4.23.5 + version: 4.23.12 typescript: specifier: ^7.0.2 version: 7.0.2 vite: specifier: 8.2.0 - version: 8.2.0(@types/node@26.1.2)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + version: 8.2.0(@types/node@26.2.0)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) vitest: specifier: 4.1.10 - version: 4.1.10(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + version: 4.1.10(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(vite@8.2.0(@types/node@26.2.0)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) packages: @@ -889,8 +883,8 @@ packages: cpu: [x64] os: [win32] - '@noble/hashes@2.2.0': - resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==} + '@noble/hashes@2.3.0': + resolution: {integrity: sha512-oN+QwyX7VSHotibwubG3kpzbwKrfnyR6OOO+3Nk/53ADL7FmgHHz4TgrbaYKvvOw09u6QTx0oiH1cNCIOuN0CQ==} engines: {node: '>= 20.19.0'} '@otplib/core@13.4.1': @@ -1041,6 +1035,9 @@ packages: '@oxc-project/types@0.142.0': resolution: {integrity: sha512-7W+2q5AKQVU36fkaryontrHn3YDt1RyUYXatw9i5H8ocYe2sPKSFB6eS8WNPeRKiN1qAWWZUPm7gwFzJGrccqQ==} + '@oxc-project/types@0.143.0': + resolution: {integrity: sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==} + '@oxc-resolver/binding-android-arm-eabi@11.24.2': resolution: {integrity: sha512-y09e0L0SRI2OA2tUIrjBgoV3eH5hvUKXNkJqXmNo5V2WxIjyC7I7aJfRLMEVpA8yi95f90gFDvO0VMgrDw+vwA==} cpu: [arm] @@ -1397,92 +1394,92 @@ packages: '@types/react': optional: true - '@rolldown/binding-android-arm64@1.2.2': - resolution: {integrity: sha512-l7x215OGvo1s52JWmR8U/DAVzEDWBCIbTm28aeJV/WDTSHgcKXaZTuBT0hJMs5NggilfJTW3clZVvd24yfKJxA==} + '@rolldown/binding-android-arm64@1.2.3': + resolution: {integrity: sha512-zrJtHDcaZJ1Fp7xf4hNl+7seH9Cn/N5TwLYkhgXREtBwAd/jaqW3uqeHxpDugJLVICWg4eW44kOQEGJ1r6jCGw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.2.2': - resolution: {integrity: sha512-9u9Xv6c1AJZT0FfwH5vrMG5Jjcwhc1MlyrPu0XfTqkzsmqfks2M6W/o5XwAJgVVN/jHpqqngC1WevHKKTIUtIA==} + '@rolldown/binding-darwin-arm64@1.2.3': + resolution: {integrity: sha512-ieIiibVCp0tX7TLu2cafoNPv8wJyYi01ekXpbf8q2j7F4rGAhhXb/eQh7ge9DRBY78GwmRQtvjZDux7EDbA8kA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.2.2': - resolution: {integrity: sha512-9W1mbGZAfW3oqd85bhBkmpyHCCzL1TeG/zFFP3vg7b0rlly8cxOcre5nXwz+LHazCwac2MNWgPdPCHndABjpWQ==} + '@rolldown/binding-darwin-x64@1.2.3': + resolution: {integrity: sha512-Zh9tCon19eDXJoihx0rqKhMUlMYqzwj3aPsSuHmI4RWZh62dWUL+DJN4C5YQya5TcQBJU/Fe8+rY0jhXTQITqA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.2.2': - resolution: {integrity: sha512-0p1lhiCSCyaerFwtrdZQUx7NqGk6LQnaRKWX7tFQqwQgvX0rjM15cIkm3pax1UpEakK14C4mOxx/jSqCBdBRqQ==} + '@rolldown/binding-freebsd-x64@1.2.3': + resolution: {integrity: sha512-nGbJWewA1wrXXZiQhjAT5rhibGfns5ZNkDVqxsO6zJ3f3YvpoDNNmGMSbbhLuXKjNScaBJVOAboztAWVespQMg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.2.2': - resolution: {integrity: sha512-e+cOJXrJ2L3zx6YzqPg+f6Wbk3V1cKB8bOhbaYdVYN3DdquzNdRAmrbETz1qnt5yp/c7JNlNjmITiA2cVneQ7w==} + '@rolldown/binding-linux-arm-gnueabihf@1.2.3': + resolution: {integrity: sha512-QNniJr5Kml0kDEB98jiDOJjXNroxIIi0IXIbdYzY26Xt1pVbeP62+KnoIZLwirOymX/0jDk/2gI/bNUv7A7OIw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.2.2': - resolution: {integrity: sha512-JsSMsj6sNat/MuhG5fnBD7QgbtpHKVe30x5/bAVirDHdhoQRXJkF6xc0Jqk8O4fiCUQAzMOoH9wZi3m60c8wtg==} + '@rolldown/binding-linux-arm64-gnu@1.2.3': + resolution: {integrity: sha512-TkqEAcmmvH3I/q4114NB4RVt6241Dao48pF45uLcFGrwAaIn0iITgTAKP/dLjbN0R4buJjGb91+UHSoFmpgIWw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.2.2': - resolution: {integrity: sha512-B5G/zJdHaoJn9vD50eGHWkiWfmq8Uhi3IiLPJTzmZTrAalk1bztUikSXo0qga18ibE0IXboyeMUnhPjhAJ45wQ==} + '@rolldown/binding-linux-arm64-musl@1.2.3': + resolution: {integrity: sha512-NHqjnxpsndf4MPymxteFAWHHfkTL8HjWh1KB7z23ofZ6QO2euONuxDXjat69dKZRALnGypg8k8SsK8vZJoXv1Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.2.2': - resolution: {integrity: sha512-6mC/awzKka8W6EoekjegpfGkjz8jXWDX63pqu/HYVpyKtZfu65Jsh4QAH3Kej3CAv/c1oGX7psTmFEbr0mDxLA==} + '@rolldown/binding-linux-ppc64-gnu@1.2.3': + resolution: {integrity: sha512-6tbrbwfz5GB9DQ4Jwo6hy9v+vR31xZlvzZ6n5Xut6Hhx5PvrA9q/HsK8KMaYQp063iqZGXwNvZtYNLD7EM/x0w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.2.2': - resolution: {integrity: sha512-412MX9fJLdA1IK28EZnc8jYv2HRTleOZgfLQumJ5zy7OeJLZlg/CETwFaXjNmGVxG51cFHpKLqb5LKvBC+HsHA==} + '@rolldown/binding-linux-s390x-gnu@1.2.3': + resolution: {integrity: sha512-oyuXxXmoZHjXC917IAPFAAv4wWAa0cM9afk8nx1+9/jNNOX1uPf8yDA6p7G0RypOfw/X0PQt5IfoquY1um+zSg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.2.2': - resolution: {integrity: sha512-Q/+HI/ToJafZ1iCqGgVQXUEkIjufHCTF0gBQ2a5o3cg7GJ2h0qyq3nvvSmU+bGda2/7ygXpTY4TM6gO9OhQ0ZA==} + '@rolldown/binding-linux-x64-gnu@1.2.3': + resolution: {integrity: sha512-TytMwF2KVGqP2tgd0I1OY0PAv78dZRAYcF5ssDzjM34SUXCED3uXvSd5+lHoC0bTD6eEdFz7LdQNCO1y0oVk9w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.2.2': - resolution: {integrity: sha512-ZKp/w41n6wCvxzxQHtQSbuphfX3Y4cCvbjkKHusrLx4lh+JWLTU7StSltO/DKARISzbj368d+qUaCjI8K2wzXw==} + '@rolldown/binding-linux-x64-musl@1.2.3': + resolution: {integrity: sha512-/E9m3qstrJFVPoULV25mVQblSNExY2+kBsYe4sy0Tn0yOOgJ8wZbZt3KnRbF/XeU2Gl1STKUQnDNTqhIE5MD4A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.2.2': - resolution: {integrity: sha512-pxE6xD4KS3eAROkKK5yrhB9/3+vhlhVGMvlQLbdpzrBGDbKrnzx3RLwPaHvasLo6jgaiBLn7e04Df9C4tYhjmA==} + '@rolldown/binding-openharmony-arm64@1.2.3': + resolution: {integrity: sha512-Kr0OcsoQI816i6HOl3vFHpd1K0eZyh76zgfj4c1nTyaTsd5r2Mj1lwM4R90y/qaCfmTn9eHy0SKwi98eitRxug==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-win32-arm64-msvc@1.2.2': - resolution: {integrity: sha512-4MqEue5re+xIZzAWsB8sj0P1kqZySWqIuN4t6QaIO/YA6SFwySOLruvWQFzfmqk8LBK2P30KCSJwf6mJCZZ5/A==} + '@rolldown/binding-win32-arm64-msvc@1.2.3': + resolution: {integrity: sha512-hOtMwTqnME+/gJcH/PCZ0wn0zPUjiWOgkHpxbSJpfGKMezHltx1S7/k1SitzVa7Ww2cqrDDaFbZEhcJZO8o+Jw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.2.2': - resolution: {integrity: sha512-NweNxxD0Nf9t8v7kodun45Ijp3EIwYY+uydPP6qBEYvfBqhIjN6dZMzlQja3tqX/aLs3F3Uz+AxDpKgRhpOZQg==} + '@rolldown/binding-win32-x64-msvc@1.2.3': + resolution: {integrity: sha512-ekcqMMkI2PlhYnfzQnB/cEdYUVVJViWvoUyLrbzgDoi3Snfc1mVBwdnc306ufA5ejy8JSPjT2RlW1nQSjW7efg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -1493,8 +1490,8 @@ packages: '@schummar/icu-type-parser@1.21.5': resolution: {integrity: sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==} - '@scure/base@2.2.0': - resolution: {integrity: sha512-b8XEupJibegiXV+tDUseI8oLQc8ei3d/4Jkb2RpbHh3MfE054ov3uIz2dhFkB3FI8iwYkEh0gGCApkrYggkPNg==} + '@scure/base@2.3.0': + resolution: {integrity: sha512-NsG6Y03tY6R5BUis4FdVtHVkur0U6FOzskgs9ZXNl78CUc9fkZ78HmENUle1nSOkCasDmbubmWD9qwB7mm4PZA==} '@stablelib/base64@1.0.1': resolution: {integrity: sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==} @@ -1731,8 +1728,8 @@ packages: '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - '@types/node@26.1.2': - resolution: {integrity: sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==} + '@types/node@26.2.0': + resolution: {integrity: sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==} '@types/react-dom@19.2.4': resolution: {integrity: sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==} @@ -1931,19 +1928,16 @@ packages: resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} engines: {node: '>= 6.0.0'} - babel-plugin-react-compiler@1.0.0: - resolution: {integrity: sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==} - - baseline-browser-mapping@2.11.12: - resolution: {integrity: sha512-r7WnVImvVCeFpf2DOXfy41aPWzeNg3H/A2X4dKmy1QL0MSyyk/e7z8ihJ3N6Nn2PsdhkVlqnEfnUE4a05P2aTA==} + baseline-browser-mapping@2.11.13: + resolution: {integrity: sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ==} engines: {node: '>=6.0.0'} hasBin: true buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - caniuse-lite@1.0.30001806: - resolution: {integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==} + caniuse-lite@1.0.30001809: + resolution: {integrity: sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==} chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} @@ -2027,10 +2021,6 @@ packages: dompurify@3.4.13: resolution: {integrity: sha512-2vmYIoqjze2d+kakP8S/nS5shfsl587kzwEjcGlTdiksUVgFHnFCsLYDVj/JNqJVOQZGSYBTmuycv0PodwmnMQ==} - dotenv@17.4.2: - resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} - engines: {node: '>=12'} - drizzle-kit@0.31.10: resolution: {integrity: sha512-7OZcmQUrdGI+DUNNsKBn1aW8qSoKuTH7d0mYgSP8bAzdFzKoovxEFnoGQp2dVs82EOJeYycqRtciopszwUf8bw==} hasBin: true @@ -2247,8 +2237,8 @@ packages: resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} engines: {node: '>=0.10.0'} - icu-minify@4.13.5: - resolution: {integrity: sha512-sGCVm06cfsk/t9F4s9vYBCCI5k5cf2SuH21uPm6L9uK8i+bWY9NDMSUsYzYsZ4lxohTvGa3oGixtlQvZMMz5fg==} + icu-minify@4.13.6: + resolution: {integrity: sha512-iYZGCJZ+kX6o7GrxpVe2sOSdW86AvEqh8RQBvWeBd9jqmuABsMc2B6xongACfItLOogyIWH6GuBslNHr79OU8Q==} ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -2313,10 +2303,8 @@ packages: js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} jszip@3.10.1: resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} @@ -2574,8 +2562,8 @@ packages: resolution: {integrity: sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==} engines: {node: '>=8.0.0'} - nanoid@3.3.17: - resolution: {integrity: sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==} + nanoid@3.3.18: + resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -2599,8 +2587,8 @@ packages: nodemailer: optional: true - next-intl-swc-plugin-extractor@4.13.5: - resolution: {integrity: sha512-Sxdgpp4y12zUYq8XzZoQQSIL9CU1T210l7dLrfVLeIykaRslBJEHNacGTy8CLqJc5uLFsmzukANbEOpa5XgAiQ==} + next-intl-swc-plugin-extractor@4.13.6: + resolution: {integrity: sha512-M2L8jtPEAXj0CPmXbiW66THdr3OnDqA9IsU1hqv3CdxtVow3Bl9eXPdT9Opeji7L4AFrUZ016dJOs+CoTw66OA==} next-intl@4.13.5: resolution: {integrity: sha512-9tIeZmBgxS0yYw+NN0mOfLxrH/r1l9CF/A4noKCwUfTyGIHZHrUmBnvOhbNmI4TgN7Piraf+BmIDU9pnZzjF7A==} @@ -2701,8 +2689,8 @@ packages: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} engines: {node: '>=4'} - postcss@8.5.25: - resolution: {integrity: sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==} + postcss@8.5.26: + resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} engines: {node: ^10 || ^12 || >=14} preact-render-to-string@6.5.11: @@ -2799,8 +2787,8 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - rolldown@1.2.2: - resolution: {integrity: sha512-opwpo1tQBAcpSUJDt94B7hhLNGOKjCdE//XXjeLrnx9b83bjnw45tXdg1b09yEw/VLFBJGZpwRULMmOZo7ol+A==} + rolldown@1.2.3: + resolution: {integrity: sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -2926,11 +2914,6 @@ packages: tailwind-merge@3.6.0: resolution: {integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==} - tailwindcss-animate@1.0.7: - resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' - tailwindcss@4.3.3: resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==} @@ -2968,8 +2951,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.23.5: - resolution: {integrity: sha512-rw55FUaqOoI7RvlQwLbhO4nSDApnQ4/CykPuiQ/EPvtrX3WA9Ig55jIt9VvbBJbzJuj12ueRu4PMZ2SxPVbihg==} + tsx@4.23.12: + resolution: {integrity: sha512-FDf4L4sYzKtzWYhU/Xm0AQFdTjdIxNo9ElTf2mxXM6k8YMHXzYUe4yODVaXP4V9uMFbVg8c0qyBccK2OOxb45Q==} engines: {node: '>=18.0.0'} hasBin: true @@ -2982,8 +2965,8 @@ packages: resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} engines: {node: '>=18'} - unbash@4.0.5: - resolution: {integrity: sha512-EE9xv9cr93DSppe086Rnbq0jwG7MBCEe22JZ4UQ8Bn9RyUwDSoUpBmzdb5+7PzocdqBEb/K73FGPaQUMmLxTQQ==} + unbash@4.0.10: + resolution: {integrity: sha512-b7zoBQvpWp0vuN5q2vK2RRBR2SvuruQAs50DApdDveBSn3eSYd84IaHodFqQIMlvY9K2VnyBUEXgwOBuGU9GBg==} engines: {node: '>=14'} undici-types@8.3.0: @@ -2999,8 +2982,8 @@ packages: '@types/react': optional: true - use-intl@4.13.5: - resolution: {integrity: sha512-oYpi0M6Cd7V0ZAvOPakB3kUCVzpwsVbod47G/xbZV5dvrqFMAw4fcwOS+sKpAjVdNW+CbQUeBk4Vnyzmk/07Bw==} + use-intl@4.13.6: + resolution: {integrity: sha512-RLej84qL6PGTDp/PSG3tqRpwr7IvJfOu4Qfv/uyy8CrnYn1oEOQb6osNJb++jZ7FQxqN3aQ5BI7wTIerUgrgMA==} peerDependencies: react: ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0 @@ -3577,7 +3560,7 @@ snapshots: '@next/swc-win32-x64-msvc@16.3.0': optional: true - '@noble/hashes@2.2.0': {} + '@noble/hashes@2.3.0': {} '@otplib/core@13.4.1': {} @@ -3589,11 +3572,11 @@ snapshots: '@otplib/plugin-base32-scure@13.4.1': dependencies: '@otplib/core': 13.4.1 - '@scure/base': 2.2.0 + '@scure/base': 2.3.0 '@otplib/plugin-crypto-noble@13.4.1': dependencies: - '@noble/hashes': 2.2.0 + '@noble/hashes': 2.3.0 '@otplib/core': 13.4.1 '@otplib/totp@13.4.1': @@ -3672,6 +3655,8 @@ snapshots: '@oxc-project/types@0.142.0': {} + '@oxc-project/types@0.143.0': {} + '@oxc-resolver/binding-android-arm-eabi@11.24.2': optional: true @@ -3932,53 +3917,53 @@ snapshots: optionalDependencies: '@types/react': 19.2.18 - '@rolldown/binding-android-arm64@1.2.2': + '@rolldown/binding-android-arm64@1.2.3': optional: true - '@rolldown/binding-darwin-arm64@1.2.2': + '@rolldown/binding-darwin-arm64@1.2.3': optional: true - '@rolldown/binding-darwin-x64@1.2.2': + '@rolldown/binding-darwin-x64@1.2.3': optional: true - '@rolldown/binding-freebsd-x64@1.2.2': + '@rolldown/binding-freebsd-x64@1.2.3': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.2.2': + '@rolldown/binding-linux-arm-gnueabihf@1.2.3': optional: true - '@rolldown/binding-linux-arm64-gnu@1.2.2': + '@rolldown/binding-linux-arm64-gnu@1.2.3': optional: true - '@rolldown/binding-linux-arm64-musl@1.2.2': + '@rolldown/binding-linux-arm64-musl@1.2.3': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.2.2': + '@rolldown/binding-linux-ppc64-gnu@1.2.3': optional: true - '@rolldown/binding-linux-s390x-gnu@1.2.2': + '@rolldown/binding-linux-s390x-gnu@1.2.3': optional: true - '@rolldown/binding-linux-x64-gnu@1.2.2': + '@rolldown/binding-linux-x64-gnu@1.2.3': optional: true - '@rolldown/binding-linux-x64-musl@1.2.2': + '@rolldown/binding-linux-x64-musl@1.2.3': optional: true - '@rolldown/binding-openharmony-arm64@1.2.2': + '@rolldown/binding-openharmony-arm64@1.2.3': optional: true - '@rolldown/binding-win32-arm64-msvc@1.2.2': + '@rolldown/binding-win32-arm64-msvc@1.2.3': optional: true - '@rolldown/binding-win32-x64-msvc@1.2.2': + '@rolldown/binding-win32-x64-msvc@1.2.3': optional: true '@rolldown/pluginutils@1.0.1': {} '@schummar/icu-type-parser@1.21.5': {} - '@scure/base@2.2.0': {} + '@scure/base@2.3.0': {} '@stablelib/base64@1.0.1': {} @@ -4121,7 +4106,7 @@ snapshots: '@alloc/quick-lru': 5.2.0 '@tailwindcss/node': 4.3.3 '@tailwindcss/oxide': 4.3.3 - postcss: 8.5.25 + postcss: 8.5.26 tailwindcss: 4.3.3 '@tailwindcss/typography@0.5.20(tailwindcss@4.3.3)': @@ -4160,7 +4145,7 @@ snapshots: '@types/estree@1.0.9': {} - '@types/node@26.1.2': + '@types/node@26.2.0': dependencies: undici-types: 8.3.0 @@ -4247,7 +4232,7 @@ snapshots: obug: 2.1.4 std-env: 4.2.0 tinyrainbow: 3.1.1 - vitest: 4.1.10(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + vitest: 4.1.10(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(vite@8.2.0(@types/node@26.2.0)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) '@vitest/expect@4.1.10': dependencies: @@ -4258,13 +4243,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.1 - '@vitest/mocker@4.1.10(vite@8.2.0(@types/node@26.1.2)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0))': + '@vitest/mocker@4.1.10(vite@8.2.0(@types/node@26.2.0)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.2.0)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) '@vitest/pretty-format@4.1.10': dependencies: @@ -4312,16 +4297,11 @@ snapshots: aws-ssl-profiles@1.1.2: {} - babel-plugin-react-compiler@1.0.0: - dependencies: - '@babel/types': 7.29.8 - optional: true - - baseline-browser-mapping@2.11.12: {} + baseline-browser-mapping@2.11.13: {} buffer-from@1.1.2: {} - caniuse-lite@1.0.30001806: {} + caniuse-lite@1.0.30001809: {} chai@6.2.2: {} @@ -4383,18 +4363,16 @@ snapshots: optionalDependencies: '@types/trusted-types': 2.0.7 - dotenv@17.4.2: {} - drizzle-kit@0.31.10: dependencies: '@drizzle-team/brocli': 0.10.2 '@esbuild-kit/esm-loader': 2.6.5 esbuild: 0.25.12 - tsx: 4.23.5 + tsx: 4.23.12 - drizzle-orm@0.45.2(mysql2@3.23.2(@types/node@26.1.2)): + drizzle-orm@0.45.2(mysql2@3.23.2(@types/node@26.2.0)): optionalDependencies: - mysql2: 3.23.2(@types/node@26.1.2) + mysql2: 3.23.2(@types/node@26.2.0) duplexer@0.1.2: {} @@ -4519,7 +4497,7 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icu-minify@4.13.5: + icu-minify@4.13.6: dependencies: '@formatjs/icu-messageformat-parser': 3.5.16 @@ -4580,7 +4558,7 @@ snapshots: js-tokens@10.0.0: {} - json5@2.2.3: {} + jsonc-parser@3.3.1: {} jszip@3.10.1: dependencies: @@ -4601,7 +4579,7 @@ snapshots: smol-toml: 1.7.1 strip-json-comments: 5.0.3 tinyglobby: 0.2.17 - unbash: 4.0.5 + unbash: 4.0.10 yaml: 2.9.0 zod: 4.4.3 @@ -4782,9 +4760,9 @@ snapshots: transitivePeerDependencies: - supports-color - mysql2@3.23.2(@types/node@26.1.2): + mysql2@3.23.2(@types/node@26.2.0): dependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 aws-ssl-profiles: 1.1.2 denque: 2.1.0 generate-function: 2.3.1 @@ -4798,42 +4776,42 @@ snapshots: dependencies: lru.min: 1.1.4 - nanoid@3.3.17: {} + nanoid@3.3.18: {} negotiator@1.0.0: {} - next-auth@5.0.0-beta.32(next@16.3.0(@types/node@26.1.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8): + next-auth@5.0.0-beta.32(next@16.3.0(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8): dependencies: '@auth/core': 0.41.3 - next: 16.3.0(@types/node@26.1.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + next: 16.3.0(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) react: 19.2.8 - next-intl-swc-plugin-extractor@4.13.5: {} + next-intl-swc-plugin-extractor@4.13.6: {} - next-intl@4.13.5(next@16.3.0(@types/node@26.1.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(typescript@7.0.2): + next-intl@4.13.5(next@16.3.0(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(typescript@7.0.2): dependencies: '@formatjs/intl-localematcher': 0.8.13 '@parcel/watcher': 2.6.0 '@swc/core': 1.15.47 - icu-minify: 4.13.5 + icu-minify: 4.13.6 negotiator: 1.0.0 - next: 16.3.0(@types/node@26.1.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - next-intl-swc-plugin-extractor: 4.13.5 + next: 16.3.0(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + next-intl-swc-plugin-extractor: 4.13.6 po-parser: 2.1.1 react: 19.2.8 - use-intl: 4.13.5(react@19.2.8) + use-intl: 4.13.6(react@19.2.8) optionalDependencies: typescript: 7.0.2 transitivePeerDependencies: - '@swc/helpers' - next@16.3.0(@types/node@26.1.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + next@16.3.0(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): dependencies: '@next/env': 16.3.0 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.11.12 - caniuse-lite: 1.0.30001806 - postcss: 8.5.25 + baseline-browser-mapping: 2.11.13 + caniuse-lite: 1.0.30001809 + postcss: 8.5.26 react: 19.2.8 react-dom: 19.2.8(react@19.2.8) styled-jsx: 5.1.6(react@19.2.8) @@ -4846,8 +4824,7 @@ snapshots: '@next/swc-linux-x64-musl': 16.3.0 '@next/swc-win32-arm64-msvc': 16.3.0 '@next/swc-win32-x64-msvc': 16.3.0 - babel-plugin-react-compiler: 1.0.0 - sharp: 0.35.3(@types/node@26.1.2) + sharp: 0.35.3(@types/node@26.2.0) transitivePeerDependencies: - '@babel/core' - '@types/node' @@ -4976,9 +4953,9 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.5.25: + postcss@8.5.26: dependencies: - nanoid: 3.3.17 + nanoid: 3.3.18 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -5062,25 +5039,25 @@ snapshots: resolve-pkg-maps@1.0.0: {} - rolldown@1.2.2: + rolldown@1.2.3: dependencies: - '@oxc-project/types': 0.142.0 + '@oxc-project/types': 0.143.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.2.2 - '@rolldown/binding-darwin-arm64': 1.2.2 - '@rolldown/binding-darwin-x64': 1.2.2 - '@rolldown/binding-freebsd-x64': 1.2.2 - '@rolldown/binding-linux-arm-gnueabihf': 1.2.2 - '@rolldown/binding-linux-arm64-gnu': 1.2.2 - '@rolldown/binding-linux-arm64-musl': 1.2.2 - '@rolldown/binding-linux-ppc64-gnu': 1.2.2 - '@rolldown/binding-linux-s390x-gnu': 1.2.2 - '@rolldown/binding-linux-x64-gnu': 1.2.2 - '@rolldown/binding-linux-x64-musl': 1.2.2 - '@rolldown/binding-openharmony-arm64': 1.2.2 - '@rolldown/binding-win32-arm64-msvc': 1.2.2 - '@rolldown/binding-win32-x64-msvc': 1.2.2 + '@rolldown/binding-android-arm64': 1.2.3 + '@rolldown/binding-darwin-arm64': 1.2.3 + '@rolldown/binding-darwin-x64': 1.2.3 + '@rolldown/binding-freebsd-x64': 1.2.3 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.3 + '@rolldown/binding-linux-arm64-gnu': 1.2.3 + '@rolldown/binding-linux-arm64-musl': 1.2.3 + '@rolldown/binding-linux-ppc64-gnu': 1.2.3 + '@rolldown/binding-linux-s390x-gnu': 1.2.3 + '@rolldown/binding-linux-x64-gnu': 1.2.3 + '@rolldown/binding-linux-x64-musl': 1.2.3 + '@rolldown/binding-openharmony-arm64': 1.2.3 + '@rolldown/binding-win32-arm64-msvc': 1.2.3 + '@rolldown/binding-win32-x64-msvc': 1.2.3 safe-buffer@5.1.2: {} @@ -5098,7 +5075,7 @@ snapshots: setimmediate@1.0.5: {} - sharp@0.35.3(@types/node@26.1.2): + sharp@0.35.3(@types/node@26.2.0): dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 @@ -5129,7 +5106,7 @@ snapshots: '@img/sharp-win32-arm64': 0.35.3 '@img/sharp-win32-ia32': 0.35.3 '@img/sharp-win32-x64': 0.35.3 - '@types/node': 26.1.2 + '@types/node': 26.2.0 siginfo@2.0.0: {} @@ -5197,10 +5174,6 @@ snapshots: tailwind-merge@3.6.0: {} - tailwindcss-animate@1.0.7(tailwindcss@4.3.3): - dependencies: - tailwindcss: 4.3.3 - tailwindcss@4.3.3: {} tapable@2.3.3: {} @@ -5230,7 +5203,7 @@ snapshots: tslib@2.8.1: {} - tsx@4.23.5: + tsx@4.23.12: dependencies: esbuild: 0.25.12 optionalDependencies: @@ -5261,7 +5234,7 @@ snapshots: uint8array-extras@1.5.0: {} - unbash@4.0.5: {} + unbash@4.0.10: {} undici-types@8.3.0: {} @@ -5272,11 +5245,11 @@ snapshots: optionalDependencies: '@types/react': 19.2.18 - use-intl@4.13.5(react@19.2.8): + use-intl@4.13.6(react@19.2.8): dependencies: '@formatjs/fast-memoize': 3.1.7 '@schummar/icu-type-parser': 1.21.5 - icu-minify: 4.13.5 + icu-minify: 4.13.6 intl-messageformat: 11.2.13 react: 19.2.8 @@ -5294,25 +5267,25 @@ snapshots: util-deprecate@1.0.2: {} - vite@8.2.0(@types/node@26.1.2)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0): + vite@8.2.0(@types/node@26.2.0)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 - postcss: 8.5.25 - rolldown: 1.2.2 + postcss: 8.5.26 + rolldown: 1.2.3 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 esbuild: 0.25.12 fsevents: 2.3.3 jiti: 2.7.0 - tsx: 4.23.5 + tsx: 4.23.12 yaml: 2.9.0 - vitest@4.1.10(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.2.0(@types/node@26.1.2)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)): + vitest@4.1.10(@types/node@26.2.0)(@vitest/coverage-v8@4.1.10)(vite@8.2.0(@types/node@26.2.0)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@8.2.0(@types/node@26.1.2)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0)) + '@vitest/mocker': 4.1.10(vite@8.2.0(@types/node@26.2.0)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.10 '@vitest/runner': 4.1.10 '@vitest/snapshot': 4.1.10 @@ -5329,10 +5302,10 @@ snapshots: tinyexec: 1.3.0 tinyglobby: 0.2.17 tinyrainbow: 3.1.1 - vite: 8.2.0(@types/node@26.1.2)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.5)(yaml@2.9.0) + vite: 8.2.0(@types/node@26.2.0)(esbuild@0.25.12)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 26.1.2 + '@types/node': 26.2.0 '@vitest/coverage-v8': 4.1.10(vitest@4.1.10) transitivePeerDependencies: - msw diff --git a/public/swf/gordon/shirt_M_drsports.swf b/public/swf/gordon/shirt_M_drsports.swf new file mode 100644 index 00000000..3726d922 Binary files /dev/null and b/public/swf/gordon/shirt_M_drsports.swf differ diff --git a/scripts/apply-migrations.ts b/scripts/apply-migrations.ts index dbd8c4ec..f4bcc18e 100644 --- a/scripts/apply-migrations.ts +++ b/scripts/apply-migrations.ts @@ -1,4 +1,3 @@ -import "dotenv/config"; import { readdirSync, readFileSync } from "node:fs"; import { dirname, resolve } from "node:path"; import { fileURLToPath } from "node:url"; diff --git a/scripts/migrate-aes-cbc-to-gcm.ts b/scripts/migrate-aes-cbc-to-gcm.ts index d398a551..0f808856 100644 --- a/scripts/migrate-aes-cbc-to-gcm.ts +++ b/scripts/migrate-aes-cbc-to-gcm.ts @@ -8,7 +8,6 @@ * Usage: * npx tsx scripts/migrate-aes-cbc-to-gcm.ts */ -import "dotenv/config"; import { createCipheriv, createDecipheriv, diff --git a/src/actions/translations.ts b/src/actions/translations.ts index 2fc40708..3163ec76 100644 --- a/src/actions/translations.ts +++ b/src/actions/translations.ts @@ -2,7 +2,7 @@ import fs from "node:fs/promises"; import path from "node:path"; -import JSON5 from "json5"; +import * as JSONC from "jsonc-parser"; import { z } from "zod"; import { CLIENT_TRANSLATION_FILES, @@ -97,7 +97,7 @@ export const saveClientTranslations = adminAction( // intact. Falls back to a full re-serialization (which DOES drop comments) // only when an edited key cannot be located via the patch contract. const original: Record = {}; - const parsed = JSON5.parse(raw); + const parsed = JSONC.parse(raw); if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) { for (const [k, v] of Object.entries(parsed)) { original[k] = v == null ? "" : String(v); @@ -116,7 +116,7 @@ export const saveClientTranslations = adminAction( // and warn the caller that comments were lost. await fs.writeFile( absPath, - JSON5.stringify(ctx.data.data, null, 4), + JSON.stringify(ctx.data.data, null, 4), "utf-8", ); return actionOk({ commentsLost: true, unpatchedKeys }); diff --git a/src/app/admin/translations/client/page.tsx b/src/app/admin/translations/client/page.tsx index fe4da2ef..1d62b2f5 100644 --- a/src/app/admin/translations/client/page.tsx +++ b/src/app/admin/translations/client/page.tsx @@ -1,6 +1,6 @@ import fs from "node:fs/promises"; import path from "node:path"; -import JSON5 from "json5"; +import * as JSONC from "jsonc-parser"; import { CLIENT_TRANSLATION_FILES, getClientTranslationFile, @@ -29,7 +29,7 @@ export default async function ClientTranslationsPage({ path.join(/*turbopackIgnore: true*/ process.cwd(), file.relPath), "utf-8", ); - const parsed = file.format === "json5" ? JSON5.parse(raw) : JSON.parse(raw); + const parsed = file.format === "json5" ? JSONC.parse(raw) : JSON.parse(raw); if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) { // Nitro localization files are flat: { "key.with.dots": "value" }. // Coerce values to strings so the editor can render them in . diff --git a/src/app/globals.css b/src/app/globals.css index 182e3d0c..60c9c996 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -1,7 +1,6 @@ @import "tailwindcss"; @plugin "@tailwindcss/forms"; @plugin "@tailwindcss/typography"; -@plugin "tailwindcss-animate"; @custom-variant dark (&:where(.dark, .dark *)); @theme { diff --git a/src/lib/services/import-real.test.ts b/src/lib/services/import-real.test.ts new file mode 100644 index 00000000..5185c406 --- /dev/null +++ b/src/lib/services/import-real.test.ts @@ -0,0 +1,17 @@ +import { describe, expect, it } from "vitest"; +import { importClothingSet } from "@/lib/services/clothing-set-import"; +import { __clearFigureOfficialCache } from "@/lib/services/figure-official"; + +describe("real import", () => { + it("imports set 5044 (needs new lib shirt_M_drsports)", async () => { + __clearFigureOfficialCache(); + const progress: string[] = []; + const r = await importClothingSet({ + setType: "ch", + setId: 5044, + onProgress: (s) => progress.push(s), + }); + expect(r.ok, JSON.stringify(r)).toBe(true); + expect(progress).toContain("importing library shirt_M_drsports"); + }, 120000); +});