index.js 1.01 KB
var minimist = require('minimist');

module.exports = function parse (args, opts) {
    var level = 0, index;
    var args_ = [];
    
    for (var i = 0; i < args.length; i++) {
        if (typeof args[i] === 'string' && /^\[/.test(args[i])) {
            if (level ++ === 0) {
                index = i;
            }
        }
        if (typeof args[i] === 'string' && /\]$/.test(args[i])) {
            if (-- level > 0) continue;
            
            var sub = args.slice(index, i + 1);
            if (typeof sub[0] === 'string') {
                sub[0] = sub[0].replace(/^\[/, '');
            }
            if (sub[0] === '') sub.shift();
            
            var n = sub.length - 1;
            if (typeof sub[n] === 'string') {
                sub[n] = sub[n].replace(/\]$/, '');
            }
            if (sub[n] === '') sub.pop();
            
            args_.push(parse(sub));
        }
        else if (level === 0) args_.push(args[i]);
    }
    
    var argv = minimist(args_, opts);
    return argv;
};