{
  "slug": "env-config",
  "runtimes": {
    "node": {
      "frameworks": {
        "express": {
          "dependencies": {
            "runtime": [
              "zod",
              "dotenv-flow",
              "cross-env"
            ],
            "dev": []
          },
          "env": [
            "PORT",
            "NODE_ENV",
            "DATABASE_URL",
            "CORS_ORIGIN",
            "LOG_LEVEL",
            "JWT_ACCESS_SECRET",
            "JWT_REFRESH_SECRET",
            "CRYPTO_SECRET",
            "SMTP_HOST",
            "SMTP_PORT",
            "SMTP_USER",
            "SMTP_PASS",
            "EMAIL_FROM",
            "CLOUDINARY_CLOUD_NAME",
            "CLOUDINARY_API_KEY",
            "CLOUDINARY_API_SECRET",
            "GOOGLE_CLIENT_ID",
            "GOOGLE_CLIENT_SECRET",
            "GOOGLE_REDIRECT_URI",
            "GITHUB_CLIENT_ID",
            "GITHUB_CLIENT_SECRET",
            "GITHUB_REDIRECT_URI"
          ],
          "architectures": {
            "mvc": {
              "files": [
                {
                  "type": "file",
                  "path": "src/configs/env.ts",
                  "content": "import \"dotenv-flow/config\";\nimport { z } from \"zod\";\n\n/**\n * Environment variable schema\n * - All validation happens at startup\n * - Fails fast on misconfiguration\n */\nexport const envSchema = z.object({\n  NODE_ENV: z\n    .enum([\"development\", \"test\", \"production\"])\n    .default(\"development\"),\n\n  PORT: z.string().regex(/^\\d+$/, \"PORT must be a number\").transform(Number),\n\n  DATABASE_URL: z.url(),\n\n  CORS_ORIGIN: z.string(),\n\n  LOG_LEVEL: z\n    .enum([\"fatal\", \"error\", \"warn\", \"info\", \"debug\", \"trace\"])\n    .default(\"info\"),\n\n  JWT_ACCESS_SECRET: z.string().min(32),\n  JWT_REFRESH_SECRET: z.string().min(32),\n\n  CRYPTO_SECRET: z.string().min(32),\n\n  SMTP_HOST: z.string(),\n  SMTP_PORT: z\n    .string()\n    .regex(/^\\d+$/, \"SMTP_PORT must be a number\")\n    .transform(Number),\n  SMTP_USER: z.string(),\n  SMTP_PASS: z.string(),\n  EMAIL_FROM: z.email(),\n\n  CLOUDINARY_CLOUD_NAME: z.string(),\n  CLOUDINARY_API_KEY: z.string(),\n  CLOUDINARY_API_SECRET: z.string(),\n\n  GOOGLE_CLIENT_ID: z.string(),\n  GOOGLE_CLIENT_SECRET: z.string(),\n  GOOGLE_REDIRECT_URI: z.url(),\n\n  GITHUB_CLIENT_ID: z.string(),\n  GITHUB_CLIENT_SECRET: z.string(),\n  GITHUB_REDIRECT_URI: z.url()\n});\n\nexport type Env = z.infer<typeof envSchema>;\n\n/**\n * Parse and validate environment variables once.\n * This module must be imported before app bootstrap.\n */\nconst result = envSchema.safeParse(process.env);\n\nif (!result.success) {\n  console.error(\"❌ Invalid environment configuration\");\n  console.error(z.prettifyError(result.error));\n  process.exit(1);\n}\n\n/**\n * Validated, immutable environment object\n */\nexport const env: Readonly<Env> = Object.freeze(result.data);\n\nexport default env;\n"
                }
              ]
            },
            "feature": {
              "files": [
                {
                  "type": "file",
                  "path": "src/shared/configs/env.ts",
                  "content": "import \"dotenv-flow/config\";\nimport { z } from \"zod\";\n\n/**\n * Environment variable schema\n * - All validation happens at startup\n * - Fails fast on misconfiguration\n */\nexport const envSchema = z.object({\n  NODE_ENV: z\n    .enum([\"development\", \"test\", \"production\"])\n    .default(\"development\"),\n\n  PORT: z.string().regex(/^\\d+$/, \"PORT must be a number\").transform(Number),\n\n  DATABASE_URL: z.url(),\n\n  CORS_ORIGIN: z.string(),\n\n  LOG_LEVEL: z\n    .enum([\"fatal\", \"error\", \"warn\", \"info\", \"debug\", \"trace\"])\n    .default(\"info\"),\n\n  JWT_ACCESS_SECRET: z.string().min(32),\n  JWT_REFRESH_SECRET: z.string().min(32),\n\n  CRYPTO_SECRET: z.string().min(32),\n\n  SMTP_HOST: z.string(),\n  SMTP_PORT: z\n    .string()\n    .regex(/^\\d+$/, \"SMTP_PORT must be a number\")\n    .transform(Number),\n  SMTP_USER: z.string(),\n  SMTP_PASS: z.string(),\n  EMAIL_FROM: z.email(),\n\n  CLOUDINARY_CLOUD_NAME: z.string(),\n  CLOUDINARY_API_KEY: z.string(),\n  CLOUDINARY_API_SECRET: z.string(),\n\n  GOOGLE_CLIENT_ID: z.string(),\n  GOOGLE_CLIENT_SECRET: z.string(),\n  GOOGLE_REDIRECT_URI: z.url(),\n\n  GITHUB_CLIENT_ID: z.string(),\n  GITHUB_CLIENT_SECRET: z.string(),\n  GITHUB_REDIRECT_URI: z.url()\n});\n\nexport type Env = z.infer<typeof envSchema>;\n\n/**\n * Parse and validate environment variables once.\n * This module must be imported before app bootstrap.\n */\nconst result = envSchema.safeParse(process.env);\n\nif (!result.success) {\n  console.error(\"❌ Invalid environment configuration\");\n  console.error(z.prettifyError(result.error));\n  process.exit(1);\n}\n\n/**\n * Validated, immutable environment object\n */\nexport const env: Readonly<Env> = Object.freeze(result.data);\n\nexport default env;\n"
                }
              ]
            }
          }
        },
        "nextjs": {
          "env": [
            "NODE_ENV",
            "NEXT_PUBLIC_APP_URL",
            "DATABASE_URL",
            "CORS_ORIGIN",
            "LOG_LEVEL",
            "JWT_ACCESS_SECRET",
            "JWT_REFRESH_SECRET",
            "CRYPTO_SECRET",
            "SMTP_HOST",
            "SMTP_PORT",
            "SMTP_USER",
            "SMTP_PASS",
            "EMAIL_FROM",
            "CLOUDINARY_CLOUD_NAME",
            "CLOUDINARY_API_KEY",
            "CLOUDINARY_API_SECRET",
            "GOOGLE_CLIENT_ID",
            "GOOGLE_CLIENT_SECRET",
            "GOOGLE_REDIRECT_URI",
            "GITHUB_CLIENT_ID",
            "GITHUB_CLIENT_SECRET",
            "GITHUB_REDIRECT_URI"
          ],
          "architectures": {
            "file-api": {
              "files": [
                {
                  "type": "file",
                  "path": "src/configs/env.ts",
                  "content": "import z from \"zod\";\r\n\r\nexport const envSchema = z.object({\r\n  NODE_ENV: z\r\n    .enum([\"development\", \"test\", \"production\"])\r\n    .default(\"development\"),\r\n\r\n  DATABASE_URL: z.url(),\r\n\r\n  CORS_ORIGIN: z.string(),\r\n\r\n  LOG_LEVEL: z\r\n    .enum([\"fatal\", \"error\", \"warn\", \"info\", \"debug\", \"trace\"])\r\n    .default(\"info\"),\r\n\r\n  JWT_ACCESS_SECRET: z.string().min(32),\r\n  JWT_REFRESH_SECRET: z.string().min(32),\r\n\r\n  CRYPTO_SECRET: z.string().min(32),\r\n\r\n  SMTP_HOST: z.string(),\r\n  SMTP_PORT: z.string().regex(/^\\d+$/).transform(Number),\r\n  SMTP_USER: z.string(),\r\n  SMTP_PASS: z.string(),\r\n  EMAIL_FROM: z.email(),\r\n\r\n  CLOUDINARY_CLOUD_NAME: z.string(),\r\n  CLOUDINARY_API_KEY: z.string(),\r\n  CLOUDINARY_API_SECRET: z.string(),\r\n\r\n  GOOGLE_CLIENT_ID: z.string(),\r\n  GOOGLE_CLIENT_SECRET: z.string(),\r\n  GOOGLE_REDIRECT_URI: z.url(),\r\n\r\n  GITHUB_CLIENT_ID: z.string(),\r\n  GITHUB_CLIENT_SECRET: z.string(),\r\n  GITHUB_REDIRECT_URI: z.url(),\r\n\r\n  NEXT_PUBLIC_APP_URL: process.env.NEXT_PUBLIC_APP_URL\r\n});\r\n\r\nexport type Env = z.infer<typeof envSchema>;\r\n\r\nconst parsed = envSchema.safeParse(process.env);\r\n\r\nif (!parsed.success) {\r\n  console.error(\"❌ Invalid environment variables\");\r\n  console.error(z.prettifyError(parsed.error));\r\n  process.exit(1);\r\n}\r\n\r\nconst env = Object.freeze(parsed.data);\r\n\r\nexport default env;\r\n\r\n/*\r\n* ? Usage:\r\n* import env from \"@/configs/env\";\r\n* console.log(env.DATABASE_URL);\r\n*/"
                }
              ]
            }
          }
        }
      }
    }
  }
}
