Skip to content

Commit

Permalink
feat: Add .cjs extension and stub hook (#75)
Browse files Browse the repository at this point in the history
  • Loading branch information
crutchcorn committed Apr 7, 2022
1 parent b9cbbf1 commit 7989161
Show file tree
Hide file tree
Showing 9 changed files with 98 additions and 2 deletions.
1 change: 1 addition & 0 deletions cjs-stub.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require.extensions['.cjs'] = null;
3 changes: 3 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ function endsInSwcTsx(filename) {
return filename.endsWith('.swc.tsx');
}

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

function isNodeModules(file) {
Expand Down Expand Up @@ -109,6 +110,7 @@ var extensions = {
});
},
},
'.cjs': cjsStub,
'.coffee': 'coffeescript/register',
'.coffee.md': 'coffeescript/register',
'.esbuild.js': {
Expand Down Expand Up @@ -339,6 +341,7 @@ var jsVariantExtensions = [
'.esbuild.jsx',
'.esbuild.ts',
'.esbuild.tsx',
'.cjs',
'.coffee',
'.coffee.md',
'.esm.js',
Expand Down
3 changes: 3 additions & 0 deletions test/fixtures/cjs/0/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"type": "module"
}
24 changes: 24 additions & 0 deletions test/fixtures/cjs/0/rechoir.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import assert from 'assert';
import path from 'path';
import url from 'url';

import rechoir from 'rechoir';
import { extensions } from '../../../../index.js';

var fixture = path.resolve('test.cjs');

rechoir.prepare(extensions, fixture);

const { default: result } = await import(url.pathToFileURL(fixture).href);

const expected = {
data: {
trueKey: true,
falseKey: false,
subKey: {
subProp: 1,
},
},
};

assert.deepEqual(result, expected);
9 changes: 9 additions & 0 deletions test/fixtures/cjs/0/test.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module.exports = {
data: {
trueKey: true,
falseKey: false,
subKey: {
subProp: 1,
},
},
};
3 changes: 3 additions & 0 deletions test/fixtures/cjs/1/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"type": "commonjs"
}
23 changes: 23 additions & 0 deletions test/fixtures/cjs/1/rechoir.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
var assert = require('assert');
var path = require('path');

var rechoir = require('rechoir');
var { extensions } = require('../../../../index.js');

var fixture = path.resolve('test.cjs');

rechoir.prepare(extensions, fixture);

const result = require(fixture);

const expected = {
data: {
trueKey: true,
falseKey: false,
subKey: {
subProp: 1,
},
},
};

assert.deepEqual(result, expected);
9 changes: 9 additions & 0 deletions test/fixtures/cjs/1/test.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module.exports = {
data: {
trueKey: true,
falseKey: false,
subKey: {
subProp: 1,
},
},
};
25 changes: 23 additions & 2 deletions test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ var expect = require('expect');

var path = require('path');
var Module = require('module');
var child = require('child_process');
var shell = require('shelljs');
var rechoir = require('rechoir');

Expand Down Expand Up @@ -69,8 +70,8 @@ describe('interpret.extensions', function () {
return attempts;
}

// We will handle the .mjs tests separately
if (ext === '.mjs') {
// We will handle the .mjs & .cjs tests separately
if (ext === '.mjs' || ext === '.cjs') {
return attempts;
}

Expand Down Expand Up @@ -274,4 +275,24 @@ describe('interpret.extensions', function () {
expect(require(fixture)).toEqual(expected);
done();
});

it('does not error with the .cjs extension when inside a type: module package', function (done) {
if (nodeVersion.major < 14) {
this.skip();
}

this.timeout(0);

process.chdir(path.join(__dirname, 'fixtures/cjs/0'));

child.exec('node rechoir.js', done);
});

it('does not error with the .cjs extension when inside a type: commonjs package', function (done) {
this.timeout(0);

process.chdir(path.join(__dirname, 'fixtures/cjs/1'));

child.exec('node rechoir.js', done);
});
});

0 comments on commit 7989161

Please sign in to comment.