Skip to content

Commit 9010677

Browse files
authored
Merge pull request #8 from SunriseCommunity/feat/use-eslint-as-linter
2 parents 42609bf + 23b4e41 commit 9010677

File tree

94 files changed

+14446
-9824
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+14446
-9824
lines changed

.github/workflows/test.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
on: [push]
2-
name: Run Tests
2+
name: Run Tests & Lint
33
concurrency:
44
group: ${{ github.workflow }}-${{ github.ref }}
55
cancel-in-progress: true
@@ -14,4 +14,5 @@ jobs:
1414

1515
- run: docker compose -f docker-compose.tests.yml up --detach
1616
- run: bun install --frozen-lockfile
17+
- run: bun lint
1718
- run: bun test

.prettierrc.json

Lines changed: 0 additions & 5 deletions
This file was deleted.

bun.lock

Lines changed: 741 additions & 7 deletions
Large diffs are not rendered by default.

eslint.config.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { defineConfig } from "@richardscull/eslint-config";
2+
3+
export default defineConfig();

package.json

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
11
{
22
"name": "observatory",
3+
"type": "module",
34
"version": "1.0.0",
5+
"private": true,
46
"description": "Observatory API",
7+
"module": "server/src/app.js",
58
"scripts": {
6-
"start": "NODE_ENV=production bun run server/src/app.ts",
7-
"dev": "NODE_ENV=development bun run --watch server/src/app.ts",
8-
"lint": "bunx prettier -w ./server/src --config .prettierrc.json",
9-
"test": "docker-compose -f docker-compose.tests.yml up -d && bun test --env-file=.env.test",
10-
"setup": "bun run docker:dev && bun run db:update",
11-
"db:update": "bun run db:generate && bun run db:push",
129
"db:generate": "bun --bun drizzle-kit generate --config server/src/database/config.ts",
13-
"db:push": "bun --bun drizzle-kit push --config server/src/database/config.ts",
1410
"db:migration": "bun run server/src/database/migrate.ts",
15-
"docker:dev": "docker-compose -f docker-compose.dev.yml up -d"
11+
"db:push": "bun --bun drizzle-kit push --config server/src/database/config.ts",
12+
"db:update": "bun run db:generate && bun run db:push",
13+
"dev": "NODE_ENV=development bun run --watch server/src/app.ts",
14+
"docker:dev": "docker-compose -f docker-compose.dev.yml up -d",
15+
"lint": "eslint --fix",
16+
"setup": "bun run docker:dev && bun run db:update",
17+
"start": "NODE_ENV=production bun run server/src/app.ts",
18+
"test": "docker-compose -f docker-compose.tests.yml up -d && bun test --env-file=.env.test"
19+
},
20+
"peerDependencies": {
21+
"typescript": "^5"
1622
},
1723
"dependencies": {
1824
"@bogeychan/elysia-logger": "^0.1.4",
@@ -39,18 +45,24 @@
3945
"rosu-pp-js": "^3.1.0"
4046
},
4147
"devDependencies": {
48+
"@richardscull/eslint-config": "^1.0.5",
4249
"@types/bun": "^1.3.4",
4350
"@types/pg": "^8.11.10",
4451
"@types/qs": "^6.9.18",
4552
"bun-types": "latest",
4653
"drizzle-kit": "^0.26.2",
54+
"eslint": "^9.39.2",
55+
"jiji": "^0.1.7",
56+
"lint-staged": "^16.2.7",
4757
"prettier": "^3.3.3",
48-
"tsx": "^4.19.2"
49-
},
50-
"module": "server/src/app.js",
51-
"type": "module",
52-
"private": true,
53-
"peerDependencies": {
58+
"simple-git-hooks": "^2.13.1",
59+
"tsx": "^4.19.2",
5460
"typescript": "^5"
61+
},
62+
"simple-git-hooks": {
63+
"pre-commit": "npx lint-staged"
64+
},
65+
"lint-staged": {
66+
"*": "eslint --fix"
5567
}
5668
}

server/src/app.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1-
import { Elysia } from 'elysia';
1+
import { Elysia } from "elysia";
22

3-
import log from './utils/logger';
4-
import setup from './setup';
5-
import config from './config';
3+
import config from "./config";
4+
import setup from "./setup";
5+
import log from "./utils/logger";
66

