mancha 0.16.7 → 0.17.3

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 (85) hide show
  1. package/.github/workflows/ci.yml +8 -7
  2. package/README.md +88 -25
  3. package/dist/browser.d.ts +42 -3
  4. package/dist/browser.js +1 -1
  5. package/dist/browser.js.map +1 -1
  6. package/dist/css_gen_utils.js +323 -412
  7. package/dist/css_gen_utils.js.map +1 -1
  8. package/dist/dome.d.ts +2 -2
  9. package/dist/dome.js +17 -0
  10. package/dist/dome.js.map +1 -1
  11. package/dist/expressions/ast.d.ts +79 -0
  12. package/dist/expressions/ast.js +6 -0
  13. package/dist/expressions/ast.js.map +1 -0
  14. package/dist/expressions/ast.test.d.ts +1 -0
  15. package/dist/expressions/ast.test.js +122 -0
  16. package/dist/expressions/ast.test.js.map +1 -0
  17. package/dist/expressions/ast_factory.d.ts +37 -0
  18. package/dist/expressions/ast_factory.js +119 -0
  19. package/dist/expressions/ast_factory.js.map +1 -0
  20. package/dist/expressions/ast_factory.test.d.ts +1 -0
  21. package/dist/expressions/ast_factory.test.js +88 -0
  22. package/dist/expressions/ast_factory.test.js.map +1 -0
  23. package/dist/expressions/constants.d.ts +6 -0
  24. package/dist/expressions/constants.js +72 -0
  25. package/dist/expressions/constants.js.map +1 -0
  26. package/dist/expressions/constants.test.d.ts +1 -0
  27. package/dist/expressions/constants.test.js +84 -0
  28. package/dist/expressions/constants.test.js.map +1 -0
  29. package/dist/expressions/eval.d.ts +101 -0
  30. package/dist/expressions/eval.js +375 -0
  31. package/dist/expressions/eval.js.map +1 -0
  32. package/dist/expressions/eval.test.d.ts +1 -0
  33. package/dist/expressions/eval.test.js +141 -0
  34. package/dist/expressions/eval.test.js.map +1 -0
  35. package/dist/expressions/expressions.test.d.ts +6 -0
  36. package/dist/expressions/expressions.test.js +7 -0
  37. package/dist/expressions/expressions.test.js.map +1 -0
  38. package/dist/expressions/index.d.ts +6 -0
  39. package/dist/expressions/index.js +7 -0
  40. package/dist/expressions/index.js.map +1 -0
  41. package/dist/expressions/parser.d.ts +32 -0
  42. package/dist/expressions/parser.js +341 -0
  43. package/dist/expressions/parser.js.map +1 -0
  44. package/dist/expressions/parser.test.d.ts +1 -0
  45. package/dist/expressions/parser.test.js +176 -0
  46. package/dist/expressions/parser.test.js.map +1 -0
  47. package/dist/expressions/tokenizer.d.ts +49 -0
  48. package/dist/expressions/tokenizer.js +253 -0
  49. package/dist/expressions/tokenizer.js.map +1 -0
  50. package/dist/expressions/tokenizer.test.d.ts +1 -0
  51. package/dist/expressions/tokenizer.test.js +99 -0
  52. package/dist/expressions/tokenizer.test.js.map +1 -0
  53. package/dist/index.d.ts +2 -0
  54. package/dist/index.js +1 -0
  55. package/dist/index.js.map +1 -1
  56. package/dist/interfaces.d.ts +1 -1
  57. package/dist/mancha.d.ts +1 -1
  58. package/dist/mancha.js +1 -1
  59. package/dist/mancha.js.map +1 -1
  60. package/dist/plugins.js +94 -23
  61. package/dist/plugins.js.map +1 -1
  62. package/dist/renderer.d.ts +5 -2
  63. package/dist/renderer.js +6 -2
  64. package/dist/renderer.js.map +1 -1
  65. package/dist/safe_browser.d.ts +4 -3
  66. package/dist/safe_browser.js +1 -1
  67. package/dist/safe_browser.js.map +1 -1
  68. package/dist/store.d.ts +59 -13
  69. package/dist/store.js +112 -38
  70. package/dist/store.js.map +1 -1
  71. package/dist/test_utils.d.ts +2 -0
  72. package/dist/test_utils.js +14 -1
  73. package/dist/test_utils.js.map +1 -1
  74. package/dist/trusted_attributes.js +2 -0
  75. package/dist/trusted_attributes.js.map +1 -1
  76. package/dist/type_checker.d.ts +1 -0
  77. package/dist/type_checker.js +113 -41
  78. package/dist/type_checker.js.map +1 -1
  79. package/dist/worker.d.ts +2 -0
  80. package/dist/worker.js +1 -0
  81. package/dist/worker.js.map +1 -1
  82. package/docs/quickstart.md +200 -0
  83. package/gulpfile.js +5 -1
  84. package/package.json +19 -6
  85. package/tsec_exemptions.json +1 -1
