mancha 0.16.6 → 0.17.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 (72) hide show
  1. package/README.md +22 -19
  2. package/dist/browser.d.ts +40 -3
  3. package/dist/browser.js +1 -1
  4. package/dist/browser.js.map +1 -1
  5. package/dist/cli.js +7 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/dome.d.ts +1 -2
  8. package/dist/dome.js +2 -0
  9. package/dist/dome.js.map +1 -1
  10. package/dist/expressions/ast.d.ts +79 -0
  11. package/dist/expressions/ast.js +6 -0
  12. package/dist/expressions/ast.js.map +1 -0
  13. package/dist/expressions/ast.test.d.ts +1 -0
  14. package/dist/expressions/ast.test.js +122 -0
  15. package/dist/expressions/ast.test.js.map +1 -0
  16. package/dist/expressions/ast_factory.d.ts +37 -0
  17. package/dist/expressions/ast_factory.js +119 -0
  18. package/dist/expressions/ast_factory.js.map +1 -0
  19. package/dist/expressions/ast_factory.test.d.ts +1 -0
  20. package/dist/expressions/ast_factory.test.js +88 -0
  21. package/dist/expressions/ast_factory.test.js.map +1 -0
  22. package/dist/expressions/constants.d.ts +6 -0
  23. package/dist/expressions/constants.js +72 -0
  24. package/dist/expressions/constants.js.map +1 -0
  25. package/dist/expressions/constants.test.d.ts +1 -0
  26. package/dist/expressions/constants.test.js +84 -0
  27. package/dist/expressions/constants.test.js.map +1 -0
  28. package/dist/expressions/eval.d.ts +101 -0
  29. package/dist/expressions/eval.js +375 -0
  30. package/dist/expressions/eval.js.map +1 -0
  31. package/dist/expressions/eval.test.d.ts +1 -0
  32. package/dist/expressions/eval.test.js +141 -0
  33. package/dist/expressions/eval.test.js.map +1 -0
  34. package/dist/expressions/expressions.test.d.ts +6 -0
  35. package/dist/expressions/expressions.test.js +7 -0
  36. package/dist/expressions/expressions.test.js.map +1 -0
  37. package/dist/expressions/index.d.ts +6 -0
  38. package/dist/expressions/index.js +7 -0
  39. package/dist/expressions/index.js.map +1 -0
  40. package/dist/expressions/parser.d.ts +32 -0
  41. package/dist/expressions/parser.js +336 -0
  42. package/dist/expressions/parser.js.map +1 -0
  43. package/dist/expressions/parser.test.d.ts +1 -0
  44. package/dist/expressions/parser.test.js +132 -0
  45. package/dist/expressions/parser.test.js.map +1 -0
  46. package/dist/expressions/tokenizer.d.ts +49 -0
  47. package/dist/expressions/tokenizer.js +253 -0
  48. package/dist/expressions/tokenizer.js.map +1 -0
  49. package/dist/expressions/tokenizer.test.d.ts +1 -0
  50. package/dist/expressions/tokenizer.test.js +99 -0
  51. package/dist/expressions/tokenizer.test.js.map +1 -0
  52. package/dist/mancha.d.ts +1 -1
  53. package/dist/mancha.js +1 -1
  54. package/dist/mancha.js.map +1 -1
  55. package/dist/renderer.d.ts +5 -2
  56. package/dist/renderer.js +2 -0
  57. package/dist/renderer.js.map +1 -1
  58. package/dist/safe_browser.d.ts +4 -3
  59. package/dist/safe_browser.js +1 -1
  60. package/dist/safe_browser.js.map +1 -1
  61. package/dist/store.d.ts +51 -11
  62. package/dist/store.js +89 -31
  63. package/dist/store.js.map +1 -1
  64. package/dist/trusted_attributes.d.ts +4 -0
  65. package/dist/trusted_attributes.js +28 -0
  66. package/dist/trusted_attributes.js.map +1 -0
  67. package/dist/type_checker.d.ts +1 -0
  68. package/dist/type_checker.js +92 -30
  69. package/dist/type_checker.js.map +1 -1
  70. package/docs/quickstart.md +36 -0
  71. package/gulpfile.js +5 -1
  72. package/package.json +18 -5