77
const port = config.PORT;
88

99
const app = new Elysia()
10-
.use(setup())
11-
.listen({ port }, ({ hostname, port }) =>
12-
log.info(`🔭 Observatory is running at http://${hostname}:${port}`),
13-
);
10+
.use(setup())
11+
.listen({ port }, ({ hostname, port }) =>
12+
log.info(`🔭 Observatory is running at http://${hostname}:${port}`));
1413

1514
export { app };
1615
export type App = typeof app;

server/src/config.ts

Lines changed: 97 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1,119 +1,120 @@
1-
import { color } from 'bun';
2-
import dotenv from 'dotenv';
3-
import { exit } from 'process';
1+
import { exit } from "node:process";
2+
3+
import { color } from "bun";
4+
import dotenv from "dotenv";
45

56
dotenv.config();
67

7-
export type Mirror =
8-
| 'direct'
9-
| 'bancho'
10-
| 'mino'
11-
| 'osulabs'
12-
| 'gatari'
13-
| 'nerinyan';
8+
export type Mirror
9+
= | "direct"
10+
| "bancho"
11+
| "mino"
12+
| "osulabs"
13+
| "gatari"
14+
| "nerinyan";
1415

1516
const {
16-
PORT,
17-
POSTGRES_USER,
18-
POSTGRES_PASSWORD,
19-
POSTGRES_HOST,
20-
POSTGRES_PORT,
21-
POSTGRES_DB,
22-
REDIS_PORT,
23-
REDIS_HOST,
24-
BANCHO_CLIENT_SECRET,
25-
BANCHO_CLIENT_ID,
26-
DEBUG_MODE,
27-
LOKI_HOST,
28-
IGNORE_RATELIMIT_KEY,
29-
RATELIMIT_CALLS_PER_WINDOW,
30-
RATELIMIT_TIME_WINDOW,
31-
OSZ_FILES_LIFE_SPAN,
32-
MIRRORS_TO_IGNORE,
33-
DISABLE_SAFE_RATELIMIT_MODE,
34-
DISABLE_DAILY_RATE_LIMIT,
35-
ENABLE_CRON_TO_CLEAR_OUTDATED_BEATMAPS,
17+
PORT,
18+
POSTGRES_USER,
19+
POSTGRES_PASSWORD,
20+
POSTGRES_HOST,
21+
POSTGRES_PORT,
22+
POSTGRES_DB,
23+
REDIS_PORT,
24+
REDIS_HOST,
25+
BANCHO_CLIENT_SECRET,
26+
BANCHO_CLIENT_ID,
27+
DEBUG_MODE,
28+
LOKI_HOST,
29+
IGNORE_RATELIMIT_KEY,
30+
RATELIMIT_CALLS_PER_WINDOW,
31+
RATELIMIT_TIME_WINDOW,
32+
OSZ_FILES_LIFE_SPAN,
33+
MIRRORS_TO_IGNORE,
34+
DISABLE_SAFE_RATELIMIT_MODE,
35+
DISABLE_DAILY_RATE_LIMIT,
36+
ENABLE_CRON_TO_CLEAR_OUTDATED_BEATMAPS,
3637
} = process.env;
3738

3839
if (!POSTGRES_USER || !POSTGRES_PASSWORD) {
39-
console.error(
40-
`${color('#ff0000')} Missing required environment variables for Postgres`,
41-
);
42-
exit(1);
40+
console.error(
41+
`${color("#ff0000")} Missing required environment variables for Postgres`,
42+
);
43+
exit(1);
4344
}
4445

4546
if (!BANCHO_CLIENT_SECRET || !BANCHO_CLIENT_ID) {
46-
console.error(
47+
console.error(
4748
`${color(
48-
'#ff0000',
49+
"#ff0000",
4950
)} Missing required environment variables for osu! Bancho. It will be disabled`,
50-
);
51+
);
5152
}
5253

