@cucumber/tag-expressions 9.1.0 → 10.0.0
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/dist/{esm/src/index.d.ts → index.d.ts} +0 -1
- package/dist/index.js +226 -0
- package/package.json +19 -38
- package/dist/cjs/package.json +0 -1
- package/dist/cjs/src/index.d.ts +0 -15
- package/dist/cjs/src/index.d.ts.map +0 -1
- package/dist/cjs/src/index.js +0 -231
- package/dist/cjs/src/index.js.map +0 -1
- package/dist/cjs/test/errors.test.d.ts +0 -2
- package/dist/cjs/test/errors.test.d.ts.map +0 -1
- package/dist/cjs/test/errors.test.js +0 -44
- package/dist/cjs/test/errors.test.js.map +0 -1
- package/dist/cjs/test/evaluations.test.d.ts +0 -2
- package/dist/cjs/test/evaluations.test.d.ts.map +0 -1
- package/dist/cjs/test/evaluations.test.js +0 -63
- package/dist/cjs/test/evaluations.test.js.map +0 -1
- package/dist/cjs/test/parsing.test.d.ts +0 -2
- package/dist/cjs/test/parsing.test.d.ts.map +0 -1
- package/dist/cjs/test/parsing.test.js +0 -47
- package/dist/cjs/test/parsing.test.js.map +0 -1
- package/dist/cjs/test/testDataDir.d.ts +0 -2
- package/dist/cjs/test/testDataDir.d.ts.map +0 -1
- package/dist/cjs/test/testDataDir.js +0 -5
- package/dist/cjs/test/testDataDir.js.map +0 -1
- package/dist/cjs/tsconfig.build-cjs.tsbuildinfo +0 -1
- package/dist/esm/src/index.d.ts.map +0 -1
- package/dist/esm/src/index.js +0 -221
- package/dist/esm/src/index.js.map +0 -1
- package/dist/esm/test/errors.test.d.ts +0 -2
- package/dist/esm/test/errors.test.d.ts.map +0 -1
- package/dist/esm/test/errors.test.js +0 -14
- package/dist/esm/test/errors.test.js.map +0 -1
- package/dist/esm/test/evaluations.test.d.ts +0 -2
- package/dist/esm/test/evaluations.test.d.ts.map +0 -1
- package/dist/esm/test/evaluations.test.js +0 -19
- package/dist/esm/test/evaluations.test.js.map +0 -1
- package/dist/esm/test/parsing.test.d.ts +0 -2
- package/dist/esm/test/parsing.test.d.ts.map +0 -1
- package/dist/esm/test/parsing.test.js +0 -17
- package/dist/esm/test/parsing.test.js.map +0 -1
- package/dist/esm/test/testDataDir.d.ts +0 -2
- package/dist/esm/test/testDataDir.d.ts.map +0 -1
- package/dist/esm/test/testDataDir.js +0 -2
- package/dist/esm/test/testDataDir.js.map +0 -1
- package/dist/esm/tsconfig.build-esm.tsbuildinfo +0 -1
package/dist/index.js
ADDED
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
const OPERAND = 'operand';
|
|
2
|
+
const OPERATOR = 'operator';
|
|
3
|
+
const PREC = {
|
|
4
|
+
'(': -2,
|
|
5
|
+
')': -1,
|
|
6
|
+
or: 0,
|
|
7
|
+
and: 1,
|
|
8
|
+
not: 2,
|
|
9
|
+
};
|
|
10
|
+
const ASSOC = {
|
|
11
|
+
or: 'left',
|
|
12
|
+
and: 'left',
|
|
13
|
+
not: 'right',
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Parses infix boolean expression (using Dijkstra's Shunting Yard algorithm)
|
|
17
|
+
* and builds a tree of expressions. The root node of the expression is returned.
|
|
18
|
+
*
|
|
19
|
+
* This expression can be evaluated by passing in an array of literals that resolve to true
|
|
20
|
+
*/
|
|
21
|
+
export function parse(infix) {
|
|
22
|
+
const tokens = tokenize(infix);
|
|
23
|
+
if (tokens.length === 0) {
|
|
24
|
+
return new True();
|
|
25
|
+
}
|
|
26
|
+
const expressions = [];
|
|
27
|
+
const operators = [];
|
|
28
|
+
let expectedTokenType = OPERAND;
|
|
29
|
+
tokens.forEach((token) => {
|
|
30
|
+
if (isUnary(token)) {
|
|
31
|
+
check(expectedTokenType, OPERAND);
|
|
32
|
+
operators.push(token);
|
|
33
|
+
expectedTokenType = OPERAND;
|
|
34
|
+
}
|
|
35
|
+
else if (isBinary(token)) {
|
|
36
|
+
check(expectedTokenType, OPERATOR);
|
|
37
|
+
while (operators.length > 0 &&
|
|
38
|
+
isOp(peek(operators)) &&
|
|
39
|
+
((ASSOC[token] === 'left' && PREC[token] <= PREC[peek(operators)]) ||
|
|
40
|
+
(ASSOC[token] === 'right' && PREC[token] < PREC[peek(operators)]))) {
|
|
41
|
+
pushExpr(operators.pop(), expressions);
|
|
42
|
+
}
|
|
43
|
+
operators.push(token);
|
|
44
|
+
expectedTokenType = OPERAND;
|
|
45
|
+
}
|
|
46
|
+
else if ('(' === token) {
|
|
47
|
+
check(expectedTokenType, OPERAND);
|
|
48
|
+
operators.push(token);
|
|
49
|
+
expectedTokenType = OPERAND;
|
|
50
|
+
}
|
|
51
|
+
else if (')' === token) {
|
|
52
|
+
check(expectedTokenType, OPERATOR);
|
|
53
|
+
while (operators.length > 0 && peek(operators) !== '(') {
|
|
54
|
+
pushExpr(operators.pop(), expressions);
|
|
55
|
+
}
|
|
56
|
+
if (operators.length === 0) {
|
|
57
|
+
throw new Error(`Tag expression "${infix}" could not be parsed because of syntax error: Unmatched ).`);
|
|
58
|
+
}
|
|
59
|
+
if (peek(operators) === '(') {
|
|
60
|
+
operators.pop();
|
|
61
|
+
}
|
|
62
|
+
expectedTokenType = OPERATOR;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
check(expectedTokenType, OPERAND);
|
|
66
|
+
pushExpr(token, expressions);
|
|
67
|
+
expectedTokenType = OPERATOR;
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
while (operators.length > 0) {
|
|
71
|
+
if (peek(operators) === '(') {
|
|
72
|
+
throw new Error(`Tag expression "${infix}" could not be parsed because of syntax error: Unmatched (.`);
|
|
73
|
+
}
|
|
74
|
+
pushExpr(operators.pop(), expressions);
|
|
75
|
+
}
|
|
76
|
+
return expressions.pop();
|
|
77
|
+
function check(expectedTokenType, tokenType) {
|
|
78
|
+
if (expectedTokenType !== tokenType) {
|
|
79
|
+
throw new Error(`Tag expression "${infix}" could not be parsed because of syntax error: Expected ${expectedTokenType}.`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function pushExpr(token, stack) {
|
|
83
|
+
if (token === 'and') {
|
|
84
|
+
const rightAndExpr = popOperand(stack);
|
|
85
|
+
stack.push(new And(popOperand(stack), rightAndExpr));
|
|
86
|
+
}
|
|
87
|
+
else if (token === 'or') {
|
|
88
|
+
const rightOrExpr = popOperand(stack);
|
|
89
|
+
stack.push(new Or(popOperand(stack), rightOrExpr));
|
|
90
|
+
}
|
|
91
|
+
else if (token === 'not') {
|
|
92
|
+
stack.push(new Not(popOperand(stack)));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
stack.push(new Literal(token));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function popOperand(stack) {
|
|
99
|
+
if (stack.length === 0) {
|
|
100
|
+
throw new Error(`Tag expression "${infix}" could not be parsed because of syntax error: Expected operand.`);
|
|
101
|
+
}
|
|
102
|
+
return stack.pop();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function tokenize(expr) {
|
|
106
|
+
const tokens = [];
|
|
107
|
+
let isEscaped = false;
|
|
108
|
+
let token = [];
|
|
109
|
+
for (let i = 0; i < expr.length; i++) {
|
|
110
|
+
const c = expr.charAt(i);
|
|
111
|
+
if (isEscaped) {
|
|
112
|
+
if (c === '(' || c === ')' || c === '\\' || /\s/.test(c)) {
|
|
113
|
+
token.push(c);
|
|
114
|
+
isEscaped = false;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
throw new Error(`Tag expression "${expr}" could not be parsed because of syntax error: Illegal escape before "${c}".`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else if (c === '\\') {
|
|
121
|
+
isEscaped = true;
|
|
122
|
+
}
|
|
123
|
+
else if (c === '(' || c === ')' || /\s/.test(c)) {
|
|
124
|
+
if (token.length > 0) {
|
|
125
|
+
tokens.push(token.join(''));
|
|
126
|
+
token = [];
|
|
127
|
+
}
|
|
128
|
+
if (!/\s/.test(c)) {
|
|
129
|
+
tokens.push(c);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
token.push(c);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (token.length > 0) {
|
|
137
|
+
tokens.push(token.join(''));
|
|
138
|
+
}
|
|
139
|
+
return tokens;
|
|
140
|
+
}
|
|
141
|
+
function isUnary(token) {
|
|
142
|
+
return 'not' === token;
|
|
143
|
+
}
|
|
144
|
+
function isBinary(token) {
|
|
145
|
+
return 'or' === token || 'and' === token;
|
|
146
|
+
}
|
|
147
|
+
function isOp(token) {
|
|
148
|
+
return ASSOC[token] !== undefined;
|
|
149
|
+
}
|
|
150
|
+
function peek(stack) {
|
|
151
|
+
return stack[stack.length - 1];
|
|
152
|
+
}
|
|
153
|
+
class Literal {
|
|
154
|
+
value;
|
|
155
|
+
constructor(value) {
|
|
156
|
+
this.value = value;
|
|
157
|
+
}
|
|
158
|
+
evaluate(variables) {
|
|
159
|
+
return variables.indexOf(this.value) !== -1;
|
|
160
|
+
}
|
|
161
|
+
toString() {
|
|
162
|
+
return this.value
|
|
163
|
+
.replace(/\\/g, '\\\\')
|
|
164
|
+
.replace(/\(/g, '\\(')
|
|
165
|
+
.replace(/\)/g, '\\)')
|
|
166
|
+
.replace(/\s/g, '\\ ');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
class Or {
|
|
170
|
+
leftExpr;
|
|
171
|
+
rightExpr;
|
|
172
|
+
constructor(leftExpr, rightExpr) {
|
|
173
|
+
this.leftExpr = leftExpr;
|
|
174
|
+
this.rightExpr = rightExpr;
|
|
175
|
+
}
|
|
176
|
+
evaluate(variables) {
|
|
177
|
+
return this.leftExpr.evaluate(variables) || this.rightExpr.evaluate(variables);
|
|
178
|
+
}
|
|
179
|
+
toString() {
|
|
180
|
+
return `( ${this.leftExpr.toString()} or ${this.rightExpr.toString()} )`;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
class And {
|
|
184
|
+
leftExpr;
|
|
185
|
+
rightExpr;
|
|
186
|
+
constructor(leftExpr, rightExpr) {
|
|
187
|
+
this.leftExpr = leftExpr;
|
|
188
|
+
this.rightExpr = rightExpr;
|
|
189
|
+
}
|
|
190
|
+
evaluate(variables) {
|
|
191
|
+
return this.leftExpr.evaluate(variables) && this.rightExpr.evaluate(variables);
|
|
192
|
+
}
|
|
193
|
+
toString() {
|
|
194
|
+
return `( ${this.leftExpr.toString()} and ${this.rightExpr.toString()} )`;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
class Not {
|
|
198
|
+
expr;
|
|
199
|
+
constructor(expr) {
|
|
200
|
+
this.expr = expr;
|
|
201
|
+
}
|
|
202
|
+
evaluate(variables) {
|
|
203
|
+
return !this.expr.evaluate(variables);
|
|
204
|
+
}
|
|
205
|
+
toString() {
|
|
206
|
+
if (this.expr instanceof And || this.expr instanceof Or) {
|
|
207
|
+
// -- HINT: Binary Operators already have already '( ... )'.
|
|
208
|
+
return `not ${this.expr.toString()}`;
|
|
209
|
+
}
|
|
210
|
+
// -- OTHERWISE:
|
|
211
|
+
return `not ( ${this.expr.toString()} )`;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
class True {
|
|
215
|
+
evaluate(_variables) {
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
toString() {
|
|
219
|
+
return '';
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* @deprecated Use the named export `parse` instead: `import { parse } from '@cucumber/tag-expressions'`
|
|
224
|
+
*/
|
|
225
|
+
export default parse;
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFBO0FBQ3pCLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQTtBQUMzQixNQUFNLElBQUksR0FBOEI7SUFDdEMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNQLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDUCxFQUFFLEVBQUUsQ0FBQztJQUNMLEdBQUcsRUFBRSxDQUFDO0lBQ04sR0FBRyxFQUFFLENBQUM7Q0FDUCxDQUFBO0FBQ0QsTUFBTSxLQUFLLEdBQThCO0lBQ3ZDLEVBQUUsRUFBRSxNQUFNO0lBQ1YsR0FBRyxFQUFFLE1BQU07SUFDWCxHQUFHLEVBQUUsT0FBTztDQUNiLENBQUE7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQUMsS0FBYTtJQUNqQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDOUIsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQTtJQUNuQixDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQVcsRUFBRSxDQUFBO0lBQzlCLE1BQU0sU0FBUyxHQUFhLEVBQUUsQ0FBQTtJQUM5QixJQUFJLGlCQUFpQixHQUFHLE9BQU8sQ0FBQTtJQUUvQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDdkIsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQixLQUFLLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDakMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNyQixpQkFBaUIsR0FBRyxPQUFPLENBQUE7UUFDN0IsQ0FBQzthQUFNLElBQUksUUFBUSxDQUFDLEtB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SUFBSSxJQUFJLENBQUMsSUFBSSxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQ3hELDREQUE0RDtZQUM1RCxPQUFPLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFBO1FBQ3RDLENBQUM7UUFDRCxnQkFBZ0I7UUFDaEIsT0FBTyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQTtJQUMxQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLElBQUk7SUFDRCxRQUFRLENBQUMsVUFBb0I7UUFDbEMsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sRUFBRSxDQUFBO0lBQ1gsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxlQUFlLEtBQUssQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IE9QRVJBTkQgPSAnb3BlcmFuZCdcbmNvbnN0IE9QRVJBVE9SID0gJ29wZXJhdG9yJ1xuY29uc3QgUFJFQzogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHtcbiAgJygnOiAtMixcbiAgJyknOiAtMSxcbiAgb3I6IDAsXG4gIGFuZDogMSxcbiAgbm90OiAyLFxufVxuY29uc3QgQVNTT0M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gIG9yOiAnbGVmdCcsXG4gIGFuZDogJ2xlZnQnLFxuICBub3Q6ICdyaWdodCcsXG59XG5cbi8qKlxuICogUGFyc2VzIGluZml4IGJvb2xlYW4gZXhwcmVzc2lvbiAodXNpbmcgRGlqa3N0cmEncyBTaHVudGluZyBZYXJkIGFsZ29yaXRobSlcbiAqIGFuZCBidWlsZHMgYSB0cmVlIG9mIGV4cHJlc3Npb25zLiBUaGUgcm9vdCBub2RlIG9mIHRoZSBleHByZXNzaW9uIGlzIHJldHVybmVkLlxuICpcbiAqIFRoaXMgZXhwcmVzc2lvbiBjYW4gYmUgZXZhbHVhdGVkIGJ5IHBhc3NpbmcgaW4gYW4gYXJyYXkgb2YgbGl0ZXJhbHMgdGhhdCByZXNvbHZlIHRvIHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKGluZml4OiBzdHJpbmcpOiBOb2RlIHtcbiAgY29uc3QgdG9rZW5zID0gdG9rZW5pemUoaW5maXgpXG4gIGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5ldyBUcnVlKClcbiAgfVxuICBjb25zdCBleHByZXNzaW9uczogTm9kZVtdID0gW11cbiAgY29uc3Qgb3BlcmF0b3JzOiBzdHJpbmdbXSA9IFtdXG4gIGxldCBleHBlY3RlZFRva2VuVHlwZSA9IE9QRVJBTkRcblxuICB0b2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICBpZiAoaXNVbmFyeSh0b2tlbikpIHtcbiAgICAgIGNoZWNrKGV4cGVjdGVkVG9rZW5UeXBlLCBPUEVSQU5EKVxuICAgICAgb3BlcmF0b3JzLnB1c2godG9rZW4pXG4gICAgICBleHBlY3RlZFRva2VuVHlwZSA9IE9QRVJBTkRcbiAgICB9IGVsc2UgaWYgKGlzQmluYXJ5KHRva2VuKSkge1xuICAgICAgY2hlY2soZXhwZWN0ZWRUb2tlblR5cGUsIE9QRVJBVE9SKVxuICAgICAgd2hpbGUgKFxuICAgICAgICBvcGVyYXRvcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICBpc09wKHBlZWsob3BlcmF0b3JzKSkgJiZcbiAgICAgICAgKChBU1NPQ1t0b2tlbl0gPT09ICdsZWZ0JyAmJiBQUkVDW3Rva2VuXSA8PSBQUkVDW3BlZWsob3BlcmF0b3JzKV0pIHx8XG4gICAgICAgICAgKEFTU09DW3Rva2VuXSA9PT0gJ3JpZ2h0JyAmJiBQUkVDW3Rva2VuXSA8IFBSRUNbcGVlayhvcGVyYXRvcnMpXSkpXG4gICAgICApIHtcbiAgICAgICAgcHVzaEV4cHIob3BlcmF0b3JzLnBvcCgpIGFzIHN0cmluZywgZXhwcmVzc2lvbnMpXG4gICAgICB9XG4gICAgICBvcGVyYXRvcnMucHVzaCh0b2tlbilcbiAgICAgIGV4cGVjdGVkVG9rZW5UeXBlID0gT1BFUkFORFxuICAgIH0gZWxzZSBpZiAoJygnID09PSB0b2tlbikge1xuICAgICAgY2hlY2soZXhwZWN0ZWRUb2tlblR5cGUsIE9QRVJBTkQpXG4gICAgICBvcGVyYXRvcnMucHVzaCh0b2tlbilcbiAgICAgIGV4cGVjdGVkVG9rZW5UeXBlID0gT1BFUkFORFxuICAgIH0gZWxzZSBpZiAoJyknID09PSB0b2tlbikge1xuICAgICAgY2hlY2soZXhwZWN0ZWRUb2tlblR5cGUsIE9QRVJBVE9SKVxuICAgICAgd2hpbGUgKG9wZXJhdG9ycy5sZW5ndGggPiAwICYmIHBlZWsob3BlcmF0b3JzKSAhPT0gJygnKSB7XG4gICAgICAgIHB1c2hFeHByKG9wZXJhdG9ycy5wb3AoKSBhcyBzdHJpbmcsIGV4cHJlc3Npb25zKVxuICAgICAgfVxuICAgICAgaWYgKG9wZXJhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUYWcgZXhwcmVzc2lvbiBcIiR7aW5maXh9XCIgY291bGQgbm90IGJlIHBhcnNlZCBiZWNhdXNlIG9mIHN5bnRheCBlcnJvcjogVW5tYXRjaGVkICkuYFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBpZiAocGVlayhvcGVyYXRvcnMpID09PSAnKCcpIHtcbiAgICAgICAgb3BlcmF0b3JzLnBvcCgpXG4gICAgICB9XG4gICAgICBleHBlY3RlZFRva2VuVHlwZSA9IE9QRVJBVE9SXG4gICAgfSBlbHNlIHtcbiAgICAgIGNoZWNrKGV4cGVjdGVkVG9rZW5UeXBlLCBPUEVSQU5EKVxuICAgICAgcHVzaEV4cHIodG9rZW4sIGV4cHJlc3Npb25zKVxuICAgICAgZXhwZWN0ZWRUb2tlblR5cGUgPSBPUEVSQVRPUlxuICAgIH1cbiAgfSlcblxuICB3aGlsZSAob3BlcmF0b3JzLmxlbmd0aCA+IDApIHtcbiAgICBpZiAocGVlayhvcGVyYXRvcnMpID09PSAnKCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRhZyBleHByZXNzaW9uIFwiJHtpbmZpeH1cIiBjb3VsZCBub3QgYmUgcGFyc2VkIGJlY2F1c2Ugb2Ygc3ludGF4IGVycm9yOiBVbm1hdGNoZWQgKC5gXG4gICAgICApXG4gICAgfVxuICAgIHB1c2hFeHByKG9wZXJhdG9ycy5wb3AoKSBhcyBzdHJpbmcsIGV4cHJlc3Npb25zKVxuICB9XG5cbiAgcmV0dXJuIGV4cHJlc3Npb25zLnBvcCgpIGFzIE5vZGVcblxuICBmdW5jdGlvbiBjaGVjayhleHBlY3RlZFRva2VuVHlwZTogc3RyaW5nLCB0b2tlblR5cGU6IHN0cmluZykge1xuICAgIGlmIChleHBlY3RlZFRva2VuVHlwZSAhPT0gdG9rZW5UeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUYWcgZXhwcmVzc2lvbiBcIiR7aW5maXh9XCIgY291bGQgbm90IGJlIHBhcnNlZCBiZWNhdXNlIG9mIHN5bnRheCBlcnJvcjogRXhwZWN0ZWQgJHtleHBlY3RlZFRva2VuVHlwZX0uYFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2hFeHByKHRva2VuOiBzdHJpbmcsIHN0YWNrOiBOb2RlW10pIHtcbiAgICBpZiAodG9rZW4gPT09ICdhbmQnKSB7XG4gICAgICBjb25zdCByaWdodEFuZEV4cHIgPSBwb3BPcGVyYW5kKHN0YWNrKVxuICAgICAgc3RhY2sucHVzaChuZXcgQW5kKHBvcE9wZXJhbmQoc3RhY2spLCByaWdodEFuZEV4cHIpKVxuICAgIH0gZWxzZSBpZiAodG9rZW4gPT09ICdvcicpIHtcbiAgICAgIGNvbnN0IHJpZ2h0T3JFeHByID0gcG9wT3BlcmFuZChzdGFjaylcbiAgICAgIHN0YWNrLnB1c2gobmV3IE9yKHBvcE9wZXJhbmQoc3RhY2spLCByaWdodE9yRXhwcikpXG4gICAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ25vdCcpIHtcbiAgICAgIHN0YWNrLnB1c2gobmV3IE5vdChwb3BPcGVyYW5kKHN0YWNrKSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YWNrLnB1c2gobmV3IExpdGVyYWwodG9rZW4pKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBvcE9wZXJhbmQ8VD4oc3RhY2s6IFRbXSk6IFQge1xuICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRhZyBleHByZXNzaW9uIFwiJHtpbmZpeH1cIiBjb3VsZCBub3QgYmUgcGFyc2VkIGJlY2F1c2Ugb2Ygc3ludGF4IGVycm9yOiBFeHBlY3RlZCBvcGVyYW5kLmBcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHN0YWNrLnBvcCgpIGFzIFRcbiAgfVxufVxuXG5mdW5jdGlvbiB0b2tlbml6ZShleHByOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHRva2VucyA9IFtdXG4gIGxldCBpc0VzY2FwZWQgPSBmYWxzZVxuICBsZXQgdG9rZW46IHN0cmluZ1tdID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHByLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYyA9IGV4cHIuY2hhckF0KGkpXG4gICAgaWYgKGlzRXNjYXBlZCkge1xuICAgICAgaWYgKGMgPT09ICcoJyB8fCBjID09PSAnKScgfHwgYyA9PT0gJ1xcXFwnIHx8IC9cXHMvLnRlc3QoYykpIHtcbiAgICAgICAgdG9rZW4ucHVzaChjKVxuICAgICAgICBpc0VzY2FwZWQgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUYWcgZXhwcmVzc2lvbiBcIiR7ZXhwcn1cIiBjb3VsZCBub3QgYmUgcGFyc2VkIGJlY2F1c2Ugb2Ygc3ludGF4IGVycm9yOiBJbGxlZ2FsIGVzY2FwZSBiZWZvcmUgXCIke2N9XCIuYFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjID09PSAnXFxcXCcpIHtcbiAgICAgIGlzRXNjYXBlZCA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGMgPT09ICcoJyB8fCBjID09PSAnKScgfHwgL1xccy8udGVzdChjKSkge1xuICAgICAgaWYgKHRva2VuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdG9rZW5zLnB1c2godG9rZW4uam9pbignJykpXG4gICAgICAgIHRva2VuID0gW11cbiAgICAgIH1cbiAgICAgIGlmICghL1xccy8udGVzdChjKSkge1xuICAgICAgICB0b2tlbnMucHVzaChjKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0b2tlbi5wdXNoKGMpXG4gICAgfVxuICB9XG4gIGlmICh0b2tlbi5sZW5ndGggPiAwKSB7XG4gICAgdG9rZW5zLnB1c2godG9rZW4uam9pbignJykpXG4gIH1cbiAgcmV0dXJuIHRva2Vuc1xufVxuXG5mdW5jdGlvbiBpc1VuYXJ5KHRva2VuOiBzdHJpbmcpIHtcbiAgcmV0dXJuICdub3QnID09PSB0b2tlblxufVxuXG5mdW5jdGlvbiBpc0JpbmFyeSh0b2tlbjogc3RyaW5nKSB7XG4gIHJldHVybiAnb3InID09PSB0b2tlbiB8fCAnYW5kJyA9PT0gdG9rZW5cbn1cblxuZnVuY3Rpb24gaXNPcCh0b2tlbjogc3RyaW5nKSB7XG4gIHJldHVybiBBU1NPQ1t0b2tlbl0gIT09IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBwZWVrKHN0YWNrOiBzdHJpbmdbXSkge1xuICByZXR1cm4gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb2RlIHtcbiAgZXZhbHVhdGUodmFyaWFibGVzOiBzdHJpbmdbXSk6IGJvb2xlYW5cbn1cblxuY2xhc3MgTGl0ZXJhbCBpbXBsZW1lbnRzIE5vZGUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmcpIHt9XG5cbiAgcHVibGljIGV2YWx1YXRlKHZhcmlhYmxlczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gdmFyaWFibGVzLmluZGV4T2YodGhpcy52YWx1ZSkgIT09IC0xXG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgIC5yZXBsYWNlKC9cXFxcL2csICdcXFxcXFxcXCcpXG4gICAgICAucmVwbGFjZSgvXFwoL2csICdcXFxcKCcpXG4gICAgICAucmVwbGFjZSgvXFwpL2csICdcXFxcKScpXG4gICAgICAucmVwbGFjZSgvXFxzL2csICdcXFxcICcpXG4gIH1cbn1cblxuY2xhc3MgT3IgaW1wbGVtZW50cyBOb2RlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBsZWZ0RXhwcjogTm9kZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJpZ2h0RXhwcjogTm9kZVxuICApIHt9XG5cbiAgcHVibGljIGV2YWx1YXRlKHZhcmlhYmxlczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0RXhwci5ldmFsdWF0ZSh2YXJpYWJsZXMpIHx8IHRoaXMucmlnaHRFeHByLmV2YWx1YXRlKHZhcmlhYmxlcylcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYCggJHt0aGlzLmxlZnRFeHByLnRvU3RyaW5nKCl9IG9yICR7dGhpcy5yaWdodEV4cHIudG9TdHJpbmcoKX0gKWBcbiAgfVxufVxuXG5jbGFzcyBBbmQgaW1wbGVtZW50cyBOb2RlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBsZWZ0RXhwcjogTm9kZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJpZ2h0RXhwcjogTm9kZVxuICApIHt9XG5cbiAgcHVibGljIGV2YWx1YXRlKHZhcmlhYmxlczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0RXhwci5ldmFsdWF0ZSh2YXJpYWJsZXMpICYmIHRoaXMucmlnaHRFeHByLmV2YWx1YXRlKHZhcmlhYmxlcylcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYCggJHt0aGlzLmxlZnRFeHByLnRvU3RyaW5nKCl9IGFuZCAke3RoaXMucmlnaHRFeHByLnRvU3RyaW5nKCl9IClgXG4gIH1cbn1cblxuY2xhc3MgTm90IGltcGxlbWVudHMgTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZXhwcjogTm9kZSkge31cblxuICBwdWJsaWMgZXZhbHVhdGUodmFyaWFibGVzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiAhdGhpcy5leHByLmV2YWx1YXRlKHZhcmlhYmxlcylcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpIHtcbiAgICBpZiAodGhpcy5leHByIGluc3RhbmNlb2YgQW5kIHx8IHRoaXMuZXhwciBpbnN0YW5jZW9mIE9yKSB7XG4gICAgICAvLyAtLSBISU5UOiBCaW5hcnkgT3BlcmF0b3JzIGFscmVhZHkgaGF2ZSBhbHJlYWR5ICcoIC4uLiApJy5cbiAgICAgIHJldHVybiBgbm90ICR7dGhpcy5leHByLnRvU3RyaW5nKCl9YFxuICAgIH1cbiAgICAvLyAtLSBPVEhFUldJU0U6XG4gICAgcmV0dXJuIGBub3QgKCAke3RoaXMuZXhwci50b1N0cmluZygpfSApYFxuICB9XG59XG5cbmNsYXNzIFRydWUgaW1wbGVtZW50cyBOb2RlIHtcbiAgcHVibGljIGV2YWx1YXRlKF92YXJpYWJsZXM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJydcbiAgfVxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgbmFtZWQgZXhwb3J0IGBwYXJzZWAgaW5zdGVhZDogYGltcG9ydCB7IHBhcnNlIH0gZnJvbSAnQGN1Y3VtYmVyL3RhZy1leHByZXNzaW9ucydgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IHBhcnNlXG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,32 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cucumber/tag-expressions",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "10.0.0",
|
|
4
4
|
"description": "Cucumber Tag Expression parser",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "dist/
|
|
7
|
-
"types": "dist/
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
8
|
"files": [
|
|
9
|
-
"dist
|
|
10
|
-
"dist/esm"
|
|
9
|
+
"dist"
|
|
11
10
|
],
|
|
12
|
-
"module": "dist/esm/src/index.js",
|
|
13
|
-
"jsnext:main": "dist/esm/src/index.js",
|
|
14
|
-
"exports": {
|
|
15
|
-
".": {
|
|
16
|
-
"import": "./dist/esm/src/index.js",
|
|
17
|
-
"require": "./dist/cjs/src/index.js"
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
11
|
"scripts": {
|
|
21
|
-
"build
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"test:cjs": "npm run build:cjs && mocha --no-config dist/cjs/test",
|
|
26
|
-
"stryker": "TAG_EXPRESSIONS_TEST_DATA_DIR=$(pwd)/../testdata stryker run",
|
|
12
|
+
"build": "tsc --project tsconfig.build.json",
|
|
13
|
+
"postbuild": "node -e \"require('.')\"",
|
|
14
|
+
"test": "mocha",
|
|
15
|
+
"stryker": "NODE_OPTIONS=\"--loader ts-node/esm\" TAG_EXPRESSIONS_TEST_DATA_DIR=$(pwd)/../testdata stryker run",
|
|
27
16
|
"prepublishOnly": "npm run build",
|
|
28
|
-
"fix": "
|
|
29
|
-
"lint": "
|
|
17
|
+
"fix": "biome check --fix --error-on-warnings",
|
|
18
|
+
"lint": "biome check --error-on-warnings"
|
|
30
19
|
},
|
|
31
20
|
"repository": {
|
|
32
21
|
"type": "git",
|
|
@@ -42,28 +31,20 @@
|
|
|
42
31
|
},
|
|
43
32
|
"homepage": "https://github.com/cucumber/tag-expressions",
|
|
44
33
|
"devDependencies": {
|
|
45
|
-
"@
|
|
46
|
-
"@
|
|
47
|
-
"@
|
|
48
|
-
"@stryker-mutator/
|
|
49
|
-
"@stryker-mutator/
|
|
50
|
-
"@
|
|
34
|
+
"@biomejs/biome": "^2.4.13",
|
|
35
|
+
"@cucumber/biome-config": "github:cucumber/biome-config#v0.2.1",
|
|
36
|
+
"@stryker-mutator/core": "9.6.1",
|
|
37
|
+
"@stryker-mutator/mocha-runner": "9.6.1",
|
|
38
|
+
"@stryker-mutator/typescript-checker": "9.6.1",
|
|
39
|
+
"@tsconfig/recommended": "^1.0.13",
|
|
51
40
|
"@types/js-yaml": "^4.0.3",
|
|
52
41
|
"@types/mocha": "10.0.10",
|
|
53
|
-
"@types/node": "22
|
|
54
|
-
"@typescript-eslint/eslint-plugin": "^8.46.0",
|
|
55
|
-
"@typescript-eslint/parser": "^8.46.0",
|
|
56
|
-
"eslint": "^9.21.0",
|
|
57
|
-
"eslint-plugin-import": "^2.31.0",
|
|
58
|
-
"eslint-plugin-n": "^17.15.1",
|
|
59
|
-
"eslint-plugin-simple-import-sort": "^12.1.1",
|
|
60
|
-
"globals": "^17.0.0",
|
|
42
|
+
"@types/node": "^22",
|
|
61
43
|
"js-yaml": "^4.1.0",
|
|
62
|
-
"mocha": "11.7.
|
|
63
|
-
"prettier": "^3.5.2",
|
|
44
|
+
"mocha": "11.7.6",
|
|
64
45
|
"pretty-quick": "4.2.2",
|
|
65
46
|
"ts-node": "10.9.2",
|
|
66
|
-
"typescript": "
|
|
47
|
+
"typescript": "6.0.3"
|
|
67
48
|
},
|
|
68
49
|
"directories": {
|
|
69
50
|
"test": "test"
|
package/dist/cjs/package.json
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"type": "commonjs"}
|
package/dist/cjs/src/index.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parses infix boolean expression (using Dijkstra's Shunting Yard algorithm)
|
|
3
|
-
* and builds a tree of expressions. The root node of the expression is returned.
|
|
4
|
-
*
|
|
5
|
-
* This expression can be evaluated by passing in an array of literals that resolve to true
|
|
6
|
-
*/
|
|
7
|
-
export declare function parse(infix: string): Node;
|
|
8
|
-
export interface Node {
|
|
9
|
-
evaluate(variables: string[]): boolean;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* @deprecated Use the named export `parse` instead: `import { parse } from '@cucumber/tag-expressions'`
|
|
13
|
-
*/
|
|
14
|
-
export default parse;
|
|
15
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAeA;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CA4FzC;AAqDD,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;CACvC;AA4ED;;GAEG;AACH,eAAe,KAAK,CAAA"}
|
package/dist/cjs/src/index.js
DELETED
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parse = parse;
|
|
4
|
-
var OPERAND = 'operand';
|
|
5
|
-
var OPERATOR = 'operator';
|
|
6
|
-
var PREC = {
|
|
7
|
-
'(': -2,
|
|
8
|
-
')': -1,
|
|
9
|
-
or: 0,
|
|
10
|
-
and: 1,
|
|
11
|
-
not: 2,
|
|
12
|
-
};
|
|
13
|
-
var ASSOC = {
|
|
14
|
-
or: 'left',
|
|
15
|
-
and: 'left',
|
|
16
|
-
not: 'right',
|
|
17
|
-
};
|
|
18
|
-
/**
|
|
19
|
-
* Parses infix boolean expression (using Dijkstra's Shunting Yard algorithm)
|
|
20
|
-
* and builds a tree of expressions. The root node of the expression is returned.
|
|
21
|
-
*
|
|
22
|
-
* This expression can be evaluated by passing in an array of literals that resolve to true
|
|
23
|
-
*/
|
|
24
|
-
function parse(infix) {
|
|
25
|
-
var tokens = tokenize(infix);
|
|
26
|
-
if (tokens.length === 0) {
|
|
27
|
-
return new True();
|
|
28
|
-
}
|
|
29
|
-
var expressions = [];
|
|
30
|
-
var operators = [];
|
|
31
|
-
var expectedTokenType = OPERAND;
|
|
32
|
-
tokens.forEach(function (token) {
|
|
33
|
-
if (isUnary(token)) {
|
|
34
|
-
check(expectedTokenType, OPERAND);
|
|
35
|
-
operators.push(token);
|
|
36
|
-
expectedTokenType = OPERAND;
|
|
37
|
-
}
|
|
38
|
-
else if (isBinary(token)) {
|
|
39
|
-
check(expectedTokenType, OPERATOR);
|
|
40
|
-
while (operators.length > 0 &&
|
|
41
|
-
isOp(peek(operators)) &&
|
|
42
|
-
((ASSOC[token] === 'left' && PREC[token] <= PREC[peek(operators)]) ||
|
|
43
|
-
(ASSOC[token] === 'right' && PREC[token] < PREC[peek(operators)]))) {
|
|
44
|
-
pushExpr(operators.pop(), expressions);
|
|
45
|
-
}
|
|
46
|
-
operators.push(token);
|
|
47
|
-
expectedTokenType = OPERAND;
|
|
48
|
-
}
|
|
49
|
-
else if ('(' === token) {
|
|
50
|
-
check(expectedTokenType, OPERAND);
|
|
51
|
-
operators.push(token);
|
|
52
|
-
expectedTokenType = OPERAND;
|
|
53
|
-
}
|
|
54
|
-
else if (')' === token) {
|
|
55
|
-
check(expectedTokenType, OPERATOR);
|
|
56
|
-
while (operators.length > 0 && peek(operators) !== '(') {
|
|
57
|
-
pushExpr(operators.pop(), expressions);
|
|
58
|
-
}
|
|
59
|
-
if (operators.length === 0) {
|
|
60
|
-
throw new Error("Tag expression \"".concat(infix, "\" could not be parsed because of syntax error: Unmatched )."));
|
|
61
|
-
}
|
|
62
|
-
if (peek(operators) === '(') {
|
|
63
|
-
operators.pop();
|
|
64
|
-
}
|
|
65
|
-
expectedTokenType = OPERATOR;
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
check(expectedTokenType, OPERAND);
|
|
69
|
-
pushExpr(token, expressions);
|
|
70
|
-
expectedTokenType = OPERATOR;
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
while (operators.length > 0) {
|
|
74
|
-
if (peek(operators) === '(') {
|
|
75
|
-
throw new Error("Tag expression \"".concat(infix, "\" could not be parsed because of syntax error: Unmatched (."));
|
|
76
|
-
}
|
|
77
|
-
pushExpr(operators.pop(), expressions);
|
|
78
|
-
}
|
|
79
|
-
return expressions.pop();
|
|
80
|
-
function check(expectedTokenType, tokenType) {
|
|
81
|
-
if (expectedTokenType !== tokenType) {
|
|
82
|
-
throw new Error("Tag expression \"".concat(infix, "\" could not be parsed because of syntax error: Expected ").concat(expectedTokenType, "."));
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
function pushExpr(token, stack) {
|
|
86
|
-
if (token === 'and') {
|
|
87
|
-
var rightAndExpr = popOperand(stack);
|
|
88
|
-
stack.push(new And(popOperand(stack), rightAndExpr));
|
|
89
|
-
}
|
|
90
|
-
else if (token === 'or') {
|
|
91
|
-
var rightOrExpr = popOperand(stack);
|
|
92
|
-
stack.push(new Or(popOperand(stack), rightOrExpr));
|
|
93
|
-
}
|
|
94
|
-
else if (token === 'not') {
|
|
95
|
-
stack.push(new Not(popOperand(stack)));
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
stack.push(new Literal(token));
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
function popOperand(stack) {
|
|
102
|
-
if (stack.length === 0) {
|
|
103
|
-
throw new Error("Tag expression \"".concat(infix, "\" could not be parsed because of syntax error: Expected operand."));
|
|
104
|
-
}
|
|
105
|
-
return stack.pop();
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
function tokenize(expr) {
|
|
109
|
-
var tokens = [];
|
|
110
|
-
var isEscaped = false;
|
|
111
|
-
var token = [];
|
|
112
|
-
for (var i = 0; i < expr.length; i++) {
|
|
113
|
-
var c = expr.charAt(i);
|
|
114
|
-
if (isEscaped) {
|
|
115
|
-
if (c === '(' || c === ')' || c === '\\' || /\s/.test(c)) {
|
|
116
|
-
token.push(c);
|
|
117
|
-
isEscaped = false;
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
throw new Error("Tag expression \"".concat(expr, "\" could not be parsed because of syntax error: Illegal escape before \"").concat(c, "\"."));
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
else if (c === '\\') {
|
|
124
|
-
isEscaped = true;
|
|
125
|
-
}
|
|
126
|
-
else if (c === '(' || c === ')' || /\s/.test(c)) {
|
|
127
|
-
if (token.length > 0) {
|
|
128
|
-
tokens.push(token.join(''));
|
|
129
|
-
token = [];
|
|
130
|
-
}
|
|
131
|
-
if (!/\s/.test(c)) {
|
|
132
|
-
tokens.push(c);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
token.push(c);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
if (token.length > 0) {
|
|
140
|
-
tokens.push(token.join(''));
|
|
141
|
-
}
|
|
142
|
-
return tokens;
|
|
143
|
-
}
|
|
144
|
-
function isUnary(token) {
|
|
145
|
-
return 'not' === token;
|
|
146
|
-
}
|
|
147
|
-
function isBinary(token) {
|
|
148
|
-
return 'or' === token || 'and' === token;
|
|
149
|
-
}
|
|
150
|
-
function isOp(token) {
|
|
151
|
-
return ASSOC[token] !== undefined;
|
|
152
|
-
}
|
|
153
|
-
function peek(stack) {
|
|
154
|
-
return stack[stack.length - 1];
|
|
155
|
-
}
|
|
156
|
-
var Literal = /** @class */ (function () {
|
|
157
|
-
function Literal(value) {
|
|
158
|
-
this.value = value;
|
|
159
|
-
}
|
|
160
|
-
Literal.prototype.evaluate = function (variables) {
|
|
161
|
-
return variables.indexOf(this.value) !== -1;
|
|
162
|
-
};
|
|
163
|
-
Literal.prototype.toString = function () {
|
|
164
|
-
return this.value
|
|
165
|
-
.replace(/\\/g, '\\\\')
|
|
166
|
-
.replace(/\(/g, '\\(')
|
|
167
|
-
.replace(/\)/g, '\\)')
|
|
168
|
-
.replace(/\s/g, '\\ ');
|
|
169
|
-
};
|
|
170
|
-
return Literal;
|
|
171
|
-
}());
|
|
172
|
-
var Or = /** @class */ (function () {
|
|
173
|
-
function Or(leftExpr, rightExpr) {
|
|
174
|
-
this.leftExpr = leftExpr;
|
|
175
|
-
this.rightExpr = rightExpr;
|
|
176
|
-
}
|
|
177
|
-
Or.prototype.evaluate = function (variables) {
|
|
178
|
-
return this.leftExpr.evaluate(variables) || this.rightExpr.evaluate(variables);
|
|
179
|
-
};
|
|
180
|
-
Or.prototype.toString = function () {
|
|
181
|
-
return '( ' + this.leftExpr.toString() + ' or ' + this.rightExpr.toString() + ' )';
|
|
182
|
-
};
|
|
183
|
-
return Or;
|
|
184
|
-
}());
|
|
185
|
-
var And = /** @class */ (function () {
|
|
186
|
-
function And(leftExpr, rightExpr) {
|
|
187
|
-
this.leftExpr = leftExpr;
|
|
188
|
-
this.rightExpr = rightExpr;
|
|
189
|
-
}
|
|
190
|
-
And.prototype.evaluate = function (variables) {
|
|
191
|
-
return this.leftExpr.evaluate(variables) && this.rightExpr.evaluate(variables);
|
|
192
|
-
};
|
|
193
|
-
And.prototype.toString = function () {
|
|
194
|
-
return '( ' + this.leftExpr.toString() + ' and ' + this.rightExpr.toString() + ' )';
|
|
195
|
-
};
|
|
196
|
-
return And;
|
|
197
|
-
}());
|
|
198
|
-
var Not = /** @class */ (function () {
|
|
199
|
-
function Not(expr) {
|
|
200
|
-
this.expr = expr;
|
|
201
|
-
}
|
|
202
|
-
Not.prototype.evaluate = function (variables) {
|
|
203
|
-
return !this.expr.evaluate(variables);
|
|
204
|
-
};
|
|
205
|
-
Not.prototype.toString = function () {
|
|
206
|
-
if (this.expr instanceof And || this.expr instanceof Or) {
|
|
207
|
-
// -- HINT: Binary Operators already have already '( ... )'.
|
|
208
|
-
return 'not ' + this.expr.toString();
|
|
209
|
-
}
|
|
210
|
-
// -- OTHERWISE:
|
|
211
|
-
return 'not ( ' + this.expr.toString() + ' )';
|
|
212
|
-
};
|
|
213
|
-
return Not;
|
|
214
|
-
}());
|
|
215
|
-
var True = /** @class */ (function () {
|
|
216
|
-
function True() {
|
|
217
|
-
}
|
|
218
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
219
|
-
True.prototype.evaluate = function (variables) {
|
|
220
|
-
return true;
|
|
221
|
-
};
|
|
222
|
-
True.prototype.toString = function () {
|
|
223
|
-
return '';
|
|
224
|
-
};
|
|
225
|
-
return True;
|
|
226
|
-
}());
|
|
227
|
-
/**
|
|
228
|
-
* @deprecated Use the named export `parse` instead: `import { parse } from '@cucumber/tag-expressions'`
|
|
229
|
-
*/
|
|
230
|
-
exports.default = parse;
|
|
231
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../../../test/errors.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __values = (this && this.__values) || function(o) {
|
|
3
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
4
|
-
if (m) return m.call(o);
|
|
5
|
-
if (o && typeof o.length === "number") return {
|
|
6
|
-
next: function () {
|
|
7
|
-
if (o && i >= o.length) o = void 0;
|
|
8
|
-
return { value: o && o[i++], done: !o };
|
|
9
|
-
}
|
|
10
|
-
};
|
|
11
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
|
-
};
|
|
13
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
var assert_1 = __importDefault(require("assert"));
|
|
18
|
-
var fs_1 = __importDefault(require("fs"));
|
|
19
|
-
var js_yaml_1 = __importDefault(require("js-yaml"));
|
|
20
|
-
var index_js_1 = __importDefault(require("../src/index.js"));
|
|
21
|
-
var testDataDir_js_1 = require("./testDataDir.js");
|
|
22
|
-
var tests = js_yaml_1.default.load(fs_1.default.readFileSync("".concat(testDataDir_js_1.testDataDir, "/errors.yml"), 'utf-8'));
|
|
23
|
-
describe('Errors', function () {
|
|
24
|
-
var e_1, _a;
|
|
25
|
-
var _loop_1 = function (test_1) {
|
|
26
|
-
it("fails to parse \"".concat(test_1.expression, "\" with \"").concat(test_1.error, "\""), function () {
|
|
27
|
-
assert_1.default.throws(function () { return (0, index_js_1.default)(test_1.expression); }, { message: test_1.error });
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
|
-
try {
|
|
31
|
-
for (var tests_1 = __values(tests), tests_1_1 = tests_1.next(); !tests_1_1.done; tests_1_1 = tests_1.next()) {
|
|
32
|
-
var test_1 = tests_1_1.value;
|
|
33
|
-
_loop_1(test_1);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
37
|
-
finally {
|
|
38
|
-
try {
|
|
39
|
-
if (tests_1_1 && !tests_1_1.done && (_a = tests_1.return)) _a.call(tests_1);
|
|
40
|
-
}
|
|
41
|
-
finally { if (e_1) throw e_1.error; }
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
//# sourceMappingURL=errors.test.js.map
|