immosquare-cleaner 0.1.40 → 0.1.41

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/lib/immosquare-cleaner/version.rb +1 -1
  3. data/node_modules/@eslint/config-array/README.md +9 -3
  4. data/node_modules/@eslint/config-array/dist/cjs/index.cjs +1 -0
  5. data/node_modules/@eslint/config-array/dist/esm/index.js +1 -0
  6. data/node_modules/@eslint/config-array/package.json +2 -2
  7. data/node_modules/@eslint/eslintrc/node_modules/espree/LICENSE +25 -0
  8. data/node_modules/@eslint/eslintrc/node_modules/espree/README.md +244 -0
  9. data/node_modules/@eslint/eslintrc/node_modules/espree/dist/espree.cjs +883 -0
  10. data/node_modules/@eslint/eslintrc/node_modules/espree/espree.js +177 -0
  11. data/node_modules/@eslint/eslintrc/node_modules/espree/lib/espree.js +349 -0
  12. data/node_modules/@eslint/eslintrc/node_modules/espree/lib/features.js +27 -0
  13. data/node_modules/@eslint/eslintrc/node_modules/espree/lib/options.js +123 -0
  14. data/node_modules/@eslint/eslintrc/node_modules/espree/lib/token-translator.js +263 -0
  15. data/node_modules/@eslint/eslintrc/node_modules/espree/lib/version.js +3 -0
  16. data/node_modules/@eslint/eslintrc/node_modules/espree/node_modules/acorn/CHANGELOG.md +880 -0
  17. data/node_modules/@eslint/eslintrc/node_modules/espree/node_modules/acorn/LICENSE +21 -0
  18. data/node_modules/@eslint/eslintrc/node_modules/espree/node_modules/acorn/README.md +283 -0
  19. data/node_modules/@eslint/eslintrc/node_modules/espree/node_modules/acorn/bin/acorn +4 -0
  20. data/node_modules/@eslint/eslintrc/node_modules/espree/node_modules/acorn/dist/acorn.d.mts +857 -0
  21. data/node_modules/@eslint/eslintrc/node_modules/espree/node_modules/acorn/dist/acorn.d.ts +857 -0
  22. data/node_modules/@eslint/eslintrc/node_modules/espree/node_modules/acorn/dist/acorn.js +6002 -0
  23. data/node_modules/@eslint/eslintrc/node_modules/espree/node_modules/acorn/dist/acorn.mjs +5973 -0
  24. data/node_modules/@eslint/eslintrc/node_modules/espree/node_modules/acorn/dist/bin.js +90 -0
  25. data/node_modules/@eslint/eslintrc/node_modules/espree/node_modules/acorn/package.json +50 -0
  26. data/node_modules/@eslint/eslintrc/node_modules/espree/package.json +86 -0
  27. data/node_modules/@eslint/js/package.json +1 -1
  28. data/node_modules/@eslint-community/regexpp/index.d.ts +19 -5
  29. data/node_modules/@eslint-community/regexpp/index.js +138 -17
  30. data/node_modules/@eslint-community/regexpp/index.js.map +1 -1
  31. data/node_modules/@eslint-community/regexpp/index.mjs +138 -17
  32. data/node_modules/@eslint-community/regexpp/index.mjs.map +1 -1
  33. data/node_modules/@eslint-community/regexpp/package.json +1 -3
  34. data/node_modules/acorn/CHANGELOG.md +24 -0
  35. data/node_modules/acorn/README.md +5 -6
  36. data/node_modules/acorn/dist/acorn.d.mts +8 -9
  37. data/node_modules/acorn/dist/acorn.d.ts +8 -9
  38. data/node_modules/acorn/dist/acorn.js +92 -29
  39. data/node_modules/acorn/dist/acorn.mjs +92 -29
  40. data/node_modules/acorn/package.json +3 -3
  41. data/node_modules/eslint/README.md +7 -8
  42. data/node_modules/eslint/conf/ecma-version.js +1 -1
  43. data/node_modules/eslint/conf/globals.js +6 -1
  44. data/node_modules/eslint/lib/cli.js +23 -2
  45. data/node_modules/eslint/lib/eslint/eslint-helpers.js +5 -0
  46. data/node_modules/eslint/lib/eslint/eslint.js +16 -2
  47. data/node_modules/eslint/lib/eslint/legacy-eslint.js +14 -0
  48. data/node_modules/eslint/lib/languages/js/index.js +10 -5
  49. data/node_modules/eslint/lib/languages/js/source-code/source-code.js +16 -6
  50. data/node_modules/eslint/lib/linter/apply-disable-directives.js +6 -3
  51. data/node_modules/eslint/lib/linter/config-comment-parser.js +3 -16
  52. data/node_modules/eslint/lib/linter/linter.js +194 -149
  53. data/node_modules/eslint/lib/linter/node-event-generator.js +2 -4
  54. data/node_modules/eslint/lib/linter/vfile.js +7 -0
  55. data/node_modules/eslint/lib/options.js +13 -1
  56. data/node_modules/eslint/lib/rules/no-restricted-imports.js +12 -5
  57. data/node_modules/eslint/lib/rules/no-unused-vars.js +34 -32
  58. data/node_modules/eslint/lib/rules/no-useless-backreference.js +81 -31
  59. data/node_modules/eslint/lib/rules/utils/regular-expressions.js +1 -1
  60. data/node_modules/eslint/lib/shared/flags.js +26 -0
  61. data/node_modules/eslint/lib/shared/logging.js +10 -1
  62. data/node_modules/eslint/lib/shared/types.js +1 -1
  63. data/node_modules/eslint/package.json +9 -13
  64. data/node_modules/eslint-scope/dist/eslint-scope.cjs +2 -2
  65. data/node_modules/eslint-scope/lib/referencer.js +1 -1
  66. data/node_modules/eslint-scope/lib/version.js +1 -1
  67. data/node_modules/eslint-scope/package.json +2 -2
  68. data/node_modules/espree/README.md +5 -5
  69. data/node_modules/espree/dist/espree.cjs +62 -6
  70. data/node_modules/espree/espree.js +1 -4
  71. data/node_modules/espree/lib/options.js +3 -2
  72. data/node_modules/espree/lib/token-translator.js +1 -1
  73. data/node_modules/espree/lib/version.js +1 -1
  74. data/node_modules/espree/package.json +7 -7
  75. data/node_modules/js-tokens/CHANGELOG.md +17 -0
  76. data/node_modules/js-tokens/LICENSE +1 -1
  77. data/node_modules/js-tokens/README.md +25 -7
  78. data/node_modules/js-tokens/index.js +3 -3
  79. data/node_modules/js-tokens/package.json +5 -5
  80. data/node_modules/jscodeshift/CHANGELOG.md +5 -0
  81. data/node_modules/jscodeshift/bin/jscodeshift.js +1 -1
  82. data/node_modules/jscodeshift/package.json +1 -2
  83. data/node_modules/jscodeshift/website/index.htm +9 -0
  84. data/node_modules/prettier/LICENSE +35 -34
  85. data/node_modules/prettier/doc.js +2 -2
  86. data/node_modules/prettier/doc.mjs +2 -2
  87. data/node_modules/prettier/index.cjs +8 -8
  88. data/node_modules/prettier/index.d.ts +1 -2
  89. data/node_modules/prettier/index.mjs +636 -704
  90. data/node_modules/prettier/internal/cli.mjs +4 -4
  91. data/node_modules/prettier/package.json +1 -1
  92. data/node_modules/prettier/plugins/acorn.js +14 -12
  93. data/node_modules/prettier/plugins/acorn.mjs +14 -12
  94. data/node_modules/prettier/plugins/angular.js +1 -1
  95. data/node_modules/prettier/plugins/angular.mjs +1 -1
  96. data/node_modules/prettier/plugins/babel.js +10 -11
  97. data/node_modules/prettier/plugins/babel.mjs +10 -11
  98. data/node_modules/prettier/plugins/estree.js +27 -27
  99. data/node_modules/prettier/plugins/estree.mjs +27 -27
  100. data/node_modules/prettier/plugins/flow.js +15 -16
  101. data/node_modules/prettier/plugins/flow.mjs +15 -16
  102. data/node_modules/prettier/plugins/glimmer.js +5 -5
  103. data/node_modules/prettier/plugins/glimmer.mjs +5 -5
  104. data/node_modules/prettier/plugins/graphql.js +8 -8
  105. data/node_modules/prettier/plugins/graphql.mjs +8 -8
  106. data/node_modules/prettier/plugins/html.js +17 -17
  107. data/node_modules/prettier/plugins/html.mjs +17 -17
  108. data/node_modules/prettier/plugins/markdown.js +44 -44
  109. data/node_modules/prettier/plugins/markdown.mjs +44 -44
  110. data/node_modules/prettier/plugins/meriyah.js +4 -5
  111. data/node_modules/prettier/plugins/meriyah.mjs +4 -5
  112. data/node_modules/prettier/plugins/postcss.js +26 -26
  113. data/node_modules/prettier/plugins/postcss.mjs +26 -26
  114. data/node_modules/prettier/plugins/typescript.js +15 -20
  115. data/node_modules/prettier/plugins/typescript.mjs +15 -20
  116. data/node_modules/prettier/plugins/yaml.js +6 -6
  117. data/node_modules/prettier/plugins/yaml.mjs +6 -6
  118. data/node_modules/prettier/standalone.js +31 -30
  119. data/node_modules/prettier/standalone.mjs +28 -27
  120. data/package.json +4 -4
  121. metadata +24 -2
