diff --git a/packages/utils/.gitignore b/packages/utils/.gitignore new file mode 100644 index 0000000..1521c8b --- /dev/null +++ b/packages/utils/.gitignore @@ -0,0 +1 @@ +dist diff --git a/packages/utils/package.json b/packages/utils/package.json new file mode 100644 index 0000000..8c0c3b5 --- /dev/null +++ b/packages/utils/package.json @@ -0,0 +1,29 @@ +{ + "name": "@lbf-bot/utils", + "type": "module", + "main": "dist/index.js", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "default": "./dist/index.js" + } + }, + "files": [ + "dist" + ], + "scripts": { + "build": "rm -rf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json" + }, + "dependencies": { + "dotenv": "17.2.3", + "zod": "4.1.11" + }, + "devDependencies": { + "@types/node": "22.19.1", + "tsc-alias": "1.8.16", + "typescript": "5.9.3" + } +} diff --git a/packages/utils/src/env.ts b/packages/utils/src/env.ts new file mode 100644 index 0000000..ca9945c --- /dev/null +++ b/packages/utils/src/env.ts @@ -0,0 +1,17 @@ +import "dotenv/config"; +import { z } from "zod"; + +export const parseEnv = (vars: T) => { + const schema = z.object(vars); + 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); + } + + return result.data; +}; diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts new file mode 100644 index 0000000..77b0d3c --- /dev/null +++ b/packages/utils/src/index.ts @@ -0,0 +1 @@ +export * from "./env"; diff --git a/packages/utils/tsconfig.build.json b/packages/utils/tsconfig.build.json new file mode 100644 index 0000000..a1d59a5 --- /dev/null +++ b/packages/utils/tsconfig.build.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "removeComments": false + }, + "tsc-alias": { + "resolveFullPaths": true + }, + "include": ["src"] +} diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json new file mode 100644 index 0000000..61dc659 --- /dev/null +++ b/packages/utils/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "lib": ["ESNext"], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + + "moduleResolution": "bundler", + "allowImportingTsExtensions": false, + "baseUrl": ".", + "paths": { + "~/*": ["./src/*"], + "~": ["./src/index"] + }, + + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "esModuleInterop": true, + "resolveJsonModule": true, + + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + }, + "include": ["src"], + "exclude": ["node_modules", "dist"] +}