diff --git a/.prettierrc b/.prettierrc
deleted file mode 100644
index a91da40c..00000000
--- a/.prettierrc
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "semi": true,
- "singleQuote": false,
- "tabWidth": 2,
- "trailingComma": "all",
- "printWidth": 110,
- "arrowParens": "always",
- "endOfLine": "lf"
-}
diff --git a/biome.json b/biome.json
index 8333afa0..c24a9b21 100644
--- a/biome.json
+++ b/biome.json
@@ -7,7 +7,7 @@
},
"files": {
"ignoreUnknown": false,
- "includes": ["**", "!setup", "!public"]
+ "includes": ["**", "!setup", "!public", "!*.cjs"]
},
"formatter": {
"enabled": true,
diff --git a/e2e/example.spec.ts b/e2e/example.spec.ts
index 5aef9540..ca4dfcc6 100644
--- a/e2e/example.spec.ts
+++ b/e2e/example.spec.ts
@@ -1,16 +1,16 @@
-import { test, expect } from "@playwright/test";
+import { expect, test } from "@playwright/test";
test("homepage has title", async ({ page }) => {
- await page.goto("/");
- await expect(page).toHaveTitle(/Magic Hotel|Atom/i);
+ await page.goto("/");
+ await expect(page).toHaveTitle(/Magic Hotel|Atom/i);
});
test("register page loads", async ({ page }) => {
- await page.goto("/register");
- await expect(page).toHaveTitle(/registreer|register|konto/i);
+ await page.goto("/register");
+ await expect(page).toHaveTitle(/registreer|register|konto/i);
});
test("login page loads", async ({ page }) => {
- await page.goto("/login");
- await expect(page).toHaveTitle(/inloggen|login/i);
+ await page.goto("/login");
+ await expect(page).toHaveTitle(/inloggen|login/i);
});
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 0d31e24f..edcb5fb9 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -3,19 +3,19 @@ import unusedImports from "eslint-plugin-unused-imports";
import tseslint from "typescript-eslint";
export default tseslint.config(
- {
- ignores: ["node_modules", ".next", "dist", "build"],
- },
- js.configs.recommended,
- tseslint.configs.recommended,
- {
- files: ["src/**/*.{ts,tsx}", "pages/**/*.{ts,tsx}", "app/**/*.{ts,tsx}"],
- plugins: {
- "unused-imports": unusedImports,
- },
- rules: {
- "unused-imports/no-unused-vars": "error",
- "no-console": "warn",
- },
- }
+ {
+ ignores: ["node_modules", ".next", "dist", "build"],
+ },
+ js.configs.recommended,
+ tseslint.configs.recommended,
+ {
+ files: ["src/**/*.{ts,tsx}", "pages/**/*.{ts,tsx}", "app/**/*.{ts,tsx}"],
+ plugins: {
+ "unused-imports": unusedImports,
+ },
+ rules: {
+ "unused-imports/no-unused-vars": "error",
+ "no-console": "warn",
+ },
+ },
);
diff --git a/lighthouserc.json b/lighthouserc.cjs
similarity index 100%
rename from lighthouserc.json
rename to lighthouserc.cjs
diff --git a/next.config.ts b/next.config.ts
index 28b38627..f8a8c5e1 100644
--- a/next.config.ts
+++ b/next.config.ts
@@ -1,7 +1,7 @@
-import type { NextConfig } from "next";
-import { withSentryConfig } from "@sentry/nextjs";
-import createNextIntlPlugin from "next-intl/plugin";
import withBundleAnalyzer from "@next/bundle-analyzer";
+import { withSentryConfig } from "@sentry/nextjs";
+import type { NextConfig } from "next";
+import createNextIntlPlugin from "next-intl/plugin";
const securityHeaders = [
{ key: "X-DNS-Prefetch-Control", value: "on" },
@@ -79,17 +79,19 @@ const withBA = withBundleAnalyzer({
enabled: process.env.ANALYZE === "true",
});
-export default withBA(withSentryConfig(config, {
- org: process.env.SENTRY_ORG,
- project: process.env.SENTRY_PROJECT,
- authToken: sentryAuthToken,
- silent: !process.env.CI,
- widenClientFileUpload: true,
- sourcemaps: {
- disable: !sentryAuthToken,
- },
- release: {
- create: Boolean(sentryAuthToken),
- },
- telemetry: false,
-}));
+export default withBA(
+ withSentryConfig(config, {
+ org: process.env.SENTRY_ORG,
+ project: process.env.SENTRY_PROJECT,
+ authToken: sentryAuthToken,
+ silent: !process.env.CI,
+ widenClientFileUpload: true,
+ sourcemaps: {
+ disable: !sentryAuthToken,
+ },
+ release: {
+ create: Boolean(sentryAuthToken),
+ },
+ telemetry: false,
+ }),
+);
diff --git a/playwright.config.ts b/playwright.config.ts
index 203d3b9b..d6aa5f04 100644
--- a/playwright.config.ts
+++ b/playwright.config.ts
@@ -1,33 +1,33 @@
import { defineConfig, devices } from "@playwright/test";
export default defineConfig({
- testDir: "./e2e",
- fullyParallel: true,
- forbidOnly: !!process.env.CI,
- retries: process.env.CI ? 2 : 0,
- workers: process.env.CI ? 1 : undefined,
- reporter: "html",
- use: {
- baseURL: process.env.NEXT_PUBLIC_APP_URL || "http://localhost:3000",
- trace: "on-first-retry",
- },
- projects: [
- {
- name: "chromium",
- use: { ...devices["Desktop Chrome"] },
- },
- {
- name: "firefox",
- use: { ...devices["Desktop Firefox"] },
- },
- {
- name: "webkit",
- use: { ...devices["Desktop Safari"] },
- },
- ],
- webServer: {
- command: "pnpm dev",
- url: "http://localhost:3000",
- reuseExistingServer: !process.env.CI,
- },
+ testDir: "./e2e",
+ fullyParallel: true,
+ forbidOnly: !!process.env.CI,
+ retries: process.env.CI ? 2 : 0,
+ workers: process.env.CI ? 1 : undefined,
+ reporter: "html",
+ use: {
+ baseURL: process.env.NEXT_PUBLIC_APP_URL || "http://localhost:3000",
+ trace: "on-first-retry",
+ },
+ projects: [
+ {
+ name: "chromium",
+ use: { ...devices["Desktop Chrome"] },
+ },
+ {
+ name: "firefox",
+ use: { ...devices["Desktop Firefox"] },
+ },
+ {
+ name: "webkit",
+ use: { ...devices["Desktop Safari"] },
+ },
+ ],
+ webServer: {
+ command: "pnpm dev",
+ url: "http://localhost:3000",
+ reuseExistingServer: !process.env.CI,
+ },
});
diff --git a/scripts/apply-migrations.ts b/scripts/apply-migrations.ts
index b3637885..8f385b63 100644
--- a/scripts/apply-migrations.ts
+++ b/scripts/apply-migrations.ts
@@ -29,6 +29,7 @@ async function openConnection() {
const mysql = await import("mysql2/promise");
return mysql.createConnection(url);
}
+void openConnection;
async function createTrackingTable(
conn: import("mysql2/promise").Connection,
diff --git a/src/actions/admin-ads.ts b/src/actions/admin-ads.ts
index d5ea4f4e..2ed55928 100644
--- a/src/actions/admin-ads.ts
+++ b/src/actions/admin-ads.ts
@@ -5,11 +5,11 @@ import { redirect } from "next/navigation";
import { z } from "zod";
import { requirePermission } from "@/lib/admin/guard";
import { formPositiveBigInt } from "@/lib/form-data";
+import { logger } from "@/lib/logger";
import { PERMS } from "@/lib/permissions";
import { prisma } from "@/lib/prisma";
import { adminAction } from "@/lib/safe-action";
import { ActionError, actionOk } from "@/lib/safe-action-shared";
-import { logger } from "@/lib/logger";
import { logStaffActivity } from "@/lib/services/staff-activity";
// CRUD for website advertisements (website_ads). Emulator does not own this
diff --git a/src/actions/admin-applications.ts b/src/actions/admin-applications.ts
index 1088fe35..2192f4b0 100644
--- a/src/actions/admin-applications.ts
+++ b/src/actions/admin-applications.ts
@@ -2,8 +2,8 @@
import { revalidatePath } from "next/cache";
import { requirePermission } from "@/lib/admin/guard";
-import { PERMS } from "@/lib/permissions";
import { formPositiveBigInt } from "@/lib/form-data";
+import { PERMS } from "@/lib/permissions";
import { prisma } from "@/lib/prisma";
export async function dismissApplication(formData: FormData): Promise {position.description}
- {t("deadline", { date: formatDate(position.applyTo, "datetime", t("noDeadline")) })}
+ {t("deadline", {
+ date: formatDate(
+ position.applyTo,
+ "datetime",
+ t("noDeadline"),
+ ),
+ })}
+
{excerpt(event.description, 120)}
- {formatDate(post.createdAt ? new Date(post.createdAt * 1000) : null)} + {formatDate( + post.createdAt ? new Date(post.createdAt * 1000) : null, + )}
{canReply ? (
-
- {t("loginToReply")}{" "} - {t("loginLink")} + {t("loginToReply")} {t("loginLink")}
)} diff --git a/src/app/(site)/guilds/[id]/forum/page.tsx b/src/app/(site)/guilds/[id]/forum/page.tsx index 2c89991e..118617c3 100644 --- a/src/app/(site)/guilds/[id]/forum/page.tsx +++ b/src/app/(site)/guilds/[id]/forum/page.tsx @@ -2,8 +2,8 @@ import Link from "next/link"; import { notFound } from "next/navigation"; import { getTranslations } from "next-intl/server"; import type { CSSProperties } from "react"; -import { formatDate } from "@/lib/format-date"; import { ContentCard, EmptyState } from "@/components/public/ui"; +import { formatDate } from "@/lib/format-date"; import { prisma } from "@/lib/prisma"; export const revalidate = 300; @@ -190,7 +190,10 @@ export default async function GuildForumPage({ {t2.postsCount ?? 0}+ {t("welcomeBackSub", { hotelName })} +
+- {t("welcomeBackSub", { hotelName })} + {t("noAccount") ?? "No account?"}{" "} + + {t("createOne") ?? "Create one"} +
+ {t("subtitle")} +
+- {t("noAccount") ?? "No account?"}{" "} - - {t("createOne") ?? "Create one"} - -
-- {t("subtitle")} -
-+
{user.motto || "No motto"}
{alertRaw}
++ {alertRaw} +
- {onlineFriends.length === 0 ? "None of your friends are online right now" : `${onlineFriends.length} of your ${friends.length} friends online`} +
+ {onlineFriends.length === 0 + ? "None of your friends are online right now" + : `${onlineFriends.length} of your ${friends.length} friends online`}
No friends online right now. Check back later!
++ No friends online right now. Check back later! +
{friend.username}
-{friend.motto || "No motto"}
- - Online ++ {friend.username} +
++ {friend.motto || "No motto"} +
+ + {" "} + OnlineRefer new users and earn in-game rewards
++ Refer new users and earn in-game rewards +
+
{rewardAmount > 0 ? `For every ${needed} users who register through your referral link you can claim a reward of ${rewardAmount.toLocaleString()} ${rewardCurrency}!` : `Invite ${needed} users through your referral link to claim a reward!`}
Newest rooms in the hotel
++ Newest rooms in the hotel +
{room.name}
-{room.ownerName} · {room.users}/{room.usersMax}
++ {room.name} +
++ {room.ownerName} · {room.users}/{room.usersMax} +
))}{badges.length} badge{badges.length !== 1 ? "s" : ""} equipped
++ {badges.length} badge{badges.length !== 1 ? "s" : ""} equipped +
- We couldn't load your dashboard right now. Please try again shortly. +
+ We couldn't load your dashboard right now. Please try again + shortly.
+
{formatDate(a.createdAt, "date", "")}
+
{tp("noArticles")}
)} @@ -392,20 +598,40 @@ export default async function Home() { {/* ── Online users ── */} {recentUsers.length > 0 && (+
{tp("welcomeBody")}
-