Skip to content

Commit

Permalink
feat: add support of .mjs and .cjs file extensions
Browse files Browse the repository at this point in the history
3cp committed Dec 6, 2019
1 parent 3cb4aae commit ce85c2e
Showing 2 changed files with 25 additions and 19 deletions.
12 changes: 9 additions & 3 deletions src/id-utils.js
Original file line number Diff line number Diff line change
@@ -21,11 +21,14 @@ const KNOWN_EXTS = [
...ALTERNATIVE_TEMPLATE_EXTS,
'.js',
'.ts',
'.mjs',
'.cjs',
'.json',
'.json5',
'.svg',
'.txt',
'.wasm',
'.wasi',
'.xml',
'.yml',
'.yaml'
@@ -172,9 +175,8 @@ export function nodejsIds(id) {
const ids = [parsed.cleanId];
const {ext} = parsed;

if (ext === '.js' || ext === '.ts') {
const trimed = parsed.cleanId.slice(0, -3);
ids.push(trimed);
if (ext === '.js' || ext === '.ts' || ext === '.mjs' || ext === '.cjs') {
ids.push(parsed.cleanId.slice(0, -ext.length));
} if (ALTERNATIVE_CSS_EXTS.indexOf(ext) !== -1) {
// be nice to users from webpack, allow import 'a.scss'; to work.
ids.push(parsed.cleanId.slice(0, -ext.length) + '.css');
@@ -184,11 +186,15 @@ export function nodejsIds(id) {
} else if (!ext) {
ids.push(parsed.cleanId + '.js');
ids.push(parsed.cleanId + '.json');
ids.push(parsed.cleanId + '.mjs');
ids.push(parsed.cleanId + '.cjs');
}

ids.push(parsed.cleanId + '/index');
ids.push(parsed.cleanId + '/index.js');
ids.push(parsed.cleanId + '/index.json');
ids.push(parsed.cleanId + '/index.mjs');
ids.push(parsed.cleanId + '/index.cjs');

return ids;
}
32 changes: 16 additions & 16 deletions test/id-utils.spec.js
Original file line number Diff line number Diff line change
@@ -270,22 +270,22 @@ test('relativeModuleId can work on base with ..', t => {
// nodejsIds

test('nodejsIds returns possible nodejs ids', t => {
t.deepEqual(nodejsIds('foo'), ['foo', 'foo.js', 'foo.json', 'foo/index', 'foo/index.js', 'foo/index.json']);
t.deepEqual(nodejsIds('foo.js'), ['foo.js', 'foo', 'foo.js/index', 'foo.js/index.js', 'foo.js/index.json']);
t.deepEqual(nodejsIds('foo.ts'), ['foo.ts', 'foo', 'foo.ts/index', 'foo.ts/index.js', 'foo.ts/index.json']);
t.deepEqual(nodejsIds('foo.less'), ['foo.less', 'foo.css', 'foo.less/index', 'foo.less/index.js', 'foo.less/index.json']);
t.deepEqual(nodejsIds('foo.json'), ['foo.json', 'foo.json/index', 'foo.json/index.js', 'foo.json/index.json']);
t.deepEqual(nodejsIds('foo.min'), ['foo.min', 'foo.min.js', 'foo.min.json', 'foo.min/index', 'foo.min/index.js', 'foo.min/index.json']);
t.deepEqual(nodejsIds('foo.min.js'), ['foo.min.js', 'foo.min', 'foo.min.js/index', 'foo.min.js/index.js', 'foo.min.js/index.json']);
t.deepEqual(nodejsIds('foo.html'), ['foo.html', 'foo.html/index', 'foo.html/index.js', 'foo.html/index.json']);
t.deepEqual(nodejsIds('foo.haml'), ['foo.haml', 'foo.html', 'foo.haml/index', 'foo.haml/index.js', 'foo.haml/index.json']);

t.deepEqual(nodejsIds('text!foo/bar'), ['text!foo/bar', 'text!foo/bar.js', 'text!foo/bar.json', 'text!foo/bar/index', 'text!foo/bar/index.js', 'text!foo/bar/index.json']);
t.deepEqual(nodejsIds('text!foo/bar.js'), ['text!foo/bar.js', 'text!foo/bar', 'text!foo/bar.js/index', 'text!foo/bar.js/index.js', 'text!foo/bar.js/index.json']);
t.deepEqual(nodejsIds('text!foo/bar.json'), ['text!foo/bar.json', 'text!foo/bar.json/index', 'text!foo/bar.json/index.js', 'text!foo/bar.json/index.json']);
t.deepEqual(nodejsIds('text!foo/bar.min'), ['text!foo/bar.min', 'text!foo/bar.min.js', 'text!foo/bar.min.json', 'text!foo/bar.min/index', 'text!foo/bar.min/index.js', 'text!foo/bar.min/index.json']);
t.deepEqual(nodejsIds('text!foo/bar.min.js'), ['text!foo/bar.min.js', 'text!foo/bar.min', 'text!foo/bar.min.js/index', 'text!foo/bar.min.js/index.js', 'text!foo/bar.min.js/index.json']);
t.deepEqual(nodejsIds('text!foo/bar.html'), ['text!foo/bar.html', 'text!foo/bar.html/index', 'text!foo/bar.html/index.js', 'text!foo/bar.html/index.json']);
t.deepEqual(nodejsIds('foo'), ['foo', 'foo.js', 'foo.json', 'foo.mjs', 'foo.cjs', 'foo/index', 'foo/index.js', 'foo/index.json', 'foo/index.mjs', 'foo/index.cjs']);
t.deepEqual(nodejsIds('foo.js'), ['foo.js', 'foo', 'foo.js/index', 'foo.js/index.js', 'foo.js/index.json', 'foo.js/index.mjs', 'foo.js/index.cjs']);
t.deepEqual(nodejsIds('foo.ts'), ['foo.ts', 'foo', 'foo.ts/index', 'foo.ts/index.js', 'foo.ts/index.json', 'foo.ts/index.mjs', 'foo.ts/index.cjs']);
t.deepEqual(nodejsIds('foo.less'), ['foo.less', 'foo.css', 'foo.less/index', 'foo.less/index.js', 'foo.less/index.json', 'foo.less/index.mjs', 'foo.less/index.cjs']);
t.deepEqual(nodejsIds('foo.json'), ['foo.json', 'foo.json/index', 'foo.json/index.js', 'foo.json/index.json', 'foo.json/index.mjs', 'foo.json/index.cjs']);
t.deepEqual(nodejsIds('foo.min'), ['foo.min', 'foo.min.js', 'foo.min.json', 'foo.min.mjs', 'foo.min.cjs', 'foo.min/index', 'foo.min/index.js', 'foo.min/index.json', 'foo.min/index.mjs', 'foo.min/index.cjs']);
t.deepEqual(nodejsIds('foo.min.js'), ['foo.min.js', 'foo.min', 'foo.min.js/index', 'foo.min.js/index.js', 'foo.min.js/index.json', 'foo.min.js/index.mjs', 'foo.min.js/index.cjs']);
t.deepEqual(nodejsIds('foo.html'), ['foo.html', 'foo.html/index', 'foo.html/index.js', 'foo.html/index.json', 'foo.html/index.mjs', 'foo.html/index.cjs']);
t.deepEqual(nodejsIds('foo.haml'), ['foo.haml', 'foo.html', 'foo.haml/index', 'foo.haml/index.js', 'foo.haml/index.json', 'foo.haml/index.mjs', 'foo.haml/index.cjs']);

t.deepEqual(nodejsIds('text!foo/bar'), ['text!foo/bar', 'text!foo/bar.js', 'text!foo/bar.json', 'text!foo/bar.mjs', 'text!foo/bar.cjs', 'text!foo/bar/index', 'text!foo/bar/index.js', 'text!foo/bar/index.json', 'text!foo/bar/index.mjs', 'text!foo/bar/index.cjs']);
t.deepEqual(nodejsIds('text!foo/bar.js'), ['text!foo/bar.js', 'text!foo/bar', 'text!foo/bar.js/index', 'text!foo/bar.js/index.js', 'text!foo/bar.js/index.json', 'text!foo/bar.js/index.mjs', 'text!foo/bar.js/index.cjs']);
t.deepEqual(nodejsIds('text!foo/bar.json'), ['text!foo/bar.json', 'text!foo/bar.json/index', 'text!foo/bar.json/index.js', 'text!foo/bar.json/index.json', 'text!foo/bar.json/index.mjs', 'text!foo/bar.json/index.cjs']);
t.deepEqual(nodejsIds('text!foo/bar.min'), ['text!foo/bar.min', 'text!foo/bar.min.js', 'text!foo/bar.min.json', 'text!foo/bar.min.mjs', 'text!foo/bar.min.cjs', 'text!foo/bar.min/index', 'text!foo/bar.min/index.js', 'text!foo/bar.min/index.json', 'text!foo/bar.min/index.mjs', 'text!foo/bar.min/index.cjs']);
t.deepEqual(nodejsIds('text!foo/bar.min.js'), ['text!foo/bar.min.js', 'text!foo/bar.min', 'text!foo/bar.min.js/index', 'text!foo/bar.min.js/index.js', 'text!foo/bar.min.js/index.json', 'text!foo/bar.min.js/index.mjs', 'text!foo/bar.min.js/index.cjs']);
t.deepEqual(nodejsIds('text!foo/bar.html'), ['text!foo/bar.html', 'text!foo/bar.html/index', 'text!foo/bar.html/index.js', 'text!foo/bar.html/index.json', 'text!foo/bar.html/index.mjs', 'text!foo/bar.html/index.cjs']);
t.end();
});

0 comments on commit ce85c2e

Please sign in to comment.