Skip to content

Commit

Permalink
Transpile only default babel extensions, allow for custom extensions …
Browse files Browse the repository at this point in the history
…option (fixes #111)
  • Loading branch information
Andarist committed Dec 25, 2019
1 parent fb5da31 commit 6da2d74
Show file tree
Hide file tree
Showing 20 changed files with 362 additions and 291 deletions.
583 changes: 296 additions & 287 deletions packages/rollup-plugin-babel/package-lock.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions packages/rollup-plugin-babel/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
"mocha": "^5.2.0",
"rollup": "^0.62.0",
"rollup-plugin-buble": "^0.19.2",
"rollup-plugin-json": "^3.0.0",
"source-map": "^0.6.1",
"source-map-support": "^0.5.6"
},
Expand Down
13 changes: 9 additions & 4 deletions packages/rollup-plugin-babel/src/index.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { dirname } from 'path';
import { buildExternalHelpers, transform } from '@babel/core';
import { buildExternalHelpers, DEFAULT_EXTENSIONS, transform } from '@babel/core';
import { createFilter } from 'rollup-pluginutils';
import createPreflightCheck from './preflightCheck.js';
import helperPlugin from './helperPlugin.js';
import { warnOnce } from './utils.js';
import { escapeRegExpCharacters, warnOnce } from './utils.js';
import { RUNTIME, EXTERNAL, HELPERS } from './constants.js';

const unpackOptions = ({
extensions = DEFAULT_EXTENSIONS,
// rollup uses sourcemap, babel uses sourceMaps
// just normalize them here so people don't have to worry about it
sourcemap = true,
Expand All @@ -15,21 +16,25 @@ const unpackOptions = ({
sourceMaps = true,
...rest
} = {}) => ({
extensions,
sourceMaps: sourcemap && sourcemaps && sourceMap && sourceMaps,
...rest
...rest,
});

export default function babel ( options ) {
const {
exclude,
extensions,
externalHelpers,
externalHelpersWhitelist,
include,
runtimeHelpers,
...babelOptions
} = unpackOptions(options);

const filter = createFilter( include, exclude );
const extensionRegExp = new RegExp(`(${extensions.map(escapeRegExpCharacters).join('|')})$`);
const includeExcludeFilter = createFilter( include, exclude );
const filter = id => extensionRegExp.test(id) && includeExcludeFilter(id);
const preflightCheck = createPreflightCheck();

return {
Expand Down
3 changes: 3 additions & 0 deletions packages/rollup-plugin-babel/src/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@ export function warnOnce ( ctx, msg ) {
warned[ msg ] = true;
ctx.warn( msg );
}

const regExpCharactersRegExp = /[\\^$.*+?()[\]{}|]/g;
export const escapeRegExpCharacters = str => str.replace(regExpCharactersRegExp, '\\$&');
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default class Es {}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default class Es6 {}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default class Js {}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default class Jsx {}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default class Mjs {}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default class Other {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export { default as Js } from './ext.js';
export { default as Jsx } from './ext.jsx';
export { default as Es6 } from './ext.es6';
export { default as Es } from './ext.es';
export { default as Mjs } from './ext.mjs';
export { default as Other } from './ext.other';
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default class Es {}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default class Es6 {}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default class Js {}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"json": true}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default class Jsx {}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default class Mjs {}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default class Other {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export { default as Js } from './ext.js';
export { default as Jsx } from './ext.jsx';
export { default as Es6 } from './ext.es6';
export { default as Es } from './ext.es';
export { default as Mjs } from './ext.mjs';
export { default as Json } from './ext.json';
export { default as Other } from './ext.other';
27 changes: 27 additions & 0 deletions packages/rollup-plugin-babel/test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ var assert = require( 'assert' );
var path = require( 'path' );
var rollup = require( 'rollup' );
var SourceMapConsumer = require( 'source-map' ).SourceMapConsumer;
var jsonPlugin = require( 'rollup-plugin-json' );
var babelPlugin = require( '..' );

// from ./src/constants
Expand Down Expand Up @@ -212,4 +213,30 @@ describe( 'rollup-plugin-babel', function () {
assert.ok( code.indexOf('class Ignored') !== -1 );
});
});

it( 'transpiles only files with default extensions', () => {
return bundle('samples/extensions-default/main.js', undefined, undefined, {
plugins: [babelPlugin(), jsonPlugin()],
}).then(({ code }) => {
assert.ok( code.indexOf('class Es ') === -1, 'should transpile .es' );
assert.ok( code.indexOf('class Es6 ') === -1, 'should transpile .es6' );
assert.ok( code.indexOf('class Js ') === -1, 'should transpile .js' );
assert.ok( code.indexOf('class Jsx ') === -1, 'should transpile .jsx' );
assert.ok( code.indexOf('class Mjs ') === -1, 'should transpile .mjs' );
assert.ok( code.indexOf('class Other ') !== -1, 'should not transpile .other' );
});
});

it( 'transpiles only files with whitelisted extensions', () => {
return bundle('samples/extensions-custom/main.js', {
extensions: ['.js', '.other']
}).then(({ code }) => {
assert.ok( code.indexOf('class Es ') !== -1, 'should not transpile .es' );
assert.ok( code.indexOf('class Es6 ') !== -1, 'should not transpile .es6' );
assert.ok( code.indexOf('class Js ') === -1, 'should transpile .js' );
assert.ok( code.indexOf('class Jsx ') !== -1, 'should not transpile .jsx' );
assert.ok( code.indexOf('class Mjs ') !== -1, 'should not transpile .mjs' );
assert.ok( code.indexOf('class Other ') === -1, 'should transpile .other' );
});
});
});

0 comments on commit 6da2d74

Please sign in to comment.