/**
* Extracts task queue values for staging environments with basic sanity checks.
*
* @returns {Promise<object>} An object containing staging environment task queues and their values.
* Returns an empty object if no staging environments are found.
* @throws {Error} If there's an error accessing configuration or processing data.
*/
async function getStagingTaskQueues() {
try {
// 1. Fetch configuration data (e.g., environment variables, config file)
const config = await fetchConfig(); // Replace with your config fetching logic
// 2. Filter for staging environments
const stagingEnvironments = config?.environments?.filter(
(env) => env.environment === 'staging'
);
if (!stagingEnvironments || stagingEnvironments.length === 0) {
console.warn('No staging environments configured.');
return {}; // Return empty object if no staging environments are found
}
// 3. Extract task queue values for each staging environment
const stagingTaskQueues = {};
for (const env of stagingEnvironments) {
const taskQueues = env.taskQueues;
if (!taskQueues || !Array.isArray(taskQueues)) {
console.warn(`Invalid task queues for environment ${env.environment}. Skipping.`);
continue;
}
const validatedQueues = taskQueues.map(queue => {
//Basic sanity check: Ensure queue name is a string
if (typeof queue !== 'string') {
console.warn(`Invalid queue name: ${queue} for environment ${env.environment}. Skipping.`);
return null;
}
return queue.trim(); //remove leading/trailing whitespace
}).filter(queue => queue !== null); //filter out invalid queue names
if (validatedQueues.length > 0) {
stagingTaskQueues[env.environment] = validatedQueues;
}
}
return stagingTaskQueues;
} catch (error) {
console.error('Error fetching or processing staging task queues:', error);
throw error; // Re-throw the error for handling upstream
}
}
/**
* Placeholder function to fetch configuration data. Replace with your actual
* configuration loading mechanism (e.g., reading environment variables,
* reading a JSON file, calling an API).
* @returns {Promise<object>} Configuration data.
*/
async function fetchConfig() {
// Replace with your actual configuration loading logic.
//Example:
return new Promise((resolve) => {
setTimeout(() => {
resolve({
environments: [
{ environment: 'production', taskQueues: ['queue1', 'queue2'] },
{ environment: 'staging', taskQueues: ['stagingQueue1', 'stagingQueue2', 123, ' queue3 '] },
{ environment: 'development', taskQueues: ['devQueue1'] },
],
});
}, 50);
});
}
export default getStagingTaskQueues;
Add your comment