Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions .oxfmtrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,13 @@
},
"experimentalSortImports": {
"groups": [
["side-effect"],
["builtin"],
["external", "external-type"],
["internal", "internal-type"],
["parent", "parent-type"],
["sibling", "sibling-type"],
["index", "index-type"]
"type-import",
["value-builtin", "value-external"],
"type-internal",
"value-internal",
["type-parent", "type-sibling", "type-index"],
["value-parent", "value-sibling", "value-index"],
"unknown"
]
}
}
Expand Down
4 changes: 0 additions & 4 deletions backend/.oxlintrc-plugin.json

This file was deleted.

3 changes: 2 additions & 1 deletion backend/.oxlintrc.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{
"ignorePatterns": ["node_modules", "__migration__", "dist", ".turbo"],
"extends": [
"../packages/oxlint-config/index.jsonc"
"../packages/oxlint-config/index.jsonc",
"../packages/oxlint-config/plugin.jsonc"
// "@monkeytype/oxlint-config"
],
"overrides": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ describe("LeaderboardsDal", () => {
//GIVEN
const stats = pb(100, 90, 2);
//@ts-ignore
stats["consistency"] = undefined;
stats.consistency = undefined;

await createUser(lbBests(stats));

Expand Down
4 changes: 2 additions & 2 deletions backend/__tests__/utils/pb.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ describe("Pb Utils", () => {
);

expect(run.isPb).toBe(true);
expect(run.personalBests?.["time"]?.["15"]?.[0]).not.toBe(undefined);
expect(run.personalBests.time?.["15"]?.[0]).not.toBe(undefined);
expect(run.lbPersonalBests).not.toBe({});
});
it("should not override default pb when saving numbers test", () => {
Expand Down Expand Up @@ -113,7 +113,7 @@ describe("Pb Utils", () => {

expect(run.isPb).toBe(true);

expect(run.personalBests?.["time"]?.["15"]).toEqual(
expect(run.personalBests.time?.["15"]).toEqual(
expect.arrayContaining([
expect.objectContaining({ numbers: false, wpm: 100 }),
expect.objectContaining({ numbers: true, wpm: 110 }),
Expand Down
6 changes: 3 additions & 3 deletions backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"private": true,
"license": "GPL-3.0",
"scripts": {
"lint": "oxlint . --type-aware --type-check && oxlint -c .oxlintrc-plugin.json",
"lint": "oxlint . --type-aware --type-check",
"lint-fast": "oxlint .",
"build": "npm run gen-docs && tsc --build",
"watch": "tsc --build --watch",
Expand Down Expand Up @@ -80,8 +80,8 @@
"@vitest/coverage-v8": "4.0.15",
"concurrently": "8.2.2",
"openapi3-ts": "2.0.2",
"oxlint": "1.47.0",
"oxlint-tsgolint": "0.12.2",
"oxlint": "1.50.0",
"oxlint-tsgolint": "0.14.2",
"readline-sync": "1.4.10",
"supertest": "7.1.4",
"testcontainers": "11.11.0",
Expand Down
8 changes: 4 additions & 4 deletions backend/src/api/controllers/result.ts
Original file line number Diff line number Diff line change
Expand Up @@ -726,7 +726,7 @@ async function calculateXp(
} else if (correctedEverything) {
// corrected everything bonus
modifier += 0.25;
breakdown["corrected"] = Math.round(baseXp * 0.25);
breakdown.corrected = Math.round(baseXp * 0.25);
}

if (mode === "quote") {
Expand Down Expand Up @@ -779,9 +779,9 @@ async function calculateXp(
let incompleteXp = 0;
if (incompleteTests !== undefined && incompleteTests.length > 0) {
incompleteTests.forEach((it: { acc: number; seconds: number }) => {
let modifier = (it.acc - 50) / 50;
if (modifier < 0) modifier = 0;
incompleteXp += Math.round(it.seconds * modifier);
let mod = (it.acc - 50) / 50;
if (mod < 0) mod = 0;
incompleteXp += Math.round(it.seconds * mod);
});
breakdown.incomplete = incompleteXp;
} else if (incompleteTestSeconds && incompleteTestSeconds > 0) {
Expand Down
4 changes: 2 additions & 2 deletions backend/src/api/routes/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -188,8 +188,8 @@ function applyApiRoutes(app: Application): void {
);
});

for (const [route, router] of Object.entries(API_ROUTE_MAP)) {
for (const [route, mapRouter] of Object.entries(API_ROUTE_MAP)) {
const apiRoute = `${BASE_ROUTE}${route}`;
app.use(apiRoute, router);
app.use(apiRoute, mapRouter);
}
}
6 changes: 4 additions & 2 deletions backend/src/init/configuration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,13 +104,15 @@ export async function getLiveConfiguration(): Promise<Configuration> {
return configuration;
}

async function pushConfiguration(configuration: Configuration): Promise<void> {
async function pushConfiguration(
configurationToPush: Configuration,
): Promise<void> {
if (serverConfigurationUpdated) {
return;
}

try {
await db.collection("configuration").replaceOne({}, configuration);
await db.collection("configuration").replaceOne({}, configurationToPush);
serverConfigurationUpdated = true;
} catch (error) {
const errorMessage = getErrorMessage(error) ?? "Unknown error";
Expand Down
3 changes: 1 addition & 2 deletions backend/src/middlewares/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,7 @@ export function authenticateTsRestRequest<
): Promise<void> => {
const options = {
...DEFAULT_OPTIONS,
...((getMetadata(req)["authenticationOptions"] ??
{}) as EndpointMetadata),
...((getMetadata(req).authenticationOptions ?? {}) as EndpointMetadata),
};

const startTime = performance.now();
Expand Down
12 changes: 7 additions & 5 deletions backend/src/middlewares/rate-limit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,21 +102,23 @@ export function rateLimitRequest<
res: Response,
next: NextFunction,
): Promise<void> => {
const rateLimit = getMetadata(req).rateLimit;
if (rateLimit === undefined) {
const metadataRateLimit = getMetadata(req).rateLimit;
if (metadataRateLimit === undefined) {
next();
return;
}

const hasApeKeyLimiterId = typeof rateLimit === "object";
const hasApeKeyLimiterId = typeof metadataRateLimit === "object";
let rateLimiterId: RateLimiterId;

if (req.ctx.decodedToken.type === "ApeKey") {
rateLimiterId = hasApeKeyLimiterId
? rateLimit.apeKey
? metadataRateLimit.apeKey
: "defaultApeRateLimit";
} else {
rateLimiterId = hasApeKeyLimiterId ? rateLimit.normal : rateLimit;
rateLimiterId = hasApeKeyLimiterId
? metadataRateLimit.normal
: metadataRateLimit;
}

const rateLimiter = requestLimiters[rateLimiterId];
Expand Down
2 changes: 2 additions & 0 deletions backend/src/workers/later-worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,8 @@ async function handleWeeklyXpLeaderboardResults(
}[] = [];

allResults?.entries.forEach((entry) => {
// just in case, gonna ignore this error
// oxlint-disable-next-line typescript/no-useless-default-assignment
const { uid, name, rank = maxRankToGet, totalXp, timeTypedSeconds } = entry;

const xp = Math.round(totalXp);
Expand Down
46 changes: 0 additions & 46 deletions frontend/.oxlintrc-plugin.json

This file was deleted.

52 changes: 51 additions & 1 deletion frontend/.oxlintrc.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,57 @@
{
"ignorePatterns": ["node_modules", "dist", "coverage", ".firebase", ".turbo"],
"extends": [
"../packages/oxlint-config/index.jsonc"
"../packages/oxlint-config/index.jsonc",
"../packages/oxlint-config/plugin.jsonc"
// "@monkeytype/oxlint-config"
],
"jsPlugins": ["eslint-plugin-compat"],
"rules": {
"compat/compat": "error"
},
"overrides": [
{
"files": ["src/**/*.ts"],
"rules": {
//
}
},
{
"jsPlugins": ["eslint-plugin-solid", "@tanstack/eslint-plugin-query"],
"files": ["src/**/*.tsx", "src/**/*.ts"],
"rules": {
"explicit-function-return-type": "off",
"solid/components-return-once": "error",
"solid/event-handlers": "error",
"solid/imports": "error",
"solid/jsx-no-duplicate-props": "error",
"solid/jsx-no-script-url": "error",
"solid/jsx-no-undef": "error",
"solid/no-array-handlers": "error",
"solid/no-destructure": "error",
"solid/no-innerhtml": "error",
"solid/no-react-deps": "error",
"solid/no-react-specific-props": "error",
"solid/no-unknown-namespaces": "error",
"solid/prefer-classlist": "error",
"solid/prefer-for": "error",
"solid/prefer-show": "error",
"solid/reactivity": "error",
"solid/self-closing-comp": [
"error",
{
"html": "void"
}
],
"solid/style-prop": "error",
"@tanstack/query/exhaustive-deps": "error",
"@tanstack/query/no-rest-destructuring": "error",
"@tanstack/query/stable-query-client": "error",
"@tanstack/query/no-unstable-deps": "error",
"@tanstack/query/infinite-query-property-order": "error",
"@tanstack/query/no-void-query-fn": "error",
"@tanstack/query/mutation-property-order": "error"
}
}
]
}
6 changes: 3 additions & 3 deletions frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"license": "GPL-3.0",
"type": "module",
"scripts": {
"lint": "oxlint . --type-aware --type-check && oxlint . -c .oxlintrc-plugin.json",
"lint": "oxlint . --type-aware --type-check",
"lint-fast": "oxlint .",
"lint-json": "eslint static/**/*.json",
"check-assets": "tsx ./scripts/check-assets.ts",
Expand Down Expand Up @@ -93,8 +93,8 @@
"madge": "8.0.0",
"magic-string": "0.30.17",
"normalize.css": "8.0.1",
"oxlint": "1.47.0",
"oxlint-tsgolint": "0.12.2",
"oxlint": "1.50.0",
"oxlint-tsgolint": "0.14.2",
"postcss": "8.4.31",
"sass": "1.70.0",
"solid-js": "1.9.10",
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/ts/commandline/lists/custom-background.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ const customBackgroundCommand: Command = {
}

// check type
if (!file.type.match(/image\/(jpeg|jpg|png|gif|webp)/)) {
if (!/image\/(jpeg|jpg|png|gif|webp)/.exec(file.type)) {
Notifications.add("Unsupported image format", 0);
cleanup();
return;
Expand Down
4 changes: 2 additions & 2 deletions frontend/src/ts/commandline/lists/font-family.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ if (fromMeta.subgroup) {

// check type
if (
!file.type.match(/font\/(woff|woff2|ttf|otf)/) &&
!file.name.match(/\.(woff|woff2|ttf|otf)$/i)
!/font\/(woff|woff2|ttf|otf)/.exec(file.type) &&
!/\.(woff|woff2|ttf|otf)$/i.exec(file.name)
) {
Notifications.add(
"Unsupported font format, must be woff, woff2, ttf or otf.",
Expand Down
1 change: 0 additions & 1 deletion frontend/src/ts/components/common/AsyncContent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import {

import * as Notifications from "../../elements/notifications";
import { createErrorMessage, typedKeys } from "../../utils/misc";

import { Conditional } from "./Conditional";
import { LoadingCircle } from "./LoadingCircle";

Expand Down
1 change: 0 additions & 1 deletion frontend/src/ts/components/common/DiscordAvatar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { createSignal, JSXElement, Show } from "solid-js";
import { createStore } from "solid-js/store";

import { FaSolidIcon } from "../../types/font-awesome";

import { Fa } from "./Fa";

//cache successful and missing avatars
Expand Down
1 change: 0 additions & 1 deletion frontend/src/ts/components/common/Headers.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { JSXElement, Show } from "solid-js";

import { cn } from "../../utils/cn";

import { Fa, FaProps } from "./Fa";

export function H2(props: {
Expand Down
1 change: 0 additions & 1 deletion frontend/src/ts/components/common/LoadingCircle.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { JSXElement } from "solid-js";

import { cn } from "../../utils/cn";

import { Fa } from "./Fa";
export function LoadingCircle(props: { class?: string }): JSXElement {
return (
Expand Down
1 change: 0 additions & 1 deletion frontend/src/ts/components/common/User.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import {
UserFlag,
UserFlagOptions,
} from "../../controllers/user-flag-controller";

import { Button } from "./Button";
import { DiscordAvatar } from "./DiscordAvatar";
import { Fa } from "./Fa";
Expand Down
1 change: 0 additions & 1 deletion frontend/src/ts/components/core/Theme.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import { createDebouncedEffectOn } from "../../hooks/effects";
import { useRefWithUtils } from "../../hooks/useRefWithUtils";
import { hideLoaderBar, showLoaderBar } from "../../signals/loader-bar";
import { getTheme } from "../../signals/theme";

import { FavIcon } from "./FavIcon";

export function Theme(): JSXElement {
Expand Down
1 change: 0 additions & 1 deletion frontend/src/ts/components/layout/footer/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { getFocus, getIsScreenshotting } from "../../../signals/core";
import { showModal } from "../../../stores/modals";
import { cn } from "../../../utils/cn";
import { Button } from "../../common/Button";

import { Keytips } from "./Keytips";
import { ThemeIndicator } from "./ThemeIndicator";
import { VersionButton } from "./VersionButton";
Expand Down
1 change: 0 additions & 1 deletion frontend/src/ts/components/layout/overlays/Overlays.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { showModal } from "../../../stores/modals";
import { cn } from "../../../utils/cn";
import { Fa } from "../../common/Fa";
import { ScrollToTop } from "../footer/ScrollToTop";

import { Banners } from "./Banners";
import { FpsCounter } from "./FpsCounter";
import { LoaderBar } from "./LoaderBar";
Expand Down
1 change: 0 additions & 1 deletion frontend/src/ts/components/mount.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { render } from "solid-js/web";

import { queryClient } from "../queries";
import { qsa } from "../utils/dom";

import { DevTools } from "./core/DevTools";
import { Theme } from "./core/Theme";
import { Footer } from "./layout/footer/Footer";
Expand Down
Loading
Loading