\href{http://travis-ci.org/veged/coa}{\texttt{ }}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5333}{}\doxysection{Что это?}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5333}
COA — парсер параметров командной строки, позволяющий извлечь максимум пользы от формального API вашей программы. Как только вы опишете определение в терминах команд, параметров и аргументов, вы автоматически получите\+:


\begin{DoxyItemize}
\item Справку для командной строки
\item API для использования программы как модуля в COA-\/совместимых программах
\item Автодополнение для командной строки
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5334}{}\doxysubsection{Прочие возможности}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5334}

\begin{DoxyItemize}
\item Широкий выбор настроек для параметров и аргументов, включая множественные значения, логические значения и обязательность параметров
\item Возможность асинхронного исполнения команд, используя промисы (используется библиотека \href{https://github.com/kriskowal/q}{\texttt{ Q}})
\item Простота использования существующих команд как подмодулей для новых команд
\item Комбинированная валидация и анализ сложных значений
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5335}{}\doxysection{Примеры}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5335}

\begin{DoxyCode}{0}
\DoxyCodeLine{require('coa').Cmd() // декларация команды верхнего уровня}
\DoxyCodeLine{    .name(process.argv[1]) // имя команды верхнего уровня, берем из имени программы}
\DoxyCodeLine{    .title('Жутко полезная утилита для командной строки') // название для использования в справке и сообщениях}
\DoxyCodeLine{    .helpful() // добавляем поддержку справки командной строки (-\/h, -\/-\/help)}
\DoxyCodeLine{    .opt() // добавляем параметр}
\DoxyCodeLine{        .name('version') // имя параметра для использования в API}
\DoxyCodeLine{        .title('Version') // текст для вывода в сообщениях}
\DoxyCodeLine{        .short('v') // короткое имя параметра: -\/v}
\DoxyCodeLine{        .long('version') // длинное имя параметра: -\/-\/version}
\DoxyCodeLine{        .flag() // параметр не требует ввода значения}
\DoxyCodeLine{        .act(function(opts) \{  // действия при вызове аргумента}
\DoxyCodeLine{            // результатом является вывод текстового сообщения}
\DoxyCodeLine{            return JSON.parse(require('fs').readFileSync(\_\_dirname + '/package.json'))}
\DoxyCodeLine{                .version;}
\DoxyCodeLine{        \})}
\DoxyCodeLine{        .end() // завершаем определение параметра и возвращаемся к определению верхнего уровня}
\DoxyCodeLine{    .cmd().name('subcommand').apply(require('./subcommand').COA).end() // загрузка подкоманды из модуля}
\DoxyCodeLine{    .cmd() // добавляем еще одну подкоманду}
\DoxyCodeLine{        .name('othercommand').title('Еще одна полезная подпрограмма').helpful()}
\DoxyCodeLine{        .opt()}
\DoxyCodeLine{            .name('input').title('input file, required')}
\DoxyCodeLine{            .short('i').long('input')}
\DoxyCodeLine{            .val(function(v) \{ // функция-\/валидатор, также может использоваться для трансформации значений параметров}
\DoxyCodeLine{                return require('fs').createReadStream(v) \})}
\DoxyCodeLine{            .req() // параметр является обязательным}
\DoxyCodeLine{            .end() // завершаем определение параметра и возвращаемся к определению команды}
\DoxyCodeLine{        .end() // завершаем определение подкоманды и возвращаемся к определению команды верхнего уровня}
\DoxyCodeLine{    .run(process.argv.slice(2)); // разбираем process.argv и запускаем }

\end{DoxyCode}



\begin{DoxyCode}{0}
\DoxyCodeLine{// subcommand.js}
\DoxyCodeLine{exports.COA = function() \{}
\DoxyCodeLine{    this}
\DoxyCodeLine{        .title('Полезная подпрограмма').helpful()}
\DoxyCodeLine{        .opt()}
\DoxyCodeLine{            .name('output').title('output file')}
\DoxyCodeLine{            .short('o').long('output')}
\DoxyCodeLine{            .output() // использовать стандартную настройку для параметра вывода}
\DoxyCodeLine{            .end()}
\DoxyCodeLine{\}; }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5336}{}\doxysection{API}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5336}
\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5337}{}\doxysubsection{Cmd}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5337}
Команда —~сущность верхнего уровня. У команды могут быть определены параметры и аргументы.\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5338}{}\doxysubsubsection{Cmd.\+api}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5338}
Возвращает объект, который можно использовать в других программах. Подкоманды являются методами этого объекта.~\newline
 {\bfseries{\begin{DoxyReturn}{Returns}
$\ast$\{Object\}$\ast$
\end{DoxyReturn}
}}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5339}{}\doxysubsubsection{Cmd.\+name}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5339}
{\bfseries{Определяет канонический идентификатор команды, используемый в вызовах API.~\newline
 {\bfseries{
\begin{DoxyParams}{Parameters}
{\em $<$/strong$>$} & {\itshape String} {\ttfamily \+\_\+name} имя команды~\newline
 {\bfseries{}}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
{\bfseries{}} {\itshape COA.\+Cmd} {\ttfamily this} экземпляр команды (для поддержки цепочки методов)
\end{DoxyReturn}
}}}}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5340}{}\doxysubsubsection{Cmd.\+title}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5340}
{\bfseries{{\bfseries{Определяет название команды, используемый в текстовых сообщениях.~\newline
 {\bfseries{
\begin{DoxyParams}{Parameters}
{\em $<$/strong$>$} & {\itshape String} {\ttfamily \+\_\+title} название команды~\newline
 {\bfseries{}}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
{\bfseries{}} {\itshape COA.\+Cmd} {\ttfamily this} экземпляр команды (для поддержки цепочки методов)
\end{DoxyReturn}
}}}}}}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5341}{}\doxysubsubsection{Cmd.\+cmd}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5341}
{\bfseries{{\bfseries{{\bfseries{Создает новую подкоманду или добавляет ранее определенную подкоманду к текущей команде.~\newline
 {\bfseries{
\begin{DoxyParams}{Parameters}
{\em $<$/strong$>$} & {\itshape COA.\+Cmd} {\ttfamily \mbox{[}cmd\mbox{]}} экземпляр ранее определенной подкоманды~\newline
 {\bfseries{}}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
{\bfseries{}} {\itshape COA.\+Cmd} экземпляр новой или ранее определенной подкоманды
\end{DoxyReturn}
}}}}}}}}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5342}{}\doxysubsubsection{Cmd.\+opt}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5342}
{\bfseries{{\bfseries{{\bfseries{{\bfseries{Создает параметр для текущей команды.~\newline
 {\bfseries{\begin{DoxyReturn}{Returns}
{\itshape COA.\+Opt} {\ttfamily new} экземпляр параметра
\end{DoxyReturn}
}}}}}}}}}}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5343}{}\doxysubsubsection{Cmd.\+arg}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5343}
{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{Создает аргумент для текущей команды.~\newline
 {\bfseries{\begin{DoxyReturn}{Returns}
{\itshape COA.\+Opt} {\ttfamily new} экземпляр аргумента
\end{DoxyReturn}
}}}}}}}}}}}}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5344}{}\doxysubsubsection{Cmd.\+act}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5344}
{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{Добавляет (или создает) действие для текущей команды.~\newline
 {\bfseries{
\begin{DoxyParams}{Parameters}
{\em $<$/strong$>$} & {\itshape Function} {\ttfamily act} функция, выполняемая в контексте экземпляра текущей команды и принимающая следующие параметры\+:~\newline

\begin{DoxyItemize}
\item {\itshape Object} {\ttfamily opts} параметры команды~\newline

\item {\itshape Array} {\ttfamily args} аргументы команды~\newline

\item {\itshape Object} {\ttfamily res} объект-\/аккумулятор результатов~\newline
 Функция может вернуть проваленный промис из Cmd.\+reject (в случае ошибки) или любое другое значение, рассматриваемое как результат.~\newline
 {\bfseries{}}
\end{DoxyItemize}\\
\hline
{\em $<$/strong$>$} & {\bfseries{$\ast$\{Boolean\}$\ast$ \mbox{[}force=false\mbox{]} флаг, назначающий немедленное исполнение вместо добавления к списку существующих действий~\newline
 {\bfseries{}}}}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
{\bfseries{{\bfseries{}} {\itshape COA.\+Cmd} {\ttfamily this} экземпляр команды (для поддержки цепочки методов)}}
\end{DoxyReturn}
}}}}}}}}}}}}}}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5345}{}\doxysubsubsection{Cmd.\+apply}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5345}
{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{Исполняет функцию с переданными аргументами в контексте экземпляра текущей команды.~\newline
 {\bfseries{
\begin{DoxyParams}{Parameters}
{\em $<$/strong$>$} & {\itshape Function} {\ttfamily fn}~\newline
 {\bfseries{}}\\
\hline
{\em $<$/strong$>$} & {\bfseries{{\itshape Array} {\ttfamily args}~\newline
 {\bfseries{}}}}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
{\bfseries{{\bfseries{}} {\itshape COA.\+Cmd} {\ttfamily this} экземпляр команды (для поддержки цепочки методов)}}
\end{DoxyReturn}
}}}}}}}}}}}}}}}}}}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5346}{}\doxysubsubsection{Cmd.\+comp}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5346}
{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{Назначает кастомную функцию автодополнения для текущей команды.~\newline
 {\bfseries{
\begin{DoxyParams}{Parameters}
{\em $<$/strong$>$} & {\itshape Function} {\ttfamily fn} функция-\/генератор автодополнения, исполняемая в контексте текущей команды. Принимает параметры\+:~\newline

\begin{DoxyItemize}
\item {\itshape Object} {\ttfamily opts} параметры~\newline
 Может возвращать промис или любое другое значение, рассматриваемое как результат исполнения команды.~\newline
 {\bfseries{}}
\end{DoxyItemize}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
{\bfseries{}} {\itshape COA.\+Cmd} {\ttfamily this} экземпляр команды (для поддержки цепочки методов)
\end{DoxyReturn}
}}}}}}}}}}}}}}}}}}}}}}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5347}{}\doxysubsubsection{Cmd.\+helpful}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5347}
{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{Ставит флаг поддержки справки командной строки, т.\+е. вызов команды с параметрами -\/h --help выводит справку по работе с командой.~\newline
 {\bfseries{\begin{DoxyReturn}{Returns}
{\itshape COA.\+Cmd} {\ttfamily this} экземпляр команды (для поддержки цепочки методов)
\end{DoxyReturn}
}}}}}}}}}}}}}}}}}}}}}}}}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5348}{}\doxysubsubsection{Cmd.\+completable}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5348}
{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{Добавляет поддержку автодополнения командной строки. Добавляется подкоманда \char`\"{}completion\char`\"{}, которая выполняет все необходимые действия.~\newline
 Может быть добавлен только для главной команды.~\newline
 {\bfseries{\begin{DoxyReturn}{Returns}
{\itshape COA.\+Cmd} {\ttfamily this} экземпляр команды (для поддержки цепочки методов)
\end{DoxyReturn}
}}}}}}}}}}}}}}}}}}}}}}}}}}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5349}{}\doxysubsubsection{Cmd.\+usage}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5349}
{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{Возвращает текст справки по использованию команды для текущего экземпляра.~\newline
 {\bfseries{\begin{DoxyReturn}{Returns}
{\itshape String} {\ttfamily usage} Текст справки по использованию
\end{DoxyReturn}
}}}}}}}}}}}}}}}}}}}}}}}}}}}}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5350}{}\doxysubsubsection{Cmd.\+run}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5350}
{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{Разбирает аргументы из значения, возвращаемого Node\+JS process.\+argv, и запускает текущую программу, т.\+е. вызывает process.\+exit после завершения всех действий.~\newline
 {\bfseries{
\begin{DoxyParams}{Parameters}
{\em $<$/strong$>$} & {\itshape Array} {\ttfamily argv}~\newline
 {\bfseries{}}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
{\bfseries{}} {\itshape COA.\+Cmd} {\ttfamily this} экземпляр команды (для поддержки цепочки методов)
\end{DoxyReturn}
}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5351}{}\doxysubsubsection{Cmd.\+invoke}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5351}
{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{Исполняет переданную (или текущую) команду с указанными параметрами и аргументами.~\newline
 {\bfseries{
\begin{DoxyParams}{Parameters}
{\em $<$/strong$>$} & {\itshape String$\vert$\+Array} {\ttfamily cmds} подкоманда для исполнения (необязательно)~\newline
 {\bfseries{}}\\
\hline
{\em $<$/strong$>$} & {\bfseries{{\itshape Object} {\ttfamily opts} параметры, передаваемые команде (необязательно)~\newline
 {\bfseries{}}}}\\
\hline
{\em $<$/strong$>$} & {\bfseries{{\bfseries{{\itshape Object} {\ttfamily args} аргументы, передаваемые команде (необязательно)~\newline
 {\bfseries{}}}}}}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
{\bfseries{{\bfseries{{\bfseries{}} {\itshape Q.\+Promise}}}}}
\end{DoxyReturn}
}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5352}{}\doxysubsubsection{Cmd.\+reject}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5352}
{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{Проваливает промисы, возращенные в действиях.~\newline
 Используется в .act() для возврата с ошибкой.~\newline
 {\bfseries{
\begin{DoxyParams}{Parameters}
{\em $<$/strong$>$} & {\itshape Object} {\ttfamily reason} причина провала~\newline
 Вы можете определить метод to\+String() и свойство to\+String() объекта причины провала.~\newline
 {\bfseries{}}\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
{\bfseries{}} {\itshape Q.\+promise} проваленный промис
\end{DoxyReturn}
}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5353}{}\doxysubsubsection{Cmd.\+end}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5353}
{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{Завершает цепочку методов текущей подкоманды и возвращает экземпляр родительской команды.~\newline
 {\bfseries{\begin{DoxyReturn}{Returns}
{\itshape COA.\+Cmd} {\ttfamily parent} родительская команда
\end{DoxyReturn}
}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}\hypertarget{md_sfcode_node_modules_coa_README_ru_autotoc_md5354}{}\doxysubsection{Opt}\label{md_sfcode_node_modules_coa_README_ru_autotoc_md5354}
{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{{\bfseries{Параметр —~именованная сущность. У параметра может быть определено короткое или длинное имя для использования из командной строки.~\newline
 {\bfseries{ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}