UNPKG

jl

Version:

Command-line JSON manipulation library

57 lines (45 loc) 1.83 kB
/** * Штука, которая парсит аргумент командной строки и создаёт функцию по следующим * правилам: * 1. Для аргументов вида ~\s*\{.*\}\s*~ код функции генерится как указано внутри {} * 2. Для всего остального генерится функция вида return DEFAULT_VARIABLE.$arg * @returns {undefined} */ function ArgFunction(string, args, defaultVariableName, options) { options = options || {}; if(options.ignoreExceptions === undefined) options.ignoreExceptions = true; var m = string.match(/^\s*\{([\s\S]*)\}\s*$/); if(m) { // просто вариант - юзер указал весь код функции целиком var code = m[1] + (options.suffix || ''); try { return new Function(args.join(','), code); } catch (e) { throw new Error(e.message + ': ' + code); } } /* * сложный вариант: юзер указал что-то вроде "field.subfield" * надо конвертнуть это в function(args..) { return $defaultVariableName.field.subfield } */ var src = 'return ' + defaultVariableName; if(string[0] === '[') { // не делаем ничего src += string; } else { if(string !== '') { src += '.'; src += string; } } if(options.ignoreExceptions) { src = 'try { ' + src + ' } catch(e) { }'; } return new Function(args.join(','), src); }; //console.log((new ArgFunction('hello.world', ['r'], 'r')).toString()); //console.log((new ArgFunction('hello["world"]', ['r'], 'r')).toString()); //console.log((new ArgFunction('["world"]', ['r'], 'r')).toString()); //console.log((new ArgFunction('{return r.drop}', ['r'], 'r')).toString()); exports.ArgFunction = ArgFunction;