Skip to content

Commit

Permalink
merge master -> gh-30
Browse files Browse the repository at this point in the history
  • Loading branch information
Rich-Harris committed Jun 28, 2015
2 parents 5cd2208 + 46804f7 commit 0b92d52
Show file tree
Hide file tree
Showing 18 changed files with 117 additions and 17 deletions.
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# rollup changelog

## 0.8.3

* Correctly rename functions that have arguments with the same name ([#32](https://github.com/rollup/rollup/issues/32))
* Ensure unused default exports are given a legal name ([#33](https://github.com/rollup/rollup/issues/33))

## 0.8.2

* Support `moduleId` and `moduleName` via CLI ([#24](https://github.com/rollup/rollup/issues/24))

## 0.8.1

* Anonymous functions that are exported as default are converted to named function declarations for correct hoisting, rather than being bound to functions ([#29](https://github.com/rollup/rollup/issues/29))
Expand Down
4 changes: 3 additions & 1 deletion bin/runRollup.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@ function bundle ( options, method ) {
}).then( function ( bundle ) {
var generateOptions = {
dest: options.output,
format: options.format
format: options.format,
moduleId: options.id,
moduleName: options.name
};

if ( options.output ) {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "rollup",
"version": "0.8.1",
"version": "0.8.3",
"description": "Next-generation ES6 module bundler",
"main": "dist/rollup.js",
"jsnext:main": "src/rollup.js",
Expand Down
22 changes: 11 additions & 11 deletions src/Module.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,14 @@ import makeLegalIdentifier from './utils/makeLegalIdentifier';

const emptyArrayPromise = Promise.resolve([]);

function deconflict ( name, names ) {
while ( name in names ) {
name = `_${name}`;
}

return name;
}

export default class Module {
constructor ({ path, source, bundle }) {
this.source = source;
Expand Down Expand Up @@ -251,13 +259,9 @@ export default class Module {

getCanonicalName ( localName ) {
// Special case
if ( localName === 'default' && this.exports.default && this.exports.default.isModified ) {
if ( localName === 'default' && ( this.exports.default.isModified || !this.suggestedNames.default ) ) {
let canonicalName = makeLegalIdentifier( this.path.replace( dirname( this.bundle.entryModule.path ) + '/', '' ).replace( /\.js$/, '' ) );
while ( this.definitions[ canonicalName ] ) {
canonicalName = `_${canonicalName}`;
}

return canonicalName;
return deconflict( canonicalName, this.definitions );
}

if ( this.suggestedNames[ localName ] ) {
Expand Down Expand Up @@ -472,11 +476,7 @@ export default class Module {
// deconflict anonymous default exports with this module's definitions
const shouldDeconflict = this.exports.default && this.exports.default.isAnonymous;

if ( shouldDeconflict ) {
while ( suggestion in this.definitions ) {
suggestion = `_${suggestion}`;
}
}
if ( shouldDeconflict ) suggestion = deconflict( suggestion, this.definitions );

if ( !this.suggestedNames[ defaultOrBatch ] ) {
this.suggestedNames[ defaultOrBatch ] = makeLegalIdentifier( suggestion );
Expand Down
13 changes: 9 additions & 4 deletions src/Statement.js
Original file line number Diff line number Diff line change
Expand Up @@ -315,15 +315,20 @@ export default class Statement {
let newNames = blank();
let hasReplacements;

keys( names ).forEach( key => {
if ( !scope.declarations[ key ] ) {
newNames[ key ] = names[ key ];
// special case = function foo ( foo ) {...}
if ( node.id && names[ node.id.name ] && scope.declarations[ node.id.name ] ) {
magicString.overwrite( node.id.start, node.id.end, names[ node.id.name ] );
}

keys( names ).forEach( name => {
if ( !scope.declarations[ name ] ) {
newNames[ name ] = names[ name ];
hasReplacements = true;
}
});

deshadowList.forEach( name => {
if ( ~scope.declarations[ name ] ) {
if ( ~scope.declarations[ name ] ) { // TODO is this right? no indexOf?
newNames[ name ] = name + '$$'; // TODO better mechanism
hasReplacements = true;
}
Expand Down
4 changes: 4 additions & 0 deletions test/cli/module-name/_config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module.exports = {
description: 'generates UMD export with correct moduleName',
command: 'rollup main.js --format umd --name myBundle'
}
11 changes: 11 additions & 0 deletions test/cli/module-name/_expected.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
global.myBundle = factory();
}(this, function () { 'use strict';

var main = 42;

return main;

}));
1 change: 1 addition & 0 deletions test/cli/module-name/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default 42;
9 changes: 9 additions & 0 deletions test/function/rename-default-export/_config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
var assert = require( 'assert' );

module.exports = {
description: 'avoids SyntaxError with default token (#33)',
exports: function ( exports ) {
assert.equal( exports.foo, 42 );
assert.equal( exports.bar, 42 );
}
};
3 changes: 3 additions & 0 deletions test/function/rename-default-export/bar.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { baz } from './baz';

export default baz;
5 changes: 5 additions & 0 deletions test/function/rename-default-export/baz.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
function Baz () {}

export var baz = 42;

export default Baz( baz );
3 changes: 3 additions & 0 deletions test/function/rename-default-export/foo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { baz } from './baz';

export default baz;
7 changes: 7 additions & 0 deletions test/function/rename-default-export/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import foo from './foo';
import bar from './bar';

export {
foo,
bar
};
10 changes: 10 additions & 0 deletions test/function/renamed-arguments/_config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
var assert = require( 'assert' );

module.exports = {
description: 'function arguments are renamed as appropriate (#32)',
exports: function ( exports ) {
var obj = {};
assert.strictEqual( exports.foo(), 42 );
assert.strictEqual( exports.bar( obj ), obj );
}
};
5 changes: 5 additions & 0 deletions test/function/renamed-arguments/bar.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
function thing ( thing ) {
return thing;
}

export default thing;
5 changes: 5 additions & 0 deletions test/function/renamed-arguments/foo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
function thing () {
return 42;
}

export default thing;
7 changes: 7 additions & 0 deletions test/function/renamed-arguments/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import foo from './foo';
import bar from './bar';

export {
foo,
bar
};
14 changes: 14 additions & 0 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,20 @@ describe( 'rollup', function () {

unintendedError ? done( unintendedError ) : done();
}

else if ( config.result ) {
try {
config.result( code );
} catch ( err ) {
done( err );
}
}

else {
var expected = sander.readFileSync( '_expected.js' ).toString();
assert.equal( code.trim(), expected.trim() );
done();
}
});
});
});
Expand Down

0 comments on commit 0b92d52

Please sign in to comment.