@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.
Files changed (45) hide show
  1. package/dist/{esm/src/index.d.ts → index.d.ts} +0 -1
  2. package/dist/index.js +226 -0
  3. package/package.json +19 -38
  4. package/dist/cjs/package.json +0 -1
  5. package/dist/cjs/src/index.d.ts +0 -15
  6. package/dist/cjs/src/index.d.ts.map +0 -1
  7. package/dist/cjs/src/index.js +0 -231
  8. package/dist/cjs/src/index.js.map +0 -1
  9. package/dist/cjs/test/errors.test.d.ts +0 -2
  10. package/dist/cjs/test/errors.test.d.ts.map +0 -1
  11. package/dist/cjs/test/errors.test.js +0 -44
  12. package/dist/cjs/test/errors.test.js.map +0 -1
  13. package/dist/cjs/test/evaluations.test.d.ts +0 -2
  14. package/dist/cjs/test/evaluations.test.d.ts.map +0 -1
  15. package/dist/cjs/test/evaluations.test.js +0 -63
  16. package/dist/cjs/test/evaluations.test.js.map +0 -1
  17. package/dist/cjs/test/parsing.test.d.ts +0 -2
  18. package/dist/cjs/test/parsing.test.d.ts.map +0 -1
  19. package/dist/cjs/test/parsing.test.js +0 -47
  20. package/dist/cjs/test/parsing.test.js.map +0 -1
  21. package/dist/cjs/test/testDataDir.d.ts +0 -2
  22. package/dist/cjs/test/testDataDir.d.ts.map +0 -1
  23. package/dist/cjs/test/testDataDir.js +0 -5
  24. package/dist/cjs/test/testDataDir.js.map +0 -1
  25. package/dist/cjs/tsconfig.build-cjs.tsbuildinfo +0 -1
  26. package/dist/esm/src/index.d.ts.map +0 -1
  27. package/dist/esm/src/index.js +0 -221
  28. package/dist/esm/src/index.js.map +0 -1
  29. package/dist/esm/test/errors.test.d.ts +0 -2
  30. package/dist/esm/test/errors.test.d.ts.map +0 -1
  31. package/dist/esm/test/errors.test.js +0 -14
  32. package/dist/esm/test/errors.test.js.map +0 -1
  33. package/dist/esm/test/evaluations.test.d.ts +0 -2
  34. package/dist/esm/test/evaluations.test.d.ts.map +0 -1
  35. package/dist/esm/test/evaluations.test.js +0 -19
  36. package/dist/esm/test/evaluations.test.js.map +0 -1
  37. package/dist/esm/test/parsing.test.d.ts +0 -2
  38. package/dist/esm/test/parsing.test.d.ts.map +0 -1
  39. package/dist/esm/test/parsing.test.js +0 -17
  40. package/dist/esm/test/parsing.test.js.map +0 -1
  41. package/dist/esm/test/testDataDir.d.ts +0 -2
  42. package/dist/esm/test/testDataDir.d.ts.map +0 -1
  43. package/dist/esm/test/testDataDir.js +0 -2
  44. package/dist/esm/test/testDataDir.js.map +0 -1
  45. package/dist/esm/tsconfig.build-esm.tsbuildinfo +0 -1
@@ -12,4 +12,3 @@ export interface Node {
12
12
  * @deprecated Use the named export `parse` instead: `import { parse } from '@cucumber/tag-expressions'`
13
13
  */
14
14
  export default parse;
15
- //# sourceMappingURL=index.d.ts.map
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": "9.1.0",
3
+ "version": "10.0.0",
4
4
  "description": "Cucumber Tag Expression parser",
5
5
  "type": "module",
6
- "main": "dist/cjs/src/index.js",
7
- "types": "dist/cjs/src/index.d.ts",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
8
  "files": [
9
- "dist/cjs",
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:cjs": "tsc --build tsconfig.build-cjs.json && cp package.cjs.json dist/cjs/package.json",
22
- "build:esm": "tsc --build tsconfig.build-esm.json",
23
- "build": "npm run build:cjs && npm run build:esm",
24
- "test": "mocha && npm run test:cjs",
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": "eslint --max-warnings 0 --fix src test && prettier --write src test",
29
- "lint": "eslint --max-warnings 0 src test && prettier --check src test"
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
- "@eslint/compat": "^2.0.0",
46
- "@eslint/eslintrc": "^3.3.0",
47
- "@eslint/js": "^9.21.0",
48
- "@stryker-mutator/core": "9.5.1",
49
- "@stryker-mutator/mocha-runner": "9.5.1",
50
- "@stryker-mutator/typescript-checker": "9.5.1",
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.19.11",
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.5",
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": "5.9.3"
47
+ "typescript": "6.0.3"
67
48
  },
68
49
  "directories": {
69
50
  "test": "test"
@@ -1 +0,0 @@
1
- {"type": "commonjs"}
@@ -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"}
@@ -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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=errors.test.d.ts.map
@@ -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