Skip to content

Commit 97b8470

Browse files
authored
chore(esm): remove code for Node versions <10 (#4736)
and move 'lib/esm-utils.js' to 'lib/nodejs/esm-utils.js'
1 parent 654b5df commit 97b8470

File tree

10 files changed

+29
-107
lines changed

10 files changed

+29
-107
lines changed

.eslintrc.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ overrides:
3535
env:
3636
browser: false
3737
- files:
38-
- esm-utils.js
38+
- lib/nodejs/esm-utils.js
3939
- rollup.config.js
4040
- rollup_no-ie11.config.js
4141
- scripts/pick-from-package-json.js

lib/cli/run-helpers.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const {watchRun, watchParallelRun} = require('./watch-run');
1414
const collectFiles = require('./collect-files');
1515
const {format} = require('util');
1616
const {createInvalidLegacyPluginError} = require('../errors');
17-
const {requireOrImport} = require('../esm-utils');
17+
const {requireOrImport} = require('../nodejs/esm-utils');
1818
const PluginLoader = require('../plugin-loader');
1919

2020
/**

lib/mocha.js

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ var growl = require('./nodejs/growl');
1313
var utils = require('./utils');
1414
var mocharc = require('./mocharc.json');
1515
var Suite = require('./suite');
16-
var esmUtils = utils.supportsEsModules(true)
17-
? require('./esm-utils')
18-
: undefined;
16+
var esmUtils = require('./nodejs/esm-utils');
1917
var createStatsCollector = require('./stats-collector');
2018
const {
2119
warn,
@@ -460,12 +458,6 @@ Mocha.prototype.loadFilesAsync = function() {
460458
var suite = this.suite;
461459
this.lazyLoadFiles(true);
462460

463-
if (!esmUtils) {
464-
return new Promise(function(resolve) {
465-
self.loadFiles(resolve);
466-
});
467-
}
468-
469461
return esmUtils.loadFilesAsync(
470462
this.files,
471463
function(file) {
File renamed without changes.

lib/utils.js

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -565,32 +565,6 @@ exports.defineConstants = function(obj) {
565565
return Object.freeze(exports.createMap(obj));
566566
};
567567

568-
/**
569-
* Whether current version of Node support ES modules
570-
*
571-
* @description
572-
* Versions prior to 10 did not support ES Modules, and version 10 has an old incompatible version of ESM.
573-
* This function returns whether Node.JS has ES Module supports that is compatible with Mocha's needs,
574-
* which is version >=12.11.
575-
*
576-
* @param {partialSupport} whether the full Node.js ESM support is available (>= 12) or just something that supports the runtime (>= 10)
577-
*
578-
* @returns {Boolean} whether the current version of Node.JS supports ES Modules in a way that is compatible with Mocha
579-
*/
580-
exports.supportsEsModules = function(partialSupport) {
581-
if (!exports.isBrowser() && process.versions && process.versions.node) {
582-
var versionFields = process.versions.node.split('.');
583-
var major = +versionFields[0];
584-
var minor = +versionFields[1];
585-
586-
if (!partialSupport) {
587-
return major >= 13 || (major === 12 && minor >= 11);
588-
} else {
589-
return major >= 10;
590-
}
591-
}
592-
};
593-
594568
/**
595569
* Returns current working directory
596570
*

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -175,17 +175,17 @@
175175
],
176176
"browser": {
177177
"./index.js": "./browser-entry.js",
178-
"./lib/nodejs/growl.js": "./lib/browser/growl.js",
179-
"./lib/esm-utils.js": false,
178+
"./lib/nodejs/growl.js": "./lib/browser/growl.js",
180179
"fs": false,
181180
"path": false,
182181
"supports-color": false,
183-
"./lib/nodejs/serializer.js": false,
184-
"./lib/nodejs/worker.js": false,
185182
"./lib/nodejs/buffered-worker-pool.js": false,
183+
"./lib/nodejs/esm-utils.js": false,
184+
"./lib/nodejs/file-unloader.js": false,
186185
"./lib/nodejs/parallel-buffered-runner.js": false,
186+
"./lib/nodejs/serializer.js": false,
187+
"./lib/nodejs/worker.js": false,
187188
"./lib/nodejs/reporters/parallel-buffered.js": false,
188-
"./lib/nodejs/file-unloader.js": false,
189189
"./lib/cli/index.js": false
190190
},
191191
"prettier": {

test/integration/esm.spec.js

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
'use strict';
22
var path = require('path');
33
const {runMochaJSON: run, runMochaAsync} = require('./helpers');
4-
var utils = require('../../lib/utils');
5-
var args =
6-
+process.versions.node.split('.')[0] >= 13 ? [] : ['--experimental-modules'];
4+
var args = [];
75

86
describe('esm', function() {
9-
before(function() {
10-
if (!utils.supportsEsModules(true)) this.skip();
11-
});
12-
137
it('should pass a passing esm test that uses esm', function(done) {
148
var fixture = 'esm/esm-success.fixture.mjs';
159
run(fixture, args, function(err, result) {
@@ -51,8 +45,6 @@ describe('esm', function() {
5145
});
5246

5347
it('should recognize esm files ending with .js due to package.json type flag', function(done) {
54-
if (!utils.supportsEsModules(false)) return this.skip();
55-
5648
var fixture = 'esm/js-folder/esm-in-js.fixture.js';
5749
run(fixture, args, function(err, result) {
5850
if (err) {
@@ -69,11 +61,7 @@ describe('esm', function() {
6961
var fixture = 'esm/test-that-uses-dir-cjs-require.fixture.js';
7062
const result = await runMochaAsync(
7163
fixture,
72-
[
73-
...args,
74-
'--require',
75-
path.resolve(__dirname, './fixtures/esm/dir-cjs-require')
76-
],
64+
['--require', path.resolve(__dirname, './fixtures/esm/dir-cjs-require')],
7765
{stdio: 'pipe'}
7866
);
7967

test/integration/options/parallel.spec.js

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ const {
66
getSummary,
77
resolveFixturePath
88
} = require('../helpers');
9-
const utils = require('../../../lib/utils');
109
const pidtree = require('pidtree');
1110

1211
const REPORTER_FIXTURE_PATH = resolveFixturePath('options/parallel/test-a');
@@ -108,27 +107,16 @@ describe('--parallel', function() {
108107
});
109108

110109
describe('when used with ESM tests', function() {
111-
const esmArgs =
112-
Number(process.versions.node.split('.')[0]) >= 13
113-
? []
114-
: ['--experimental-modules'];
115-
116-
before(function() {
117-
if (!utils.supportsEsModules()) this.skip();
118-
});
119-
120110
it('should have the same result as with --no-parallel', async function() {
121111
const expected = getSummary(
122112
await invokeMochaAsync([
123-
...esmArgs,
124113
'--no-parallel',
125114
resolveFixturePath('esm/*.fixture.mjs')
126115
])[1]
127116
);
128117

129118
const actual = getSummary(
130119
await invokeMochaAsync([
131-
...esmArgs,
132120
'--parallel',
133121
resolveFixturePath('esm/*.fixture.mjs')
134122
])[1]

test/integration/plugins/root-hooks.spec.js

Lines changed: 19 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use strict';
22

33
var invokeMochaAsync = require('../helpers').invokeMochaAsync;
4-
var utils = require('../../../lib/utils');
54

65
/**
76
* Extracts root hook log messages from run results
@@ -99,38 +98,28 @@ describe('root hooks', function() {
9998
});
10099

101100
describe('support ESM when type=module or .mjs extension', function() {
102-
before(function() {
103-
if (!utils.supportsEsModules()) this.skip();
104-
});
105-
106101
it('should run root hooks when provided via mochaHooks', function() {
107102
return expect(
108-
runMochaForHookOutput(
109-
[
110-
'--require=' +
111-
require.resolve(
112-
// as object
113-
'../fixtures/plugins/root-hooks/root-hook-defs-esm.fixture.mjs'
114-
),
115-
'--require=' +
116-
require.resolve(
117-
// as function
118-
'../fixtures/plugins/root-hooks/esm/root-hook-defs-esm.fixture.js'
119-
),
120-
'--require=' +
121-
require.resolve(
122-
// mixed with commonjs
123-
'../fixtures/plugins/root-hooks/root-hook-defs-a.fixture.js'
124-
),
103+
runMochaForHookOutput([
104+
'--require=' +
105+
require.resolve(
106+
// as object
107+
'../fixtures/plugins/root-hooks/root-hook-defs-esm.fixture.mjs'
108+
),
109+
'--require=' +
125110
require.resolve(
126-
'../fixtures/plugins/root-hooks/root-hook-test.fixture.js'
127-
)
128-
].concat(
129-
+process.versions.node.split('.')[0] >= 13
130-
? []
131-
: '--experimental-modules'
111+
// as function
112+
'../fixtures/plugins/root-hooks/esm/root-hook-defs-esm.fixture.js'
113+
),
114+
'--require=' +
115+
require.resolve(
116+
// mixed with commonjs
117+
'../fixtures/plugins/root-hooks/root-hook-defs-a.fixture.js'
118+
),
119+
require.resolve(
120+
'../fixtures/plugins/root-hooks/root-hook-test.fixture.js'
132121
)
133-
),
122+
]),
134123
'to be fulfilled with',
135124
[
136125
'afterAll',
@@ -147,10 +136,6 @@ describe('root hooks', function() {
147136
});
148137

149138
describe('support ESM via .js extension w/o type=module', function() {
150-
before(function() {
151-
if (!utils.supportsEsModules()) this.skip();
152-
});
153-
154139
it('should fail due to ambiguous file type', function() {
155140
return expect(
156141
invokeMochaAsync(
@@ -160,11 +145,7 @@ describe('root hooks', function() {
160145
// as object
161146
'../fixtures/plugins/root-hooks/root-hook-defs-esm-broken.fixture.js'
162147
)
163-
].concat(
164-
+process.versions.node.split('.')[0] >= 13
165-
? []
166-
: '--experimental-modules'
167-
),
148+
],
168149
'pipe'
169150
)[1],
170151
'when fulfilled',

test/unit/mocha.spec.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ describe('Mocha', function() {
7878
Suite = sinon.stub(Mocha, 'Suite').returns(suite);
7979
Suite.constants = {};
8080

81-
sinon.stub(utils, 'supportsEsModules').returns(false);
8281
sinon.stub(errors, 'warn');
8382
sinon.stub(utils, 'isString');
8483
sinon.stub(utils, 'noop');

0 commit comments

Comments
 (0)