@@ -0,0 +1,341 @@
1
+ /*
2
+ * @license
3
+ * Portions Copyright (c) 2013, the Dart project authors.
4
+ */
5
+ import { BINARY_OPERATORS, KEYWORDS, POSTFIX_PRECEDENCE, UNARY_OPERATORS, } from './constants.js';
6
+ import { Kind, Tokenizer } from './tokenizer.js';
7
+ export const parse = (expr, astFactory) => new Parser(expr, astFactory).parse();
8
+ export class Parser {
9
+ _kind;
10
+ _tokenizer;
11
+ _ast;
12
+ _token;
13
+ _value;
14
+ constructor(input, astFactory) {
15
+ this._tokenizer = new Tokenizer(input);
16
+ this._ast = astFactory;
17
+ }
18
+ parse() {
19
+ this._advance();
20
+ const result = this._parseExpression();
21
+ // Ensure all input was consumed.
22
+ if (this._token) {
23
+ throw new Error(`Unexpected token: ${this._token.value}`);
24
+ }
25
+ return result;
26
+ }
27
+ _advance(kind, value) {
28
+ if (!this._matches(kind, value)) {
29
+ throw new Error(`Expected kind ${kind} (${value}), was ${this._token?.kind} (${this._token?.value})`);
30
+ }
31
+ const t = this._tokenizer.nextToken();
32
+ this._token = t;
33
+ this._kind = t?.kind;
34
+ this._value = t?.value;
35
+ }
36
+ _matches(kind, value) {
37
+ return !((kind && this._kind !== kind) || (value && this._value !== value));
38
+ }
39
+ _parseExpression() {
40
+ if (!this._token)
41
+ return this._ast.empty();
42
+ const expr = this._parseUnary();
43
+ return expr === undefined ? undefined : this._parsePrecedence(expr, 0);
44
+ }
45
+ // _parsePrecedence and _parseBinary implement the precedence climbing
46
+ // algorithm as described in:
47
+ // http://en.wikipedia.org/wiki/Operator-precedence_parser#Precedence_climbing_method
48
+ _parsePrecedence(left, precedence) {
49
+ if (left === undefined) {
50
+ throw new Error('Expected left to be defined.');
51
+ }
52
+ while (this._token) {
53
+ if (this._matches(Kind.GROUPER, '(')) {
54
+ const args = this._parseArguments();
55
+ left = this._ast.invoke(left, undefined, args);
56
+ }
57
+ else if (this._matches(Kind.GROUPER, '[')) {
58
+ const indexExpr = this._parseIndex();
59
+ left = this._ast.index(left, indexExpr);
60
+ }
61
+ else if (this._matches(Kind.DOT) || this._matches(Kind.OPTIONAL_DOT)) {
62
+ const optional = this._kind === Kind.OPTIONAL_DOT;
63
+ this._advance();
64
+ if (optional && this._matches(Kind.GROUPER, '[')) {
65
+ const indexExpr = this._parseIndex();
66
+ left = this._ast.index(left, indexExpr, true);
67
+ }
68
+ else if (optional && this._matches(Kind.GROUPER, '(')) {
69
+ const args = this._parseArguments();
70
+ left = this._ast.invoke(left, undefined, args, true);
71
+ }
72
+ else {
73
+ const right = this._parseUnary();
74
+ left = this._makeInvokeOrGetter(left, right, optional);
75
+ }
76
+ }
77
+ else if (this._matches(Kind.KEYWORD)) {
78
+ break;
79
+ }
80
+ else if (this._matches(Kind.OPERATOR) &&
81
+ this._token.precedence >= precedence) {
82
+ left =
83
+ this._value === '?'
84
+ ? this._parseTernary(left)
85
+ : this._parseBinary(left, this._token);
86
+ }
87
+ else {
88
+ break;
89
+ }
90
+ }
91
+ return left;
92
+ }
93
+ _makeInvokeOrGetter(left, right, optional) {
94
+ if (right === undefined) {
95
+ throw new Error('expected identifier');
96
+ }
97
+ if (right.type === 'ID') {
98
+ return this._ast.getter(left, right.value, optional);
99
+ }
100
+ else if (right.type === 'Invoke' &&
101
+ right.receiver.type === 'ID') {
102
+ const method = right.receiver;
103
+ return this._ast.invoke(left, method.value, right.arguments, optional);
104
+ }
105
+ else {
106
+ throw new Error(`expected identifier: ${right}`);
107
+ }
108
+ }
109
+ _parseBinary(left, op) {
110
+ if (!BINARY_OPERATORS.has(op.value)) {
111
+ throw new Error(`unknown operator: ${op.value}`);
112
+ }
113
+ this._advance();
114
+ let right = this._parseUnary();
115
+ while ((this._kind === Kind.OPERATOR ||
116
+ this._kind === Kind.DOT ||
117
+ this._kind === Kind.GROUPER) &&
118
+ this._token.precedence > op.precedence) {
119
+ right = this._parsePrecedence(right, this._token.precedence);
120
+ }
121
+ if (right === undefined) {
122
+ throw new Error(`Expected expression after ${op.value}`);
123
+ }
124
+ return this._ast.binary(left, op.value, right);
125
+ }
126
+ _parseUnary() {
127
+ // Handle keyword-based unary operators like 'typeof'.
128
+ if (this._matches(Kind.KEYWORD, 'typeof')) {
129
+ this._advance();
130
+ const expr = this._parsePrecedence(this._parsePrimary(), POSTFIX_PRECEDENCE);
131
+ return this._ast.unary('typeof', expr);
132
+ }
133
+ if (this._matches(Kind.OPERATOR)) {
134
+ const value = this._value;
135
+ this._advance();
136
+ // Handle unary + and - on numbers as part of the literal, not as a
137
+ // unary operator.
138
+ if (value === '+' || value === '-') {
139
+ if (this._matches(Kind.INTEGER)) {
140
+ return this._parseInteger(value);
141
+ }
142
+ else if (this._matches(Kind.DECIMAL)) {
143
+ return this._parseDecimal(value);
144
+ }
145
+ }
146
+ if (!UNARY_OPERATORS.has(value))
147
+ throw new Error(`unexpected token: ${value}`);
148
+ const expr = this._parsePrecedence(this._parsePrimary(), POSTFIX_PRECEDENCE);
149
+ return this._ast.unary(value, expr);
150
+ }
151
+ return this._parsePrimary();
152
+ }
153
+ _parseTernary(condition) {
154
+ this._advance(Kind.OPERATOR, '?');
155
+ const trueExpr = this._parseExpression();
156
+ this._advance(Kind.COLON);
157
+ const falseExpr = this._parseExpression();
158
+ return this._ast.ternary(condition, trueExpr, falseExpr);
159
+ }
160
+ _parsePrimary() {
161
+ switch (this._kind) {
162
+ case Kind.KEYWORD:
163
+ const keyword = this._value;
164
+ if (keyword === 'this') {
165
+ this._advance();
166
+ // TODO(justin): return keyword node
167
+ return this._ast.id(keyword);
168
+ }
169
+ else if (KEYWORDS.has(keyword)) {
170
+ throw new Error(`unexpected keyword: ${keyword}`);
171
+ }
172
+ throw new Error(`unrecognized keyword: ${keyword}`);
173
+ case Kind.IDENTIFIER:
174
+ return this._parseInvokeOrIdentifier();
175
+ case Kind.STRING:
176
+ return this._parseString();
177
+ case Kind.INTEGER:
178
+ return this._parseInteger();
179
+ case Kind.DECIMAL:
180
+ return this._parseDecimal();
181
+ case Kind.GROUPER:
182
+ if (this._value === '(') {
183
+ return this._parseParenOrFunction();
184
+ }
185
+ else if (this._value === '{') {
186
+ return this._parseMap();
187
+ }
188
+ else if (this._value === '[') {
189
+ return this._parseList();
190
+ }
191
+ return undefined;
192
+ case Kind.COLON:
193
+ throw new Error('unexpected token ":"');
194
+ default:
195
+ return undefined;
196
+ }
197
+ }
198
+ _parseList() {
199
+ const items = [];
200
+ do {
201
+ this._advance();
202
+ if (this._matches(Kind.GROUPER, ']'))
203
+ break;
204
+ if (this._matches(Kind.SPREAD)) {
205
+ this._advance();
206
+ const expr = this._parseExpression();
207
+ if (expr) {
208
+ items.push(this._ast.spreadElement(expr));
209
+ }
210
+ }
211
+ else {
212
+ items.push(this._parseExpression());
213
+ }
214
+ } while (this._matches(Kind.COMMA));
215
+ this._advance(Kind.GROUPER, ']');
216
+ return this._ast.list(items);
217
+ }
218
+ _parseMap() {
219
+ const properties = [];
220
+ do {
221
+ this._advance();
222
+ if (this._matches(Kind.GROUPER, '}'))
223
+ break;
224
+ if (this._matches(Kind.SPREAD)) {
225
+ this._advance();
226
+ const expr = this._parseExpression();
227
+ if (expr) {
228
+ properties.push(this._ast.spreadProperty(expr));
229
+ }
230
+ }
231
+ else {
232
+ const key = this._value;
233
+ if (this._matches(Kind.STRING) || this._matches(Kind.IDENTIFIER)) {
234
+ this._advance();
235
+ }
236
+ if (this._matches(Kind.COLON)) {
237
+ this._advance(Kind.COLON);
238
+ const value = this._parseExpression();
239
+ if (value) {
240
+ properties.push(this._ast.property(key, value));
241
+ }
242
+ }
243
+ else { // Shorthand property
244
+ properties.push(this._ast.property(key, this._ast.id(key)));
245
+ }
246
+ }
247
+ } while (this._matches(Kind.COMMA));
248
+ this._advance(Kind.GROUPER, '}');
249
+ return this._ast.map(properties);
250
+ }
251
+ _parseInvokeOrIdentifier() {
252
+ const value = this._value;
253
+ if (value === 'true') {
254
+ this._advance();
255
+ return this._ast.literal(true);
256
+ }
257
+ if (value === 'false') {
258
+ this._advance();
259
+ return this._ast.literal(false);
260
+ }
261
+ if (value === 'null') {
262
+ this._advance();
263
+ return this._ast.literal(null);
264
+ }
265
+ if (value === 'undefined') {
266
+ this._advance();
267
+ return this._ast.literal(undefined);
268
+ }
269
+ const identifier = this._parseIdentifier();
270
+ const args = this._parseArguments();
271
+ return !args ? identifier : this._ast.invoke(identifier, undefined, args);
272
+ }
273
+ _parseIdentifier() {
274
+ if (!this._matches(Kind.IDENTIFIER)) {
275
+ throw new Error(`expected identifier: ${this._value}`);
276
+ }
277
+ const value = this._value;
278
+ this._advance();
279
+ return this._ast.id(value);
280
+ }
281
+ _parseArguments() {
282
+ if (!this._matches(Kind.GROUPER, '(')) {
283
+ return undefined;
284
+ }
285
+ const args = [];
286
+ do {
287
+ this._advance();
288
+ if (this._matches(Kind.GROUPER, ')')) {
289
+ break;
290
+ }
291
+ if (this._matches(Kind.SPREAD)) {
292
+ this._advance();
293
+ const expr = this._parseExpression();
294
+ if (expr) {
295
+ args.push(this._ast.spreadElement(expr));
296
+ }
297
+ }
298
+ else {
299
+ const expr = this._parseExpression();
300
+ args.push(expr);
301
+ }
302
+ } while (this._matches(Kind.COMMA));
303
+ this._advance(Kind.GROUPER, ')');
304
+ return args;
305
+ }
306
+ _parseIndex() {
307
+ // console.assert(this._matches(Kind.GROUPER, '['));
308
+ this._advance();
309
+ const expr = this._parseExpression();
310
+ this._advance(Kind.GROUPER, ']');
311
+ return expr;
312
+ }
313
+ _parseParenOrFunction() {
314
+ const expressions = this._parseArguments();
315
+ if (this._matches(Kind.ARROW)) {
316
+ this._advance();
317
+ const body = this._parseExpression();
318
+ const params = expressions?.map((e) => e.value) ?? [];
319
+ return this._ast.arrowFunction(params, body);
320
+ }
321
+ else {
322
+ return this._ast.paren(expressions[0]);
323
+ }
324
+ }
325
+ _parseString() {
326
+ const value = this._ast.literal(this._value);
327
+ this._advance();
328
+ return value;
329
+ }
330
+ _parseInteger(prefix = '') {
331
+ const value = this._ast.literal(parseInt(`${prefix}${this._value}`, 10));
332
+ this._advance();
333
+ return value;
334
+ }
335
+ _parseDecimal(prefix = '') {
336
+ const value = this._ast.literal(parseFloat(`${prefix}${this._value}`));
337
+ this._advance();
338
+ return value;
339
+ }
340
+ }
341
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/expressions/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,176 @@
1
+ import { assert } from "../test_utils.js";
2
+ import { parse } from './parser.js';
3
+ import { DefaultAstFactory } from './ast_factory.js';
4
+ describe("Parser", () => {
5
+ const factory = new DefaultAstFactory();
6
+ const parseExpr = (expr) => parse(expr, factory);
7
+ it("should parse literals", () => {
8
+ assert.deepEqual(parseExpr("123"), factory.literal(123));
9
+ assert.deepEqual(parseExpr("'hello'"), factory.literal("hello"));
10
+ assert.deepEqual(parseExpr("true"), factory.literal(true));
11
+ assert.deepEqual(parseExpr("false"), factory.literal(false));
12
+ assert.deepEqual(parseExpr("null"), factory.literal(null));
13
+ assert.deepEqual(parseExpr("undefined"), factory.literal(undefined));
14
+ });
15
+ it("should parse identifiers", () => {
16
+ assert.deepEqual(parseExpr("foo"), factory.id("foo"));
17
+ });
18
+ it("should parse unary expressions", () => {
19
+ assert.deepEqual(parseExpr("-x"), factory.unary("-", factory.id("x")));
20
+ assert.deepEqual(parseExpr("!x"), factory.unary("!", factory.id("x")));
21
+ });
22
+ it("should parse binary expressions", () => {
23
+ assert.deepEqual(parseExpr("1 + 2"), factory.binary(factory.literal(1), "+", factory.literal(2)));
24
+ assert.deepEqual(parseExpr("x * y"), factory.binary(factory.id("x"), "*", factory.id("y")));
25
+ });
26
+ it("should respect precedence", () => {
27
+ assert.deepEqual(parseExpr("1 + 2 * 3"), factory.binary(factory.literal(1), "+", factory.binary(factory.literal(2), "*", factory.literal(3))));
28
+ assert.deepEqual(parseExpr("(1 + 2) * 3"), factory.binary(factory.paren(factory.binary(factory.literal(1), "+", factory.literal(2))), "*", factory.literal(3)));
29
+ });
30
+ it("should parse ternary expressions", () => {
31
+ assert.deepEqual(parseExpr("a ? b : c"), factory.ternary(factory.id("a"), factory.id("b"), factory.id("c")));
32
+ });
33
+ it("should parse property access", () => {
34
+ assert.deepEqual(parseExpr("obj.prop"), factory.getter(factory.id("obj"), "prop", false));
35
+ });
36
+ it("should parse method invocation", () => {
37
+ assert.deepEqual(parseExpr("obj.method()"), factory.invoke(factory.id("obj"), "method", [], false));
38
+ assert.deepEqual(parseExpr("obj.method(1, 2)"), factory.invoke(factory.id("obj"), "method", [factory.literal(1), factory.literal(2)], false));
39
+ });
40
+ it("should parse function invocation", () => {
41
+ assert.deepEqual(parseExpr("func()"), factory.invoke(factory.id("func"), undefined, []));
42
+ assert.deepEqual(parseExpr("func(1, 2)"), factory.invoke(factory.id("func"), undefined, [factory.literal(1), factory.literal(2)]));
43
+ });
44
+ it("should parse index access", () => {
45
+ assert.deepEqual(parseExpr("arr[0]"), factory.index(factory.id("arr"), factory.literal(0)));
46
+ });
47
+ it("should parse optional chaining", () => {
48
+ assert.deepEqual(parseExpr("obj?.prop"), factory.getter(factory.id("obj"), "prop", true));
49
+ assert.deepEqual(parseExpr("obj?.method()"), factory.invoke(factory.id("obj"), "method", [], true));
50
+ assert.deepEqual(parseExpr("func?.()"), factory.invoke(factory.id("func"), undefined, [], true));
51
+ assert.deepEqual(parseExpr("arr?.[0]"), factory.index(factory.id("arr"), factory.literal(0), true));
52
+ });
53
+ it("should parse array literals", () => {
54
+ assert.deepEqual(parseExpr("[]"), factory.list([]));
55
+ assert.deepEqual(parseExpr("[1, 2]"), factory.list([factory.literal(1), factory.literal(2)]));
56
+ });
57
+ it("should parse object literals", () => {
58
+ assert.deepEqual(parseExpr("{}"), factory.map([]));
59
+ assert.deepEqual(parseExpr("{a: 1, b: 2}"), factory.map([
60
+ factory.property("a", factory.literal(1)),
61
+ factory.property("b", factory.literal(2)),
62
+ ]));
63
+ });
64
+ it("should parse object literals with shorthand properties", () => {
65
+ assert.deepEqual(parseExpr("{obj}"), factory.map([factory.property("obj", factory.id("obj"))]));
66
+ assert.deepEqual(parseExpr("{a, b}"), factory.map([
67
+ factory.property("a", factory.id("a")),
68
+ factory.property("b", factory.id("b")),
69
+ ]));
70
+ });
71
+ it("should parse object literals with mixed shorthand and full properties", () => {
72
+ assert.deepEqual(parseExpr("{a: 1, b, c: 2}"), factory.map([
73
+ factory.property("a", factory.literal(1)),
74
+ factory.property("b", factory.id("b")),
75
+ factory.property("c", factory.literal(2)),
76
+ ]));
77
+ });
78
+ it("should parse object literals with trailing commas", () => {
79
+ assert.deepEqual(parseExpr("{a: 1,}"), factory.map([factory.property("a", factory.literal(1))]));
80
+ assert.deepEqual(parseExpr("{a: 1, b: 2,}"), factory.map([
81
+ factory.property("a", factory.literal(1)),
82
+ factory.property("b", factory.literal(2)),
83
+ ]));
84
+ });
85
+ it("should parse object literals with trailing commas and whitespace", () => {
86
+ assert.deepEqual(parseExpr("{a: 1, }"), factory.map([factory.property("a", factory.literal(1))]));
87
+ assert.deepEqual(parseExpr("{ a: 1 , }"), factory.map([factory.property("a", factory.literal(1))]));
88
+ });
89
+ it("should parse multiline object literals", () => {
90
+ assert.deepEqual(parseExpr(`{
91
+ a: 1,
92
+ b: 2
93
+ }`), factory.map([
94
+ factory.property("a", factory.literal(1)),
95
+ factory.property("b", factory.literal(2)),
96
+ ]));
97
+ });
98
+ it("should parse array literals with trailing commas", () => {
99
+ assert.deepEqual(parseExpr("[1,]"), factory.list([factory.literal(1)]));
100
+ assert.deepEqual(parseExpr("[1, 2,]"), factory.list([factory.literal(1), factory.literal(2)]));
101
+ });
102
+ it("should parse multiline array literals", () => {
103
+ assert.deepEqual(parseExpr(`[
104
+ 1,
105
+ 2
106
+ ]`), factory.list([factory.literal(1), factory.literal(2)]));
107
+ });
108
+ it("should parse spread operator in array", () => {
109
+ assert.deepEqual(parseExpr("[...arr]"), factory.list([factory.spreadElement(factory.id("arr"))]));
110
+ assert.deepEqual(parseExpr("[1, ...arr, 2]"), factory.list([
111
+ factory.literal(1),
112
+ factory.spreadElement(factory.id("arr")),
113
+ factory.literal(2),
114
+ ]));
115
+ });
116
+ it("should parse spread operator in object", () => {
117
+ assert.deepEqual(parseExpr("{...obj}"), factory.map([factory.spreadProperty(factory.id("obj"))]));
118
+ assert.deepEqual(parseExpr("{a: 1, ...obj, b: 2}"), factory.map([
119
+ factory.property("a", factory.literal(1)),
120
+ factory.spreadProperty(factory.id("obj")),
121
+ factory.property("b", factory.literal(2)),
122
+ ]));
123
+ });
124
+ it("should parse spread operator in function arguments", () => {
125
+ assert.deepEqual(parseExpr("func(...args)"), factory.invoke(factory.id("func"), undefined, [factory.spreadElement(factory.id("args"))]));
126
+ });
127
+ it("should parse arrow functions", () => {
128
+ assert.deepEqual(parseExpr("() => 1"), factory.arrowFunction([], factory.literal(1)));
129
+ assert.deepEqual(parseExpr("(x) => x + 1"), factory.arrowFunction(["x"], factory.binary(factory.id("x"), "+", factory.literal(1))));
130
+ assert.deepEqual(parseExpr("(x, y) => x + y"), factory.arrowFunction(["x", "y"], factory.binary(factory.id("x"), "+", factory.id("y"))));
131
+ });
132
+ it("should parse typeof expressions", () => {
133
+ assert.deepEqual(parseExpr("typeof x"), factory.unary("typeof", factory.id("x")));
134
+ assert.deepEqual(parseExpr("typeof x === 'string'"), factory.binary(factory.unary("typeof", factory.id("x")), "===", factory.literal("string")));
135
+ });
136
+ it("should throw on invalid syntax", () => {
137
+ assert.throws(() => parseExpr("1 +"), "Expected expression after +");
138
+ });
139
+ it("should throw on unconsumed tokens", () => {
140
+ // Parser must consume all input or throw an error.
141
+ assert.throws(() => parseExpr("1 2"));
142
+ assert.throws(() => parseExpr("x y"));
143
+ });
144
+ it("should not parse arrow functions with unparenthesized single parameter", () => {
145
+ // Parser requires parentheses around arrow function parameters.
146
+ assert.throws(() => parseExpr("x => x + 1"));
147
+ });
148
+ describe("'in' operator", () => {
149
+ it("should parse simple 'in' expression", () => {
150
+ assert.deepEqual(parseExpr("'name' in obj"), factory.binary(factory.literal("name"), "in", factory.id("obj")));
151
+ });
152
+ it("should parse 'in' with identifier on left side", () => {
153
+ assert.deepEqual(parseExpr("key in obj"), factory.binary(factory.id("key"), "in", factory.id("obj")));
154
+ });
155
+ it("should parse 'in' with number on left side", () => {
156
+ assert.deepEqual(parseExpr("0 in arr"), factory.binary(factory.literal(0), "in", factory.id("arr")));
157
+ });
158
+ it("should parse 'in' with correct precedence vs comparison operators", () => {
159
+ // 'in' has the same precedence as relational operators (< > <= >=)
160
+ assert.deepEqual(parseExpr("'a' in obj === true"), factory.binary(factory.binary(factory.literal("a"), "in", factory.id("obj")), "===", factory.literal(true)));
161
+ });
162
+ it("should parse 'in' with correct precedence vs logical operators", () => {
163
+ assert.deepEqual(parseExpr("'a' in obj && 'b' in obj"), factory.binary(factory.binary(factory.literal("a"), "in", factory.id("obj")), "&&", factory.binary(factory.literal("b"), "in", factory.id("obj"))));
164
+ });
165
+ it("should parse 'in' in ternary expression", () => {
166
+ assert.deepEqual(parseExpr("'a' in obj ? 1 : 0"), factory.ternary(factory.binary(factory.literal("a"), "in", factory.id("obj")), factory.literal(1), factory.literal(0)));
167
+ });
168
+ it("should parse 'in' with property access on right side", () => {
169
+ assert.deepEqual(parseExpr("'key' in obj.nested"), factory.binary(factory.literal("key"), "in", factory.getter(factory.id("obj"), "nested", false)));
170
+ });
171
+ it("should parse 'in' with parenthesized expressions", () => {
172
+ assert.deepEqual(parseExpr("('key') in (obj)"), factory.binary(factory.paren(factory.literal("key")), "in", factory.paren(factory.id("obj"))));
173
+ });
174
+ });
175
+ });
176
+ //# sourceMappingURL=parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.test.js","sourceRoot":"","sources":["../../src/expressions/parser.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ export interface Token {
2
+ kind: Kind;
3
+ value: string;
4
+ precedence: number;
5
+ }
6
+ export declare enum Kind {
7
+ STRING = 1,
8
+ IDENTIFIER = 2,
9
+ DOT = 3,
10
+ COMMA = 4,
11
+ COLON = 5,
12
+ INTEGER = 6,
13
+ DECIMAL = 7,
14
+ OPERATOR = 8,
15
+ GROUPER = 9,
16
+ KEYWORD = 10,
17
+ ARROW = 11,
18
+ OPTIONAL_DOT = 12,
19
+ SPREAD = 13
20
+ }
21
+ export declare const token: (kind: Kind, value: string, precedence?: number) => {
22
+ kind: Kind;
23
+ value: string;
24
+ precedence: number;
25
+ };
26
+ export declare class Tokenizer {
27
+ private _input;
28
+ private _index;
29
+ private _tokenStart;
30
+ private _next?;
31
+ constructor(input: string);
32
+ nextToken(): {
33
+ kind: Kind;
34
+ value: string;
35
+ precedence: number;
36
+ } | undefined;
37
+ private _advance;
38
+ private _getValue;
39
+ private _clearValue;
40
+ private _tokenizeString;
41
+ private _tokenizeIdentOrKeyword;
42
+ private _tokenizeNumber;
43
+ private _tokenizeDot;
44
+ private _tokenizeComma;
45
+ private _tokenizeColon;
46
+ private _tokenizeFraction;
47
+ private _tokenizeOperator;
48
+ private _tokenizeGrouper;
49
+ }