react / wstein / node_modules / browserify / node_modules / module-deps / node_modules / detective / node_modules / escodegen / node_modules / optionator / node_modules / levn / lib / parse.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, delimiters, hasDelimiters){17var result;18if (hasDelimiters) {19consumeOp(tokens, delimiters[0]);20}21result = [];22while (tokens.length && tokens[0] !== delimiters[1]) {23result.push(consumeElement(tokens));24maybeConsumeOp(tokens, ',');25}26if (hasDelimiters) {27consumeOp(tokens, delimiters[1]);28}29return result;30}31function consumeArray(tokens, hasDelimiters){32return consumeList(tokens, ['[', ']'], hasDelimiters);33}34function consumeTuple(tokens, hasDelimiters){35return consumeList(tokens, ['(', ')'], hasDelimiters);36}37function consumeFields(tokens, hasDelimiters){38var result, key;39if (hasDelimiters) {40consumeOp(tokens, '{');41}42result = {};43while (tokens.length && (!hasDelimiters || tokens[0] !== '}')) {44key = tokens.shift();45consumeOp(tokens, ':');46result[key] = consumeElement(tokens);47maybeConsumeOp(tokens, ',');48}49if (hasDelimiters) {50consumeOp(tokens, '}');51}52return result;53}54function consumeElement(tokens){55switch (tokens[0]) {56case '[':57return consumeArray(tokens, true);58case '(':59return consumeTuple(tokens, true);60case '{':61return consumeFields(tokens, true);62default:63return tokens.shift();64}65}66function consumeTopLevel(tokens, types){67var ref$, type, structure, origTokens, result, finalResult, x$, y$;68ref$ = types[0], type = ref$.type, structure = ref$.structure;69origTokens = tokens.concat();70if (types.length === 1 && (structure || (type === 'Array' || type === 'Object'))) {71result = structure === 'array' || type === 'Array'72? consumeArray(tokens, tokens[0] === '[')73: structure === 'tuple'74? consumeTuple(tokens, tokens[0] === '(')75: consumeFields(tokens, tokens[0] === '{');76finalResult = tokens.length ? consumeElement(structure === 'array' || type === 'Array'77? (x$ = origTokens, x$.unshift('['), x$.push(']'), x$)78: (y$ = origTokens, y$.unshift('('), y$.push(')'), y$)) : result;79} else {80finalResult = consumeElement(tokens);81}82if (tokens.length && origTokens.length) {83throw new Error("Unable to parse " + JSON.stringify(origTokens) + " of type " + JSON.stringify(types) + ".");84} else {85return finalResult;86}87}88special = /\[\]\(\)}{:,/.source;89tokenRegex = RegExp('("(?:[^"]|\\\\")*")|(\'(?:[^\']|\\\\\')*\')|(#.*#)|(/(?:\\\\/|[^/])*/[gimy]*)|([' + special + '])|([^\\s' + special + ']+)|\\s*');90module.exports = function(string, types){91var tokens, node;92tokens = reject(function(it){93return !it || /^\s+$/.test(it);94}, string.split(tokenRegex));95node = consumeTopLevel(tokens, types);96if (!node) {97throw new Error("Error parsing '" + string + "'.");98}99return node;100};101}).call(this);102103104