feat: express app setup

This commit is contained in:
Pihkaal
2025-12-21 13:47:25 +01:00
commit c29a56c8b5
8 changed files with 2150 additions and 0 deletions

1
.env.example Normal file
View File

@@ -0,0 +1 @@
PORT="3000"

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
dist
node_modules
.env

24
package.json Normal file
View File

@@ -0,0 +1,24 @@
{
"name": "gitea-auto-urls",
"type": "module",
"main": "src/index.ts",
"scripts": {
"dev": "tsx watch src/index.ts",
"start": "node dist/index.js",
"build": "tsup src/index.ts --format esm --clean",
"format": "prettier --write --cache ."
},
"dependencies": {
"dotenv": "^17.2.3",
"express": "^5.2.1",
"zod": "^4.2.1"
},
"devDependencies": {
"@types/express": "^5.0.6",
"@types/node": "^25.0.3",
"prettier": "^3.7.4",
"tsup": "^8.3.5",
"tsx": "^4.21.0",
"typescript": "^5.9.3"
}
}

2062
pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

2
pnpm-workspace.yaml Normal file
View File

@@ -0,0 +1,2 @@
onlyBuiltDependencies:
- esbuild

17
src/env.ts Normal file
View File

@@ -0,0 +1,17 @@
import "dotenv/config";
import { z } from "zod";
const schema = z.object({
PORT: z.coerce.number(),
});
const result = schema.safeParse(process.env);
if (!result.success) {
console.error("ERROR: Environment variable validation failed:");
for (const issue of result.error.issues) {
console.error(`- ${issue.path.join(".")}: ${issue.message}`);
}
process.exit(1);
}
export const env = result.data;

10
src/index.ts Normal file
View File

@@ -0,0 +1,10 @@
import express from "express";
import { env } from "./env";
const app = express();
app.use(express.json());
app.listen(env.PORT, () => {
console.log(`Server running on port ${env.PORT}`);
});

31
tsconfig.json Normal file
View File

@@ -0,0 +1,31 @@
{
"compilerOptions": {
"rootDir": "./src",
"outDir": "./dist",
"module": "esnext",
"moduleResolution": "bundler",
"target": "esnext",
"lib": ["esnext"],
"types": ["node"],
"sourceMap": true,
"noUncheckedIndexedAccess": true,
"exactOptionalPropertyTypes": true,
"noImplicitReturns": true,
"noImplicitOverride": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noPropertyAccessFromIndexSignature": true,
"strict": true,
"verbatimModuleSyntax": true,
"isolatedModules": true,
"noUncheckedSideEffectImports": true,
"moduleDetection": "force",
"skipLibCheck": true
}
}