1. /**
  2. * Verifies the integrity of CLI arguments for backward compatibility with optional flags.
  3. *
  4. * @param {string[]} args The array of command-line arguments.
  5. * @param {object} expectedFlags An object specifying expected optional flags and their values (or null if not present).
  6. * @returns {boolean} True if arguments are valid, false otherwise.
  7. */
  8. function verifyCLIArgs(args, expectedFlags) {
  9. // Create a map to store the parsed arguments.
  10. const parsedArgs = {};
  11. // Iterate over the arguments.
  12. for (let i = 0; i < args.length; i++) {
  13. const arg = args[i];
  14. // Check for flags.
  15. if (arg.startsWith('--')) {
  16. const flag = arg.substring(2); // Remove the '--' prefix.
  17. if (expectedFlags && expectedFlags.hasOwnProperty(flag)) {
  18. parsedArgs[flag] = arg.substring(arg.indexOf('=') + 1) || true; // Parse flag value, default to true if no value.
  19. } else if (!expectedFlags && !arg.startsWith('--')) {
  20. //Unexpected argument.
  21. return false;
  22. }
  23. } else {
  24. // Assume positional arguments.
  25. parsedArgs[i] = arg;
  26. }
  27. }
  28. // Verify that all expected flags are present and have valid values.
  29. for (const flag in expectedFlags) {
  30. if (expectedFlags.hasOwnProperty(flag)) {
  31. if (!parsedArgs.hasOwnProperty(flag)) {
  32. return false; // Flag is missing.
  33. }
  34. }
  35. }
  36. return true; // All arguments are valid.
  37. }

Add your comment