UNPKG

2.05 kBJavaScriptView Raw
1import * as util from '../util';
2
3// tokens in the query language
4const tokens = {
5 metaChar: '[\\!\\"\\#\\$\\%\\&\\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]', // chars we need to escape in let names, etc
6 comparatorOp: '=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=', // binary comparison op (used in data selectors)
7 boolOp: '\\?|\\!|\\^', // boolean (unary) operators (used in data selectors)
8 string: '"(?:\\\\"|[^"])*"' + '|' + "'(?:\\\\'|[^'])*'", // string literals (used in data selectors) -- doublequotes | singlequotes
9 number: util.regex.number, // number literal (used in data selectors) --- e.g. 0.1234, 1234, 12e123
10 meta: 'degree|indegree|outdegree', // allowed metadata fields (i.e. allowed functions to use from Collection)
11 separator: '\\s*,\\s*', // queries are separated by commas, e.g. edge[foo = 'bar'], node.someClass
12 descendant: '\\s+',
13 child: '\\s+>\\s+',
14 subject: '\\$',
15 group: 'node|edge|\\*',
16 directedEdge: '\\s+->\\s+',
17 undirectedEdge: '\\s+<->\\s+'
18};
19tokens.variable = '(?:[\\w-.]|(?:\\\\' + tokens.metaChar + '))+'; // a variable name can have letters, numbers, dashes, and periods
20tokens.className = '(?:[\\w-]|(?:\\\\' + tokens.metaChar + '))+'; // a class name has the same rules as a variable except it can't have a '.' in the name
21tokens.value = tokens.string + '|' + tokens.number; // a value literal, either a string or number
22tokens.id = tokens.variable; // an element id (follows variable conventions)
23
24(function(){
25 let ops, op, i;
26
27 // add @ variants to comparatorOp
28 ops = tokens.comparatorOp.split( '|' );
29 for( i = 0; i < ops.length; i++ ){
30 op = ops[ i ];
31 tokens.comparatorOp += '|@' + op;
32 }
33
34 // add ! variants to comparatorOp
35 ops = tokens.comparatorOp.split( '|' );
36 for( i = 0; i < ops.length; i++ ){
37 op = ops[ i ];
38
39 if( op.indexOf( '!' ) >= 0 ){ continue; } // skip ops that explicitly contain !
40 if( op === '=' ){ continue; } // skip = b/c != is explicitly defined
41
42 tokens.comparatorOp += '|\\!' + op;
43 }
44})();
45
46export default tokens;