es-check 9.4.0 → 9.4.2

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.
package/detectFeatures.js CHANGED
@@ -1,5 +1,8 @@
1
- const fastBrake = require('fast-brake');
1
+ const { fastBrakeSync } = require('fast-brake/sync');
2
2
  const { ES_FEATURES, POLYFILL_PATTERNS, IMPORT_PATTERNS } = require('./constants');
3
+ const esversionPlugin = require('fast-brake/plugins/esversion');
4
+
5
+ const fastbrake = fastBrakeSync({ plugins: [esversionPlugin.default] });
3
6
 
4
7
  /**
5
8
  * Detects polyfills in the code and adds them to the polyfills Set
@@ -81,15 +84,12 @@ const detectFeatures = (code, ecmaVersion, sourceType, ignoreList = new Set(), o
81
84
  if (checkForPolyfills) detectPolyfills(code, polyfills);
82
85
 
83
86
  let detectedFeatures = [];
84
-
87
+
85
88
  if (ast && ast.features) {
86
89
  detectedFeatures = ast.features;
87
90
  } else {
88
91
  try {
89
- const detectOptions = {
90
- sourceType: sourceType || 'script'
91
- };
92
- detectedFeatures = fastBrake.detect(code, detectOptions);
92
+ detectedFeatures = fastbrake.detect(code);
93
93
  } catch (err) {
94
94
  const error = new Error(`Failed to parse code: ${err.message}`);
95
95
  error.type = 'ES-Check';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "es-check",
3
- "version": "9.4.0",
3
+ "version": "9.4.2",
4
4
  "description": "Checks the ECMAScript version of .js glob against a specified version of ECMAScript with a shell command",
5
5
  "main": "index.js",
6
6
  "license": "MIT",
@@ -87,7 +87,7 @@
87
87
  "acorn-walk": "^8.3.4",
88
88
  "browserslist": "^4.23.3",
89
89
  "commander": "14.0.1",
90
- "fast-brake": "^0.1.1",
90
+ "fast-brake": "^0.1.4",
91
91
  "fast-glob": "^3.3.3",
92
92
  "lilconfig": "^3.1.3",
93
93
  "source-map": "^0.7.4",
package/utils.js CHANGED
@@ -451,7 +451,30 @@ const ECMA_VERSION_MAP = {
451
451
  2022: 'es2022',
452
452
  2023: 'es2023',
453
453
  2024: 'es2024',
454
- 2025: 'es2025'
454
+ 2025: 'es2025',
455
+ es5: 'es5',
456
+ es6: 'es2015',
457
+ es7: 'es2016',
458
+ es8: 'es2017',
459
+ es9: 'es2018',
460
+ es10: 'es2019',
461
+ es11: 'es2020',
462
+ es12: 'es2021',
463
+ es13: 'es2022',
464
+ es14: 'es2023',
465
+ es15: 'es2024',
466
+ es16: 'es2025',
467
+ es2015: 'es2015',
468
+ es2016: 'es2016',
469
+ es2017: 'es2017',
470
+ es2018: 'es2018',
471
+ es2019: 'es2019',
472
+ es2020: 'es2020',
473
+ es2021: 'es2021',
474
+ es2022: 'es2022',
475
+ es2023: 'es2023',
476
+ es2024: 'es2024',
477
+ es2025: 'es2025'
455
478
  };
456
479
 
457
480
  /**
@@ -471,8 +494,10 @@ function getTargetVersion(ecmaVersion) {
471
494
  * @param {string} file - File path for error reporting
472
495
  * @returns {{ast: Object, error: null} | {ast: null, error: Object}}
473
496
  */
474
- const fastBrake = require('fast-brake');
497
+ const { fastBrakeSync } = require('fast-brake/sync');
498
+ const esversionPlugin = require('fast-brake/plugins/esversion');
475
499
 
500
+ const fastbrake = fastBrakeSync({ plugins: [esversionPlugin.default] });
476
501
  const parseCache = new Map();
477
502
 
478
503
  function parseCode(code, acornOpts, acorn, file, needsFeatures = false) {
@@ -492,23 +517,14 @@ function parseCode(code, acornOpts, acorn, file, needsFeatures = false) {
492
517
  : code;
493
518
 
494
519
  const options = { target: targetVersion, sourceType };
495
-
496
- if (sourceType !== 'module') {
497
- const quickCheck = fastBrake.detect(codeToCheck, { sourceType: 'script' });
498
- const moduleFeature = quickCheck.find(f => f.name === 'import' || f.name === 'export');
499
-
500
- if (moduleFeature) {
501
- throw new Error(
502
- `'${moduleFeature.name}' can only be used in ES modules. Use --module flag to enable module support` +
503
- (moduleFeature.line ? ` at line ${moduleFeature.line}` : '')
504
- );
505
- }
520
+
521
+ const isCompatible = fastbrake.check(codeToCheck, options);
522
+ if (!isCompatible) {
523
+ throw new Error(`Code contains features incompatible with ${targetVersion}`);
506
524
  }
507
-
508
- fastBrake.fastBrake(codeToCheck, options);
509
-
510
- const detectedFeatures = needsFeatures
511
- ? fastBrake.detect(codeToCheck, { sourceType })
525
+
526
+ const detectedFeatures = needsFeatures
527
+ ? fastbrake.detect(codeToCheck)
512
528
  : [];
513
529
 
514
530
  const result = {
@@ -589,35 +605,39 @@ function handleESVersionError(options) {
589
605
  }
590
606
  }
591
607
 
592
- (async () => {
593
- try {
594
- await fastBrake.check('', { target: 'es5' });
595
- } catch (e) {}
596
- })();
597
-
598
- async function parseLightMode(code, ecmaVersion, isModule, allowHashBang, file) {
608
+ function parseLightMode(code, ecmaVersion, isModule, allowHashBang, file) {
599
609
  const targetVersion = getTargetVersion(ecmaVersion);
600
-
610
+
601
611
  const codeToCheck = allowHashBang && code.startsWith('#!')
602
612
  ? code.slice(code.indexOf('\n') + 1)
603
613
  : code;
604
-
605
- const isCompatible = await fastBrake.check(codeToCheck, {
606
- target: targetVersion,
607
- sourceType: isModule ? 'module' : 'script'
608
- });
609
-
610
- if (!isCompatible) {
614
+
615
+ try {
616
+ const isCompatible = fastbrake.check(codeToCheck, {
617
+ target: targetVersion,
618
+ sourceType: isModule ? 'module' : 'script'
619
+ });
620
+
621
+ if (!isCompatible) {
622
+ return {
623
+ error: {
624
+ err: new Error(`Code contains features incompatible with ${targetVersion}`),
625
+ stack: '',
626
+ file
627
+ }
628
+ };
629
+ }
630
+
631
+ return { error: null };
632
+ } catch (err) {
611
633
  return {
612
634
  error: {
613
- err: new Error(`Code contains features incompatible with ${targetVersion}`),
614
- stack: '',
635
+ err: new Error(`Failed to check code in light mode: ${err.message}`),
636
+ stack: err.stack || '',
615
637
  file
616
638
  }
617
639
  };
618
640
  }
619
-
620
- return { error: null };
621
641
  }
622
642
 
623
643
  module.exports = {