5354
const config: {
54-
PORT: string;
55-
POSTGRES_USER: string;
56-
POSTGRES_PASSWORD: string;
57-
POSTGRES_HOST: string;
58-
POSTGRES_PORT: string;
59-
POSTGRES_DB: string;
60-
REDIS_PORT: number;
61-
BANCHO_CLIENT_SECRET?: string;
62-
BANCHO_CLIENT_ID?: string;
63-
REDIS_HOST?: string;
64-
LOKI_HOST?: string;
65-
IGNORE_RATELIMIT_KEY?: string;
66-
RATELIMIT_CALLS_PER_WINDOW: number;
67-
RATELIMIT_TIME_WINDOW: number;
68-
OSZ_FILES_LIFE_SPAN: number;
69-
IsProduction: boolean;
70-
IsAutomatedTesting: boolean;
71-
IsDebug: boolean;
72-
UseBancho: boolean;
73-
MirrorsToIgnore: string[];
74-
DisableSafeRatelimitMode: boolean;
75-
DisableDailyRateLimit: boolean;
76-
EnableCronToClearOutdatedBeatmaps: boolean;
55+
PORT: string;
56+
POSTGRES_USER: string;
57+
POSTGRES_PASSWORD: string;
58+
POSTGRES_HOST: string;
59+
POSTGRES_PORT: string;
60+
POSTGRES_DB: string;
61+
REDIS_PORT: number;
62+
BANCHO_CLIENT_SECRET?: string;
63+
BANCHO_CLIENT_ID?: string;
64+
REDIS_HOST?: string;
65+
LOKI_HOST?: string;
66+
IGNORE_RATELIMIT_KEY?: string;
67+
RATELIMIT_CALLS_PER_WINDOW: number;
68+
RATELIMIT_TIME_WINDOW: number;
69+
OSZ_FILES_LIFE_SPAN: number;
70+
IsProduction: boolean;
71+
IsAutomatedTesting: boolean;
72+
IsDebug: boolean;
73+
UseBancho: boolean;
74+
MirrorsToIgnore: string[];
75+
DisableSafeRatelimitMode: boolean;
76+
DisableDailyRateLimit: boolean;
77+
EnableCronToClearOutdatedBeatmaps: boolean;
7778
} = {
78-
PORT: PORT || '3000',
79-
POSTGRES_USER: POSTGRES_USER || 'admin',
80-
POSTGRES_PASSWORD: POSTGRES_PASSWORD || 'admin',
81-
POSTGRES_HOST: POSTGRES_HOST || '0.0.0.0',
82-
POSTGRES_PORT: POSTGRES_PORT || '5432',
83-
POSTGRES_DB: POSTGRES_DB || 'observatory',
84-
REDIS_PORT: Number(REDIS_PORT) || 6379,
85-
BANCHO_CLIENT_SECRET,
86-
BANCHO_CLIENT_ID,
87-
REDIS_HOST,
88-
LOKI_HOST: LOKI_HOST,
89-
IGNORE_RATELIMIT_KEY: IGNORE_RATELIMIT_KEY,
90-
RATELIMIT_CALLS_PER_WINDOW: Number(RATELIMIT_CALLS_PER_WINDOW) || 100,
91-
RATELIMIT_TIME_WINDOW: Number(RATELIMIT_TIME_WINDOW) || 20 * 1000,
92-
OSZ_FILES_LIFE_SPAN: Number(OSZ_FILES_LIFE_SPAN) || 24,
93-
IsProduction: Bun.env.NODE_ENV === 'production',
94-
IsAutomatedTesting: Bun.env.NODE_ENV === 'test',
95-
IsDebug: DEBUG_MODE === 'true',
96-
UseBancho: BANCHO_CLIENT_SECRET && BANCHO_CLIENT_ID ? true : false,
97-
MirrorsToIgnore: MIRRORS_TO_IGNORE?.split(',').map((v) => v.trim()) ?? [],
98-
DisableSafeRatelimitMode: DISABLE_SAFE_RATELIMIT_MODE === 'true',
99-
DisableDailyRateLimit: DISABLE_DAILY_RATE_LIMIT === 'true',
100-
EnableCronToClearOutdatedBeatmaps:
101-
ENABLE_CRON_TO_CLEAR_OUTDATED_BEATMAPS === 'true',
79+
PORT: PORT || "3000",
80+
POSTGRES_USER: POSTGRES_USER || "admin",
81+
POSTGRES_PASSWORD: POSTGRES_PASSWORD || "admin",
82+
POSTGRES_HOST: POSTGRES_HOST || "0.0.0.0",
83+
POSTGRES_PORT: POSTGRES_PORT || "5432",
84+
POSTGRES_DB: POSTGRES_DB || "observatory",
85+
REDIS_PORT: Number(REDIS_PORT) || 6379,
86+
BANCHO_CLIENT_SECRET,
87+
BANCHO_CLIENT_ID,
88+
REDIS_HOST,
89+
LOKI_HOST,
90+
IGNORE_RATELIMIT_KEY,
91+
RATELIMIT_CALLS_PER_WINDOW: Number(RATELIMIT_CALLS_PER_WINDOW) || 100,
92+
RATELIMIT_TIME_WINDOW: Number(RATELIMIT_TIME_WINDOW) || 20 * 1000,
93+
OSZ_FILES_LIFE_SPAN: Number(OSZ_FILES_LIFE_SPAN) || 24,
94+
IsProduction: Bun.env.NODE_ENV === "production",
95+
IsAutomatedTesting: Bun.env.NODE_ENV === "test",
96+
IsDebug: DEBUG_MODE === "true",
97+
UseBancho: BANCHO_CLIENT_SECRET && BANCHO_CLIENT_ID ? true : false,
98+
MirrorsToIgnore: MIRRORS_TO_IGNORE?.split(",").map(v => v.trim()) ?? [],
99+
DisableSafeRatelimitMode: DISABLE_SAFE_RATELIMIT_MODE === "true",
100+
DisableDailyRateLimit: DISABLE_DAILY_RATE_LIMIT === "true",
101+
EnableCronToClearOutdatedBeatmaps:
102+
ENABLE_CRON_TO_CLEAR_OUTDATED_BEATMAPS === "true",
102103
};
103104

