first commit
This commit is contained in:
44
src/config/env.ts
Normal file
44
src/config/env.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
/**
|
||||
* Schéma des variables d'environnement.
|
||||
* Toute nouvelle variable doit passer par ce schéma → fail-fast au boot.
|
||||
*/
|
||||
const envSchema = z.object({
|
||||
NODE_ENV: z.enum(['development', 'test', 'production']).default('development'),
|
||||
|
||||
// DB
|
||||
DATABASE_PROVIDER: z.enum(['sqlite', 'postgresql']).default('sqlite'),
|
||||
DATABASE_URL: z.string().min(1),
|
||||
|
||||
// App
|
||||
PORT: z.coerce.number().int().positive().default(3000),
|
||||
APP_URL: z.string().url().default('http://localhost:3000'),
|
||||
|
||||
// Discovery
|
||||
DISCOVERY_DEFAULT_CIDRS: z.string().default('192.168.1.0/24'),
|
||||
DISCOVERY_DEFAULT_PORTS: z.string().default('22,80,443,8080'),
|
||||
DISCOVERY_PING_TIMEOUT: z.coerce.number().int().positive().default(1000),
|
||||
DISCOVERY_PORT_TIMEOUT: z.coerce.number().int().positive().default(800),
|
||||
DISCOVERY_CONCURRENCY: z.coerce.number().int().positive().default(32),
|
||||
DISCOVERY_ENABLE_PING: z.coerce.boolean().default(true),
|
||||
DISCOVERY_ENABLE_PORT_SCAN: z.coerce.boolean().default(true),
|
||||
DISCOVERY_ENABLE_ARP: z.coerce.boolean().default(true),
|
||||
DISCOVERY_ENABLE_MDNS: z.coerce.boolean().default(true),
|
||||
|
||||
// Logs
|
||||
LOG_LEVEL: z.enum(['trace', 'debug', 'info', 'warn', 'error']).default('info'),
|
||||
});
|
||||
|
||||
export type Env = z.infer<typeof envSchema>;
|
||||
|
||||
function loadEnv(): Env {
|
||||
const parsed = envSchema.safeParse(process.env);
|
||||
if (!parsed.success) {
|
||||
console.error('❌ Variables d\'environnement invalides :', parsed.error.flatten().fieldErrors);
|
||||
throw new Error('Configuration invalide');
|
||||
}
|
||||
return parsed.data;
|
||||
}
|
||||
|
||||
export const env = loadEnv();
|
||||
Reference in New Issue
Block a user