/**
* Maps runtime environment fields for validation checks with defensive checks.
*
* @param {object} env - An object containing runtime environment variables.
* @returns {object} - An object containing validated environment variables.
*/
function validateRuntimeEnvironment(env) {
const validatedEnv = {};
// Validate required fields with defensive checks
if (!env.apiKey) {
console.error("API Key is missing.");
//Handle Missing API Key - e.g., throw an error, default value, etc.
validatedEnv.apiKey = ""; // Default value if missing
} else if (typeof env.apiKey !== 'string') {
console.error("API Key must be a string.");
validatedEnv.apiKey = ""; //Default value if invalid type.
} else {
validatedEnv.apiKey = env.apiKey;
}
if (!env.databaseUrl) {
console.error("Database URL is missing.");
validatedEnv.databaseUrl = ""; //Default value
} else if (typeof env.databaseUrl !== 'string') {
console.error("Database URL must be a string.");
validatedEnv.databaseUrl = ""; //Default value
} else {
validatedEnv.databaseUrl = env.databaseUrl;
}
if (!env.appName) {
console.error("App Name is missing.");
validatedEnv.appName = "defaultApp"; // Default value
} else if (typeof env.appName !== 'string') {
console.error("App Name must be a string.");
validatedEnv.appName = "defaultApp";
}
else{
validatedEnv.appName = env.appName;
}
//Validate numeric fields with defensive checks
if (env.port) {
if (typeof env.port !== 'number' || !Number.isInteger(env.port) || env.port < 1 || env.port > 65535) {
console.error("Port must be an integer between 1 and 65535.");
validatedEnv.port = 8080; //Default value
} else {
validatedEnv.port = env.port;
}
} else {
validatedEnv.port = 8080; //Default value
}
//Validate boolean fields
if(env.debug){
if(typeof env.debug !== 'boolean'){
console.error("Debug must be a boolean value.");
validatedEnv.debug = false;
} else {
validatedEnv.debug = env.debug;
}
} else {
validatedEnv.debug = false; //Default value
}
return validatedEnv;
}
Add your comment