39 lines
1.0 KiB
TypeScript
39 lines
1.0 KiB
TypeScript
import { logForDebugging } from './debug.js'
|
|
|
|
export type EnvVarValidationResult = {
|
|
effective: number
|
|
status: 'valid' | 'capped' | 'invalid'
|
|
message?: string
|
|
}
|
|
|
|
export function validateBoundedIntEnvVar(
|
|
name: string,
|
|
value: string | undefined,
|
|
defaultValue: number,
|
|
upperLimit: number,
|
|
): EnvVarValidationResult {
|
|
if (!value) {
|
|
return { effective: defaultValue, status: 'valid' }
|
|
}
|
|
const parsed = parseInt(value, 10)
|
|
if (isNaN(parsed) || parsed <= 0) {
|
|
const result: EnvVarValidationResult = {
|
|
effective: defaultValue,
|
|
status: 'invalid',
|
|
message: `Invalid value "${value}" (using default: ${defaultValue})`,
|
|
}
|
|
logForDebugging(`${name} ${result.message}`)
|
|
return result
|
|
}
|
|
if (parsed > upperLimit) {
|
|
const result: EnvVarValidationResult = {
|
|
effective: upperLimit,
|
|
status: 'capped',
|
|
message: `Capped from ${parsed} to ${upperLimit}`,
|
|
}
|
|
logForDebugging(`${name} ${result.message}`)
|
|
return result
|
|
}
|
|
return { effective: parsed, status: 'valid' }
|
|
}
|