envValidation.ts 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { logForDebugging } from './debug.js'
  2. export type EnvVarValidationResult = {
  3. effective: number
  4. status: 'valid' | 'capped' | 'invalid'
  5. message?: string
  6. }
  7. export function validateBoundedIntEnvVar(
  8. name: string,
  9. value: string | undefined,
  10. defaultValue: number,
  11. upperLimit: number,
  12. ): EnvVarValidationResult {
  13. if (!value) {
  14. return { effective: defaultValue, status: 'valid' }
  15. }
  16. const parsed = parseInt(value, 10)
  17. if (isNaN(parsed) || parsed <= 0) {
  18. const result: EnvVarValidationResult = {
  19. effective: defaultValue,
  20. status: 'invalid',
  21. message: `Invalid value "${value}" (using default: ${defaultValue})`,
  22. }
  23. logForDebugging(`${name} ${result.message}`)
  24. return result
  25. }
  26. if (parsed > upperLimit) {
  27. const result: EnvVarValidationResult = {
  28. effective: upperLimit,
  29. status: 'capped',
  30. message: `Capped from ${parsed} to ${upperLimit}`,
  31. }
  32. logForDebugging(`${name} ${result.message}`)
  33. return result
  34. }
  35. return { effective: parsed, status: 'valid' }
  36. }