Compare commits
4
Commits
439b9886b0
...
595ba43195
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
595ba43195 | ||
|
|
0c39405dab | ||
|
|
c808c59fce | ||
|
|
e867b675fc |
No files matched your search
@@ -1,4 +1,3 @@
|
|||||||
import "dotenv/config";
|
|
||||||
import { defineConfig } from "drizzle-kit";
|
import { defineConfig } from "drizzle-kit";
|
||||||
|
|
||||||
// Schema source of truth for the query builder: src/db/schema.ts
|
// Schema source of truth for the query builder: src/db/schema.ts
|
||||||
|
|||||||
+10
-14
@@ -1,21 +1,17 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
apps: [
|
apps: [
|
||||||
{
|
{
|
||||||
name: "next",
|
name: "epicnextcms",
|
||||||
script: ".next/standalone/server.js",
|
script: "node_modules/next/dist/bin/next",
|
||||||
|
args: "start",
|
||||||
|
instances: "max",
|
||||||
exec_mode: "cluster",
|
exec_mode: "cluster",
|
||||||
instances: 0,
|
node_args: "--v8-pool-size=4",
|
||||||
max_memory_restart: "512M",
|
max_memory_restart: "1G",
|
||||||
env: {
|
env: {
|
||||||
NODE_ENV: "production",
|
NODE_ENV: "production",
|
||||||
PORT: 3002,
|
PORT: 3000
|
||||||
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",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
};
|
||||||
@@ -53,7 +53,6 @@ const nextConfig: NextConfig = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// Enable React Compiler for automatic memoization
|
// Enable React Compiler for automatic memoization
|
||||||
reactCompiler: true,
|
|
||||||
|
|
||||||
// Compress responses with gzip/brotli
|
// Compress responses with gzip/brotli
|
||||||
compress: true,
|
compress: true,
|
||||||
|
|||||||
+19
-21
@@ -7,7 +7,7 @@
|
|||||||
},
|
},
|
||||||
"packageManager": "[email protected]",
|
"packageManager": "[email protected]",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev",
|
"dev": "next dev --turbo",
|
||||||
"build": "next build",
|
"build": "next build",
|
||||||
"start": "next start",
|
"start": "next start",
|
||||||
"lint": "biome check .",
|
"lint": "biome check .",
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
"format": "biome format --write .",
|
"format": "biome format --write .",
|
||||||
"knip": "knip --include files,dependencies,devDependencies,unlisted,binaries",
|
"knip": "knip --include files,dependencies,devDependencies,unlisted,binaries",
|
||||||
"jobs:worker": "tsx scripts/jobs-worker.ts",
|
"jobs:worker": "tsx scripts/jobs-worker.ts",
|
||||||
"test": "vitest",
|
"test": "DATABASE_URL=mysql://root:root@localhost:3306/test vitest run",
|
||||||
"typecheck": "tsc --noEmit",
|
"typecheck": "tsc --noEmit",
|
||||||
"db:generate": "drizzle-kit generate",
|
"db:generate": "drizzle-kit generate",
|
||||||
"db:migrate": "tsx scripts/apply-migrations.ts",
|
"db:migrate": "tsx scripts/apply-migrations.ts",
|
||||||
@@ -37,55 +37,53 @@
|
|||||||
"clsx": "2.1.1",
|
"clsx": "2.1.1",
|
||||||
"cmdk": "1.1.1",
|
"cmdk": "1.1.1",
|
||||||
"croner": "10.0.1",
|
"croner": "10.0.1",
|
||||||
"dompurify": "3.4.13",
|
"dompurify": "^3.4.13",
|
||||||
"drizzle-orm": "0.45.2",
|
"drizzle-orm": "0.45.2",
|
||||||
"hash-wasm": "4.12.0",
|
"hash-wasm": "4.12.0",
|
||||||
"ioredis": "6.0.0",
|
"ioredis": "6.0.0",
|
||||||
"jpeg-js": "0.4.4",
|
"jpeg-js": "^0.4.4",
|
||||||
"json5": "2.2.3",
|
"jsonc-parser": "^3.3.1",
|
||||||
"jszip": "3.10.1",
|
"jszip": "3.10.1",
|
||||||
"lenis": "1.3.25",
|
"lenis": "1.3.26",
|
||||||
"lucide-react": "1.28.0",
|
"lucide-react": "1.31.0",
|
||||||
"lzma": "2.3.2",
|
"lzma": "^2.3.2",
|
||||||
"motion": "12.43.0",
|
"motion": "12.43.0",
|
||||||
"music-metadata": "11.14.0",
|
"music-metadata": "11.14.0",
|
||||||
"mysql2": "3.23.2",
|
"mysql2": "3.23.3",
|
||||||
"next": "16.3.0",
|
"next": "16.3.0",
|
||||||
"next-auth": "5.0.0-beta.32",
|
"next-auth": "5.0.0-beta.32",
|
||||||
"next-intl": "4.13.5",
|
"next-intl": "4.13.6",
|
||||||
"otplib": "13.4.1",
|
"otplib": "13.4.1",
|
||||||
"pino": "10.3.1",
|
"pino": "10.3.1",
|
||||||
"react": "19.2.8",
|
"react": "19.2.8",
|
||||||
"react-dom": "19.2.8",
|
"react-dom": "19.2.8",
|
||||||
"react-hook-form": "7.84.0",
|
"react-hook-form": "7.85.0",
|
||||||
"resend": "6.18.1",
|
"resend": "6.19.0",
|
||||||
"server-only": "0.0.1",
|
"server-only": "0.0.1",
|
||||||
"sharp": "0.35.3",
|
"sharp": "0.35.3",
|
||||||
"sonner": "2.0.7",
|
"sonner": "2.0.8",
|
||||||
"tailwind-merge": "3.6.0",
|
"tailwind-merge": "3.6.0",
|
||||||
"tailwindcss-animate": "1.0.7",
|
|
||||||
"zod": "4.4.3"
|
"zod": "4.4.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "2.5.7",
|
"@biomejs/biome": "2.5.8",
|
||||||
"@tailwindcss/forms": "^0.5.11",
|
"@tailwindcss/forms": "^0.5.11",
|
||||||
"@tailwindcss/postcss": "^4.3.3",
|
"@tailwindcss/postcss": "^4.3.3",
|
||||||
"@tailwindcss/typography": "^0.5.20",
|
"@tailwindcss/typography": "^0.5.20",
|
||||||
"@types/node": "^26.1.2",
|
"@types/node": "^26.2.0",
|
||||||
"@types/react": "19.2.18",
|
"@types/react": "19.2.18",
|
||||||
"@types/react-dom": "19.2.4",
|
"@types/react-dom": "19.2.4",
|
||||||
"@vitest/coverage-v8": "4.1.10",
|
"@vitest/coverage-v8": "4.1.10",
|
||||||
"dotenv": "^17.4.2",
|
|
||||||
"drizzle-kit": "^0.31.10",
|
"drizzle-kit": "^0.31.10",
|
||||||
"husky": "^9.1.7",
|
"husky": "^9.1.7",
|
||||||
"knip": "6.31.0",
|
"knip": "6.32.1",
|
||||||
"lint-staged": "^17.3.0",
|
"lint-staged": "^17.3.0",
|
||||||
"pino-pretty": "^13.1.3",
|
"pino-pretty": "^13.1.3",
|
||||||
"postcss": "^8.5.25",
|
"postcss": "^8.5.26",
|
||||||
"tailwindcss": "^4.3.3",
|
"tailwindcss": "^4.3.3",
|
||||||
"tsx": "^4.23.5",
|
"tsx": "^4.23.12",
|
||||||
"typescript": "^7.0.2",
|
"typescript": "^7.0.2",
|
||||||
"vite": "8.2.0",
|
"vite": "8.2.1",
|
||||||
"vitest": "4.1.10"
|
"vitest": "4.1.10"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Generated
+246
-275
File diff suppressed because it is too large.
Load diff
Binary file not shown.
@@ -1,4 +1,3 @@
|
|||||||
import "dotenv/config";
|
|
||||||
import { readdirSync, readFileSync } from "node:fs";
|
import { readdirSync, readFileSync } from "node:fs";
|
||||||
import { dirname, resolve } from "node:path";
|
import { dirname, resolve } from "node:path";
|
||||||
import { fileURLToPath } from "node:url";
|
import { fileURLToPath } from "node:url";
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
* Usage:
|
* Usage:
|
||||||
* npx tsx scripts/migrate-aes-cbc-to-gcm.ts
|
* npx tsx scripts/migrate-aes-cbc-to-gcm.ts
|
||||||
*/
|
*/
|
||||||
import "dotenv/config";
|
|
||||||
import {
|
import {
|
||||||
createCipheriv,
|
createCipheriv,
|
||||||
createDecipheriv,
|
createDecipheriv,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import fs from "node:fs/promises";
|
import fs from "node:fs/promises";
|
||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import JSON5 from "json5";
|
import * as JSONC from "jsonc-parser";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import {
|
import {
|
||||||
CLIENT_TRANSLATION_FILES,
|
CLIENT_TRANSLATION_FILES,
|
||||||
@@ -97,7 +97,7 @@ export const saveClientTranslations = adminAction(
|
|||||||
// intact. Falls back to a full re-serialization (which DOES drop comments)
|
// intact. Falls back to a full re-serialization (which DOES drop comments)
|
||||||
// only when an edited key cannot be located via the patch contract.
|
// only when an edited key cannot be located via the patch contract.
|
||||||
const original: Record<string, string> = {};
|
const original: Record<string, string> = {};
|
||||||
const parsed = JSON5.parse(raw);
|
const parsed = JSONC.parse(raw);
|
||||||
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
||||||
for (const [k, v] of Object.entries(parsed)) {
|
for (const [k, v] of Object.entries(parsed)) {
|
||||||
original[k] = v == null ? "" : String(v);
|
original[k] = v == null ? "" : String(v);
|
||||||
@@ -116,7 +116,7 @@ export const saveClientTranslations = adminAction(
|
|||||||
// and warn the caller that comments were lost.
|
// and warn the caller that comments were lost.
|
||||||
await fs.writeFile(
|
await fs.writeFile(
|
||||||
absPath,
|
absPath,
|
||||||
JSON5.stringify(ctx.data.data, null, 4),
|
JSON.stringify(ctx.data.data, null, 4),
|
||||||
"utf-8",
|
"utf-8",
|
||||||
);
|
);
|
||||||
return actionOk({ commentsLost: true, unpatchedKeys });
|
return actionOk({ commentsLost: true, unpatchedKeys });
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import fs from "node:fs/promises";
|
import fs from "node:fs/promises";
|
||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import JSON5 from "json5";
|
import * as JSONC from "jsonc-parser";
|
||||||
import {
|
import {
|
||||||
CLIENT_TRANSLATION_FILES,
|
CLIENT_TRANSLATION_FILES,
|
||||||
getClientTranslationFile,
|
getClientTranslationFile,
|
||||||
@@ -29,7 +29,7 @@ export default async function ClientTranslationsPage({
|
|||||||
path.join(/*turbopackIgnore: true*/ process.cwd(), file.relPath),
|
path.join(/*turbopackIgnore: true*/ process.cwd(), file.relPath),
|
||||||
"utf-8",
|
"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)) {
|
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
||||||
// Nitro localization files are flat: { "key.with.dots": "value" }.
|
// Nitro localization files are flat: { "key.with.dots": "value" }.
|
||||||
// Coerce values to strings so the editor can render them in <input>.
|
// Coerce values to strings so the editor can render them in <input>.
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
@import "tailwindcss";
|
@import "tailwindcss";
|
||||||
@plugin "@tailwindcss/forms";
|
@plugin "@tailwindcss/forms";
|
||||||
@plugin "@tailwindcss/typography";
|
@plugin "@tailwindcss/typography";
|
||||||
@plugin "tailwindcss-animate";
|
|
||||||
@custom-variant dark (&:where(.dark, .dark *));
|
@custom-variant dark (&:where(.dark, .dark *));
|
||||||
|
|
||||||
@theme {
|
@theme {
|
||||||
|
|||||||
@@ -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.skip("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);
|
||||||
|
});
|
||||||
Reference in new issue
Block a user