@@ -0,0 +1,253 @@
1
+ /*
2
+ * @license
3
+ * Portions Copyright (c) 2013, the Dart project authors.
4
+ */
5
+ import { KEYWORDS, POSTFIX_PRECEDENCE, PRECEDENCE, WORD_OPERATORS } from './constants.js';
6
+ const _TWO_CHAR_OPS = new Set(['==', '!=', '<=', '>=', '||', '&&', '??', '?.']);
7
+ const _THREE_CHAR_OPS = new Set(['===', '!==']);
8
+ export var Kind;
9
+ (function (Kind) {
10
+ Kind[Kind["STRING"] = 1] = "STRING";
11
+ Kind[Kind["IDENTIFIER"] = 2] = "IDENTIFIER";
12
+ Kind[Kind["DOT"] = 3] = "DOT";
13
+ Kind[Kind["COMMA"] = 4] = "COMMA";
14
+ Kind[Kind["COLON"] = 5] = "COLON";
15
+ Kind[Kind["INTEGER"] = 6] = "INTEGER";
16
+ Kind[Kind["DECIMAL"] = 7] = "DECIMAL";
17
+ Kind[Kind["OPERATOR"] = 8] = "OPERATOR";
18
+ Kind[Kind["GROUPER"] = 9] = "GROUPER";
19
+ Kind[Kind["KEYWORD"] = 10] = "KEYWORD";
20
+ Kind[Kind["ARROW"] = 11] = "ARROW";
21
+ Kind[Kind["OPTIONAL_DOT"] = 12] = "OPTIONAL_DOT";
22
+ Kind[Kind["SPREAD"] = 13] = "SPREAD";
23
+ })(Kind || (Kind = {}));
24
+ export const token = (kind, value, precedence = 0) => ({
25
+ kind,
26
+ value,
27
+ precedence,
28
+ });
29
+ const _isWhitespace = (ch) => ch === 9 /* \t */ ||
30
+ ch === 10 /* \n */ ||
31
+ ch === 13 /* \r */ ||
32
+ ch === 32; /* space */
33
+ // TODO(justinfagnani): allow code points > 127
34
+ const _isIdentOrKeywordStart = (ch) => ch === 95 /* _ */ ||
35
+ ch === 36 /* $ */ ||
36
+ // ch &= ~32 puts ch into the range [65,90] [A-Z] only if ch was already in
37
+ // the that range or in the range [97,122] [a-z]. We must mutate ch only after
38
+ // checking other characters, thus the comma operator.
39
+ ((ch &= ~32), 65 /* A */ <= ch && ch <= 90); /* Z */
40
+ // TODO(justinfagnani): allow code points > 127
41
+ const _isIdentifier = (ch) => _isIdentOrKeywordStart(ch) || _isNumber(ch);
42
+ const _isKeyword = (str) => KEYWORDS.has(str);
43
+ const _isQuote = (ch) => ch === 34 /* " */ || ch === 39; /* ' */
44
+ const _isNumber = (ch) => 48 /* 0 */ <= ch && ch <= 57; /* 9 */
45
+ const _isOperator = (ch) => ch === 43 /* + */ ||
46
+ ch === 45 /* - */ ||
47
+ ch === 42 /* * */ ||
48
+ ch === 47 /* / */ ||
49
+ ch === 33 /* ! */ ||
50
+ ch === 38 /* & */ ||
51
+ ch === 37 /* % */ ||
52
+ ch === 60 /* < */ ||
53
+ ch === 61 /* = */ ||
54
+ ch === 62 /* > */ ||
55
+ ch === 63 /* ? */ ||
56
+ ch === 94 /* ^ */ ||
57
+ ch === 124; /* | */
58
+ const _isGrouper = (ch) => ch === 40 /* ( */ ||
59
+ ch === 41 /* ) */ ||
60
+ ch === 91 /* [ */ ||
61
+ ch === 93 /* ] */ ||
62
+ ch === 123 /* { */ ||
63
+ ch === 125; /* } */
64
+ const _escapeString = (str) => str.replace(/\\(.)/g, (_match, group) => {
65
+ switch (group) {
66
+ case 'n':
67
+ return '\n';
68
+ case 'r':
69
+ return '\r';
70
+ case 't':
71
+ return '\t';
72
+ case 'b':
73
+ return '\b';
74
+ case 'f':
75
+ return '\f';
76
+ default:
77
+ return group;
78
+ }
79
+ });
80
+ export class Tokenizer {
81
+ _input;
82
+ _index = -1;
83
+ _tokenStart = 0;
84
+ _next;
85
+ constructor(input) {
86
+ this._input = input;
87
+ this._advance();
88
+ }
89
+ nextToken() {
90
+ while (_isWhitespace(this._next)) {
91
+ this._advance(true);
92
+ }
93
+ if (_isQuote(this._next))
94
+ return this._tokenizeString();
95
+ if (_isIdentOrKeywordStart(this._next)) {
96
+ return this._tokenizeIdentOrKeyword();
97
+ }
98
+ if (_isNumber(this._next))
99
+ return this._tokenizeNumber();
100
+ if (this._next === 46 /* . */)
101
+ return this._tokenizeDot();
102
+ if (this._next === 44 /* , */)
103
+ return this._tokenizeComma();
104
+ if (this._next === 58 /* : */)
105
+ return this._tokenizeColon();
106
+ if (_isOperator(this._next))
107
+ return this._tokenizeOperator();
108
+ if (_isGrouper(this._next))
109
+ return this._tokenizeGrouper();
110
+ // no match, should be end of input
111
+ this._advance();
112
+ if (this._next !== undefined) {
113
+ throw new Error(`Expected end of input, got ${this._next}`);
114
+ }
115
+ return undefined;
116
+ }
117
+ _advance(resetTokenStart) {
118
+ this._index++;
119
+ if (this._index < this._input.length) {
120
+ this._next = this._input.charCodeAt(this._index);
121
+ if (resetTokenStart === true) {
122
+ this._tokenStart = this._index;
123
+ }
124
+ }
125
+ else {
126
+ this._next = undefined;
127
+ }
128
+ }
129
+ _getValue(lookahead = 0) {
130
+ const v = this._input.substring(this._tokenStart, this._index + lookahead);
131
+ if (lookahead === 0) {
132
+ this._clearValue();
133
+ }
134
+ return v;
135
+ }
136
+ _clearValue() {
137
+ this._tokenStart = this._index;
138
+ }
139
+ _tokenizeString() {
140
+ const _us = 'unterminated string';
141
+ const quoteChar = this._next;
142
+ this._advance(true);
143
+ while (this._next !== quoteChar) {
144
+ if (this._next === undefined)
145
+ throw new Error(_us);
146
+ if (this._next === 92 /* \ */) {
147
+ this._advance();
148
+ if (this._next === undefined)
149
+ throw new Error(_us);
150
+ }
151
+ this._advance();
152
+ }
153
+ const t = token(Kind.STRING, _escapeString(this._getValue()));
154
+ this._advance();
155
+ return t;
156
+ }
157
+ _tokenizeIdentOrKeyword() {
158
+ // This do/while loops assumes _isIdentifier(this._next!), so it must only
159
+ // be called if _isIdentOrKeywordStart(this._next!) has returned true.
160
+ do {
161
+ this._advance();
162
+ } while (_isIdentifier(this._next));
163
+ const value = this._getValue();
164
+ const kind = _isKeyword(value)
165
+ ? Kind.KEYWORD
166
+ : WORD_OPERATORS.has(value)
167
+ ? Kind.OPERATOR
168
+ : Kind.IDENTIFIER;
169
+ return token(kind, value, PRECEDENCE[value] ?? 0);
170
+ }
171
+ _tokenizeNumber() {
172
+ // This do/while loops assumes _isNumber(this._next!), so it must only
173
+ // be called if _isNumber(this._next!) has returned true.
174
+ do {
175
+ this._advance();
176
+ } while (_isNumber(this._next));
177
+ if (this._next === 46 /* . */)
178
+ return this._tokenizeDot();
179
+ return token(Kind.INTEGER, this._getValue());
180
+ }
181
+ _tokenizeDot() {
182
+ this._advance();
183
+ if (_isNumber(this._next))
184
+ return this._tokenizeFraction();
185
+ if (this._next === 46 /* . */) {
186
+ this._advance();
187
+ if (this._next === 46 /* . */) {
188
+ this._advance();
189
+ this._clearValue();
190
+ return token(Kind.SPREAD, '...');
191
+ }
192
+ throw new Error('Unexpected token ..');
193
+ }
194
+ this._clearValue();
195
+ return token(Kind.DOT, '.', POSTFIX_PRECEDENCE);
196
+ }
197
+ _tokenizeComma() {
198
+ this._advance(true);
199
+ return token(Kind.COMMA, ',');
200
+ }
201
+ _tokenizeColon() {
202
+ this._advance(true);
203
+ return token(Kind.COLON, ':');
204
+ }
205
+ _tokenizeFraction() {
206
+ // This do/while loops assumes _isNumber(this._next!), so it must only
207
+ // be called if _isNumber(this._next!) has returned true.
208
+ do {
209
+ this._advance();
210
+ } while (_isNumber(this._next));
211
+ return token(Kind.DECIMAL, this._getValue());
212
+ }
213
+ _tokenizeOperator() {
214
+ this._advance();
215
+ // Check for 3-char operator
216
+ let op = this._getValue(2);
217
+ if (_THREE_CHAR_OPS.has(op)) {
218
+ this._advance();
219
+ this._advance();
220
+ }
221
+ else {
222
+ // Check for 2-char operator
223
+ op = this._getValue(1);
224
+ if (op === '=>') {
225
+ this._advance();
226
+ return token(Kind.ARROW, op);
227
+ }
228
+ if (_TWO_CHAR_OPS.has(op)) {
229
+ this._advance();
230
+ }
231
+ else {
232
+ // 1-char operator
233
+ // Do nothing, we already advanced past the first char
234
+ }
235
+ }
236
+ // Check if we advanced past the token (e.g. into whitespace or next token)
237
+ // Actually _getValue() relies on _index.
238
+ // If we advanced correctly, _getValue() without arg should return the token string.
239
+ // Re-read op to be sure, using current _index
240
+ op = this._getValue();
241
+ if (op === '?.') {
242
+ return token(Kind.OPTIONAL_DOT, op, POSTFIX_PRECEDENCE);
243
+ }
244
+ return token(Kind.OPERATOR, op, PRECEDENCE[op]);
245
+ }
246
+ _tokenizeGrouper() {
247
+ const value = String.fromCharCode(this._next);
248
+ const t = token(Kind.GROUPER, value, PRECEDENCE[value]);
249
+ this._advance(true);
250
+ return t;
251
+ }
252
+ }
253
+ //# sourceMappingURL=tokenizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../src/expressions/tokenizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,99 @@
1
+ import { assert } from "../test_utils.js";
2
+ import { Tokenizer, Kind } from './tokenizer.js';
3
+ describe("Tokenizer", () => {
4
+ it("should tokenize simple expressions", () => {
5
+ const tokenizer = new Tokenizer("1 + 2");
6
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.INTEGER, value: "1", precedence: 0 });
7
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.OPERATOR, value: "+", precedence: 11 });
8
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.INTEGER, value: "2", precedence: 0 });
9
+ assert.equal(tokenizer.nextToken(), undefined);
10
+ });
11
+ it("should tokenize identifiers and keywords", () => {
12
+ const tokenizer = new Tokenizer("this is a test");
13
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.KEYWORD, value: "this", precedence: 0 });
14
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.IDENTIFIER, value: "is", precedence: 0 });
15
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.IDENTIFIER, value: "a", precedence: 0 });
16
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.IDENTIFIER, value: "test", precedence: 0 });
17
+ });
18
+ it("should tokenize strings", () => {
19
+ const tokenizer = new Tokenizer("'hello' \"world\"");
20
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.STRING, value: "hello", precedence: 0 });
21
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.STRING, value: "world", precedence: 0 });
22
+ });
23
+ it("should tokenize numbers", () => {
24
+ const tokenizer = new Tokenizer("123 45.67 .89");
25
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.INTEGER, value: "123", precedence: 0 });
26
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.DECIMAL, value: "45.67", precedence: 0 });
27
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.DECIMAL, value: ".89", precedence: 0 });
28
+ });
29
+ it("should tokenize operators", () => {
30
+ const tokenizer = new Tokenizer("+ - * / % == != > < >= <= || && ?? | !");
31
+ const ops = ["+", "-", "*", "/", "%", "==", "!=", ">", "<", ">=", "<=", "||", "&&", "??", "|", "!"];
32
+ for (const op of ops) {
33
+ const token = tokenizer.nextToken();
34
+ assert.equal(token?.kind, Kind.OPERATOR);
35
+ assert.equal(token?.value, op);
36
+ }
37
+ });
38
+ it("should tokenize optional chaining operator", () => {
39
+ const tokenizer = new Tokenizer("a?.b");
40
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.IDENTIFIER, value: "a", precedence: 0 });
41
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.OPTIONAL_DOT, value: "?.", precedence: 13 });
42
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.IDENTIFIER, value: "b", precedence: 0 });
43
+ });
44
+ it("should tokenize spread operator", () => {
45
+ const tokenizer = new Tokenizer("...arr");
46
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.SPREAD, value: "...", precedence: 0 });
47
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.IDENTIFIER, value: "arr", precedence: 0 });
48
+ });
49
+ it("should tokenize arrow function arrow", () => {
50
+ const tokenizer = new Tokenizer("() => {}");
51
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.GROUPER, value: "(", precedence: 13 });
52
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.GROUPER, value: ")", precedence: 0 });
53
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.ARROW, value: "=>", precedence: 0 });
54
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.GROUPER, value: "{", precedence: 13 });
55
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.GROUPER, value: "}", precedence: 0 });
56
+ });
57
+ it("should tokenize groupers", () => {
58
+ const tokenizer = new Tokenizer("() [] {}");
59
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.GROUPER, value: "(", precedence: 13 });
60
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.GROUPER, value: ")", precedence: 0 });
61
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.GROUPER, value: "[", precedence: 13 });
62
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.GROUPER, value: "]", precedence: 0 });
63
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.GROUPER, value: "{", precedence: 13 });
64
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.GROUPER, value: "}", precedence: 0 });
65
+ });
66
+ it("should handle escaped strings", () => {
67
+ const tokenizer = new Tokenizer("'foo\\'bar'");
68
+ assert.deepEqual(tokenizer.nextToken(), { kind: Kind.STRING, value: "foo'bar", precedence: 0 });
69
+ });
70
+ it("should throw on unterminated string", () => {
71
+ const tokenizer = new Tokenizer("'foo");
72
+ assert.throws(() => tokenizer.nextToken(), "unterminated string");
73
+ });
74
+ it("should throw on unexpected character", () => {
75
+ const tokenizer = new Tokenizer("@"); // @ is not a valid operator or identifier start
76
+ // Wait, @ is usually not valid but might be caught by default case?
77
+ // Current tokenizer implementation:
78
+ /*
79
+ if (_isQuote(this._next!)) return this._tokenizeString();
80
+ if (_isIdentOrKeywordStart(this._next!)) ...
81
+ if (_isNumber(this._next!)) ...
82
+ if (this._next === 46) ...
83
+ if (this._next === 44) ...
84
+ if (this._next === 58) ...
85
+ if (_isOperator(this._next!)) ...
86
+ if (_isGrouper(this._next!)) ...
87
+ this._advance();
88
+ if (this._next !== undefined) throw new Error...
89
+ */
90
+ // If it falls through, it advances and checks if end of input.
91
+ // If @ is input, it advances past @. _next becomes undefined (if end of string).
92
+ // Then it returns undefined.
93
+ // So '@' is ignored? That seems like a BUG.
94
+ // Let's verify this behavior.
95
+ assert.equal(tokenizer.nextToken(), undefined);
96
+ // If this passes, then unexpected characters are silently ignored, which is bad.
97
+ });
98
+ });
99
+ //# sourceMappingURL=tokenizer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.test.js","sourceRoot":"","sources":["../../src/expressions/tokenizer.test.ts"],"names":[],"mappings":"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"}
package/dist/mancha.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { Renderer } from "./browser.js";
2
- declare const Mancha: Renderer;
2
+ declare const Mancha: Renderer<import("./store.js").StoreState>;
3
3
  export default Mancha;