123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704 |
- /* This file is automatically rebuilt by the Cesium build process. */
- import { c as createCommonjsModule } from './_commonjsHelpers-3aae1032.js';
- var jsep = createCommonjsModule(function (module, exports) {
- // JavaScript Expression Parser (JSEP) 0.3.5
- // JSEP may be freely distributed under the MIT License
- // https://ericsmekens.github.io/jsep/
- /*global module: true, exports: true, console: true */
- (function (root) {
- // Node Types
- // ----------
- // This is the full set of types that any JSEP node can be.
- // Store them here to save space when minified
- var COMPOUND = 'Compound',
- IDENTIFIER = 'Identifier',
- MEMBER_EXP = 'MemberExpression',
- LITERAL = 'Literal',
- THIS_EXP = 'ThisExpression',
- CALL_EXP = 'CallExpression',
- UNARY_EXP = 'UnaryExpression',
- BINARY_EXP = 'BinaryExpression',
- LOGICAL_EXP = 'LogicalExpression',
- CONDITIONAL_EXP = 'ConditionalExpression',
- ARRAY_EXP = 'ArrayExpression',
- PERIOD_CODE = 46, // '.'
- COMMA_CODE = 44, // ','
- SQUOTE_CODE = 39, // single quote
- DQUOTE_CODE = 34, // double quotes
- OPAREN_CODE = 40, // (
- CPAREN_CODE = 41, // )
- OBRACK_CODE = 91, // [
- CBRACK_CODE = 93, // ]
- QUMARK_CODE = 63, // ?
- SEMCOL_CODE = 59, // ;
- COLON_CODE = 58, // :
- throwError = function(message, index) {
- var error = new Error(message + ' at character ' + index);
- error.index = index;
- error.description = message;
- throw error;
- },
- // Operations
- // ----------
- // Set `t` to `true` to save space (when minified, not gzipped)
- t = true,
- // Use a quickly-accessible map to store all of the unary operators
- // Values are set to `true` (it really doesn't matter)
- unary_ops = {'-': t, '!': t, '~': t, '+': t},
- // Also use a map for the binary operations but set their values to their
- // binary precedence for quick reference:
- // see [Order of operations](http://en.wikipedia.org/wiki/Order_of_operations#Programming_language)
- binary_ops = {
- '||': 1, '&&': 2, '|': 3, '^': 4, '&': 5,
- '==': 6, '!=': 6, '===': 6, '!==': 6,
- '<': 7, '>': 7, '<=': 7, '>=': 7,
- '<<':8, '>>': 8, '>>>': 8,
- '+': 9, '-': 9,
- '*': 10, '/': 10, '%': 10
- },
- // Get return the longest key length of any object
- getMaxKeyLen = function(obj) {
- var max_len = 0, len;
- for(var key in obj) {
- if((len = key.length) > max_len && obj.hasOwnProperty(key)) {
- max_len = len;
- }
- }
- return max_len;
- },
- max_unop_len = getMaxKeyLen(unary_ops),
- max_binop_len = getMaxKeyLen(binary_ops),
- // Literals
- // ----------
- // Store the values to return for the various literals we may encounter
- literals = {
- 'true': true,
- 'false': false,
- 'null': null
- },
- // Except for `this`, which is special. This could be changed to something like `'self'` as well
- this_str = 'this',
- // Returns the precedence of a binary operator or `0` if it isn't a binary operator
- binaryPrecedence = function(op_val) {
- return binary_ops[op_val] || 0;
- },
- // Utility function (gets called from multiple places)
- // Also note that `a && b` and `a || b` are *logical* expressions, not binary expressions
- createBinaryExpression = function (operator, left, right) {
- var type = (operator === '||' || operator === '&&') ? LOGICAL_EXP : BINARY_EXP;
- return {
- type: type,
- operator: operator,
- left: left,
- right: right
- };
- },
- // `ch` is a character code in the next three functions
- isDecimalDigit = function(ch) {
- return (ch >= 48 && ch <= 57); // 0...9
- },
- isIdentifierStart = function(ch) {
- return (ch === 36) || (ch === 95) || // `$` and `_`
- (ch >= 65 && ch <= 90) || // A...Z
- (ch >= 97 && ch <= 122) || // a...z
- (ch >= 128 && !binary_ops[String.fromCharCode(ch)]); // any non-ASCII that is not an operator
- },
- isIdentifierPart = function(ch) {
- return (ch === 36) || (ch === 95) || // `$` and `_`
- (ch >= 65 && ch <= 90) || // A...Z
- (ch >= 97 && ch <= 122) || // a...z
- (ch >= 48 && ch <= 57) || // 0...9
- (ch >= 128 && !binary_ops[String.fromCharCode(ch)]); // any non-ASCII that is not an operator
- },
- // Parsing
- // -------
- // `expr` is a string with the passed in expression
- jsep = function(expr) {
- // `index` stores the character number we are currently at while `length` is a constant
- // All of the gobbles below will modify `index` as we move along
- var index = 0,
- charAtFunc = expr.charAt,
- charCodeAtFunc = expr.charCodeAt,
- exprI = function(i) { return charAtFunc.call(expr, i); },
- exprICode = function(i) { return charCodeAtFunc.call(expr, i); },
- length = expr.length,
- // Push `index` up to the next non-space character
- gobbleSpaces = function() {
- var ch = exprICode(index);
- // space or tab
- while(ch === 32 || ch === 9 || ch === 10 || ch === 13) {
- ch = exprICode(++index);
- }
- },
- // The main parsing function. Much of this code is dedicated to ternary expressions
- gobbleExpression = function() {
- var test = gobbleBinaryExpression(),
- consequent, alternate;
- gobbleSpaces();
- if(exprICode(index) === QUMARK_CODE) {
- // Ternary expression: test ? consequent : alternate
- index++;
- consequent = gobbleExpression();
- if(!consequent) {
- throwError('Expected expression', index);
- }
- gobbleSpaces();
- if(exprICode(index) === COLON_CODE) {
- index++;
- alternate = gobbleExpression();
- if(!alternate) {
- throwError('Expected expression', index);
- }
- return {
- type: CONDITIONAL_EXP,
- test: test,
- consequent: consequent,
- alternate: alternate
- };
- } else {
- throwError('Expected :', index);
- }
- } else {
- return test;
- }
- },
- // Search for the operation portion of the string (e.g. `+`, `===`)
- // Start by taking the longest possible binary operations (3 characters: `===`, `!==`, `>>>`)
- // and move down from 3 to 2 to 1 character until a matching binary operation is found
- // then, return that binary operation
- gobbleBinaryOp = function() {
- gobbleSpaces();
- var to_check = expr.substr(index, max_binop_len), tc_len = to_check.length;
- while(tc_len > 0) {
- // Don't accept a binary op when it is an identifier.
- // Binary ops that start with a identifier-valid character must be followed
- // by a non identifier-part valid character
- if(binary_ops.hasOwnProperty(to_check) && (
- !isIdentifierStart(exprICode(index)) ||
- (index+to_check.length< expr.length && !isIdentifierPart(exprICode(index+to_check.length)))
- )) {
- index += tc_len;
- return to_check;
- }
- to_check = to_check.substr(0, --tc_len);
- }
- return false;
- },
- // This function is responsible for gobbling an individual expression,
- // e.g. `1`, `1+2`, `a+(b*2)-Math.sqrt(2)`
- gobbleBinaryExpression = function() {
- var node, biop, prec, stack, biop_info, left, right, i, cur_biop;
- // First, try to get the leftmost thing
- // Then, check to see if there's a binary operator operating on that leftmost thing
- left = gobbleToken();
- biop = gobbleBinaryOp();
- // If there wasn't a binary operator, just return the leftmost node
- if(!biop) {
- return left;
- }
- // Otherwise, we need to start a stack to properly place the binary operations in their
- // precedence structure
- biop_info = { value: biop, prec: binaryPrecedence(biop)};
- right = gobbleToken();
- if(!right) {
- throwError("Expected expression after " + biop, index);
- }
- stack = [left, biop_info, right];
- // Properly deal with precedence using [recursive descent](http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm)
- while((biop = gobbleBinaryOp())) {
- prec = binaryPrecedence(biop);
- if(prec === 0) {
- break;
- }
- biop_info = { value: biop, prec: prec };
- cur_biop = biop;
- // Reduce: make a binary expression from the three topmost entries.
- while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {
- right = stack.pop();
- biop = stack.pop().value;
- left = stack.pop();
- node = createBinaryExpression(biop, left, right);
- stack.push(node);
- }
- node = gobbleToken();
- if(!node) {
- throwError("Expected expression after " + cur_biop, index);
- }
- stack.push(biop_info, node);
- }
- i = stack.length - 1;
- node = stack[i];
- while(i > 1) {
- node = createBinaryExpression(stack[i - 1].value, stack[i - 2], node);
- i -= 2;
- }
- return node;
- },
- // An individual part of a binary expression:
- // e.g. `foo.bar(baz)`, `1`, `"abc"`, `(a % 2)` (because it's in parenthesis)
- gobbleToken = function() {
- var ch, to_check, tc_len;
- gobbleSpaces();
- ch = exprICode(index);
- if(isDecimalDigit(ch) || ch === PERIOD_CODE) {
- // Char code 46 is a dot `.` which can start off a numeric literal
- return gobbleNumericLiteral();
- } else if(ch === SQUOTE_CODE || ch === DQUOTE_CODE) {
- // Single or double quotes
- return gobbleStringLiteral();
- } else if (ch === OBRACK_CODE) {
- return gobbleArray();
- } else {
- to_check = expr.substr(index, max_unop_len);
- tc_len = to_check.length;
- while(tc_len > 0) {
- // Don't accept an unary op when it is an identifier.
- // Unary ops that start with a identifier-valid character must be followed
- // by a non identifier-part valid character
- if(unary_ops.hasOwnProperty(to_check) && (
- !isIdentifierStart(exprICode(index)) ||
- (index+to_check.length < expr.length && !isIdentifierPart(exprICode(index+to_check.length)))
- )) {
- index += tc_len;
- return {
- type: UNARY_EXP,
- operator: to_check,
- argument: gobbleToken(),
- prefix: true
- };
- }
- to_check = to_check.substr(0, --tc_len);
- }
- if (isIdentifierStart(ch) || ch === OPAREN_CODE) { // open parenthesis
- // `foo`, `bar.baz`
- return gobbleVariable();
- }
- }
- return false;
- },
- // Parse simple numeric literals: `12`, `3.4`, `.5`. Do this by using a string to
- // keep track of everything in the numeric literal and then calling `parseFloat` on that string
- gobbleNumericLiteral = function() {
- var number = '', ch, chCode;
- while(isDecimalDigit(exprICode(index))) {
- number += exprI(index++);
- }
- if(exprICode(index) === PERIOD_CODE) { // can start with a decimal marker
- number += exprI(index++);
- while(isDecimalDigit(exprICode(index))) {
- number += exprI(index++);
- }
- }
- ch = exprI(index);
- if(ch === 'e' || ch === 'E') { // exponent marker
- number += exprI(index++);
- ch = exprI(index);
- if(ch === '+' || ch === '-') { // exponent sign
- number += exprI(index++);
- }
- while(isDecimalDigit(exprICode(index))) { //exponent itself
- number += exprI(index++);
- }
- if(!isDecimalDigit(exprICode(index-1)) ) {
- throwError('Expected exponent (' + number + exprI(index) + ')', index);
- }
- }
- chCode = exprICode(index);
- // Check to make sure this isn't a variable name that start with a number (123abc)
- if(isIdentifierStart(chCode)) {
- throwError('Variable names cannot start with a number (' +
- number + exprI(index) + ')', index);
- } else if(chCode === PERIOD_CODE) {
- throwError('Unexpected period', index);
- }
- return {
- type: LITERAL,
- value: parseFloat(number),
- raw: number
- };
- },
- // Parses a string literal, staring with single or double quotes with basic support for escape codes
- // e.g. `"hello world"`, `'this is\nJSEP'`
- gobbleStringLiteral = function() {
- var str = '', quote = exprI(index++), closed = false, ch;
- while(index < length) {
- ch = exprI(index++);
- if(ch === quote) {
- closed = true;
- break;
- } else if(ch === '\\') {
- // Check for all of the common escape codes
- ch = exprI(index++);
- switch(ch) {
- case 'n': str += '\n'; break;
- case 'r': str += '\r'; break;
- case 't': str += '\t'; break;
- case 'b': str += '\b'; break;
- case 'f': str += '\f'; break;
- case 'v': str += '\x0B'; break;
- default : str += ch;
- }
- } else {
- str += ch;
- }
- }
- if(!closed) {
- throwError('Unclosed quote after "'+str+'"', index);
- }
- return {
- type: LITERAL,
- value: str,
- raw: quote + str + quote
- };
- },
- // Gobbles only identifiers
- // e.g.: `foo`, `_value`, `$x1`
- // Also, this function checks if that identifier is a literal:
- // (e.g. `true`, `false`, `null`) or `this`
- gobbleIdentifier = function() {
- var ch = exprICode(index), start = index, identifier;
- if(isIdentifierStart(ch)) {
- index++;
- } else {
- throwError('Unexpected ' + exprI(index), index);
- }
- while(index < length) {
- ch = exprICode(index);
- if(isIdentifierPart(ch)) {
- index++;
- } else {
- break;
- }
- }
- identifier = expr.slice(start, index);
- if(literals.hasOwnProperty(identifier)) {
- return {
- type: LITERAL,
- value: literals[identifier],
- raw: identifier
- };
- } else if(identifier === this_str) {
- return { type: THIS_EXP };
- } else {
- return {
- type: IDENTIFIER,
- name: identifier
- };
- }
- },
- // Gobbles a list of arguments within the context of a function call
- // or array literal. This function also assumes that the opening character
- // `(` or `[` has already been gobbled, and gobbles expressions and commas
- // until the terminator character `)` or `]` is encountered.
- // e.g. `foo(bar, baz)`, `my_func()`, or `[bar, baz]`
- gobbleArguments = function(termination) {
- var ch_i, args = [], node, closed = false;
- var separator_count = 0;
- while(index < length) {
- gobbleSpaces();
- ch_i = exprICode(index);
- if(ch_i === termination) { // done parsing
- closed = true;
- index++;
- if(termination === CPAREN_CODE && separator_count && separator_count >= args.length){
- throwError('Unexpected token ' + String.fromCharCode(termination), index);
- }
- break;
- } else if (ch_i === COMMA_CODE) { // between expressions
- index++;
- separator_count++;
- if(separator_count !== args.length) { // missing argument
- if(termination === CPAREN_CODE) {
- throwError('Unexpected token ,', index);
- }
- else if(termination === CBRACK_CODE) {
- for(var arg = args.length; arg< separator_count; arg++) {
- args.push(null);
- }
- }
- }
- } else {
- node = gobbleExpression();
- if(!node || node.type === COMPOUND) {
- throwError('Expected comma', index);
- }
- args.push(node);
- }
- }
- if (!closed) {
- throwError('Expected ' + String.fromCharCode(termination), index);
- }
- return args;
- },
- // Gobble a non-literal variable name. This variable name may include properties
- // e.g. `foo`, `bar.baz`, `foo['bar'].baz`
- // It also gobbles function calls:
- // e.g. `Math.acos(obj.angle)`
- gobbleVariable = function() {
- var ch_i, node;
- ch_i = exprICode(index);
- if(ch_i === OPAREN_CODE) {
- node = gobbleGroup();
- } else {
- node = gobbleIdentifier();
- }
- gobbleSpaces();
- ch_i = exprICode(index);
- while(ch_i === PERIOD_CODE || ch_i === OBRACK_CODE || ch_i === OPAREN_CODE) {
- index++;
- if(ch_i === PERIOD_CODE) {
- gobbleSpaces();
- node = {
- type: MEMBER_EXP,
- computed: false,
- object: node,
- property: gobbleIdentifier()
- };
- } else if(ch_i === OBRACK_CODE) {
- node = {
- type: MEMBER_EXP,
- computed: true,
- object: node,
- property: gobbleExpression()
- };
- gobbleSpaces();
- ch_i = exprICode(index);
- if(ch_i !== CBRACK_CODE) {
- throwError('Unclosed [', index);
- }
- index++;
- } else if(ch_i === OPAREN_CODE) {
- // A function call is being made; gobble all the arguments
- node = {
- type: CALL_EXP,
- 'arguments': gobbleArguments(CPAREN_CODE),
- callee: node
- };
- }
- gobbleSpaces();
- ch_i = exprICode(index);
- }
- return node;
- },
- // Responsible for parsing a group of things within parentheses `()`
- // This function assumes that it needs to gobble the opening parenthesis
- // and then tries to gobble everything within that parenthesis, assuming
- // that the next thing it should see is the close parenthesis. If not,
- // then the expression probably doesn't have a `)`
- gobbleGroup = function() {
- index++;
- var node = gobbleExpression();
- gobbleSpaces();
- if(exprICode(index) === CPAREN_CODE) {
- index++;
- return node;
- } else {
- throwError('Unclosed (', index);
- }
- },
- // Responsible for parsing Array literals `[1, 2, 3]`
- // This function assumes that it needs to gobble the opening bracket
- // and then tries to gobble the expressions as arguments.
- gobbleArray = function() {
- index++;
- return {
- type: ARRAY_EXP,
- elements: gobbleArguments(CBRACK_CODE)
- };
- },
- nodes = [], ch_i, node;
- while(index < length) {
- ch_i = exprICode(index);
- // Expressions can be separated by semicolons, commas, or just inferred without any
- // separators
- if(ch_i === SEMCOL_CODE || ch_i === COMMA_CODE) {
- index++; // ignore separators
- } else {
- // Try to gobble each expression individually
- if((node = gobbleExpression())) {
- nodes.push(node);
- // If we weren't able to find a binary expression and are out of room, then
- // the expression passed in probably has too much
- } else if(index < length) {
- throwError('Unexpected "' + exprI(index) + '"', index);
- }
- }
- }
- // If there's only one expression just try returning the expression
- if(nodes.length === 1) {
- return nodes[0];
- } else {
- return {
- type: COMPOUND,
- body: nodes
- };
- }
- };
- // To be filled in by the template
- jsep.version = '0.3.5';
- jsep.toString = function() { return 'JavaScript Expression Parser (JSEP) v' + jsep.version; };
- /**
- * @method jsep.addUnaryOp
- * @param {string} op_name The name of the unary op to add
- * @return jsep
- */
- jsep.addUnaryOp = function(op_name) {
- max_unop_len = Math.max(op_name.length, max_unop_len);
- unary_ops[op_name] = t; return this;
- };
- /**
- * @method jsep.addBinaryOp
- * @param {string} op_name The name of the binary op to add
- * @param {number} precedence The precedence of the binary op (can be a float)
- * @return jsep
- */
- jsep.addBinaryOp = function(op_name, precedence) {
- max_binop_len = Math.max(op_name.length, max_binop_len);
- binary_ops[op_name] = precedence;
- return this;
- };
- /**
- * @method jsep.addLiteral
- * @param {string} literal_name The name of the literal to add
- * @param {*} literal_value The value of the literal
- * @return jsep
- */
- jsep.addLiteral = function(literal_name, literal_value) {
- literals[literal_name] = literal_value;
- return this;
- };
- /**
- * @method jsep.removeUnaryOp
- * @param {string} op_name The name of the unary op to remove
- * @return jsep
- */
- jsep.removeUnaryOp = function(op_name) {
- delete unary_ops[op_name];
- if(op_name.length === max_unop_len) {
- max_unop_len = getMaxKeyLen(unary_ops);
- }
- return this;
- };
- /**
- * @method jsep.removeAllUnaryOps
- * @return jsep
- */
- jsep.removeAllUnaryOps = function() {
- unary_ops = {};
- max_unop_len = 0;
- return this;
- };
- /**
- * @method jsep.removeBinaryOp
- * @param {string} op_name The name of the binary op to remove
- * @return jsep
- */
- jsep.removeBinaryOp = function(op_name) {
- delete binary_ops[op_name];
- if(op_name.length === max_binop_len) {
- max_binop_len = getMaxKeyLen(binary_ops);
- }
- return this;
- };
- /**
- * @method jsep.removeAllBinaryOps
- * @return jsep
- */
- jsep.removeAllBinaryOps = function() {
- binary_ops = {};
- max_binop_len = 0;
- return this;
- };
- /**
- * @method jsep.removeLiteral
- * @param {string} literal_name The name of the literal to remove
- * @return jsep
- */
- jsep.removeLiteral = function(literal_name) {
- delete literals[literal_name];
- return this;
- };
- /**
- * @method jsep.removeAllLiterals
- * @return jsep
- */
- jsep.removeAllLiterals = function() {
- literals = {};
- return this;
- };
- // In desktop environments, have a way to restore the old value for `jsep`
- {
- // In Node.JS environments
- if (module.exports) {
- exports = module.exports = jsep;
- } else {
- exports.parse = jsep;
- }
- }
- }());
- });
- export { jsep as default };
|