From e3458796dc4c1300d819d11f8707febece621011 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 11 Aug 2017 21:43:17 -0400 Subject: [PATCH 1/3] reinstate rollup.VERSION --- src/browser-entry.js | 3 ++- src/node-entry.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/browser-entry.js b/src/browser-entry.js index f2f98fb1424..6921ff39a60 100644 --- a/src/browser-entry.js +++ b/src/browser-entry.js @@ -1 +1,2 @@ -export { default as rollup } from './rollup/index.js'; \ No newline at end of file +export { default as rollup } from './rollup/index.js'; +export { version as VERSION } from '../package.json'; \ No newline at end of file diff --git a/src/node-entry.js b/src/node-entry.js index 7845ad0145c..283686a9652 100644 --- a/src/node-entry.js +++ b/src/node-entry.js @@ -1,2 +1,3 @@ export { default as rollup } from './rollup/index.js'; -export { default as watch } from './watch/index.js'; \ No newline at end of file +export { default as watch } from './watch/index.js'; +export { version as VERSION } from '../package.json'; \ No newline at end of file From adef43fd296ba6c11e25fb9a111a9ebf49512658 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 11 Aug 2017 21:50:02 -0400 Subject: [PATCH 2/3] oops --- package-lock.json | 34 +--------------------------------- package.json | 1 - rollup.config.js | 11 +++-------- 3 files changed, 4 insertions(+), 42 deletions(-) diff --git a/package-lock.json b/package-lock.json index ae729fbcff0..f215871b9d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "rollup", - "version": "0.46.2", + "version": "0.46.3", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -3898,38 +3898,6 @@ "resolve": "1.4.0" } }, - "rollup-plugin-replace": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-replace/-/rollup-plugin-replace-1.1.1.tgz", - "integrity": "sha1-OWMV3tBQps5DuVGKiGo/YO+x6jM=", - "dev": true, - "requires": { - "magic-string": "0.15.2", - "minimatch": "3.0.4", - "rollup-pluginutils": "1.5.2" - }, - "dependencies": { - "magic-string": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.15.2.tgz", - "integrity": "sha1-BoHXOIdBu8Ot2qZQYJkmJMbAnpw=", - "dev": true, - "requires": { - "vlq": "0.2.2" - } - }, - "rollup-pluginutils": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz", - "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=", - "dev": true, - "requires": { - "estree-walker": "0.2.1", - "minimatch": "3.0.4" - } - } - } - }, "rollup-plugin-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/rollup-plugin-string/-/rollup-plugin-string-2.0.2.tgz", diff --git a/package.json b/package.json index af2e0574c73..221069aca51 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,6 @@ "rollup-plugin-commonjs": "^8.0.2", "rollup-plugin-json": "^2.3.0", "rollup-plugin-node-resolve": "^3.0.0", - "rollup-plugin-replace": "^1.1.0", "rollup-plugin-string": "^2.0.0", "rollup-pluginutils": "^2.0.1", "rollup-watch": "^4.3.1", diff --git a/rollup.config.js b/rollup.config.js index 396e71e2ed9..0e33547bfa2 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -2,7 +2,7 @@ import { readFileSync } from 'fs'; import buble from 'rollup-plugin-buble'; import nodeResolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; -import replace from 'rollup-plugin-replace'; +import json from 'rollup-plugin-json'; var pkg = JSON.parse( readFileSync( 'package.json', 'utf-8' ) ); @@ -22,6 +22,8 @@ var banner = readFileSync( 'src/banner.js', 'utf-8' ) export default { entry: 'src/node-entry.js', plugins: [ + json(), + buble({ include: [ 'src/**', 'node_modules/acorn/**' ], target: { @@ -33,13 +35,6 @@ export default { jsnext: true }), - replace({ - include: 'src/rollup.js', - delimiters: [ '<@', '@>' ], - sourceMap: true, - values: { VERSION: pkg.version } - }), - commonjs() ], external: [ From 20bff7d205b9ed6b569b827d641b9e5646488866 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 11 Aug 2017 22:17:08 -0400 Subject: [PATCH 3/3] fix export-from declarations --- package-lock.json | 32 ++++++++++++ package.json | 1 + src/finalisers/es.js | 52 ++++++++++++------- .../reexports-name-from-external/_config.js | 9 ++++ .../_expected/amd.js | 9 ++++ .../_expected/cjs.js | 9 ++++ .../_expected/es.js | 1 + .../_expected/iife.js | 10 ++++ .../_expected/umd.js | 11 ++++ .../reexports-name-from-external/main.js | 1 + 10 files changed, 117 insertions(+), 18 deletions(-) create mode 100644 test/form/samples/reexports-name-from-external/_config.js create mode 100644 test/form/samples/reexports-name-from-external/_expected/amd.js create mode 100644 test/form/samples/reexports-name-from-external/_expected/cjs.js create mode 100644 test/form/samples/reexports-name-from-external/_expected/es.js create mode 100644 test/form/samples/reexports-name-from-external/_expected/iife.js create mode 100644 test/form/samples/reexports-name-from-external/_expected/umd.js create mode 100644 test/form/samples/reexports-name-from-external/main.js diff --git a/package-lock.json b/package-lock.json index f215871b9d3..9e6a7c6906f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3898,6 +3898,38 @@ "resolve": "1.4.0" } }, + "rollup-plugin-replace": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-replace/-/rollup-plugin-replace-1.1.1.tgz", + "integrity": "sha1-OWMV3tBQps5DuVGKiGo/YO+x6jM=", + "dev": true, + "requires": { + "magic-string": "0.15.2", + "minimatch": "3.0.4", + "rollup-pluginutils": "1.5.2" + }, + "dependencies": { + "magic-string": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.15.2.tgz", + "integrity": "sha1-BoHXOIdBu8Ot2qZQYJkmJMbAnpw=", + "dev": true, + "requires": { + "vlq": "0.2.2" + } + }, + "rollup-pluginutils": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz", + "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=", + "dev": true, + "requires": { + "estree-walker": "0.2.1", + "minimatch": "3.0.4" + } + } + } + }, "rollup-plugin-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/rollup-plugin-string/-/rollup-plugin-string-2.0.2.tgz", diff --git a/package.json b/package.json index 221069aca51..4d97be9e8ea 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "rollup-plugin-commonjs": "^8.0.2", "rollup-plugin-json": "^2.3.0", "rollup-plugin-node-resolve": "^3.0.0", + "rollup-plugin-replace": "^1.1.1", "rollup-plugin-string": "^2.0.0", "rollup-pluginutils": "^2.0.1", "rollup-watch": "^4.3.1", diff --git a/src/finalisers/es.js b/src/finalisers/es.js index 30cdded0373..18d226f177d 100644 --- a/src/finalisers/es.js +++ b/src/finalisers/es.js @@ -65,35 +65,51 @@ export default function es ( bundle, magicString, { intro, outro } ) { const module = bundle.entryModule; + const exportInternalSpecifiers = []; + const exportExternalSpecifiers = new Map(); const exportAllDeclarations = []; - const specifiers = module.getExports().concat( module.getReexports() ) + module.getExports() .filter( notDefault ) - .map( name => { + .forEach( name => { const declaration = module.traceExport( name ); const rendered = declaration.getName( true ); + exportInternalSpecifiers.push( rendered === name ? name : `${rendered} as ${name}` ); + }); - if ( name[0] === '*' ) { - // export * from 'external' - exportAllDeclarations.push( `export * from '${name.slice( 1 )}';` ); - return; - } + module.getReexports() + .filter( notDefault ) + .forEach( name => { + const declaration = module.traceExport( name ); - return rendered === name ? - name : - `${rendered} as ${name}`; - }) - .filter( Boolean ); + if ( declaration.isExternal ) { + if ( name[0] === '*' ) { + // export * from 'external' + exportAllDeclarations.push( `export * from '${name.slice( 1 )}';` ); + } else { + if ( !exportExternalSpecifiers.has( declaration.module.id ) ) exportExternalSpecifiers.set( declaration.module.id, [] ); + exportExternalSpecifiers.get( declaration.module.id ).push( name ); + } - let exportBlock = specifiers.length ? `export { ${specifiers.join(', ')} };` : ''; + return; + } - const defaultExport = module.exports.default || module.reexports.default; - if ( defaultExport ) { - exportBlock += `export default ${module.traceExport( 'default' ).getName( true )};`; + const rendered = declaration.getName( true ); + exportInternalSpecifiers.push( rendered === name ? name : `${rendered} as ${name}` ); + }); + + const exportBlock = []; + if ( exportInternalSpecifiers.length ) exportBlock.push( `export { ${exportInternalSpecifiers.join(', ')} };` ); + if ( module.exports.default || module.reexports.default ) exportBlock.push( `export default ${module.traceExport( 'default' ).getName( true )};` ); + if ( exportAllDeclarations.length ) exportBlock.push( exportAllDeclarations.join( '\n' ) ); + if ( exportExternalSpecifiers.size ) { + exportExternalSpecifiers.forEach( ( specifiers, id ) => { + exportBlock.push( `export { ${specifiers.join( ', ' )} } from '${id}';` ); + }); } - if ( exportBlock ) magicString.append( '\n\n' + exportBlock.trim() ); - if ( exportAllDeclarations.length ) magicString.append( '\n\n' + exportAllDeclarations.join( '\n' ).trim() ); + if ( exportBlock.length ) magicString.append( '\n\n' + exportBlock.join( '\n' ).trim() ); + if ( outro ) magicString.append( outro ); return magicString.trim(); diff --git a/test/form/samples/reexports-name-from-external/_config.js b/test/form/samples/reexports-name-from-external/_config.js new file mode 100644 index 00000000000..fd6b8f083d2 --- /dev/null +++ b/test/form/samples/reexports-name-from-external/_config.js @@ -0,0 +1,9 @@ +const assert = require( 'assert' ); + +module.exports = { + description: 're-exports name from external module', + options: { + external: [ 'external' ], + moduleName: 'myBundle' + } +}; diff --git a/test/form/samples/reexports-name-from-external/_expected/amd.js b/test/form/samples/reexports-name-from-external/_expected/amd.js new file mode 100644 index 00000000000..85945ba5c2b --- /dev/null +++ b/test/form/samples/reexports-name-from-external/_expected/amd.js @@ -0,0 +1,9 @@ +define(['exports', 'external'], function (exports, external) { 'use strict'; + + + + exports.foo = external.foo; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/form/samples/reexports-name-from-external/_expected/cjs.js b/test/form/samples/reexports-name-from-external/_expected/cjs.js new file mode 100644 index 00000000000..7bc73b2ab49 --- /dev/null +++ b/test/form/samples/reexports-name-from-external/_expected/cjs.js @@ -0,0 +1,9 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var external = require('external'); + + + +exports.foo = external.foo; diff --git a/test/form/samples/reexports-name-from-external/_expected/es.js b/test/form/samples/reexports-name-from-external/_expected/es.js new file mode 100644 index 00000000000..397e2e7780c --- /dev/null +++ b/test/form/samples/reexports-name-from-external/_expected/es.js @@ -0,0 +1 @@ +export { foo } from 'external'; diff --git a/test/form/samples/reexports-name-from-external/_expected/iife.js b/test/form/samples/reexports-name-from-external/_expected/iife.js new file mode 100644 index 00000000000..9ec202abcd8 --- /dev/null +++ b/test/form/samples/reexports-name-from-external/_expected/iife.js @@ -0,0 +1,10 @@ +var myBundle = (function (exports,external) { + 'use strict'; + + + + exports.foo = external.foo; + + return exports; + +}({},external)); diff --git a/test/form/samples/reexports-name-from-external/_expected/umd.js b/test/form/samples/reexports-name-from-external/_expected/umd.js new file mode 100644 index 00000000000..3ec9a961940 --- /dev/null +++ b/test/form/samples/reexports-name-from-external/_expected/umd.js @@ -0,0 +1,11 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('external')) : + typeof define === 'function' && define.amd ? define(['exports', 'external'], factory) : + (factory((global.myBundle = {}),global.external)); +}(this, (function (exports,external) { 'use strict'; + + exports.foo = external.foo; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); diff --git a/test/form/samples/reexports-name-from-external/main.js b/test/form/samples/reexports-name-from-external/main.js new file mode 100644 index 00000000000..8986665d702 --- /dev/null +++ b/test/form/samples/reexports-name-from-external/main.js @@ -0,0 +1 @@ +export { foo } from 'external'; \ No newline at end of file