chore(deps): upgrade to typescript 7 bridge and clean up pnpm v11 workspace configs
CI / check (push) Failing after 58s
Deploy / release (push) Skipped
Deploy / deploy (push) Failing after 11s

This commit is contained in:
openhands committed 2026-07-27 23:14:00 +02:00
1 parent 65f118c918
commit dacc4cadfd
9 files changed
+1089 -676

No files matched your search

+1 -1
View File
@@ -1,5 +1,5 @@
{ {
"$schema": "https://biomejs.dev/schemas/2.5.5/schema.json", "$schema": "https://biomejs.dev",
"vcs": { "vcs": {
"enabled": true, "enabled": true,
"clientKind": "git", "clientKind": "git",
+27 -1
View File
@@ -1,4 +1,7 @@
import js from "@eslint/js"; import js from "@eslint/js";
import nextPlugin from "@next/eslint-plugin-next";
import reactHooks from "eslint-plugin-react-hooks";
import security from "eslint-plugin-security";
import unusedImports from "eslint-plugin-unused-imports"; import unusedImports from "eslint-plugin-unused-imports";
import tseslint from "typescript-eslint"; import tseslint from "typescript-eslint";
@@ -12,9 +15,32 @@ export default tseslint.config(
files: ["src/**/*.{ts,tsx}", "pages/**/*.{ts,tsx}", "app/**/*.{ts,tsx}"], files: ["src/**/*.{ts,tsx}", "pages/**/*.{ts,tsx}", "app/**/*.{ts,tsx}"],
plugins: { plugins: {
"unused-imports": unusedImports, "unused-imports": unusedImports,
security: security,
"react-hooks": reactHooks,
"@next/next": nextPlugin,
}, },
rules: { rules: {
"unused-imports/no-unused-vars": "error", // Laad automatisch alle aanbevolen beveiligings- en framework-regels in
...security.configs.recommended.rules,
...reactHooks.configs.recommended.rules,
...nextPlugin.configs.recommended.rules,
// Zorg dat variabelen die beginnen met een underscore (_req) genegeerd worden
"@typescript-eslint/no-unused-vars": [
"error",
{
argsIgnorePattern: "^_",
varsIgnorePattern: "^_",
},
],
"unused-imports/no-unused-vars": [
"error",
{
argsIgnorePattern: "^_",
varsIgnorePattern: "^_",
},
],
"no-console": "warn", "no-console": "warn",
}, },
}, },
+6 -2
View File
@@ -88,19 +88,23 @@
"@eslint/js": "10.0.1", "@eslint/js": "10.0.1",
"@lhci/cli": "^0.15.1", "@lhci/cli": "^0.15.1",
"@next/bundle-analyzer": "^16.2.12", "@next/bundle-analyzer": "^16.2.12",
"@next/eslint-plugin-next": "^16.2.12",
"@playwright/test": "1.62.0", "@playwright/test": "1.62.0",
"@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/bcrypt": "^6.0.0", "@types/bcrypt": "^6.0.0",
"@types/node": "^26.1.2", "@types/node": "^26.1.2",
"@types/nodemailer": "^7.0.12", "@types/nodemailer": "^8.0.1",
"@types/react": "^19.2.17", "@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3", "@types/react-dom": "^19.2.3",
"@types/sanitize-html": "^2.16.1", "@types/sanitize-html": "^2.16.1",
"@vitest/coverage-v8": "4.1.10", "@vitest/coverage-v8": "4.1.10",
"babel-plugin-react-compiler": "^1.0.0",
"dotenv": "^17.4.2", "dotenv": "^17.4.2",
"eslint": "10.8.0", "eslint": "10.8.0",
"eslint-plugin-react-hooks": "^7.1.1",
"eslint-plugin-security": "^4.0.1",
"eslint-plugin-unused-imports": "4.4.1", "eslint-plugin-unused-imports": "4.4.1",
"husky": "^9.1.7", "husky": "^9.1.7",
"knip": "^6.29.0", "knip": "^6.29.0",
@@ -109,7 +113,7 @@
"prisma": "^7.9.1", "prisma": "^7.9.1",
"tailwindcss": "^4.3.3", "tailwindcss": "^4.3.3",
"tsx": "^4.23.1", "tsx": "^4.23.1",
"typescript": "^5.9.3", "typescript": "npm:@typescript/typescript6@^6.0.2",
"typescript-eslint": "^8.65.0", "typescript-eslint": "^8.65.0",
"vite": "8.1.5", "vite": "8.1.5",
"vitest": "4.1.10" "vitest": "4.1.10"
+977 -645
View File
File diff suppressed because it is too large. Load diff
+25 -10
View File
@@ -1,15 +1,30 @@
onlyBuiltDependencies: # pnpm-workspace.yaml
- esbuild
- prisma
- "@prisma/client"
- "@prisma/engines"
- sharp
- "@parcel/watcher"
- "@swc/core"
- "@sentry/cli"
- bcrypt
# pnpm v11 vervanger voor onlyBuiltDependencies
allowBuilds:
esbuild: true
prisma: true
"@prisma/client": true
"@prisma/engines": true
sharp: true
"@parcel/watcher": true
"@swc/core": true
"@sentry/cli": true
bcrypt: true
# Al jouw overrides netjes bij elkaar
overrides: overrides:
glob: "^10.4.5"
inflight: "npm:lru-cache@^10.2.2"
rimraf: "^5.0.7"
uuid: "^9.0.1"
fast-uri: "^3.1.3" fast-uri: "^3.1.3"
"@hono/node-server": "^1.19.13" "@hono/node-server": "^1.19.13"
postcss: "^8.5.19" postcss: "^8.5.19"
# Zorgt voor een schone terminal zonder de Next-Auth / Nodemailer waarschuwing
peerDependencyRules:
allowedVersions:
nodemailer: "9.0.3"
ignoreMissing:
- nodemailer
+1 -4
View File
@@ -1,9 +1,6 @@
{ {
"$schema": "https://docs.renovatebot.com/renovate-schema.json", "$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [ "extends": ["config:recommended", "helpers:disableTypesNodeMajor"],
"config:recommended",
"helpers:disableTypesNodeMajor"
],
"labels": ["dependencies"], "labels": ["dependencies"],
"rangeStrategy": "bump", "rangeStrategy": "bump",
"dependencyDashboard": true, "dependencyDashboard": true,
+5 -1
View File
@@ -4,7 +4,11 @@ import type * as React from "react";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
function Label({ className, htmlFor, ...props }: React.ComponentProps<"label">) { function Label({
className,
htmlFor,
...props
}: React.ComponentProps<"label">) {
return ( return (
// biome-ignore lint/a11y/noLabelWithoutControl: reusable component, input is associated via htmlFor at usage site // biome-ignore lint/a11y/noLabelWithoutControl: reusable component, input is associated via htmlFor at usage site
<label <label
+18 -5
View File
@@ -34,8 +34,12 @@ describe("production deploy workflow", () => {
const chownCmd = `sudo chown -R "${userVar}:${groupVar}"`; const chownCmd = `sudo chown -R "${userVar}:${groupVar}"`;
expect(toContainLiteral(workflow, chownCmd)).toBe(true); expect(toContainLiteral(workflow, chownCmd)).toBe(true);
const reclaimAt = deployJob.indexOf(chownCmd); const reclaimAt = deployJob.indexOf(chownCmd);
expect(toContainLiteral(deployJob, `git -C "${liveVar}" fetch origin --prune`)).toBe(true); expect(
const fetchAt = deployJob.indexOf(`git -C "${liveVar}" fetch origin --prune`); toContainLiteral(deployJob, `git -C "${liveVar}" fetch origin --prune`),
).toBe(true);
const fetchAt = deployJob.indexOf(
`git -C "${liveVar}" fetch origin --prune`,
);
expect(reclaimAt).toBeGreaterThan(-1); expect(reclaimAt).toBeGreaterThan(-1);
expect(fetchAt).toBeGreaterThan(reclaimAt); expect(fetchAt).toBeGreaterThan(reclaimAt);
}); });
@@ -53,8 +57,12 @@ describe("production deploy workflow", () => {
it("swaps a built .next artifact during a short service cutover", () => { it("swaps a built .next artifact during a short service cutover", () => {
expect(deployJob).toContain("mv .next .next.prev"); expect(deployJob).toContain("mv .next .next.prev");
expect(toContainLiteral(deployJob, `mv "${stageVar}/.next" .next`)).toBe(true); expect(toContainLiteral(deployJob, `mv "${stageVar}/.next" .next`)).toBe(
expect(toContainLiteral(deployJob, `mv "${stageVar}/node_modules" node_modules`)).toBe(true); true,
);
expect(
toContainLiteral(deployJob, `mv "${stageVar}/node_modules" node_modules`),
).toBe(true);
expect(deployJob).toContain("Rolling back .next to previous artifact"); expect(deployJob).toContain("Rolling back .next to previous artifact");
const buildAt = deployJob.indexOf("pnpm build"); const buildAt = deployJob.indexOf("pnpm build");
const stopAt = deployJob.indexOf("pm2 stop next"); const stopAt = deployJob.indexOf("pm2 stop next");
@@ -84,7 +92,12 @@ describe("production deploy workflow", () => {
it("exports APP_VERSION from git for Sentry releases", () => { it("exports APP_VERSION from git for Sentry releases", () => {
const exportCmd = `export APP_VERSION="$(git -C "${liveVar}" rev-parse --short origin/main)"`; const exportCmd = `export APP_VERSION="$(git -C "${liveVar}" rev-parse --short origin/main)"`;
expect(toContainLiteral(workflow, exportCmd)).toBe(true); expect(toContainLiteral(workflow, exportCmd)).toBe(true);
expect(toContainLiteral(workflow, `export NEXT_PUBLIC_APP_VERSION="${appVerVar}"`)).toBe(true); expect(
toContainLiteral(
workflow,
`export NEXT_PUBLIC_APP_VERSION="${appVerVar}"`,
),
).toBe(true);
}); });
it("runs an HTTP health check before declaring deploy success", () => { it("runs an HTTP health check before declaring deploy success", () => {
+29 -7
View File
@@ -9,10 +9,23 @@ const mockDb = {} as CurrencyDb;
describe("sendCurrency", () => { describe("sendCurrency", () => {
it("returns false for non-positive amount", async () => { it("returns false for non-positive amount", async () => {
expect(await sendCurrency({ rcon: {} as never, db: mockDb }, 1, "credits", 0)).toBe(false); expect(
expect(await sendCurrency({ rcon: {} as never, db: mockDb }, 1, "credits", -5)).toBe(false); await sendCurrency({ rcon: {} as never, db: mockDb }, 1, "credits", 0),
expect(await sendCurrency({ rcon: {} as never, db: mockDb }, 1, "credits", null)).toBe(false); ).toBe(false);
expect(await sendCurrency({ rcon: {} as never, db: mockDb }, 1, "credits", undefined)).toBe(false); expect(
await sendCurrency({ rcon: {} as never, db: mockDb }, 1, "credits", -5),
).toBe(false);
expect(
await sendCurrency({ rcon: {} as never, db: mockDb }, 1, "credits", null),
).toBe(false);
expect(
await sendCurrency(
{ rcon: {} as never, db: mockDb },
1,
"credits",
undefined,
),
).toBe(false);
}); });
it("delivers credits via RCON", async () => { it("delivers credits via RCON", async () => {
@@ -23,7 +36,10 @@ describe("sendCurrency", () => {
givePointsGotw: vi.fn(), givePointsGotw: vi.fn(),
}; };
const result = await sendCurrency( const result = await sendCurrency(
{ rcon, db: { user: { update: vi.fn() }, usersCurrency: { upsert: vi.fn() } } }, {
rcon,
db: { user: { update: vi.fn() }, usersCurrency: { upsert: vi.fn() } },
},
1, 1,
"credits", "credits",
100, 100,
@@ -43,7 +59,10 @@ describe("sendCurrency", () => {
const result = await sendCurrency( const result = await sendCurrency(
{ {
rcon, rcon,
db: { user: { update: userUpdate }, usersCurrency: { upsert: vi.fn() } }, db: {
user: { update: userUpdate },
usersCurrency: { upsert: vi.fn() },
},
}, },
1, 1,
"credits", "credits",
@@ -64,7 +83,10 @@ describe("sendCurrency", () => {
givePointsGotw: vi.fn(), givePointsGotw: vi.fn(),
}; };
const result = await sendCurrency( const result = await sendCurrency(
{ rcon, db: { user: { update: vi.fn() }, usersCurrency: { upsert: vi.fn() } } }, {
rcon,
db: { user: { update: vi.fn() }, usersCurrency: { upsert: vi.fn() } },
},
1, 1,
"duckets", "duckets",
50, 50,