react / wstein / node_modules / browserify / node_modules / module-deps / node_modules / detective / node_modules / escodegen / node_modules / optionator / node_modules / levn / lib / parse-string.js
80690 views// Generated by LiveScript 1.2.01(function(){2var reject, special, tokenRegex;3reject = require('prelude-ls').reject;4function consumeOp(tokens, op){5if (tokens[0] === op) {6return tokens.shift();7} else {8throw new Error("Expected '" + op + "', but got '" + tokens[0] + "' instead in " + JSON.stringify(tokens) + ".");9}10}11function maybeConsumeOp(tokens, op){12if (tokens[0] === op) {13return tokens.shift();14}15}16function consumeList(tokens, arg$, hasDelimiters){17var open, close, result, untilTest;18open = arg$[0], close = arg$[1];19if (hasDelimiters) {20consumeOp(tokens, open);21}22result = [];23untilTest = "," + (hasDelimiters ? close : '');24while (tokens.length && (hasDelimiters && tokens[0] !== close)) {25result.push(consumeElement(tokens, untilTest));26maybeConsumeOp(tokens, ',');27}28if (hasDelimiters) {29consumeOp(tokens, close);30}31return result;32}33function consumeArray(tokens, hasDelimiters){34return consumeList(tokens, ['[', ']'], hasDelimiters);35}36function consumeTuple(tokens, hasDelimiters){37return consumeList(tokens, ['(', ')'], hasDelimiters);38}39function consumeFields(tokens, hasDelimiters){40var result, untilTest, key;41if (hasDelimiters) {42consumeOp(tokens, '{');43}44result = {};45untilTest = "," + (hasDelimiters ? '}' : '');46while (tokens.length && (!hasDelimiters || tokens[0] !== '}')) {47key = consumeValue(tokens, ':');48consumeOp(tokens, ':');49result[key] = consumeElement(tokens, untilTest);50maybeConsumeOp(tokens, ',');51}52if (hasDelimiters) {53consumeOp(tokens, '}');54}55return result;56}57function consumeValue(tokens, untilTest){58var out;59untilTest == null && (untilTest = '');60out = '';61while (tokens.length && -1 === untilTest.indexOf(tokens[0])) {62out += tokens.shift();63}64return out;65}66function consumeElement(tokens, untilTest){67switch (tokens[0]) {68case '[':69return consumeArray(tokens, true);70case '(':71return consumeTuple(tokens, true);72case '{':73return consumeFields(tokens, true);74default:75return consumeValue(tokens, untilTest);76}77}78function consumeTopLevel(tokens, types, options){79var ref$, type, structure, origTokens, result, finalResult, x$, y$;80ref$ = types[0], type = ref$.type, structure = ref$.structure;81origTokens = tokens.concat();82if (!options.explicit && types.length === 1 && ((!type && structure) || (type === 'Array' || type === 'Object'))) {83result = structure === 'array' || type === 'Array'84? consumeArray(tokens, tokens[0] === '[')85: structure === 'tuple'86? consumeTuple(tokens, tokens[0] === '(')87: consumeFields(tokens, tokens[0] === '{');88finalResult = tokens.length ? consumeElement(structure === 'array' || type === 'Array'89? (x$ = origTokens, x$.unshift('['), x$.push(']'), x$)90: (y$ = origTokens, y$.unshift('('), y$.push(')'), y$)) : result;91} else {92finalResult = consumeElement(tokens);93}94return finalResult;95}96special = /\[\]\(\)}{:,/.source;97tokenRegex = RegExp('("(?:\\\\"|[^"])*")|(\'(?:\\\\\'|[^\'])*\')|(/(?:\\\\/|[^/])*/[a-zA-Z]*)|(#.*#)|([' + special + '])|([^\\s' + special + '](?:\\s*[^\\s' + special + ']+)*)|\\s*');98module.exports = function(types, string, options){99var tokens, node;100options == null && (options = {});101if (!options.explicit && types.length === 1 && types[0].type === 'String') {102return "'" + string.replace(/\\'/g, "\\\\'") + "'";103}104tokens = reject(not$, string.split(tokenRegex));105node = consumeTopLevel(tokens, types, options);106if (!node) {107throw new Error("Error parsing '" + string + "'.");108}109return node;110};111function not$(x){ return !x; }112}).call(this);113114115