Skip to content

Commit 7989161

Browse files
authored
feat: Add .cjs extension and stub hook (#75)
1 parent b9cbbf1 commit 7989161

File tree

9 files changed

+98
-2
lines changed

9 files changed

+98
-2
lines changed

Diff for: cjs-stub.js

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
require.extensions['.cjs'] = null;

Diff for: index.js

+3
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ function endsInSwcTsx(filename) {
6060
return filename.endsWith('.swc.tsx');
6161
}
6262

63+
var cjsStub = path.join(__dirname, 'cjs-stub');
6364
var mjsStub = path.join(__dirname, 'mjs-stub');
6465

6566
function isNodeModules(file) {
@@ -109,6 +110,7 @@ var extensions = {
109110
});
110111
},
111112
},
113+
'.cjs': cjsStub,
112114
'.coffee': 'coffeescript/register',
113115
'.coffee.md': 'coffeescript/register',
114116
'.esbuild.js': {
@@ -339,6 +341,7 @@ var jsVariantExtensions = [
339341
'.esbuild.jsx',
340342
'.esbuild.ts',
341343
'.esbuild.tsx',
344+
'.cjs',
342345
'.coffee',
343346
'.coffee.md',
344347
'.esm.js',

Diff for: test/fixtures/cjs/0/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"type": "module"
3+
}

Diff for: test/fixtures/cjs/0/rechoir.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import assert from 'assert';
2+
import path from 'path';
3+
import url from 'url';
4+
5+
import rechoir from 'rechoir';
6+
import { extensions } from '../../../../index.js';
7+
8+
var fixture = path.resolve('test.cjs');
9+
10+
rechoir.prepare(extensions, fixture);
11+
12+
const { default: result } = await import(url.pathToFileURL(fixture).href);
13+
14+
const expected = {
15+
data: {
16+
trueKey: true,
17+
falseKey: false,
18+
subKey: {
19+
subProp: 1,
20+
},
21+
},
22+
};
23+
24+
assert.deepEqual(result, expected);

Diff for: test/fixtures/cjs/0/test.cjs

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module.exports = {
2+
data: {
3+
trueKey: true,
4+
falseKey: false,
5+
subKey: {
6+
subProp: 1,
7+
},
8+
},
9+
};

Diff for: test/fixtures/cjs/1/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"type": "commonjs"
3+
}

Diff for: test/fixtures/cjs/1/rechoir.js

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var assert = require('assert');
2+
var path = require('path');
3+
4+
var rechoir = require('rechoir');
5+
var { extensions } = require('../../../../index.js');
6+
7+
var fixture = path.resolve('test.cjs');
8+
9+
rechoir.prepare(extensions, fixture);
10+
11+
const result = require(fixture);
12+
13+
const expected = {
14+
data: {
15+
trueKey: true,
16+
falseKey: false,
17+
subKey: {
18+
subProp: 1,
19+
},
20+
},
21+
};
22+
23+
assert.deepEqual(result, expected);

Diff for: test/fixtures/cjs/1/test.cjs

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module.exports = {
2+
data: {
3+
trueKey: true,
4+
falseKey: false,
5+
subKey: {
6+
subProp: 1,
7+
},
8+
},
9+
};

Diff for: test/index.js

+23-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var expect = require('expect');
44

55
var path = require('path');
66
var Module = require('module');
7+
var child = require('child_process');
78
var shell = require('shelljs');
89
var rechoir = require('rechoir');
910

@@ -69,8 +70,8 @@ describe('interpret.extensions', function () {
6970
return attempts;
7071
}
7172

72-
// We will handle the .mjs tests separately
73-
if (ext === '.mjs') {
73+
// We will handle the .mjs & .cjs tests separately
74+
if (ext === '.mjs' || ext === '.cjs') {
7475
return attempts;
7576
}
7677

@@ -274,4 +275,24 @@ describe('interpret.extensions', function () {
274275
expect(require(fixture)).toEqual(expected);
275276
done();
276277
});
278+
279+
it('does not error with the .cjs extension when inside a type: module package', function (done) {
280+
if (nodeVersion.major < 14) {
281+
this.skip();
282+
}
283+
284+
this.timeout(0);
285+
286+
process.chdir(path.join(__dirname, 'fixtures/cjs/0'));
287+
288+
child.exec('node rechoir.js', done);
289+
});
290+
291+
it('does not error with the .cjs extension when inside a type: commonjs package', function (done) {
292+
this.timeout(0);
293+
294+
process.chdir(path.join(__dirname, 'fixtures/cjs/1'));
295+
296+
child.exec('node rechoir.js', done);
297+
});
277298
});

0 commit comments

Comments
 (0)