From 366b414151542e4a8de1e6ba0d4ba0e560a0e78a Mon Sep 17 00:00:00 2001 From: Rich-Harris Date: Sun, 31 Jan 2016 12:38:15 -0500 Subject: [PATCH] correctly rewrite exported var declarations (fixes #484) --- src/Module.js | 7 ++++++- test/function/disappearing-exported-value/_config.js | 9 +++++++++ test/function/disappearing-exported-value/answer.js | 2 ++ test/function/disappearing-exported-value/main.js | 8 ++++++++ 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 test/function/disappearing-exported-value/_config.js create mode 100644 test/function/disappearing-exported-value/answer.js create mode 100644 test/function/disappearing-exported-value/main.js diff --git a/src/Module.js b/src/Module.js index 0e42f770efb..d48e565c47d 100644 --- a/src/Module.js +++ b/src/Module.js @@ -440,7 +440,12 @@ export default class Module { const declaration = this.declarations[ declarator.id.name ]; if ( declaration.exportName && declaration.isReassigned ) { // `var foo = ...` becomes `exports.foo = ...` - magicString.remove( statement.start, declarator.init ? declarator.start : statement.next ); + if ( declarator.init ) { + magicString.overwrite( statement.start, declarator.init.start, `exports.${declaration.exportName} = ` ); + } else { + magicString.remove( statement.start, declarator.init ? declarator.start : statement.next ); + } + return; } } diff --git a/test/function/disappearing-exported-value/_config.js b/test/function/disappearing-exported-value/_config.js new file mode 100644 index 00000000000..534c5ae06ba --- /dev/null +++ b/test/function/disappearing-exported-value/_config.js @@ -0,0 +1,9 @@ +var assert = require( 'assert' ); + +module.exports = { + description: 'exported values do not mysteriously disappear (#484)', + exports: function ( exports ) { + assert.equal( exports.exportedAnswer, 42 ); + assert.equal( exports.foo(), 42 ); + } +}; diff --git a/test/function/disappearing-exported-value/answer.js b/test/function/disappearing-exported-value/answer.js new file mode 100644 index 00000000000..1cdee138152 --- /dev/null +++ b/test/function/disappearing-exported-value/answer.js @@ -0,0 +1,2 @@ +var answer = 42; +export { answer }; diff --git a/test/function/disappearing-exported-value/main.js b/test/function/disappearing-exported-value/main.js new file mode 100644 index 00000000000..260980c371d --- /dev/null +++ b/test/function/disappearing-exported-value/main.js @@ -0,0 +1,8 @@ +import { answer as importedAnswer } from './answer.js'; +export { answer as exportedAnswer } from './answer.js'; + +export function foo () { + var value; + value = importedAnswer; + return value; +}