meriyah 5.0.0 → 6.0.1

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 (69) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/README.md +38 -14
  3. package/dist/meriyah.cjs +2358 -2074
  4. package/dist/meriyah.min.mjs +1 -0
  5. package/dist/{meriyah.esm.js → meriyah.mjs} +2358 -2074
  6. package/dist/meriyah.umd.js +2358 -2074
  7. package/dist/meriyah.umd.min.js +1 -1
  8. package/dist/src/common.d.ts +71 -47
  9. package/dist/src/common.d.ts.map +1 -1
  10. package/dist/src/errors.d.ts +186 -177
  11. package/dist/src/errors.d.ts.map +1 -1
  12. package/dist/src/estree.d.ts +15 -6
  13. package/dist/src/estree.d.ts.map +1 -1
  14. package/dist/src/lexer/charClassifier.d.ts +2 -2
  15. package/dist/src/lexer/charClassifier.d.ts.map +1 -1
  16. package/dist/src/lexer/common.d.ts +1 -2
  17. package/dist/src/lexer/common.d.ts.map +1 -1
  18. package/dist/src/lexer/identifier.d.ts.map +1 -1
  19. package/dist/src/lexer/index.d.ts +1 -1
  20. package/dist/src/lexer/index.d.ts.map +1 -1
  21. package/dist/src/lexer/jsx.d.ts +2 -2
  22. package/dist/src/lexer/jsx.d.ts.map +1 -1
  23. package/dist/src/lexer/numeric.d.ts.map +1 -1
  24. package/dist/src/lexer/regexp.d.ts.map +1 -1
  25. package/dist/src/lexer/scan.d.ts.map +1 -1
  26. package/dist/src/lexer/string.d.ts +1 -1
  27. package/dist/src/lexer/string.d.ts.map +1 -1
  28. package/dist/src/lexer/template.d.ts.map +1 -1
  29. package/dist/src/parser.d.ts +72 -72
  30. package/dist/src/parser.d.ts.map +1 -1
  31. package/dist/src/token.d.ts +115 -115
  32. package/dist/src/token.d.ts.map +1 -1
  33. package/package.json +26 -35
  34. package/dist/meriyah.amd.js +0 -8964
  35. package/dist/meriyah.amd.min.js +0 -1
  36. package/dist/meriyah.cjs.js +0 -8962
  37. package/dist/meriyah.cjs.min.js +0 -1
  38. package/dist/meriyah.esm.min.js +0 -1
  39. package/dist/meriyah.esm.min.mjs +0 -1
  40. package/dist/meriyah.esm.mjs +0 -8956
  41. package/dist/meriyah.iife.js +0 -8967
  42. package/dist/meriyah.iife.min.js +0 -1
  43. package/dist/meriyah.min.cjs +0 -1
  44. package/dist/meriyah.system.js +0 -8970
  45. package/dist/meriyah.system.min.js +0 -1
  46. package/dist/meriyah.umd.cjs +0 -8968
  47. package/dist/meriyah.umd.es5.js +0 -9022
  48. package/dist/meriyah.umd.es5.min.js +0 -1
  49. package/dist/meriyah.umd.min.cjs +0 -1
  50. package/src/chars.ts +0 -155
  51. package/src/common.ts +0 -834
  52. package/src/errors.ts +0 -421
  53. package/src/estree.ts +0 -827
  54. package/src/lexer/charClassifier.ts +0 -449
  55. package/src/lexer/comments.ts +0 -178
  56. package/src/lexer/common.ts +0 -140
  57. package/src/lexer/decodeHTML.ts +0 -2184
  58. package/src/lexer/identifier.ts +0 -196
  59. package/src/lexer/index.ts +0 -32
  60. package/src/lexer/jsx.ts +0 -127
  61. package/src/lexer/numeric.ts +0 -259
  62. package/src/lexer/regexp.ts +0 -156
  63. package/src/lexer/scan.ts +0 -657
  64. package/src/lexer/string.ts +0 -242
  65. package/src/lexer/template.ts +0 -108
  66. package/src/meriyah.ts +0 -28
  67. package/src/parser.ts +0 -9358
  68. package/src/token.ts +0 -307
  69. 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
- // No default
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 {
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 {
153
- report(parser, Errors.UnterminatedRegExp);
154
- }
155
- }
156
- }