COA — парсер параметров командной строки, позволяющий извлечь максимум пользы от формального API вашей программы. Как только вы опишете определение в терминах команд, параметров и аргументов, вы автоматически получите:
Справку для командной строки
API для использования программы как модуля в COA-совместимых программах
Автодополнение для командной строки
Прочие возможности
Широкий выбор настроек для параметров и аргументов, включая множественные значения, логические значения и обязательность параметров
Возможность асинхронного исполнения команд, используя промисы (используется библиотека Q)
Простота использования существующих команд как подмодулей для новых команд
Комбинированная валидация и анализ сложных значений
Примеры
require('coa').Cmd() // декларация команды верхнего уровня.name(process.argv[1]) // имя команды верхнего уровня, берем из имени программы.title('Жутко полезная утилита для командной строки') // название для использования в справке и сообщениях.helpful() // добавляем поддержку справки командной строки (-h, --help).opt() // добавляем параметр.name('version') // имя параметра для использования в API.title('Version') // текст для вывода в сообщениях.short('v') // короткое имя параметра: -v.long('version') // длинное имя параметра: --version.flag() // параметр не требует ввода значения.act(function(opts){// действия при вызове аргумента // результатом является вывод текстового сообщенияreturnJSON.parse(require('fs').readFileSync(__dirname+'/package.json')).version;}).end() // завершаем определение параметра и возвращаемся к определению верхнего уровня.cmd().name('subcommand').apply(require('./subcommand').COA).end() // загрузка подкоманды из модуля.cmd() // добавляем еще одну подкоманду.name('othercommand').title('Еще одна полезная подпрограмма').helpful().opt().name('input').title('input file, required').short('i').long('input').val(function(v){// функция-валидатор, также может использоваться для трансформации значений параметровreturnrequire('fs').createReadStream(v) }).req() // параметр является обязательным.end() // завершаем определение параметра и возвращаемся к определению команды.end() // завершаем определение подкоманды и возвращаемся к определению команды верхнего уровня.run(process.argv.slice(2));// разбираем process.argv и запускаем
API
Cmd
Команда — сущность верхнего уровня. У команды могут быть определены параметры и аргументы.
Cmd.api
Возвращает объект, который можно использовать в других программах. Подкоманды являются методами этого объекта.
@returns{Object}
Cmd.name
Определяет канонический идентификатор команды, используемый в вызовах API.
@paramString_name имя команды
@returnsCOA.Cmdthis экземпляр команды (для поддержки цепочки методов)
Cmd.title
Определяет название команды, используемый в текстовых сообщениях.
@paramString_title название команды
@returnsCOA.Cmdthis экземпляр команды (для поддержки цепочки методов)
Cmd.cmd
Создает новую подкоманду или добавляет ранее определенную подкоманду к текущей команде.
@paramCOA.Cmd[cmd] экземпляр ранее определенной подкоманды
@returnsCOA.Cmd экземпляр новой или ранее определенной подкоманды
Cmd.opt
Создает параметр для текущей команды.
@returnsCOA.Optnew экземпляр параметра
Cmd.arg
Создает аргумент для текущей команды.
@returnsCOA.Optnew экземпляр аргумента
Cmd.act
Добавляет (или создает) действие для текущей команды.
@paramFunctionact функция, выполняемая в контексте экземпляра текущей команды и принимающая следующие параметры:
- Objectopts параметры команды
- Arrayargs аргументы команды
- Objectres объект-аккумулятор результатов
Функция может вернуть проваленный промис из Cmd.reject (в случае ошибки) или любое другое значение, рассматриваемое как результат.
@param{Boolean} [force=false] флаг, назначающий немедленное исполнение вместо добавления к списку существующих действий
@returnsCOA.Cmdthis экземпляр команды (для поддержки цепочки методов)
Cmd.apply
Исполняет функцию с переданными аргументами в контексте экземпляра текущей команды.
@paramFunctionfn@paramArrayargs@returnsCOA.Cmdthis экземпляр команды (для поддержки цепочки методов)
Cmd.comp
Назначает кастомную функцию автодополнения для текущей команды.
@paramFunctionfn функция-генератор автодополнения, исполняемая в контексте текущей команды. Принимает параметры:
- Objectopts параметры
Может возвращать промис или любое другое значение, рассматриваемое как результат исполнения команды.
@returnsCOA.Cmdthis экземпляр команды (для поддержки цепочки методов)
Cmd.helpful
Ставит флаг поддержки справки командной строки, т.е. вызов команды с параметрами -h --help выводит справку по работе с командой.
@returnsCOA.Cmdthis экземпляр команды (для поддержки цепочки методов)
Cmd.completable
Добавляет поддержку автодополнения командной строки. Добавляется подкоманда "completion", которая выполняет все необходимые действия.
Может быть добавлен только для главной команды.
@returnsCOA.Cmdthis экземпляр команды (для поддержки цепочки методов)
Cmd.usage
Возвращает текст справки по использованию команды для текущего экземпляра.
@returnsStringusage Текст справки по использованию
Cmd.run
Разбирает аргументы из значения, возвращаемого NodeJS process.argv, и запускает текущую программу, т.е. вызывает process.exit после завершения всех действий.
@paramArrayargv@returnsCOA.Cmdthis экземпляр команды (для поддержки цепочки методов)
Cmd.invoke
Исполняет переданную (или текущую) команду с указанными параметрами и аргументами.
@paramString|Arraycmds подкоманда для исполнения (необязательно)
@paramObjectopts параметры, передаваемые команде (необязательно)
@paramObjectargs аргументы, передаваемые команде (необязательно)
@returnsQ.Promise
Cmd.reject
Проваливает промисы, возращенные в действиях.
Используется в .act() для возврата с ошибкой.
@paramObjectreason причина провала
Вы можете определить метод toString() и свойство toString() объекта причины провала.
@returnsQ.promise проваленный промис
Cmd.end
Завершает цепочку методов текущей подкоманды и возвращает экземпляр родительской команды.
@returnsCOA.Cmdparent родительская команда
Opt
Параметр — именованная сущность. У параметра может быть определено короткое или длинное имя для использования из командной строки.
@namespace@class Переданный параметр
Opt.name
Определяет канонический идентификатор параметра, используемый в вызовах API.
@paramString_name имя параметра
@returnsCOA.Optthis экземпляр параметра (для поддержки цепочки методов)
Opt.title
Определяет описание для параметра, используемое в текстовых сообщениях.
@paramString_title название параметра
@returnsCOA.Optthis экземпляр параметра (для поддержки цепочки методов)
Opt.short
Назначает ключ для короткого имени параметра, передаваемого из командной строки с одинарным дефисом (например, -v).
@paramString_short@returnsCOA.Optthis экземпляр параметра (для поддержки цепочки методов)
Opt.long
Назначает ключ для длинного имени параметра, передаваемого из командной строки с двойным дефисом (например, --version).
@paramString_long@returnsCOA.Optthis экземпляр параметра (для поддержки цепочки методов)
Opt.flag
Помечает параметр как логический, т.е. параметр не имеющий значения.
@returnsCOA.Optthis экземпляр параметра (для поддержки цепочки методов)
Opt.arr
Помечает параметр как принимающий множественные значения.
Иначе будет использовано последнее переданное значение параметра.
@returnsCOA.Optthis экземпляр параметра (для поддержки цепочки методов)
Opt.req
Помечает параметр как обязательный.
@returnsCOA.Optthis экземпляр параметра (для поддержки цепочки методов)
Opt.only
Интерпретирует параметр как команду, т.е. программа будет завершена сразу после выполнения параметра.
@returnsCOA.Optthis экземпляр параметра (для поддержки цепочки методов)
Opt.val
Назначает функцию валидации (или трансформации значения) для значения параметра.
Значение, полученное из командной строки, передается в функцию-валидатор прежде чем оно станет доступно из API.
Используется для валидации и трансформации введенных данных.
@paramFunction_val функция валидации, исполняемая в контексте экземпляра параметра и принимающая в качестве единственного параметра значение, полученное из командной строки
@returnsCOA.Optthis экземпляр параметра (для поддержки цепочки методов)
Opt.def
Назначает значение параметра по умолчанию. Это значение также передается в функцию валидации как обычное значение.
@paramObject_def@returnsCOA.Optthis экземпляр параметра (для поддержки цепочки методов)
Opt.input
Помечает параметр как принимающий ввод пользователя.
Позволяет использовать валидацию для STDIN.
@returns{COA.Opt}this экземпляр параметра (для поддержки цепочки методов)
Opt.output
Помечает параметр как вывод.
Позволяет использовать валидацию для STDOUT.
@returnsCOA.Optthis экземпляр параметра (для поддержки цепочки методов)
Opt.act
Добавляет (или создает) действие для текущего параметра команды. Это действие будет выполнено, если текущий параметр есть в списке полученных параметров (с любым значением).
@paramFunctionact функция, выполняемая в контексте экземпляра текущей команды и принимающая следующие параметры:
- Objectopts параметры команды
- Arrayargs аргументы команды
- Objectres объект-аккумулятор результатов
Функция может вернуть проваленный промис из Cmd.reject (в случае ошибки) или любое другое значение, рассматриваемое как результат.
@returnsCOA.Optthis экземпляр параметра (для поддержки цепочки методов)
Opt.comp
Назначает кастомную функцию автодополнения для текущей команды.
@paramFunctionfn функция-генератор автодоплнения, исполняемая в контексте экземпляра команды. Принимает параметры:
- Objectopts параметры автодополнения
Может возвращать промис или любое другое значение, рассматриваемое как результат исполнения команды.
@returnsCOA.Optthis экземпляр параметра (для поддержки цепочки методов)
Opt.end
Завершает цепочку методов текущего параметра и возвращает экземпляр родительской команды.
@returnsCOA.Cmdparent родительская команда
Arg
Аргумент — неименованная сущность.
Аргументы передаются из командной строки как список неименованных значений.
Arg.name
Определяет канонический идентификатор аргумента, используемый в вызовах API.
@paramString_name имя аргумента
@returnsCOA.Argthis экземпляр аргумента (для поддержки цепочки методов)
Arg.title
Определяет описание для аргумента, используемое в текстовых сообщениях.
@paramString_title описание аргумента
@returnsCOA.Argthis экземпляр аргумента (для поддержки цепочки методов)
Arg.arr
Помечает аргумент как принимающий множественные значения.
Иначе будет использовано последнее переданное значение аргумента.
@returnsCOA.Argthis экземпляр аргумента (для поддержки цепочки методов)
Arg.req
Помечает аргумент как обязательный.
@returnsCOA.Argthis экземпляр аргумента (для поддержки цепочки методов)
Arg.val
Назначает функцию валидации (или трансформации значения) для аргумента.
Значение, полученное из командной строки, передается в функцию-валидатор прежде чем оно станет доступно из API.
Используется для валидации и трансформации введенных данных.
@paramFunction_val функция валидации, исполняемая в контексте экземпляра аргумента и принимающая в качестве единственного параметра значение, полученное из командной строки
@returnsCOA.Optthis экземпляр аргумента (для поддержки цепочки методов)
Arg.def
Назначает дефолтное значение для аргумента. Дефолтное значение передается в функцию валидации как обычное значение.
@paramObject_def@returnsCOA.Argthis экземпляр аргумента (для поддержки цепочки методов)
Arg.output
Помечает параметр как вывод.
Позволяет назначить валидацию для STDOUT.
@returnsCOA.Argthis экземпляр аргумента (для поддержки цепочки методов)
Arg.comp
Назначает кастомную функцию автодополнения для текущего аргумента.
@paramFunctionfn функция-генератор автодоплнения, исполняемая в контексте текущей команды. Принимает параметры:
- Objectopts параметры Может возвращать промис или любое другое значение, рассматриваемое как результат исполнения команды.
@returnsCOA.Argthis экземпляр аргумента (для поддержки цепочки методов)
Arg.end
Завершает цепочку методов текущего аргумента и возвращает экземпляр родительской команды.
@returnsCOA.Cmdparent родительская команда