1. /**
  2. * Binds arguments of queues for hypothesis validation with basic sanity checks.
  3. *
  4. * @param {Array<Object>} queues An array of queue objects. Each queue object should have a 'name' and 'arguments' property.
  5. * @param {Object} validationConfig A configuration object specifying validation rules for each queue.
  6. * Example: { queueName: { expectedType: 'string', requiredFields: ['field1', 'field2'] } }
  7. * @returns {Array<Object>} An array of validated queue objects. Returns an empty array if queues is invalid.
  8. */
  9. function validateQueues(queues, validationConfig) {
  10. if (!Array.isArray(queues)) {
  11. console.error("Invalid input: queues must be an array.");
  12. return [];
  13. }
  14. if (!validationConfig || typeof validationConfig !== 'object') {
  15. console.error("Invalid input: validationConfig must be an object.");
  16. return [];
  17. }
  18. const validatedQueues = [];
  19. for (const queue of queues) {
  20. if (typeof queue !== 'object' || !queue.hasOwnProperty('name') || !queue.hasOwnProperty('arguments')) {
  21. console.warn("Skipping invalid queue:", queue);
  22. continue;
  23. }
  24. const queueName = queue.name;
  25. const arguments = queue.arguments;
  26. if (!validationConfig.hasOwnProperty(queueName)) {
  27. console.warn(`No validation config found for queue: ${queueName}. Skipping validation.`);
  28. validatedQueues.push(queue); //push the queue even if no validation is done
  29. continue;
  30. }
  31. const config = validationConfig[queueName];
  32. if (typeof config.expectedType === 'string' && arguments.length > 0) {
  33. const firstArgument = arguments[0];
  34. if (typeof firstArgument !== config.expectedType) {
  35. console.error(`Validation failed for queue ${queueName}: Argument type is incorrect. Expected ${config.expectedType}, got ${typeof firstArgument}`);
  36. continue; // Skip this queue if type validation fails
  37. }
  38. }
  39. if (config.requiredFields && Array.isArray(config.requiredFields)) {
  40. for (const field of config.requiredFields) {
  41. if (!arguments.includes(field)) {
  42. console.error(`Validation failed for queue ${queueName}: Missing required field ${field}`);
  43. continue; // Skip this queue if required field validation fails.
  44. }
  45. }
  46. }
  47. validatedQueues.push(queue);
  48. }
  49. return validatedQueues;
  50. }

Add your comment