@@ -0,0 +1,883 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var acorn = require('acorn');
6
+ var jsx = require('acorn-jsx');
7
+ var visitorKeys = require('eslint-visitor-keys');
8
+
9
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
+
11
+ function _interopNamespace(e) {
12
+ if (e && e.__esModule) return e;
13
+ var n = Object.create(null);
14
+ if (e) {
15
+ Object.keys(e).forEach(function (k) {
16
+ if (k !== 'default') {
17
+ var d = Object.getOwnPropertyDescriptor(e, k);
18
+ Object.defineProperty(n, k, d.get ? d : {
19
+ enumerable: true,
20
+ get: function () { return e[k]; }
21
+ });
22
+ }
23
+ });
24
+ }
25
+ n["default"] = e;
26
+ return Object.freeze(n);
27
+ }
28
+
29
+ var acorn__namespace = /*#__PURE__*/_interopNamespace(acorn);
30
+ var jsx__default = /*#__PURE__*/_interopDefaultLegacy(jsx);
31
+ var visitorKeys__namespace = /*#__PURE__*/_interopNamespace(visitorKeys);
32
+
33
+ /**
34
+ * @fileoverview Translates tokens between Acorn format and Esprima format.
35
+ * @author Nicholas C. Zakas
36
+ */
37
+
38
+ //------------------------------------------------------------------------------
39
+ // Requirements
40
+ //------------------------------------------------------------------------------
41
+
42
+ // none!
43
+
44
+ //------------------------------------------------------------------------------
45
+ // Private
46
+ //------------------------------------------------------------------------------
47
+
48
+
49
+ // Esprima Token Types
50
+ const Token = {
51
+ Boolean: "Boolean",
52
+ EOF: "<end>",
53
+ Identifier: "Identifier",
54
+ PrivateIdentifier: "PrivateIdentifier",
55
+ Keyword: "Keyword",
56
+ Null: "Null",
57
+ Numeric: "Numeric",
58
+ Punctuator: "Punctuator",
59
+ String: "String",
60
+ RegularExpression: "RegularExpression",
61
+ Template: "Template",
62
+ JSXIdentifier: "JSXIdentifier",
63
+ JSXText: "JSXText"
64
+ };
65
+
66
+ /**
67
+ * Converts part of a template into an Esprima token.
68
+ * @param {AcornToken[]} tokens The Acorn tokens representing the template.
69
+ * @param {string} code The source code.
70
+ * @returns {EsprimaToken} The Esprima equivalent of the template token.
71
+ * @private
72
+ */
73
+ function convertTemplatePart(tokens, code) {
74
+ const firstToken = tokens[0],
75
+ lastTemplateToken = tokens[tokens.length - 1];
76
+
77
+ const token = {
78
+ type: Token.Template,
79
+ value: code.slice(firstToken.start, lastTemplateToken.end)
80
+ };
81
+
82
+ if (firstToken.loc) {
83
+ token.loc = {
84
+ start: firstToken.loc.start,
85
+ end: lastTemplateToken.loc.end
86
+ };
87
+ }
88
+
89
+ if (firstToken.range) {
90
+ token.start = firstToken.range[0];
91
+ token.end = lastTemplateToken.range[1];
92
+ token.range = [token.start, token.end];
93
+ }
94
+
95
+ return token;
96
+ }
97
+
98
+ /**
99
+ * Contains logic to translate Acorn tokens into Esprima tokens.
100
+ * @param {Object} acornTokTypes The Acorn token types.
101
+ * @param {string} code The source code Acorn is parsing. This is necessary
102
+ * to correct the "value" property of some tokens.
103
+ * @constructor
104
+ */
105
+ function TokenTranslator(acornTokTypes, code) {
106
+
107
+ // token types
108
+ this._acornTokTypes = acornTokTypes;
109
+
110
+ // token buffer for templates
111
+ this._tokens = [];
112
+
113
+ // track the last curly brace
114
+ this._curlyBrace = null;
115
+
116
+ // the source code
117
+ this._code = code;
118
+
119
+ }
120
+
121
+ TokenTranslator.prototype = {
122
+ constructor: TokenTranslator,
123
+
124
+ /**
125
+ * Translates a single Esprima token to a single Acorn token. This may be
126
+ * inaccurate due to how templates are handled differently in Esprima and
127
+ * Acorn, but should be accurate for all other tokens.
128
+ * @param {AcornToken} token The Acorn token to translate.
129
+ * @param {Object} extra Espree extra object.
130
+ * @returns {EsprimaToken} The Esprima version of the token.
131
+ */
132
+ translate(token, extra) {
133
+
134
+ const type = token.type,
135
+ tt = this._acornTokTypes;
136
+
137
+ if (type === tt.name) {
138
+ token.type = Token.Identifier;
139
+
140
+ // TODO: See if this is an Acorn bug
141
+ if (token.value === "static") {
142
+ token.type = Token.Keyword;
143
+ }
144
+
145
+ if (extra.ecmaVersion > 5 && (token.value === "yield" || token.value === "let")) {
146
+ token.type = Token.Keyword;
147
+ }
148
+
149
+ } else if (type === tt.privateId) {
150
+ token.type = Token.PrivateIdentifier;
151
+
152
+ } else if (type === tt.semi || type === tt.comma ||
153
+ type === tt.parenL || type === tt.parenR ||
154
+ type === tt.braceL || type === tt.braceR ||
155
+ type === tt.dot || type === tt.bracketL ||
156
+ type === tt.colon || type === tt.question ||
157
+ type === tt.bracketR || type === tt.ellipsis ||
158
+ type === tt.arrow || type === tt.jsxTagStart ||
159
+ type === tt.incDec || type === tt.starstar ||
160
+ type === tt.jsxTagEnd || type === tt.prefix ||
161
+ type === tt.questionDot ||
162
+ (type.binop && !type.keyword) ||
163
+ type.isAssign) {
164
+
165
+ token.type = Token.Punctuator;
166
+ token.value = this._code.slice(token.start, token.end);
167
+ } else if (type === tt.jsxName) {
168
+ token.type = Token.JSXIdentifier;
169
+ } else if (type.label === "jsxText" || type === tt.jsxAttrValueToken) {
170
+ token.type = Token.JSXText;
171
+ } else if (type.keyword) {
172
+ if (type.keyword === "true" || type.keyword === "false") {
173
+ token.type = Token.Boolean;
174
+ } else if (type.keyword === "null") {
175
+ token.type = Token.Null;
176
+ } else {
177
+ token.type = Token.Keyword;
178
+ }
179
+ } else if (type === tt.num) {
180
+ token.type = Token.Numeric;
181
+ token.value = this._code.slice(token.start, token.end);
182
+ } else if (type === tt.string) {
183
+
184
+ if (extra.jsxAttrValueToken) {
185
+ extra.jsxAttrValueToken = false;
186
+ token.type = Token.JSXText;
187
+ } else {
188
+ token.type = Token.String;
189
+ }
190
+
191
+ token.value = this._code.slice(token.start, token.end);
192
+ } else if (type === tt.regexp) {
193
+ token.type = Token.RegularExpression;
194
+ const value = token.value;
195
+
196
+ token.regex = {
197
+ flags: value.flags,
198
+ pattern: value.pattern
199
+ };
200
+ token.value = `/${value.pattern}/${value.flags}`;
201
+ }
202
+
203
+ return token;
204
+ },
205
+
206
+ /**
207
+ * Function to call during Acorn's onToken handler.
208
+ * @param {AcornToken} token The Acorn token.
209
+ * @param {Object} extra The Espree extra object.
210
+ * @returns {void}
211
+ */
212
+ onToken(token, extra) {
213
+
214
+ const tt = this._acornTokTypes,
215
+ tokens = extra.tokens,
216
+ templateTokens = this._tokens;
217
+
218
+ /**
219
+ * Flushes the buffered template tokens and resets the template
220
+ * tracking.
221
+ * @returns {void}
222
+ * @private
223
+ */
224
+ const translateTemplateTokens = () => {
225
+ tokens.push(convertTemplatePart(this._tokens, this._code));
226
+ this._tokens = [];
227
+ };
228
+
229
+ if (token.type === tt.eof) {
230
+
231
+ // might be one last curlyBrace
232
+ if (this._curlyBrace) {
233
+ tokens.push(this.translate(this._curlyBrace, extra));
234
+ }
235
+
236
+ return;
237
+ }
238
+
239
+ if (token.type === tt.backQuote) {
240
+
241
+ // if there's already a curly, it's not part of the template
242
+ if (this._curlyBrace) {
243
+ tokens.push(this.translate(this._curlyBrace, extra));
244
+ this._curlyBrace = null;
245
+ }
246
+
247
+ templateTokens.push(token);
248
+
249
+ // it's the end
250
+ if (templateTokens.length > 1) {
251
+ translateTemplateTokens();
252
+ }
253
+
254
+ return;
255
+ }
256
+ if (token.type === tt.dollarBraceL) {
257
+ templateTokens.push(token);
258
+ translateTemplateTokens();
259
+ return;
260
+ }
261
+ if (token.type === tt.braceR) {
262
+
263
+ // if there's already a curly, it's not part of the template
264
+ if (this._curlyBrace) {
265
+ tokens.push(this.translate(this._curlyBrace, extra));
266
+ }
267
+
268
+ // store new curly for later
269
+ this._curlyBrace = token;
270
+ return;
271
+ }
272
+ if (token.type === tt.template || token.type === tt.invalidTemplate) {
273
+ if (this._curlyBrace) {
274
+ templateTokens.push(this._curlyBrace);
275
+ this._curlyBrace = null;
276
+ }
277
+
278
+ templateTokens.push(token);
279
+ return;
280
+ }
281
+
282
+ if (this._curlyBrace) {
283
+ tokens.push(this.translate(this._curlyBrace, extra));
284
+ this._curlyBrace = null;
285
+ }
286
+
287
+ tokens.push(this.translate(token, extra));
288
+ }
289
+ };
290
+
291
+ /**
292
+ * @fileoverview A collection of methods for processing Espree's options.
293
+ * @author Kai Cataldo
294
+ */
295
+
296
+ //------------------------------------------------------------------------------
297
+ // Helpers
298
+ //------------------------------------------------------------------------------
299
+
300
+ const SUPPORTED_VERSIONS = [
301
+ 3,
302
+ 5,
303
+ 6, // 2015
304
+ 7, // 2016
305
+ 8, // 2017
306
+ 9, // 2018
307
+ 10, // 2019
308
+ 11, // 2020
309
+ 12, // 2021
310
+ 13, // 2022
311
+ 14, // 2023
312
+ 15 // 2024
313
+ ];
314
+
315
+ /**
316
+ * Get the latest ECMAScript version supported by Espree.
317
+ * @returns {number} The latest ECMAScript version.
318
+ */
319
+ function getLatestEcmaVersion() {
320
+ return SUPPORTED_VERSIONS[SUPPORTED_VERSIONS.length - 1];
321
+ }
322
+
323
+ /**
324
+ * Get the list of ECMAScript versions supported by Espree.
325
+ * @returns {number[]} An array containing the supported ECMAScript versions.
326
+ */
327
+ function getSupportedEcmaVersions() {
328
+ return [...SUPPORTED_VERSIONS];
329
+ }
330
+
331
+ /**
332
+ * Normalize ECMAScript version from the initial config
333
+ * @param {(number|"latest")} ecmaVersion ECMAScript version from the initial config
334
+ * @throws {Error} throws an error if the ecmaVersion is invalid.
335
+ * @returns {number} normalized ECMAScript version
336
+ */
337
+ function normalizeEcmaVersion(ecmaVersion = 5) {
338
+
339
+ let version = ecmaVersion === "latest" ? getLatestEcmaVersion() : ecmaVersion;
340
+
341
+ if (typeof version !== "number") {
342
+ throw new Error(`ecmaVersion must be a number or "latest". Received value of type ${typeof ecmaVersion} instead.`);
343
+ }
344
+
345
+ // Calculate ECMAScript edition number from official year version starting with
346
+ // ES2015, which corresponds with ES6 (or a difference of 2009).
347
+ if (version >= 2015) {
348
+ version -= 2009;
349
+ }
350
+
351
+ if (!SUPPORTED_VERSIONS.includes(version)) {
352
+ throw new Error("Invalid ecmaVersion.");
353
+ }
354
+
355
+ return version;
356
+ }
357
+
358
+ /**
359
+ * Normalize sourceType from the initial config
360
+ * @param {string} sourceType to normalize
361
+ * @throws {Error} throw an error if sourceType is invalid
362
+ * @returns {string} normalized sourceType
363
+ */
364
+ function normalizeSourceType(sourceType = "script") {
365
+ if (sourceType === "script" || sourceType === "module") {
366
+ return sourceType;
367
+ }
368
+
369
+ if (sourceType === "commonjs") {
370
+ return "script";
371
+ }
372
+
373
+ throw new Error("Invalid sourceType.");
374
+ }
375
+
376
+ /**
377
+ * Normalize parserOptions
378
+ * @param {Object} options the parser options to normalize
379
+ * @throws {Error} throw an error if found invalid option.
380
+ * @returns {Object} normalized options
381
+ */
382
+ function normalizeOptions(options) {
383
+ const ecmaVersion = normalizeEcmaVersion(options.ecmaVersion);
384
+ const sourceType = normalizeSourceType(options.sourceType);
385
+ const ranges = options.range === true;
386
+ const locations = options.loc === true;
387
+
388
+ if (ecmaVersion !== 3 && options.allowReserved) {
389
+
390
+ // a value of `false` is intentionally allowed here, so a shared config can overwrite it when needed
391
+ throw new Error("`allowReserved` is only supported when ecmaVersion is 3");
392
+ }
393
+ if (typeof options.allowReserved !== "undefined" && typeof options.allowReserved !== "boolean") {
394
+ throw new Error("`allowReserved`, when present, must be `true` or `false`");
395
+ }
396
+ const allowReserved = ecmaVersion === 3 ? (options.allowReserved || "never") : false;
397
+ const ecmaFeatures = options.ecmaFeatures || {};
398
+ const allowReturnOutsideFunction = options.sourceType === "commonjs" ||
399
+ Boolean(ecmaFeatures.globalReturn);
400
+
401
+ if (sourceType === "module" && ecmaVersion < 6) {
402
+ throw new Error("sourceType 'module' is not supported when ecmaVersion < 2015. Consider adding `{ ecmaVersion: 2015 }` to the parser options.");
403
+ }
404
+
405
+ return Object.assign({}, options, {
406
+ ecmaVersion,
407
+ sourceType,
408
+ ranges,
409
+ locations,
410
+ allowReserved,
411
+ allowReturnOutsideFunction
412
+ });
413
+ }
414
+
415
+ /* eslint no-param-reassign: 0 -- stylistic choice */
416
+
417
+
418
+ const STATE = Symbol("espree's internal state");
419
+ const ESPRIMA_FINISH_NODE = Symbol("espree's esprimaFinishNode");
420
+
421
+
422
+ /**
423
+ * Converts an Acorn comment to a Esprima comment.
424
+ * @param {boolean} block True if it's a block comment, false if not.
425
+ * @param {string} text The text of the comment.
426
+ * @param {int} start The index at which the comment starts.
427
+ * @param {int} end The index at which the comment ends.
428
+ * @param {Location} startLoc The location at which the comment starts.
429
+ * @param {Location} endLoc The location at which the comment ends.
430
+ * @param {string} code The source code being parsed.
431
+ * @returns {Object} The comment object.
432
+ * @private
433
+ */
434
+ function convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc, code) {
435
+ let type;
436
+
437
+ if (block) {
438
+ type = "Block";
439
+ } else if (code.slice(start, start + 2) === "#!") {
440
+ type = "Hashbang";
441
+ } else {
442
+ type = "Line";
443
+ }
444
+
445
+ const comment = {
446
+ type,
447
+ value: text
448
+ };
449
+
450
+ if (typeof start === "number") {
451
+ comment.start = start;
452
+ comment.end = end;
453
+ comment.range = [start, end];
454
+ }
455
+
456
+ if (typeof startLoc === "object") {
457
+ comment.loc = {
458
+ start: startLoc,
459
+ end: endLoc
460
+ };
461
+ }
462
+
463
+ return comment;
464
+ }
465
+
466
+ var espree = () => Parser => {
467
+ const tokTypes = Object.assign({}, Parser.acorn.tokTypes);
468
+
469
+ if (Parser.acornJsx) {
470
+ Object.assign(tokTypes, Parser.acornJsx.tokTypes);
471
+ }
472
+
473
+ return class Espree extends Parser {
474
+ constructor(opts, code) {
475
+ if (typeof opts !== "object" || opts === null) {
476
+ opts = {};
477
+ }
478
+ if (typeof code !== "string" && !(code instanceof String)) {
479
+ code = String(code);
480
+ }
481
+
482
+ // save original source type in case of commonjs
483
+ const originalSourceType = opts.sourceType;
484
+ const options = normalizeOptions(opts);
485
+ const ecmaFeatures = options.ecmaFeatures || {};
486
+ const tokenTranslator =
487
+ options.tokens === true
488
+ ? new TokenTranslator(tokTypes, code)
489
+ : null;
490
+
491
+ /*
492
+ * Data that is unique to Espree and is not represented internally
493
+ * in Acorn.
494
+ *
495
+ * For ES2023 hashbangs, Espree will call `onComment()` during the
496
+ * constructor, so we must define state before having access to
497
+ * `this`.
498
+ */
499
+ const state = {
500
+ originalSourceType: originalSourceType || options.sourceType,
501
+ tokens: tokenTranslator ? [] : null,
502
+ comments: options.comment === true ? [] : null,
503
+ impliedStrict: ecmaFeatures.impliedStrict === true && options.ecmaVersion >= 5,
504
+ ecmaVersion: options.ecmaVersion,
505
+ jsxAttrValueToken: false,
506
+ lastToken: null,
507
+ templateElements: []
508
+ };
509
+
510
+ // Initialize acorn parser.
511
+ super({
512
+
513
+ // do not use spread, because we don't want to pass any unknown options to acorn
514
+ ecmaVersion: options.ecmaVersion,
515
+ sourceType: options.sourceType,
516
+ ranges: options.ranges,
517
+ locations: options.locations,
518
+ allowReserved: options.allowReserved,
519
+
520
+ // Truthy value is true for backward compatibility.
521
+ allowReturnOutsideFunction: options.allowReturnOutsideFunction,
522
+
523
+ // Collect tokens
524
+ onToken(token) {
525
+ if (tokenTranslator) {
526
+
527
+ // Use `tokens`, `ecmaVersion`, and `jsxAttrValueToken` in the state.
528
+ tokenTranslator.onToken(token, state);
529
+ }
530
+ if (token.type !== tokTypes.eof) {
531
+ state.lastToken = token;
532
+ }
533
+ },
534
+
535
+ // Collect comments
536
+ onComment(block, text, start, end, startLoc, endLoc) {
537
+ if (state.comments) {
538
+ const comment = convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc, code);
539
+
540
+ state.comments.push(comment);
541
+ }
542
+ }
543
+ }, code);
544
+
545
+ /*
546
+ * We put all of this data into a symbol property as a way to avoid
547
+ * potential naming conflicts with future versions of Acorn.
548
+ */
549
+ this[STATE] = state;
550
+ }
551
+
552
+ tokenize() {
553
+ do {
554
+ this.next();
555
+ } while (this.type !== tokTypes.eof);
556
+
557
+ // Consume the final eof token
558
+ this.next();
559
+
560
+ const extra = this[STATE];
561
+ const tokens = extra.tokens;
562
+
563
+ if (extra.comments) {
564
+ tokens.comments = extra.comments;
565
+ }
566
+
567
+ return tokens;
568
+ }
569
+
570
+ finishNode(...args) {
571
+ const result = super.finishNode(...args);
572
+
573
+ return this[ESPRIMA_FINISH_NODE](result);
574
+ }
575
+
576
+ finishNodeAt(...args) {
577
+ const result = super.finishNodeAt(...args);
578
+
579
+ return this[ESPRIMA_FINISH_NODE](result);
580
+ }
581
+
582
+ parse() {
583
+ const extra = this[STATE];
584
+ const program = super.parse();
585
+
586
+ program.sourceType = extra.originalSourceType;
587
+
588
+ if (extra.comments) {
589
+ program.comments = extra.comments;
590
+ }
591
+ if (extra.tokens) {
592
+ program.tokens = extra.tokens;
593
+ }
594
+
595
+ /*
596
+ * Adjust opening and closing position of program to match Esprima.
597
+ * Acorn always starts programs at range 0 whereas Esprima starts at the
598
+ * first AST node's start (the only real difference is when there's leading
599
+ * whitespace or leading comments). Acorn also counts trailing whitespace
600
+ * as part of the program whereas Esprima only counts up to the last token.
601
+ */
602
+ if (program.body.length) {
603
+ const [firstNode] = program.body;
604
+
605
+ if (program.range) {
606
+ program.range[0] = firstNode.range[0];
607
+ }
608
+ if (program.loc) {
609
+ program.loc.start = firstNode.loc.start;
610
+ }
611
+ program.start = firstNode.start;
612
+ }
613
+ if (extra.lastToken) {
614
+ if (program.range) {
615
+ program.range[1] = extra.lastToken.range[1];
616
+ }
617
+ if (program.loc) {
618
+ program.loc.end = extra.lastToken.loc.end;
619
+ }
620
+ program.end = extra.lastToken.end;
621
+ }
622
+
623
+
624
+ /*
625
+ * https://github.com/eslint/espree/issues/349
626
+ * Ensure that template elements have correct range information.
627
+ * This is one location where Acorn produces a different value
628
+ * for its start and end properties vs. the values present in the
629
+ * range property. In order to avoid confusion, we set the start
630
+ * and end properties to the values that are present in range.
631
+ * This is done here, instead of in finishNode(), because Acorn
632
+ * uses the values of start and end internally while parsing, making
633
+ * it dangerous to change those values while parsing is ongoing.
634
+ * By waiting until the end of parsing, we can safely change these
635
+ * values without affect any other part of the process.
636
+ */
637
+ this[STATE].templateElements.forEach(templateElement => {
638
+ const startOffset = -1;
639
+ const endOffset = templateElement.tail ? 1 : 2;
640
+
641
+ templateElement.start += startOffset;
642
+ templateElement.end += endOffset;
643
+
644
+ if (templateElement.range) {
645
+ templateElement.range[0] += startOffset;
646
+ templateElement.range[1] += endOffset;
647
+ }
648
+
649
+ if (templateElement.loc) {
650
+ templateElement.loc.start.column += startOffset;
651
+ templateElement.loc.end.column += endOffset;
652
+ }
653
+ });
654
+
655
+ return program;
656
+ }
657
+
658
+ parseTopLevel(node) {
659
+ if (this[STATE].impliedStrict) {
660
+ this.strict = true;
661
+ }
662
+ return super.parseTopLevel(node);
663
+ }
664
+
665
+ /**
666
+ * Overwrites the default raise method to throw Esprima-style errors.
667
+ * @param {int} pos The position of the error.
668
+ * @param {string} message The error message.
669
+ * @throws {SyntaxError} A syntax error.
670
+ * @returns {void}
671
+ */
672
+ raise(pos, message) {
673
+ const loc = Parser.acorn.getLineInfo(this.input, pos);
674
+ const err = new SyntaxError(message);
675
+
676
+ err.index = pos;
677
+ err.lineNumber = loc.line;
678
+ err.column = loc.column + 1; // acorn uses 0-based columns
679
+ throw err;
680
+ }
681
+
682
+ /**
683
+ * Overwrites the default raise method to throw Esprima-style errors.
684
+ * @param {int} pos The position of the error.
685
+ * @param {string} message The error message.
686
+ * @throws {SyntaxError} A syntax error.
687
+ * @returns {void}
688
+ */
689
+ raiseRecoverable(pos, message) {
690
+ this.raise(pos, message);
691
+ }
692
+
693
+ /**
694
+ * Overwrites the default unexpected method to throw Esprima-style errors.
695
+ * @param {int} pos The position of the error.
696
+ * @throws {SyntaxError} A syntax error.
697
+ * @returns {void}
698
+ */
699
+ unexpected(pos) {
700
+ let message = "Unexpected token";
701
+
702
+ if (pos !== null && pos !== void 0) {
703
+ this.pos = pos;
704
+
705
+ if (this.options.locations) {
706
+ while (this.pos < this.lineStart) {
707
+ this.lineStart = this.input.lastIndexOf("\n", this.lineStart - 2) + 1;
708
+ --this.curLine;
709
+ }
710
+ }
711
+
712
+ this.nextToken();
713
+ }
714
+
715
+ if (this.end > this.start) {
716
+ message += ` ${this.input.slice(this.start, this.end)}`;
717
+ }
718
+
719
+ this.raise(this.start, message);
720
+ }
721
+
722
+ /*
723
+ * Esprima-FB represents JSX strings as tokens called "JSXText", but Acorn-JSX
724
+ * uses regular tt.string without any distinction between this and regular JS
725
+ * strings. As such, we intercept an attempt to read a JSX string and set a flag
726
+ * on extra so that when tokens are converted, the next token will be switched
727
+ * to JSXText via onToken.
728
+ */
729
+ jsx_readString(quote) { // eslint-disable-line camelcase -- required by API
730
+ const result = super.jsx_readString(quote);
731
+
732
+ if (this.type === tokTypes.string) {
733
+ this[STATE].jsxAttrValueToken = true;
734
+ }
735
+ return result;
736
+ }
737
+
738
+ /**
739
+ * Performs last-minute Esprima-specific compatibility checks and fixes.
740
+ * @param {ASTNode} result The node to check.
741
+ * @returns {ASTNode} The finished node.
742
+ */
743
+ [ESPRIMA_FINISH_NODE](result) {
744
+
745
+ // Acorn doesn't count the opening and closing backticks as part of templates
746
+ // so we have to adjust ranges/locations appropriately.
747
+ if (result.type === "TemplateElement") {
748
+
749
+ // save template element references to fix start/end later
750
+ this[STATE].templateElements.push(result);
751
+ }
752
+
753
+ if (result.type.includes("Function") && !result.generator) {
754
+ result.generator = false;
755
+ }
756
+
757
+ return result;
758
+ }
759
+ };
760
+ };
761
+
762
+ const version$1 = "10.0.1";
763
+
764
+ /* eslint-disable jsdoc/no-multi-asterisks -- needed to preserve original formatting of licences */
765
+
766
+
767
+ // To initialize lazily.
768
+ const parsers = {
769
+ _regular: null,
770
+ _jsx: null,
771
+
772
+ get regular() {
773
+ if (this._regular === null) {
774
+ this._regular = acorn__namespace.Parser.extend(espree());
775
+ }
776
+ return this._regular;
777
+ },
778
+
779
+ get jsx() {
780
+ if (this._jsx === null) {
781
+ this._jsx = acorn__namespace.Parser.extend(jsx__default["default"](), espree());
782
+ }
783
+ return this._jsx;
784
+ },
785
+
786
+ get(options) {
787
+ const useJsx = Boolean(
788
+ options &&
789
+ options.ecmaFeatures &&
790
+ options.ecmaFeatures.jsx
791
+ );
792
+
793
+ return useJsx ? this.jsx : this.regular;
794
+ }
795
+ };
796
+
797
+ //------------------------------------------------------------------------------
798
+ // Tokenizer
799
+ //------------------------------------------------------------------------------
800
+
801
+ /**
802
+ * Tokenizes the given code.
803
+ * @param {string} code The code to tokenize.
804
+ * @param {Object} options Options defining how to tokenize.
805
+ * @returns {Token[]} An array of tokens.
806
+ * @throws {SyntaxError} If the input code is invalid.
807
+ * @private
808
+ */
809
+ function tokenize(code, options) {
810
+ const Parser = parsers.get(options);
811
+
812
+ // Ensure to collect tokens.
813
+ if (!options || options.tokens !== true) {
814
+ options = Object.assign({}, options, { tokens: true }); // eslint-disable-line no-param-reassign -- stylistic choice
815
+ }
816
+
817
+ return new Parser(options, code).tokenize();
818
+ }
819
+
820
+ //------------------------------------------------------------------------------
821
+ // Parser
822
+ //------------------------------------------------------------------------------
823
+
824
+ /**
825
+ * Parses the given code.
826
+ * @param {string} code The code to tokenize.
827
+ * @param {Object} options Options defining how to tokenize.
828
+ * @returns {ASTNode} The "Program" AST node.
829
+ * @throws {SyntaxError} If the input code is invalid.
830
+ */
831
+ function parse(code, options) {
832
+ const Parser = parsers.get(options);
833
+
834
+ return new Parser(options, code).parse();
835
+ }
836
+
837
+ //------------------------------------------------------------------------------
838
+ // Public
839
+ //------------------------------------------------------------------------------
840
+
841
+ const version = version$1;
842
+ const name = "espree";
843
+
844
+ /* istanbul ignore next */
845
+ const VisitorKeys = (function() {
846
+ return visitorKeys__namespace.KEYS;
847
+ }());
848
+
849
+ // Derive node types from VisitorKeys
850
+ /* istanbul ignore next */
851
+ const Syntax = (function() {
852
+ let key,
853
+ types = {};
854
+
855
+ if (typeof Object.create === "function") {
856
+ types = Object.create(null);
857
+ }
858
+
859
+ for (key in VisitorKeys) {
860
+ if (Object.hasOwnProperty.call(VisitorKeys, key)) {
861
+ types[key] = key;
862
+ }
863
+ }
864
+
865
+ if (typeof Object.freeze === "function") {
866
+ Object.freeze(types);
867
+ }
868
+
869
+ return types;
870
+ }());
871
+
872
+ const latestEcmaVersion = getLatestEcmaVersion();
873
+
874
+ const supportedEcmaVersions = getSupportedEcmaVersions();
875
+
876
+ exports.Syntax = Syntax;
877
+ exports.VisitorKeys = VisitorKeys;
878
+ exports.latestEcmaVersion = latestEcmaVersion;
879
+ exports.name = name;
880
+ exports.parse = parse;
881
+ exports.supportedEcmaVersions = supportedEcmaVersions;
882
+ exports.tokenize = tokenize;
883
+ exports.version = version;