Небольшая функция JavaScript, имитирующая обработку флагов в командной строке

Я пишу функцию, которую я бы использовал для обработки параметров с параметрами для использования позже в другом проекте.

Пример ввода будет похож на это:

foo bar --baz con str --w=1920 --h=1080

Из приведенного выше примера я ожидал foo а также bar не быть частью какого-либо флага и baz будет содержать con а также str а также w со значением 1920 а также h с участием 1080:

foo
bar
baz = [con, str]
w   = 1920
h   = 1080

Этот getFlags функция принимает строку и выполняет логику «флага», которую я имел в виду.

const getFlags = (str) => {
  const prefix = '--';

  const strArray = str
    .trim()
    .replaceAll(/s+/ig, ' ')
    .split(' ');

  let flagArray = {
    _noFlag: {
      values: [],
    },
  };

  let lastArg = '';
  strArray.forEach((arg) => {
    if (arg.startsWith(prefix) && arg.length > prefix.length) {
      noPrefixFlag = arg.slice(prefix.length);

      if (noPrefixFlag.includes('=')) {
        const pair = noPrefixFlag.split('=');
        flagArray[pair[0]] = {
          values: [pair[1]],
        };
        lastArg = '';
      } else {
        lastArg = noPrefixFlag;
        flagArray[lastArg] = {
          values: [],
        };
      }

    } else if (lastArg) {
      flagArray[lastArg].values.push(arg);
    } else {
      flagArray._noFlag.values.push(arg);
    }
  });

  return flagArray;
};

Он работает так, как я ожидал, но я чувствую, что эту функцию можно улучшить.

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *