meriyah 4.5.0 → 6.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 (81) hide show
  1. package/CHANGELOG.md +415 -445
  2. package/README.md +52 -34
  3. package/dist/meriyah.cjs +9203 -8807
  4. package/dist/meriyah.min.mjs +1 -0
  5. package/dist/{meriyah.esm.js → meriyah.mjs} +9203 -8807
  6. package/dist/meriyah.umd.js +9203 -8807
  7. package/dist/meriyah.umd.min.js +1 -1
  8. package/dist/src/chars.d.ts +135 -135
  9. package/dist/src/common.d.ts +225 -200
  10. package/dist/src/common.d.ts.map +1 -1
  11. package/dist/src/errors.d.ts +197 -187
  12. package/dist/src/errors.d.ts.map +1 -1
  13. package/dist/src/estree.d.ts +524 -507
  14. package/dist/src/estree.d.ts.map +1 -1
  15. package/dist/src/lexer/charClassifier.d.ts +24 -24
  16. package/dist/src/lexer/charClassifier.d.ts.map +1 -1
  17. package/dist/src/lexer/comments.d.ts +14 -14
  18. package/dist/src/lexer/common.d.ts +25 -26
  19. package/dist/src/lexer/common.d.ts.map +1 -1
  20. package/dist/src/lexer/decodeHTML.d.ts +1 -1
  21. package/dist/src/lexer/decodeHTML.d.ts.map +1 -1
  22. package/dist/src/lexer/identifier.d.ts +8 -8
  23. package/dist/src/lexer/identifier.d.ts.map +1 -1
  24. package/dist/src/lexer/index.d.ts +9 -9
  25. package/dist/src/lexer/index.d.ts.map +1 -1
  26. package/dist/src/lexer/jsx.d.ts +6 -6
  27. package/dist/src/lexer/jsx.d.ts.map +1 -1
  28. package/dist/src/lexer/numeric.d.ts +5 -5
  29. package/dist/src/lexer/numeric.d.ts.map +1 -1
  30. package/dist/src/lexer/regexp.d.ts +3 -3
  31. package/dist/src/lexer/regexp.d.ts.map +1 -1
  32. package/dist/src/lexer/scan.d.ts +6 -6
  33. package/dist/src/lexer/scan.d.ts.map +1 -1
  34. package/dist/src/lexer/string.d.ts +12 -12
  35. package/dist/src/lexer/string.d.ts.map +1 -1
  36. package/dist/src/lexer/template.d.ts +4 -4
  37. package/dist/src/lexer/template.d.ts.map +1 -1
  38. package/dist/src/meriyah.d.ts +7 -7
  39. package/dist/src/meriyah.d.ts.map +1 -1
  40. package/dist/src/parser.d.ts +119 -118
  41. package/dist/src/parser.d.ts.map +1 -1
  42. package/dist/src/token.d.ts +167 -167
  43. package/dist/src/token.d.ts.map +1 -1
  44. package/dist/src/unicode.d.ts +5 -5
  45. package/package.json +44 -48
  46. package/dist/meriyah.amd.js +0 -8854
  47. package/dist/meriyah.amd.min.js +0 -1
  48. package/dist/meriyah.cjs.js +0 -8852
  49. package/dist/meriyah.cjs.min.js +0 -1
  50. package/dist/meriyah.esm.min.js +0 -1
  51. package/dist/meriyah.esm.min.mjs +0 -1
  52. package/dist/meriyah.esm.mjs +0 -8846
  53. package/dist/meriyah.iife.js +0 -8857
  54. package/dist/meriyah.iife.min.js +0 -1
  55. package/dist/meriyah.min.cjs +0 -1
  56. package/dist/meriyah.system.js +0 -8860
  57. package/dist/meriyah.system.min.js +0 -1
  58. package/dist/meriyah.umd.cjs +0 -8858
  59. package/dist/meriyah.umd.es5.js +0 -8927
  60. package/dist/meriyah.umd.es5.min.js +0 -1
  61. package/dist/meriyah.umd.min.cjs +0 -1
  62. package/src/chars.ts +0 -155
  63. package/src/common.ts +0 -841
  64. package/src/errors.ts +0 -419
  65. package/src/estree.ts +0 -817
  66. package/src/lexer/charClassifier.ts +0 -449
  67. package/src/lexer/comments.ts +0 -178
  68. package/src/lexer/common.ts +0 -140
  69. package/src/lexer/decodeHTML.ts +0 -2186
  70. package/src/lexer/identifier.ts +0 -196
  71. package/src/lexer/index.ts +0 -32
  72. package/src/lexer/jsx.ts +0 -126
  73. package/src/lexer/numeric.ts +0 -259
  74. package/src/lexer/regexp.ts +0 -156
  75. package/src/lexer/scan.ts +0 -655
  76. package/src/lexer/string.ts +0 -242
  77. package/src/lexer/template.ts +0 -108
  78. package/src/meriyah.ts +0 -29
  79. package/src/parser.ts +0 -9210
  80. package/src/token.ts +0 -307
  81. package/src/unicode.ts +0 -36
@@ -1,156 +0,0 @@
1
- import { Chars } from '../chars';
2
- import { Context, ParserState } from '../common';
3
- import { Token } from '../token';
4
- import { advanceChar } from './common';
5
- import { isIdentifierPart } from './charClassifier';
6
- import { report, Errors } from '../errors';
7
-
8
- /**
9
- * Scans regular expression
10
- *
11
- * @param parser Parser object
12
- * @param context Context masks
13
- */
14
-
15
- export function scanRegularExpression(parser: ParserState, context: Context): Token {
16
- const enum RegexState {
17
- Empty = 0,
18
- Escape = 0x1,
19
- Class = 0x2
20
- }
21
- const bodyStart = parser.index;
22
- // Scan: ('/' | '/=') RegularExpressionBody '/' RegularExpressionFlags
23
- let preparseState = RegexState.Empty;
24
-
25
- loop: while (true) {
26
- const ch = parser.currentChar;
27
- advanceChar(parser);
28
-
29
- if (preparseState & RegexState.Escape) {
30
- preparseState &= ~RegexState.Escape;
31
- } else {
32
- switch (ch) {
33
- case Chars.Slash:
34
- if (!preparseState) break loop;
35
- else break;
36
- case Chars.Backslash:
37
- preparseState |= RegexState.Escape;
38
- break;
39
- case Chars.LeftBracket:
40
- preparseState |= RegexState.Class;
41
- break;
42
- case Chars.RightBracket:
43
- preparseState &= RegexState.Escape;
44
- break;
45
- case Chars.CarriageReturn:
46
- case Chars.LineFeed:
47
- case Chars.LineSeparator:
48
- case Chars.ParagraphSeparator:
49
- report(parser, Errors.UnterminatedRegExp);
50
- default: // ignore
51
- }
52
- }
53
-
54
- if (parser.index >= parser.source.length) {
55
- return report(parser, Errors.UnterminatedRegExp);
56
- }
57
- }
58
-
59
- const bodyEnd = parser.index - 1;
60
-
61
- const enum RegexFlags {
62
- Empty = 0b0000000,
63
- IgnoreCase = 0b0000001,
64
- Global = 0b0000010,
65
- Multiline = 0b0000100,
66
- Unicode = 0b0010000,
67
- Sticky = 0b0001000,
68
- DotAll = 0b0100000,
69
- Indices = 0b1000000
70
- }
71
-
72
- let mask = RegexFlags.Empty;
73
- let char = parser.currentChar;
74
-
75
- const { index: flagStart } = parser;
76
-
77
- while (isIdentifierPart(char)) {
78
- switch (char) {
79
- case Chars.LowerG:
80
- if (mask & RegexFlags.Global) report(parser, Errors.DuplicateRegExpFlag, 'g');
81
- mask |= RegexFlags.Global;
82
- break;
83
-
84
- case Chars.LowerI:
85
- if (mask & RegexFlags.IgnoreCase) report(parser, Errors.DuplicateRegExpFlag, 'i');
86
- mask |= RegexFlags.IgnoreCase;
87
- break;
88
-
89
- case Chars.LowerM:
90
- if (mask & RegexFlags.Multiline) report(parser, Errors.DuplicateRegExpFlag, 'm');
91
- mask |= RegexFlags.Multiline;
92
- break;
93
-
94
- case Chars.LowerU:
95
- if (mask & RegexFlags.Unicode) report(parser, Errors.DuplicateRegExpFlag, 'u');
96
- mask |= RegexFlags.Unicode;
97
- break;
98
-
99
- case Chars.LowerY:
100
- if (mask & RegexFlags.Sticky) report(parser, Errors.DuplicateRegExpFlag, 'y');
101
- mask |= RegexFlags.Sticky;
102
- break;
103
-
104
- case Chars.LowerS:
105
- if (mask & RegexFlags.DotAll) report(parser, Errors.DuplicateRegExpFlag, 's');
106
- mask |= RegexFlags.DotAll;
107
- break;
108
-
109
- case Chars.LowerD:
110
- if (mask & RegexFlags.Indices) report(parser, Errors.DuplicateRegExpFlag, 'd');
111
- mask |= RegexFlags.Indices;
112
- break;
113
-
114
- default:
115
- report(parser, Errors.UnexpectedTokenRegExpFlag);
116
- }
117
-
118
- char = advanceChar(parser);
119
- }
120
-
121
- const flags = parser.source.slice(flagStart, parser.index);
122
-
123
- const pattern = parser.source.slice(bodyStart, bodyEnd);
124
-
125
- parser.tokenRegExp = { pattern, flags };
126
-
127
- if (context & Context.OptionsRaw) parser.tokenRaw = parser.source.slice(parser.tokenPos, parser.index);
128
-
129
- parser.tokenValue = validate(parser, pattern, flags);
130
-
131
- return Token.RegularExpression;
132
- }
133
-
134
- /**
135
- * Validates regular expressions
136
- *
137
- *
138
- * @param state Parser instance
139
- * @param context Context masks
140
- * @param pattern Regexp body
141
- * @param flags Regexp flags
142
- */
143
- function validate(parser: ParserState, pattern: string, flags: string): RegExp | null | Token {
144
- try {
145
- return new RegExp(pattern, flags);
146
- } catch (e) {
147
- try {
148
- // Some JavaScript engine has not supported flag "d".
149
- new RegExp(pattern, flags.replace('d', ''));
150
- // Use null as tokenValue according to ESTree spec
151
- return null;
152
- } catch (e) {
153
- report(parser, Errors.UnterminatedRegExp);
154
- }
155
- }
156
- }