UNPKG

falcor-path-syntax

Version:
60 lines (47 loc) 1.61 kB
var TokenTypes = require('./../TokenTypes'); var E = require('./../exceptions'); var indexer = require('./indexer'); /** * The top level of the parse tree. This returns the generated path * from the tokenizer. */ module.exports = function head(tokenizer) { var token = tokenizer.next(); var state = {}; var out = []; while (!token.done) { switch (token.type) { case TokenTypes.token: var first = +token.token[0]; if (!isNaN(first)) { E.throwError(E.invalidIdentifier, tokenizer); } out[out.length] = token.token; break; // dotSeparators at the top level have no meaning case TokenTypes.dotSeparator: if (out.length === 0) { E.throwError(E.unexpectedToken, tokenizer); } break; // Spaces do nothing. case TokenTypes.space: // NOTE: Spaces at the top level are allowed. // titlesById .summary is a valid path. break; // Its time to decend the parse tree. case TokenTypes.openingBracket: indexer(tokenizer, token, state, out); break; default: E.throwError(E.unexpectedToken, tokenizer); break; } // Keep cycling through the tokenizer. token = tokenizer.next(); } if (out.length === 0) { E.throwError(E.invalidPath, tokenizer); } return out; };