From e867b675fc7cf8de59f1c8a099f78fc3bc4b2b83 Mon Sep 17 00:00:00 2001 From: openhands Date: Tue, 11 Aug 2026 16:50:10 +0200 Subject: [PATCH] fix: replace jsonc with jsonc-parser and cleanup build config --- drizzle.config.ts | 1 - ecosystem.config.cjs | 24 +- next.config.ts | 1 - package.json | 12 +- pnpm-lock.yaml | 343 ++++++++++----------- public/swf/gordon/shirt_M_drsports.swf | Bin 0 -> 20240 bytes scripts/apply-migrations.ts | 1 - scripts/migrate-aes-cbc-to-gcm.ts | 1 - src/actions/translations.ts | 6 +- src/app/admin/translations/client/page.tsx | 4 +- src/app/globals.css | 1 - src/lib/services/import-real.test.ts | 17 + 12 files changed, 195 insertions(+), 216 deletions(-) create mode 100644 public/swf/gordon/shirt_M_drsports.swf create mode 100644 src/lib/services/import-real.test.ts 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 0000000000000000000000000000000000000000..3726d922fb68be8fc79b828c404d2a7943ce60f2 GIT binary patch literal 20240 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 literal 0 HcmV?d00001 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); +});