{"version":3,"sources":["../src/lib/errors.ts","../src/lib/client.ts","../src/lib/server.ts","../src/lib/transformers.ts"],"names":["EnvValidationError","message","errors","createClientEnv","config","env","key","validator","envKey","rawValue","transformedValue","validatedValue","error","z","createServerEnv","transformers","val"],"mappings":"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","file":"index.mjs","sourcesContent":["export class EnvValidationError extends Error {\n  constructor(\n    message: string,\n    public errors: Array<{ key: string; message: string }>,\n  ) {\n    super(message);\n    this.name = \"EnvValidationError\";\n  }\n}\n","import { z } from \"zod\";\n\nimport { EnvConfig } from \"../types\";\nimport { EnvValidationError } from \"./errors\";\n\n/**\n * Creates a strongly-typed environment configuration object with runtime validation.\n *\n * @template T - Type of the resulting environment object. Must be a record of string keys to unknown values.\n * @param {EnvConfig<T>} config - Configuration object mapping environment keys to their validators\n * @returns {T} A validated environment object matching the type parameter\n * @throws {EnvValidationError} When environment variables are missing or fail validation\n *\n * @example\n * ```ts\n * const env = createClientEnv({\n * MY_ENV_VAR: z.string(),\n * MY_OTHER_ENV_VAR: z.number(),\n * });\n * // env is now typed as { MY_ENV_VAR: string, MY_OTHER_ENV_VAR: number }\n * ```\n */\nexport const createClientEnv = <T extends Record<string, unknown>>(\n  config: EnvConfig<T>,\n): T => {\n  const env: Partial<T> = {};\n  const errors: Array<{ key: string; message: string }> = [];\n\n  for (const [key, validator] of Object.entries(config)) {\n    const envKey = `NEXT_PUBLIC_${key}`;\n    const rawValue = process.env[envKey];\n    if (rawValue === undefined && !validator.schema.isOptional()) {\n      errors.push({ key, message: `Missing environment variable: ${envKey}` });\n      continue;\n    }\n\n    try {\n      const transformedValue = validator.transform\n        ? validator.transform(rawValue)\n        : rawValue;\n      const validatedValue = validator.schema.parse(transformedValue);\n      env[key as keyof T] = validatedValue;\n    } catch (error) {\n      if (error instanceof z.ZodError) {\n        errors.push({\n          key,\n          message: `Invalid value for ${envKey}: ${error.errors[0].message}`,\n        });\n      }\n    }\n  }\n\n  if (errors.length > 0) {\n    throw new EnvValidationError(\n      \"Client environment validation failed\",\n      errors,\n    );\n  }\n\n  return env as T;\n};\n","import { z } from \"zod\";\n\nimport { EnvConfig } from \"../types\";\nimport { EnvValidationError } from \"./errors\";\n\n/**\n * Creates a strongly-typed environment configuration object with runtime validation.\n *\n * @template T - Type of the resulting environment object. Must be a record of string keys to unknown values.\n * @param {EnvConfig<T>} config - Configuration object mapping environment keys to their validators\n * @returns {T} A validated environment object matching the type parameter\n * @throws {Error} When accessed from client-side code (server.ts only)\n * @throws {EnvValidationError} When environment variables are missing or fail validation\n *\n * @example\n * ```ts\n * const env = createServerEnv({\n *   DATABASE_URL: { schema: z.string().url() },\n *   PORT: {\n *     schema: z.number(),\n *     transform: (val) => parseInt(val, 10)\n *   }\n * });\n * // env is now typed as { DATABASE_URL: string, PORT: number }\n * ```\n */\nexport const createServerEnv = <T extends Record<string, unknown>>(\n  config: EnvConfig<T>,\n): T => {\n  if (typeof window !== \"undefined\") {\n    throw new Error(\"Server env accessed on client side!\");\n  }\n\n  const env: Partial<T> = {};\n  const errors: Array<{ key: string; message: string }> = [];\n\n  for (const [key, validator] of Object.entries(config)) {\n    const rawValue = process.env[key];\n\n    if (rawValue === undefined && !validator.schema.isOptional()) {\n      errors.push({ key, message: `Missing environment variable: ${key}` });\n      continue;\n    }\n\n    try {\n      const transformedValue = validator.transform\n        ? validator.transform(rawValue)\n        : rawValue;\n      const validatedValue = validator.schema.parse(transformedValue);\n      env[key as keyof T] = validatedValue;\n    } catch (error) {\n      if (error instanceof z.ZodError) {\n        errors.push({\n          key,\n          message: `Invalid value for ${key}: ${error.errors[0].message}`,\n        });\n      }\n    }\n  }\n\n  if (errors.length > 0) {\n    throw new EnvValidationError(\n      \"Server environment validation failed\",\n      errors,\n    );\n  }\n\n  return env as T;\n};\n","/**\n * Transformers are helper functions that can be used to transform the value of an environment variable.\n * They are useful for converting strings to other types, such as numbers or booleans.\n */\nexport const transformers = {\n  // Numberedoos\n  number: (val: string) => parseInt(val, 10),\n  optionalNumber: (val: string | undefined) =>\n    val === undefined ? undefined : parseInt(val, 10),\n\n  // Booleandoos\n  boolean: (val: string) => val === \"true\",\n  optionalBoolean: (val: string | undefined) =>\n    val === undefined ? undefined : val === \"true\",\n\n  // JSON-ify-doos\n  json: <T>(val: string) => JSON.parse(val) as T,\n};\n"]}