104105
export const observationaryConfigPublic = {
105-
RATELIMIT_CALLS_PER_WINDOW: Number(RATELIMIT_CALLS_PER_WINDOW) || 100,
106-
RATELIMIT_TIME_WINDOW: Number(RATELIMIT_TIME_WINDOW) || 20 * 1000,
107-
OSZ_FILES_LIFE_SPAN: Number(OSZ_FILES_LIFE_SPAN) || 24,
108-
IsProduction: Bun.env.NODE_ENV === 'production',
109-
IsAutomatedTesting: Bun.env.NODE_ENV === 'test',
110-
IsDebug: DEBUG_MODE === 'true',
111-
UseBancho: BANCHO_CLIENT_SECRET && BANCHO_CLIENT_ID ? true : false,
112-
MirrorsToIgnore: MIRRORS_TO_IGNORE?.split(',').map((v) => v.trim()) ?? [],
113-
DisableSafeRatelimitMode: DISABLE_SAFE_RATELIMIT_MODE === 'true',
114-
DisableDailyRateLimit: DISABLE_DAILY_RATE_LIMIT === 'true',
115-
EnableCronToClearOutdatedBeatmaps:
116-
ENABLE_CRON_TO_CLEAR_OUTDATED_BEATMAPS === 'true',
106+
RATELIMIT_CALLS_PER_WINDOW: Number(RATELIMIT_CALLS_PER_WINDOW) || 100,
107+
RATELIMIT_TIME_WINDOW: Number(RATELIMIT_TIME_WINDOW) || 20 * 1000,
108+
OSZ_FILES_LIFE_SPAN: Number(OSZ_FILES_LIFE_SPAN) || 24,
109+
IsProduction: Bun.env.NODE_ENV === "production",
110+
IsAutomatedTesting: Bun.env.NODE_ENV === "test",
111+
IsDebug: DEBUG_MODE === "true",
112+
UseBancho: BANCHO_CLIENT_SECRET && BANCHO_CLIENT_ID ? true : false,
113+
MirrorsToIgnore: MIRRORS_TO_IGNORE?.split(",").map(v => v.trim()) ?? [],
114+
DisableSafeRatelimitMode: DISABLE_SAFE_RATELIMIT_MODE === "true",
115+
DisableDailyRateLimit: DISABLE_DAILY_RATE_LIMIT === "true",
116+
EnableCronToClearOutdatedBeatmaps:
117+
ENABLE_CRON_TO_CLEAR_OUTDATED_BEATMAPS === "true",
117118
};
118119

119120
export default config;

0 commit comments

Comments
 (0)