UNPKG

clipanion

Version:

Type-safe CLI library / framework with no runtime dependencies

38 lines (35 loc) 1.3 kB
import { makeCommandOption, rerouteArguments } from './utils.mjs'; function Counter(descriptor, initialValueBase, optsBase) { const [initialValue, opts] = rerouteArguments(initialValueBase, optsBase !== null && optsBase !== void 0 ? optsBase : {}); const optNames = descriptor.split(`,`); const nameSet = new Set(optNames); return makeCommandOption({ definition(builder) { builder.addOption({ names: optNames, allowBinding: false, arity: 0, hidden: opts.hidden, description: opts.description, required: opts.required, }); }, transformer(builder, key, state) { let currentValue = initialValue; for (const { name, value } of state.options) { if (!nameSet.has(name)) continue; currentValue !== null && currentValue !== void 0 ? currentValue : (currentValue = 0); // Negated options reset the counter if (!value) { currentValue = 0; } else { currentValue += 1; } } return currentValue; }, }); } export { Counter };