@sap-ux/cds-annotation-parser 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +74 -0
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +10 -0
- package/dist/constants.js.map +1 -0
- package/dist/find-annotation-node.d.ts +40 -0
- package/dist/find-annotation-node.d.ts.map +1 -0
- package/dist/find-annotation-node.js +135 -0
- package/dist/find-annotation-node.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/factory.d.ts +6 -0
- package/dist/parser/factory.d.ts.map +1 -0
- package/dist/parser/factory.js +13 -0
- package/dist/parser/factory.js.map +1 -0
- package/dist/parser/index.d.ts +11 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +17 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/parser.d.ts +242 -0
- package/dist/parser/parser.d.ts.map +1 -0
- package/dist/parser/parser.js +385 -0
- package/dist/parser/parser.js.map +1 -0
- package/dist/parser/tokens.d.ts +103 -0
- package/dist/parser/tokens.d.ts.map +1 -0
- package/dist/parser/tokens.js +287 -0
- package/dist/parser/tokens.js.map +1 -0
- package/dist/transformer/annotation-ast-nodes.d.ts +178 -0
- package/dist/transformer/annotation-ast-nodes.d.ts.map +1 -0
- package/dist/transformer/annotation-ast-nodes.js +69 -0
- package/dist/transformer/annotation-ast-nodes.js.map +1 -0
- package/dist/transformer/ast.d.ts +6 -0
- package/dist/transformer/ast.d.ts.map +1 -0
- package/dist/transformer/ast.js +1227 -0
- package/dist/transformer/ast.js.map +1 -0
- package/dist/transformer/expressions.d.ts +87 -0
- package/dist/transformer/expressions.d.ts.map +1 -0
- package/dist/transformer/expressions.js +548 -0
- package/dist/transformer/expressions.js.map +1 -0
- package/dist/transformer/index.d.ts +5 -0
- package/dist/transformer/index.d.ts.map +1 -0
- package/dist/transformer/index.js +42 -0
- package/dist/transformer/index.js.map +1 -0
- package/dist/transformer/range.d.ts +20 -0
- package/dist/transformer/range.d.ts.map +1 -0
- package/dist/transformer/range.js +31 -0
- package/dist/transformer/range.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +17 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.containsIncorrectExpressions = exports.positionIsInExpressionWhiteSpace = exports.rebuildNumberSigns = exports.buildExpression = exports.getEdmOperatorMap = exports.operatorMap = exports.operatorImageMap = exports.OPERATOR_NAME_NOT_BETWEEN = exports.OPERATOR_NAME_BETWEEN = exports.OPERATOR_NAME_NOT_LIKE = exports.OPERATOR_NAME_LIKE = exports.OPERATOR_NAME_IS_NOT_NULL = exports.OPERATOR_NAME_IS_NULL = exports.OPERATOR_NAME_OR = exports.OPERATOR_NAME_AND = exports.OPERATOR_NAME_NOT = exports.OPERATOR_NAME_UNARY_MINUS = exports.OPERATOR_NAME_DIVIDE = exports.OPERATOR_NAME_MULTIPLY = exports.OPERATOR_NAME_MINUS = exports.OPERATOR_NAME_PLUS = exports.OPERATOR_NAME_CONCAT = exports.OPERATOR_NAME_TERNARY = exports.OPERATOR_NAME_LESS_OR_EQUAL = exports.OPERATOR_NAME_LESS_THEN = exports.OPERATOR_NAME_GREATER_OR_EQUAL = exports.OPERATOR_NAME_GREATER_THEN = exports.OPERATOR_NAME_EQUAL = exports.OPERATOR_NAME_NOT_EQUAL = void 0;
|
|
4
|
+
const odata_annotation_core_1 = require("@sap-ux/odata-annotation-core");
|
|
5
|
+
const annotation_ast_nodes_1 = require("./annotation-ast-nodes");
|
|
6
|
+
exports.OPERATOR_NAME_NOT_EQUAL = 'not-equal'; // '!=' or '<>'
|
|
7
|
+
exports.OPERATOR_NAME_EQUAL = 'equal'; // '=';
|
|
8
|
+
exports.OPERATOR_NAME_GREATER_THEN = 'greater-then'; // '>';
|
|
9
|
+
exports.OPERATOR_NAME_GREATER_OR_EQUAL = 'greater-or-equal'; // '>=';
|
|
10
|
+
exports.OPERATOR_NAME_LESS_THEN = 'less-then'; // '<';
|
|
11
|
+
exports.OPERATOR_NAME_LESS_OR_EQUAL = 'less-or-equal'; // '<=';
|
|
12
|
+
exports.OPERATOR_NAME_TERNARY = 'ternary'; // '?' <trueValue> : <falseValue>;
|
|
13
|
+
exports.OPERATOR_NAME_CONCAT = 'concat'; // '||';
|
|
14
|
+
exports.OPERATOR_NAME_PLUS = 'plus'; // '+';
|
|
15
|
+
exports.OPERATOR_NAME_MINUS = 'minus'; // '-';
|
|
16
|
+
exports.OPERATOR_NAME_MULTIPLY = 'multiply'; // '*';
|
|
17
|
+
exports.OPERATOR_NAME_DIVIDE = 'divide'; // '/';
|
|
18
|
+
exports.OPERATOR_NAME_UNARY_MINUS = 'unary-minus'; // '-';
|
|
19
|
+
exports.OPERATOR_NAME_NOT = 'not'; // 'NOT'
|
|
20
|
+
exports.OPERATOR_NAME_AND = 'and'; // 'AND';
|
|
21
|
+
exports.OPERATOR_NAME_OR = 'or'; // 'OR';
|
|
22
|
+
exports.OPERATOR_NAME_IS_NULL = 'is-null'; // 'IS NULL';
|
|
23
|
+
exports.OPERATOR_NAME_IS_NOT_NULL = 'is-not-null'; // 'IS NOT NULL';
|
|
24
|
+
exports.OPERATOR_NAME_LIKE = 'like'; // 'like';
|
|
25
|
+
exports.OPERATOR_NAME_NOT_LIKE = 'not-like'; // 'not like';
|
|
26
|
+
exports.OPERATOR_NAME_BETWEEN = 'between'; // 'BETWEEN <lower> AND <higher>';
|
|
27
|
+
exports.OPERATOR_NAME_NOT_BETWEEN = 'not-between'; // 'NOT BETWEEN <lower> AND <higher>';
|
|
28
|
+
// /!=?|==?|<>|>=?|<=?|\?|:|\|\||\+|-|\*|\/|\bIS NULL\b|\bIS NOT NULL\b|\bNOT LIKE\b|\bLIKE\b|\bNOT BETWEEN\b|\bBETWEEN\b|\bNOT\b|\bAND\b|\bOR\b/i
|
|
29
|
+
// operator image can stand for multiple operators, e.g. '-' can stand for negation operator or minus, list unary operators first
|
|
30
|
+
exports.operatorImageMap = {
|
|
31
|
+
'!=': [exports.OPERATOR_NAME_NOT_EQUAL],
|
|
32
|
+
'<>': [exports.OPERATOR_NAME_NOT_EQUAL],
|
|
33
|
+
'=': [exports.OPERATOR_NAME_EQUAL],
|
|
34
|
+
'>': [exports.OPERATOR_NAME_GREATER_THEN],
|
|
35
|
+
'>=': [exports.OPERATOR_NAME_GREATER_OR_EQUAL],
|
|
36
|
+
'<': [exports.OPERATOR_NAME_LESS_THEN],
|
|
37
|
+
'<=': [exports.OPERATOR_NAME_LESS_OR_EQUAL],
|
|
38
|
+
'?': [exports.OPERATOR_NAME_TERNARY],
|
|
39
|
+
':': [],
|
|
40
|
+
'||': [exports.OPERATOR_NAME_CONCAT],
|
|
41
|
+
'+': [exports.OPERATOR_NAME_PLUS],
|
|
42
|
+
'-': [exports.OPERATOR_NAME_UNARY_MINUS, exports.OPERATOR_NAME_MINUS],
|
|
43
|
+
'*': [exports.OPERATOR_NAME_MULTIPLY],
|
|
44
|
+
'/': [exports.OPERATOR_NAME_DIVIDE],
|
|
45
|
+
NOT: [exports.OPERATOR_NAME_NOT],
|
|
46
|
+
AND: [exports.OPERATOR_NAME_AND],
|
|
47
|
+
OR: [exports.OPERATOR_NAME_OR],
|
|
48
|
+
'IS NULL': [exports.OPERATOR_NAME_IS_NULL],
|
|
49
|
+
'IS NOT NULL': [exports.OPERATOR_NAME_IS_NOT_NULL],
|
|
50
|
+
LIKE: [exports.OPERATOR_NAME_LIKE],
|
|
51
|
+
'NOT LIKE': [exports.OPERATOR_NAME_NOT_LIKE],
|
|
52
|
+
BETWEEN: [exports.OPERATOR_NAME_BETWEEN],
|
|
53
|
+
'NOT BETWEEN': [exports.OPERATOR_NAME_NOT_BETWEEN]
|
|
54
|
+
};
|
|
55
|
+
const UNARY_OPERATOR_KIND_PREFIX = 'prefix';
|
|
56
|
+
const UNARY_OPERATOR_KIND_SUFFIX = 'suffix';
|
|
57
|
+
const OPERATOR_TYPE_UNARY = 'unary-operator';
|
|
58
|
+
const OPERATOR_TYPE_BINARY = 'binary-operator';
|
|
59
|
+
const OPERATOR_TYPE_TERNARY = 'ternary-operator';
|
|
60
|
+
// Edm names see: http://docs.oasis-open.org/odata/odata-csdl-xml/v4.01/odata-csdl-xml-v4.01.html#sec_ComparisonandLogicalOperators ff
|
|
61
|
+
// operator precedence see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_precedence and
|
|
62
|
+
// https://help.sap.com/docs/SAP_HANA_PLATFORM/4fe29514fd584807ac9f2a04f6754767/20a380977519101494ceddd944e87527.html
|
|
63
|
+
exports.operatorMap = {
|
|
64
|
+
[exports.OPERATOR_NAME_UNARY_MINUS]: {
|
|
65
|
+
name: exports.OPERATOR_NAME_UNARY_MINUS,
|
|
66
|
+
type: OPERATOR_TYPE_UNARY,
|
|
67
|
+
kind: UNARY_OPERATOR_KIND_PREFIX,
|
|
68
|
+
edmName: "Neg" /* Edm.Neg */,
|
|
69
|
+
precedence: 14
|
|
70
|
+
},
|
|
71
|
+
[exports.OPERATOR_NAME_MULTIPLY]: {
|
|
72
|
+
name: exports.OPERATOR_NAME_MULTIPLY,
|
|
73
|
+
type: OPERATOR_TYPE_BINARY,
|
|
74
|
+
edmName: "Mul" /* Edm.Mul */,
|
|
75
|
+
precedence: 12
|
|
76
|
+
},
|
|
77
|
+
[exports.OPERATOR_NAME_DIVIDE]: {
|
|
78
|
+
name: exports.OPERATOR_NAME_DIVIDE,
|
|
79
|
+
type: OPERATOR_TYPE_BINARY,
|
|
80
|
+
edmName: "Div" /* Edm.Div */,
|
|
81
|
+
precedence: 12
|
|
82
|
+
},
|
|
83
|
+
[exports.OPERATOR_NAME_PLUS]: { name: exports.OPERATOR_NAME_PLUS, type: OPERATOR_TYPE_BINARY, edmName: "Add" /* Edm.Add */, precedence: 11 },
|
|
84
|
+
[exports.OPERATOR_NAME_MINUS]: { name: exports.OPERATOR_NAME_MINUS, type: OPERATOR_TYPE_BINARY, edmName: "Sub" /* Edm.Sub */, precedence: 11 },
|
|
85
|
+
[exports.OPERATOR_NAME_CONCAT]: {
|
|
86
|
+
name: exports.OPERATOR_NAME_CONCAT,
|
|
87
|
+
type: OPERATOR_TYPE_BINARY,
|
|
88
|
+
edmName: 'odata.concat',
|
|
89
|
+
precedence: 10
|
|
90
|
+
},
|
|
91
|
+
// support via Edm.If and Edm.Null if cds-compilers edmx generation does
|
|
92
|
+
[exports.OPERATOR_NAME_IS_NULL]: {
|
|
93
|
+
name: exports.OPERATOR_NAME_IS_NULL,
|
|
94
|
+
type: OPERATOR_TYPE_UNARY,
|
|
95
|
+
kind: UNARY_OPERATOR_KIND_SUFFIX,
|
|
96
|
+
precedence: 9
|
|
97
|
+
},
|
|
98
|
+
[exports.OPERATOR_NAME_IS_NOT_NULL]: {
|
|
99
|
+
name: exports.OPERATOR_NAME_IS_NOT_NULL,
|
|
100
|
+
type: OPERATOR_TYPE_UNARY,
|
|
101
|
+
kind: UNARY_OPERATOR_KIND_SUFFIX,
|
|
102
|
+
precedence: 9,
|
|
103
|
+
edmNot: true
|
|
104
|
+
},
|
|
105
|
+
[exports.OPERATOR_NAME_LIKE]: {
|
|
106
|
+
name: exports.OPERATOR_NAME_LIKE,
|
|
107
|
+
type: OPERATOR_TYPE_BINARY,
|
|
108
|
+
edmName: 'odata.matchesPattern',
|
|
109
|
+
precedence: 9
|
|
110
|
+
},
|
|
111
|
+
[exports.OPERATOR_NAME_NOT_LIKE]: {
|
|
112
|
+
name: exports.OPERATOR_NAME_NOT_LIKE,
|
|
113
|
+
type: OPERATOR_TYPE_BINARY,
|
|
114
|
+
edmName: 'odata.matchesPattern',
|
|
115
|
+
precedence: 9,
|
|
116
|
+
edmNot: true
|
|
117
|
+
},
|
|
118
|
+
// support via "Edm.Gt" "Edm.And" and "Edm.Lt" if cds-compilers edmx generation supports it
|
|
119
|
+
[exports.OPERATOR_NAME_BETWEEN]: {
|
|
120
|
+
name: exports.OPERATOR_NAME_BETWEEN,
|
|
121
|
+
type: OPERATOR_TYPE_TERNARY,
|
|
122
|
+
secondaryOperatorImage: 'AND',
|
|
123
|
+
precedence: 9
|
|
124
|
+
},
|
|
125
|
+
[exports.OPERATOR_NAME_NOT_BETWEEN]: {
|
|
126
|
+
name: exports.OPERATOR_NAME_NOT_BETWEEN,
|
|
127
|
+
type: OPERATOR_TYPE_TERNARY,
|
|
128
|
+
secondaryOperatorImage: 'AND',
|
|
129
|
+
precedence: 9,
|
|
130
|
+
edmNot: true
|
|
131
|
+
},
|
|
132
|
+
[exports.OPERATOR_NAME_GREATER_THEN]: {
|
|
133
|
+
name: exports.OPERATOR_NAME_GREATER_THEN,
|
|
134
|
+
type: OPERATOR_TYPE_BINARY,
|
|
135
|
+
edmName: "Gt" /* Edm.Gt */,
|
|
136
|
+
precedence: 9
|
|
137
|
+
},
|
|
138
|
+
[exports.OPERATOR_NAME_GREATER_OR_EQUAL]: {
|
|
139
|
+
name: exports.OPERATOR_NAME_GREATER_OR_EQUAL,
|
|
140
|
+
type: OPERATOR_TYPE_BINARY,
|
|
141
|
+
edmName: "Ge" /* Edm.Ge */,
|
|
142
|
+
precedence: 9
|
|
143
|
+
},
|
|
144
|
+
[exports.OPERATOR_NAME_LESS_THEN]: {
|
|
145
|
+
name: exports.OPERATOR_NAME_LESS_THEN,
|
|
146
|
+
type: OPERATOR_TYPE_BINARY,
|
|
147
|
+
edmName: "Lt" /* Edm.Lt */,
|
|
148
|
+
precedence: 9
|
|
149
|
+
},
|
|
150
|
+
[exports.OPERATOR_NAME_LESS_OR_EQUAL]: {
|
|
151
|
+
name: exports.OPERATOR_NAME_LESS_OR_EQUAL,
|
|
152
|
+
type: OPERATOR_TYPE_BINARY,
|
|
153
|
+
edmName: "Le" /* Edm.Le */,
|
|
154
|
+
precedence: 9
|
|
155
|
+
},
|
|
156
|
+
[exports.OPERATOR_NAME_NOT_EQUAL]: {
|
|
157
|
+
name: exports.OPERATOR_NAME_NOT_EQUAL,
|
|
158
|
+
type: OPERATOR_TYPE_BINARY,
|
|
159
|
+
edmName: "Ne" /* Edm.Ne */,
|
|
160
|
+
precedence: 8
|
|
161
|
+
},
|
|
162
|
+
[exports.OPERATOR_NAME_EQUAL]: { name: exports.OPERATOR_NAME_EQUAL, type: OPERATOR_TYPE_BINARY, edmName: "Eq" /* Edm.Eq */, precedence: 8 },
|
|
163
|
+
[exports.OPERATOR_NAME_NOT]: {
|
|
164
|
+
name: exports.OPERATOR_NAME_NOT,
|
|
165
|
+
type: OPERATOR_TYPE_UNARY,
|
|
166
|
+
kind: UNARY_OPERATOR_KIND_PREFIX,
|
|
167
|
+
edmName: "Not" /* Edm.Not */,
|
|
168
|
+
precedence: 6 // from hana operator precedences; in javascript '!' operator has much higher precedence
|
|
169
|
+
},
|
|
170
|
+
[exports.OPERATOR_NAME_AND]: { name: exports.OPERATOR_NAME_AND, type: OPERATOR_TYPE_BINARY, edmName: "And" /* Edm.And */, precedence: 4 },
|
|
171
|
+
[exports.OPERATOR_NAME_OR]: { name: exports.OPERATOR_NAME_OR, type: OPERATOR_TYPE_BINARY, edmName: "Or" /* Edm.Or */, precedence: 3 },
|
|
172
|
+
[exports.OPERATOR_NAME_TERNARY]: {
|
|
173
|
+
name: exports.OPERATOR_NAME_TERNARY,
|
|
174
|
+
type: OPERATOR_TYPE_TERNARY,
|
|
175
|
+
secondaryOperatorImage: ':',
|
|
176
|
+
edmName: "If" /* Edm.If */,
|
|
177
|
+
precedence: 2
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
/**
|
|
181
|
+
* @returns Edm operators map
|
|
182
|
+
*/
|
|
183
|
+
function getEdmOperatorMap() {
|
|
184
|
+
var _a, _b, _c;
|
|
185
|
+
// find cds expression operator name for edm operator name/ odata function name
|
|
186
|
+
const operatorImageLookup = new Map();
|
|
187
|
+
for (const image of Object.keys(exports.operatorImageMap)) {
|
|
188
|
+
const names = exports.operatorImageMap[image];
|
|
189
|
+
for (const name of names) {
|
|
190
|
+
if (!operatorImageLookup.has(name)) {
|
|
191
|
+
operatorImageLookup.set(name, []);
|
|
192
|
+
}
|
|
193
|
+
(_a = operatorImageLookup.get(name)) === null || _a === void 0 ? void 0 : _a.push(image);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
const result = new Map();
|
|
197
|
+
for (const name of Object.keys(exports.operatorMap)) {
|
|
198
|
+
const edmName = exports.operatorMap[name].edmName;
|
|
199
|
+
if (edmName) {
|
|
200
|
+
if (!result.has(edmName)) {
|
|
201
|
+
result.set(edmName, []);
|
|
202
|
+
}
|
|
203
|
+
(_b = result.get(edmName)) === null || _b === void 0 ? void 0 : _b.push(...((_c = operatorImageLookup.get(name)) !== null && _c !== void 0 ? _c : []));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return result;
|
|
207
|
+
}
|
|
208
|
+
exports.getEdmOperatorMap = getEdmOperatorMap;
|
|
209
|
+
/**
|
|
210
|
+
* Builds expression.
|
|
211
|
+
*
|
|
212
|
+
* @param protoExpression Expression prototype
|
|
213
|
+
* @returns Correct expression ast node
|
|
214
|
+
*/
|
|
215
|
+
function buildExpression(protoExpression) {
|
|
216
|
+
const { operators, name } = getRootOperator(protoExpression);
|
|
217
|
+
const operands = getOperands(name, operators, protoExpression);
|
|
218
|
+
const CorrectExpression = {
|
|
219
|
+
type: annotation_ast_nodes_1.CORRECT_EXPRESSION_TYPE,
|
|
220
|
+
operatorName: name,
|
|
221
|
+
operators,
|
|
222
|
+
operands,
|
|
223
|
+
range: protoExpression.range
|
|
224
|
+
};
|
|
225
|
+
return CorrectExpression;
|
|
226
|
+
}
|
|
227
|
+
exports.buildExpression = buildExpression;
|
|
228
|
+
/**
|
|
229
|
+
* Checks if nodes are correctly sorted based on their ranges.
|
|
230
|
+
*
|
|
231
|
+
* @param nodes Array with nodes to check
|
|
232
|
+
* @returns True if nodes ranges are correctly ordered
|
|
233
|
+
*/
|
|
234
|
+
function assertSequence(nodes) {
|
|
235
|
+
if (nodes.length < 2) {
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
238
|
+
let result = true;
|
|
239
|
+
let previousNode = nodes[0];
|
|
240
|
+
for (let index = 1; index < nodes.length && result; index++) {
|
|
241
|
+
const currentNode = nodes[index];
|
|
242
|
+
if (!(previousNode === null || previousNode === void 0 ? void 0 : previousNode.range) || !(currentNode === null || currentNode === void 0 ? void 0 : currentNode.range) || (0, odata_annotation_core_1.isBefore)(currentNode.range.start, previousNode.range.end)) {
|
|
243
|
+
result = false;
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
previousNode = currentNode;
|
|
247
|
+
}
|
|
248
|
+
return result;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Searches for root operator in given expression prototype. Throws exceptions on errors.
|
|
252
|
+
*
|
|
253
|
+
* @param protoExpression Expression to process
|
|
254
|
+
* @returns Found operators data
|
|
255
|
+
*/
|
|
256
|
+
function getRootOperator(protoExpression) {
|
|
257
|
+
var _a;
|
|
258
|
+
// operator with lowest precedence is root operator (remaining operators are used in sub expressions as operands)
|
|
259
|
+
let rootOperatorName = '';
|
|
260
|
+
let rootOperator;
|
|
261
|
+
const rootOperators = [];
|
|
262
|
+
let lowestPrecedence = 1000;
|
|
263
|
+
for (const operator of protoExpression.operators) {
|
|
264
|
+
if (rootOperatorName && exports.operatorMap[rootOperatorName].secondaryOperatorImage === operator.value.toUpperCase()) {
|
|
265
|
+
continue; // don't consider secondary operator name as root operator (e.g. 'and' in 'between a and b')
|
|
266
|
+
}
|
|
267
|
+
const operatorName = getOperatorName(operator, protoExpression);
|
|
268
|
+
const precedence = ((_a = exports.operatorMap[operatorName]) === null || _a === void 0 ? void 0 : _a.precedence) || 1000;
|
|
269
|
+
if (!rootOperator || precedence < lowestPrecedence) {
|
|
270
|
+
rootOperator = operator;
|
|
271
|
+
rootOperatorName = operatorName;
|
|
272
|
+
lowestPrecedence = precedence;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
if (!rootOperator) {
|
|
276
|
+
throw new Error('no root operator found');
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
rootOperators.push(rootOperator);
|
|
280
|
+
}
|
|
281
|
+
const operatorDef = exports.operatorMap[rootOperatorName]; // ternary operators have unique name
|
|
282
|
+
if (operatorDef.secondaryOperatorImage) {
|
|
283
|
+
const secondaryOperator = protoExpression.operators.find((operator) => operator.value.toUpperCase() === operatorDef.secondaryOperatorImage);
|
|
284
|
+
if (secondaryOperator) {
|
|
285
|
+
rootOperators.push(secondaryOperator);
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
throw new Error(`for operator '${rootOperatorName}', missing '${operatorDef.secondaryOperatorImage}'`);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
if (!assertSequence(rootOperators)) {
|
|
292
|
+
throw new Error(`for operator '${rootOperatorName}', misplaced '${operatorDef.secondaryOperatorImage}'`);
|
|
293
|
+
}
|
|
294
|
+
return { name: rootOperatorName, operators: rootOperators };
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Searches operator name for the given operator based on expression data.
|
|
298
|
+
*
|
|
299
|
+
* @param operator Opertor AST node
|
|
300
|
+
* @param protoExpression Expression AST node
|
|
301
|
+
* @returns Operator name string
|
|
302
|
+
*/
|
|
303
|
+
function getOperatorName(operator, protoExpression) {
|
|
304
|
+
const operatorNames = exports.operatorImageMap[operator.value.toUpperCase()];
|
|
305
|
+
const { range, operators, operands } = protoExpression;
|
|
306
|
+
let operatorName = '';
|
|
307
|
+
for (const name of operatorNames) {
|
|
308
|
+
// for multiple operator names: unary operator name is listed first
|
|
309
|
+
// ignore unary operator if operators/operands in wrong positions exist
|
|
310
|
+
// e.g. ('-' can stand for unary or binary operator)
|
|
311
|
+
const operatorDef = exports.operatorMap[name];
|
|
312
|
+
if (operatorDef.type === OPERATOR_TYPE_UNARY) {
|
|
313
|
+
const emptyRange = operatorDef.kind === UNARY_OPERATOR_KIND_PREFIX
|
|
314
|
+
? { start: range.start, end: operator.range.start }
|
|
315
|
+
: { start: operator.range.end, end: range.end };
|
|
316
|
+
if (filterNodes([...operators, ...operands], emptyRange).length) {
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
operatorName = name;
|
|
321
|
+
break;
|
|
322
|
+
}
|
|
323
|
+
return operatorName;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Extract operands from given expression.
|
|
327
|
+
*
|
|
328
|
+
* @param rootOperatorName Name of the root operator
|
|
329
|
+
* @param rootOperators List with root operators (the first one is used only)
|
|
330
|
+
* @param protoExpression Expression object
|
|
331
|
+
* @returns Array with annotation values
|
|
332
|
+
*/
|
|
333
|
+
function getOperands(rootOperatorName, rootOperators, protoExpression) {
|
|
334
|
+
const rootOperator = rootOperators[0];
|
|
335
|
+
const operatorDef = exports.operatorMap[rootOperatorName];
|
|
336
|
+
let operands = [];
|
|
337
|
+
switch (operatorDef.type) {
|
|
338
|
+
case OPERATOR_TYPE_UNARY: {
|
|
339
|
+
const operandRange = operatorDef.kind === UNARY_OPERATOR_KIND_PREFIX
|
|
340
|
+
? { start: rootOperator.range.end, end: protoExpression.range.end }
|
|
341
|
+
: { start: protoExpression.range.start, end: rootOperator.range.start };
|
|
342
|
+
const emptyRange = operatorDef.kind === UNARY_OPERATOR_KIND_PREFIX
|
|
343
|
+
? { start: protoExpression.range.start, end: rootOperator.range.start }
|
|
344
|
+
: { start: rootOperator.range.end, end: protoExpression.range.end };
|
|
345
|
+
if (filterNodes([...protoExpression.operators, ...protoExpression.operands], emptyRange).length) {
|
|
346
|
+
throw new Error(`unary operator '${rootOperatorName}': unsupported position of operand(s)`);
|
|
347
|
+
}
|
|
348
|
+
operands = [buildOperand(protoExpression, operandRange)];
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
case OPERATOR_TYPE_BINARY: {
|
|
352
|
+
const leftRange = { start: protoExpression.range.start, end: rootOperator.range.start };
|
|
353
|
+
const rightRange = { start: rootOperator.range.end, end: protoExpression.range.end };
|
|
354
|
+
operands = [buildOperand(protoExpression, leftRange), buildOperand(protoExpression, rightRange)];
|
|
355
|
+
break;
|
|
356
|
+
}
|
|
357
|
+
case OPERATOR_TYPE_TERNARY: {
|
|
358
|
+
const secondaryOperator = protoExpression.operators.find((operator) => operator.value.toUpperCase() === operatorDef.secondaryOperatorImage);
|
|
359
|
+
if (!secondaryOperator) {
|
|
360
|
+
throw new Error(`ternary operator '${rootOperatorName}': secondary operator '${operatorDef.secondaryOperatorImage}' missing`);
|
|
361
|
+
}
|
|
362
|
+
const firstRange = { start: protoExpression.range.start, end: rootOperator.range.start };
|
|
363
|
+
const secondRange = { start: rootOperator.range.end, end: secondaryOperator.range.start };
|
|
364
|
+
const thirdRange = { start: secondaryOperator.range.end, end: protoExpression.range.end };
|
|
365
|
+
operands = [
|
|
366
|
+
buildOperand(protoExpression, firstRange),
|
|
367
|
+
buildOperand(protoExpression, secondRange),
|
|
368
|
+
buildOperand(protoExpression, thirdRange)
|
|
369
|
+
];
|
|
370
|
+
break;
|
|
371
|
+
}
|
|
372
|
+
default:
|
|
373
|
+
break;
|
|
374
|
+
}
|
|
375
|
+
if (operands.some((operand) => !operand)) {
|
|
376
|
+
throw new Error(`missing operand for ${operatorDef.type} '${rootOperatorName}'`);
|
|
377
|
+
}
|
|
378
|
+
return operands;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Builds expression operand.
|
|
382
|
+
*
|
|
383
|
+
* @param protoExpression Expression node
|
|
384
|
+
* @param range Range for searching existing operand in the given expression
|
|
385
|
+
* @returns Found operand in the expression or new nested expression or undefined if no content in the given range
|
|
386
|
+
*/
|
|
387
|
+
function buildOperand(protoExpression, range) {
|
|
388
|
+
const operators = filterNodes(protoExpression.operators, range);
|
|
389
|
+
const operands = filterNodes(protoExpression.operands, range);
|
|
390
|
+
if (operators.length === 0 && operands.length === 1) {
|
|
391
|
+
return operands[0];
|
|
392
|
+
}
|
|
393
|
+
const subRange = nodesRange([...operators, ...operands]);
|
|
394
|
+
if (!subRange) {
|
|
395
|
+
return undefined; // no content in range
|
|
396
|
+
}
|
|
397
|
+
// try to build operand as nested expression (without ())
|
|
398
|
+
return buildExpression({ operators, operands, range: subRange });
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Filter given nodes based on their ranges and returns only those which are within the given range.
|
|
402
|
+
*
|
|
403
|
+
* @param nodes Node to filter
|
|
404
|
+
* @param range Range to check nodes inclusion
|
|
405
|
+
* @returns Filtered nodes array
|
|
406
|
+
*/
|
|
407
|
+
function filterNodes(nodes, range) {
|
|
408
|
+
return (nodes || []).filter((node) => node.range && (0, odata_annotation_core_1.isBefore)(range.start, node.range.start, true) && (0, odata_annotation_core_1.isBefore)(node.range.end, range.end, true));
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Creates a range covering all given nodes.
|
|
412
|
+
*
|
|
413
|
+
* @param nodes Nodes to be included in the result range
|
|
414
|
+
* @returns Range or undefined if nodes array is empty
|
|
415
|
+
*/
|
|
416
|
+
function nodesRange(nodes) {
|
|
417
|
+
let start;
|
|
418
|
+
let end;
|
|
419
|
+
for (const node of nodes) {
|
|
420
|
+
if (node.range) {
|
|
421
|
+
if (!start || (0, odata_annotation_core_1.isBefore)(node.range.start, start)) {
|
|
422
|
+
start = node.range.start;
|
|
423
|
+
}
|
|
424
|
+
if (!end || (0, odata_annotation_core_1.isBefore)(end, node.range.end)) {
|
|
425
|
+
end = node.range.end;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
if (!start || !end) {
|
|
430
|
+
return undefined;
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
return { start, end };
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Rebuilds number signes in the given exprssion.
|
|
438
|
+
*
|
|
439
|
+
* @param protoExpression Expression to process
|
|
440
|
+
* @returns Updated expression
|
|
441
|
+
*/
|
|
442
|
+
function rebuildNumberSigns(protoExpression) {
|
|
443
|
+
var _a, _b, _c;
|
|
444
|
+
const { operators, operands, range } = Object.assign({}, protoExpression);
|
|
445
|
+
// revert '-' operators to number signs if they are followed by an unsigned number and not preceded by an operand
|
|
446
|
+
if (!(operators || []).some((operator) => operator.value === '-')) {
|
|
447
|
+
return { operators, operands, range };
|
|
448
|
+
}
|
|
449
|
+
const sortedNodes = getSortedNodes(protoExpression);
|
|
450
|
+
for (let i = sortedNodes.length - 1; i >= 0; i--) {
|
|
451
|
+
const currentNode = sortedNodes[i];
|
|
452
|
+
const nextNode = sortedNodes[i + 1];
|
|
453
|
+
const previousNode = sortedNodes[i - 1];
|
|
454
|
+
if (!nextNode || !doRebuildNumberSign(currentNode, nextNode, previousNode)) {
|
|
455
|
+
continue;
|
|
456
|
+
}
|
|
457
|
+
const numberNode = nextNode;
|
|
458
|
+
const numberValue = numberNode.value;
|
|
459
|
+
// add sign to number node
|
|
460
|
+
numberNode.value = typeof numberValue === 'string' ? `-${numberValue}` : -numberValue;
|
|
461
|
+
if (((_a = numberNode.range) === null || _a === void 0 ? void 0 : _a.start) && ((_b = currentNode.range) === null || _b === void 0 ? void 0 : _b.start)) {
|
|
462
|
+
numberNode.range.start.character = (_c = currentNode.range) === null || _c === void 0 ? void 0 : _c.start.character;
|
|
463
|
+
}
|
|
464
|
+
// remove '-' operator represented by current node
|
|
465
|
+
const index = operators.findIndex((operator) => operator.range === currentNode.range);
|
|
466
|
+
if (index >= 0) {
|
|
467
|
+
operators.splice(index, 1);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
return { operators, operands, range };
|
|
471
|
+
}
|
|
472
|
+
exports.rebuildNumberSigns = rebuildNumberSigns;
|
|
473
|
+
/**
|
|
474
|
+
* Sorts expression operators and operands based on their ranges.
|
|
475
|
+
*
|
|
476
|
+
* @param protoExpression Expression node
|
|
477
|
+
* @returns Sorted expression operators and operands
|
|
478
|
+
*/
|
|
479
|
+
function getSortedNodes(protoExpression) {
|
|
480
|
+
return [...protoExpression.operators, ...protoExpression.operands]
|
|
481
|
+
.filter((node) => !!node.range)
|
|
482
|
+
.sort((node1, node2) => node1.range && node2.range && (0, odata_annotation_core_1.isBefore)(node1.range.start, node2.range.start) ? -1 : +1);
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Checks if rebuild of number sign is needed.
|
|
486
|
+
*
|
|
487
|
+
* @param currentNode Current operator or operand
|
|
488
|
+
* @param nextNode Next operator or operand
|
|
489
|
+
* @param previousNode Previous operator or operand
|
|
490
|
+
* @returns Boolean result
|
|
491
|
+
*/
|
|
492
|
+
function doRebuildNumberSign(currentNode, nextNode, previousNode) {
|
|
493
|
+
var _a, _b, _c, _d;
|
|
494
|
+
if (currentNode.type !== annotation_ast_nodes_1.OPERATOR_TYPE || currentNode.value !== '-') {
|
|
495
|
+
return false; // no '-' operator
|
|
496
|
+
}
|
|
497
|
+
if ((nextNode === null || nextNode === void 0 ? void 0 : nextNode.type) !== annotation_ast_nodes_1.NUMBER_LITERAL_TYPE || !nextNode.value) {
|
|
498
|
+
return false; // no next node or next node is no number or initial number
|
|
499
|
+
}
|
|
500
|
+
if (((_a = currentNode.range) === null || _a === void 0 ? void 0 : _a.end.line) !== ((_b = nextNode.range) === null || _b === void 0 ? void 0 : _b.start.line) ||
|
|
501
|
+
((_c = currentNode.range) === null || _c === void 0 ? void 0 : _c.end.character) !== ((_d = nextNode.range) === null || _d === void 0 ? void 0 : _d.start.character)) {
|
|
502
|
+
return false; // '-' operator is not directly followed by number (at least single space in between)
|
|
503
|
+
}
|
|
504
|
+
const numberValue = nextNode.value;
|
|
505
|
+
if ((typeof numberValue === 'string' && numberValue.startsWith('-')) ||
|
|
506
|
+
(typeof numberValue === 'number' && numberValue < 0)) {
|
|
507
|
+
return false; // number has already '-' sign
|
|
508
|
+
}
|
|
509
|
+
// make sure if previous node exists, it is operator
|
|
510
|
+
return !previousNode || previousNode.type === annotation_ast_nodes_1.OPERATOR_TYPE;
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Checks if the given position is in the given expression white space.
|
|
514
|
+
*
|
|
515
|
+
* @param expression Expression node
|
|
516
|
+
* @param position Position to check
|
|
517
|
+
* @returns True if position is not occupied by some operand or operator, i.e. is in white space
|
|
518
|
+
*/
|
|
519
|
+
function positionIsInExpressionWhiteSpace(expression, position) {
|
|
520
|
+
if (!(0, odata_annotation_core_1.positionContained)(expression.range, position)) {
|
|
521
|
+
return false;
|
|
522
|
+
}
|
|
523
|
+
const subNodes = [...expression.operators, ...expression.operands];
|
|
524
|
+
return !subNodes.some((entry) => (0, odata_annotation_core_1.positionContained)(entry.range, position));
|
|
525
|
+
}
|
|
526
|
+
exports.positionIsInExpressionWhiteSpace = positionIsInExpressionWhiteSpace;
|
|
527
|
+
/**
|
|
528
|
+
* Recursively checks if expression contains some incorrect nested expressions.
|
|
529
|
+
*
|
|
530
|
+
* @param expression Expression node to check
|
|
531
|
+
* @returns True if incorrect expression found
|
|
532
|
+
*/
|
|
533
|
+
function containsIncorrectExpressions(expression) {
|
|
534
|
+
if (expression.type === annotation_ast_nodes_1.INCORRECT_EXPRESSION_TYPE) {
|
|
535
|
+
return true;
|
|
536
|
+
}
|
|
537
|
+
if (expression.operands.some((operand) => operand.type === annotation_ast_nodes_1.INCORRECT_EXPRESSION_TYPE)) {
|
|
538
|
+
return true;
|
|
539
|
+
}
|
|
540
|
+
for (const operand of expression.operands) {
|
|
541
|
+
if (annotation_ast_nodes_1.EXPRESSION_TYPES.includes(operand.type) && containsIncorrectExpressions(operand)) {
|
|
542
|
+
return true;
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
return false;
|
|
546
|
+
}
|
|
547
|
+
exports.containsIncorrectExpressions = containsIncorrectExpressions;
|
|
548
|
+
//# sourceMappingURL=expressions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../src/transformer/expressions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { buildAst } from './ast';
|
|
2
|
+
export { EMPTY_VALUE_TYPE, RECORD_PROPERTY_TYPE, PATH_TYPE, STRING_LITERAL_TYPE, ANNOTATION_TYPE, RECORD_TYPE, ANNOTATION_GROUP_ITEMS_TYPE, ANNOTATION_GROUP_TYPE, BOOLEAN_TYPE, NUMBER_LITERAL_TYPE, ENUM_TYPE, COLLECTION_TYPE, TOKEN_TYPE, QUOTED_LITERAL_TYPE, QUALIFIER_TYPE, MULTI_LINE_STRING_LITERAL_TYPE, SEPARATOR_TYPE, IDENTIFIER_TYPE, OPERATOR_TYPE, UNSUPPORTED_OPERATOR_EXPRESSION_TYPE, INCORRECT_EXPRESSION_TYPE, CORRECT_EXPRESSION_TYPE, EXPRESSION_TYPES, Expression, UnsupportedOperatorExpression, IncorrectExpression, CorrectExpression, Record, Node, AnnotationValue, AnnotationGroup, AnnotationNodeType, AnnotationGroupItems, Collection, Enum, StringLiteral, Path, EmptyValue, BooleanLiteral, NumberLiteral, QuotedLiteralKind, Token, QuotedLiteral, MultiLineStringLiteral, Identifier, Annotation, RecordProperty, AnnotationNode, Assignment, Separator, NarrowAnnotationNode, nodeRange, isContainer } from './annotation-ast-nodes';
|
|
3
|
+
export { arePositionsEqual, copyPosition, copyRange, areRangesEqual } from './range';
|
|
4
|
+
export { operatorMap, positionIsInExpressionWhiteSpace, getEdmOperatorMap, containsIncorrectExpressions } from './expressions';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transformer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EACH,gBAAgB,EAChB,oBAAoB,EACpB,SAAS,EACT,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,2BAA2B,EAC3B,qBAAqB,EACrB,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,8BAA8B,EAC9B,cAAc,EACd,eAAe,EACf,aAAa,EACb,oCAAoC,EACpC,yBAAyB,EACzB,uBAAuB,EACvB,gBAAgB,EAChB,UAAU,EACV,6BAA6B,EAC7B,mBAAmB,EACnB,iBAAiB,EACjB,MAAM,EACN,IAAI,EACJ,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,UAAU,EACV,IAAI,EACJ,aAAa,EACb,IAAI,EACJ,UAAU,EACV,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,KAAK,EACL,aAAa,EACb,sBAAsB,EACtB,UAAU,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,SAAS,EACT,oBAAoB,EACpB,SAAS,EACT,WAAW,EACd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAErF,OAAO,EACH,WAAW,EACX,gCAAgC,EAChC,iBAAiB,EACjB,4BAA4B,EAC/B,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.containsIncorrectExpressions = exports.getEdmOperatorMap = exports.positionIsInExpressionWhiteSpace = exports.operatorMap = exports.areRangesEqual = exports.copyRange = exports.copyPosition = exports.arePositionsEqual = exports.isContainer = exports.nodeRange = exports.EXPRESSION_TYPES = exports.CORRECT_EXPRESSION_TYPE = exports.INCORRECT_EXPRESSION_TYPE = exports.UNSUPPORTED_OPERATOR_EXPRESSION_TYPE = exports.OPERATOR_TYPE = exports.IDENTIFIER_TYPE = exports.SEPARATOR_TYPE = exports.MULTI_LINE_STRING_LITERAL_TYPE = exports.QUALIFIER_TYPE = exports.QUOTED_LITERAL_TYPE = exports.TOKEN_TYPE = exports.COLLECTION_TYPE = exports.ENUM_TYPE = exports.NUMBER_LITERAL_TYPE = exports.BOOLEAN_TYPE = exports.ANNOTATION_GROUP_TYPE = exports.ANNOTATION_GROUP_ITEMS_TYPE = exports.RECORD_TYPE = exports.ANNOTATION_TYPE = exports.STRING_LITERAL_TYPE = exports.PATH_TYPE = exports.RECORD_PROPERTY_TYPE = exports.EMPTY_VALUE_TYPE = exports.buildAst = void 0;
|
|
4
|
+
var ast_1 = require("./ast");
|
|
5
|
+
Object.defineProperty(exports, "buildAst", { enumerable: true, get: function () { return ast_1.buildAst; } });
|
|
6
|
+
var annotation_ast_nodes_1 = require("./annotation-ast-nodes");
|
|
7
|
+
Object.defineProperty(exports, "EMPTY_VALUE_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.EMPTY_VALUE_TYPE; } });
|
|
8
|
+
Object.defineProperty(exports, "RECORD_PROPERTY_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.RECORD_PROPERTY_TYPE; } });
|
|
9
|
+
Object.defineProperty(exports, "PATH_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.PATH_TYPE; } });
|
|
10
|
+
Object.defineProperty(exports, "STRING_LITERAL_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.STRING_LITERAL_TYPE; } });
|
|
11
|
+
Object.defineProperty(exports, "ANNOTATION_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.ANNOTATION_TYPE; } });
|
|
12
|
+
Object.defineProperty(exports, "RECORD_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.RECORD_TYPE; } });
|
|
13
|
+
Object.defineProperty(exports, "ANNOTATION_GROUP_ITEMS_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.ANNOTATION_GROUP_ITEMS_TYPE; } });
|
|
14
|
+
Object.defineProperty(exports, "ANNOTATION_GROUP_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.ANNOTATION_GROUP_TYPE; } });
|
|
15
|
+
Object.defineProperty(exports, "BOOLEAN_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.BOOLEAN_TYPE; } });
|
|
16
|
+
Object.defineProperty(exports, "NUMBER_LITERAL_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.NUMBER_LITERAL_TYPE; } });
|
|
17
|
+
Object.defineProperty(exports, "ENUM_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.ENUM_TYPE; } });
|
|
18
|
+
Object.defineProperty(exports, "COLLECTION_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.COLLECTION_TYPE; } });
|
|
19
|
+
Object.defineProperty(exports, "TOKEN_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.TOKEN_TYPE; } });
|
|
20
|
+
Object.defineProperty(exports, "QUOTED_LITERAL_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.QUOTED_LITERAL_TYPE; } });
|
|
21
|
+
Object.defineProperty(exports, "QUALIFIER_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.QUALIFIER_TYPE; } });
|
|
22
|
+
Object.defineProperty(exports, "MULTI_LINE_STRING_LITERAL_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.MULTI_LINE_STRING_LITERAL_TYPE; } });
|
|
23
|
+
Object.defineProperty(exports, "SEPARATOR_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.SEPARATOR_TYPE; } });
|
|
24
|
+
Object.defineProperty(exports, "IDENTIFIER_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.IDENTIFIER_TYPE; } });
|
|
25
|
+
Object.defineProperty(exports, "OPERATOR_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.OPERATOR_TYPE; } });
|
|
26
|
+
Object.defineProperty(exports, "UNSUPPORTED_OPERATOR_EXPRESSION_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.UNSUPPORTED_OPERATOR_EXPRESSION_TYPE; } });
|
|
27
|
+
Object.defineProperty(exports, "INCORRECT_EXPRESSION_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.INCORRECT_EXPRESSION_TYPE; } });
|
|
28
|
+
Object.defineProperty(exports, "CORRECT_EXPRESSION_TYPE", { enumerable: true, get: function () { return annotation_ast_nodes_1.CORRECT_EXPRESSION_TYPE; } });
|
|
29
|
+
Object.defineProperty(exports, "EXPRESSION_TYPES", { enumerable: true, get: function () { return annotation_ast_nodes_1.EXPRESSION_TYPES; } });
|
|
30
|
+
Object.defineProperty(exports, "nodeRange", { enumerable: true, get: function () { return annotation_ast_nodes_1.nodeRange; } });
|
|
31
|
+
Object.defineProperty(exports, "isContainer", { enumerable: true, get: function () { return annotation_ast_nodes_1.isContainer; } });
|
|
32
|
+
var range_1 = require("./range");
|
|
33
|
+
Object.defineProperty(exports, "arePositionsEqual", { enumerable: true, get: function () { return range_1.arePositionsEqual; } });
|
|
34
|
+
Object.defineProperty(exports, "copyPosition", { enumerable: true, get: function () { return range_1.copyPosition; } });
|
|
35
|
+
Object.defineProperty(exports, "copyRange", { enumerable: true, get: function () { return range_1.copyRange; } });
|
|
36
|
+
Object.defineProperty(exports, "areRangesEqual", { enumerable: true, get: function () { return range_1.areRangesEqual; } });
|
|
37
|
+
var expressions_1 = require("./expressions");
|
|
38
|
+
Object.defineProperty(exports, "operatorMap", { enumerable: true, get: function () { return expressions_1.operatorMap; } });
|
|
39
|
+
Object.defineProperty(exports, "positionIsInExpressionWhiteSpace", { enumerable: true, get: function () { return expressions_1.positionIsInExpressionWhiteSpace; } });
|
|
40
|
+
Object.defineProperty(exports, "getEdmOperatorMap", { enumerable: true, get: function () { return expressions_1.getEdmOperatorMap; } });
|
|
41
|
+
Object.defineProperty(exports, "containsIncorrectExpressions", { enumerable: true, get: function () { return expressions_1.containsIncorrectExpressions; } });
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transformer/index.ts"],"names":[],"mappings":";;;AAAA,6BAAiC;AAAxB,+FAAA,QAAQ,OAAA;AAEjB,+DAsDgC;AArD5B,wHAAA,gBAAgB,OAAA;AAChB,4HAAA,oBAAoB,OAAA;AACpB,iHAAA,SAAS,OAAA;AACT,2HAAA,mBAAmB,OAAA;AACnB,uHAAA,eAAe,OAAA;AACf,mHAAA,WAAW,OAAA;AACX,mIAAA,2BAA2B,OAAA;AAC3B,6HAAA,qBAAqB,OAAA;AACrB,oHAAA,YAAY,OAAA;AACZ,2HAAA,mBAAmB,OAAA;AACnB,iHAAA,SAAS,OAAA;AACT,uHAAA,eAAe,OAAA;AACf,kHAAA,UAAU,OAAA;AACV,2HAAA,mBAAmB,OAAA;AACnB,sHAAA,cAAc,OAAA;AACd,sIAAA,8BAA8B,OAAA;AAC9B,sHAAA,cAAc,OAAA;AACd,uHAAA,eAAe,OAAA;AACf,qHAAA,aAAa,OAAA;AACb,4IAAA,oCAAoC,OAAA;AACpC,iIAAA,yBAAyB,OAAA;AACzB,+HAAA,uBAAuB,OAAA;AACvB,wHAAA,gBAAgB,OAAA;AA6BhB,iHAAA,SAAS,OAAA;AACT,mHAAA,WAAW,OAAA;AAGf,iCAAqF;AAA5E,0GAAA,iBAAiB,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,kGAAA,SAAS,OAAA;AAAE,uGAAA,cAAc,OAAA;AAEnE,6CAKuB;AAJnB,0GAAA,WAAW,OAAA;AACX,+HAAA,gCAAgC,OAAA;AAChC,gHAAA,iBAAiB,OAAA;AACjB,2HAAA,4BAA4B,OAAA"}
|