diff --git a/packages/babel-plugin-transform-export-extensions/.npmignore b/packages/babel-plugin-transform-export-default/.npmignore similarity index 100% rename from packages/babel-plugin-transform-export-extensions/.npmignore rename to packages/babel-plugin-transform-export-default/.npmignore diff --git a/packages/babel-plugin-transform-export-extensions/README.md b/packages/babel-plugin-transform-export-default/README.md similarity index 54% rename from packages/babel-plugin-transform-export-extensions/README.md rename to packages/babel-plugin-transform-export-default/README.md index 6014dc4c53..231c5b8f76 100644 --- a/packages/babel-plugin-transform-export-extensions/README.md +++ b/packages/babel-plugin-transform-export-default/README.md @@ -1,18 +1,17 @@ -# babel-plugin-transform-export-extensions +# babel-plugin-transform-export-default -> Compile additional export-from statements to ES2015 +> Compile export-default-from statements to ES2015 ## Example ```js -export * as ns from 'mod'; export v from 'mod'; ``` ## Installation ```sh -npm install --save-dev babel-plugin-transform-export-extensions +npm install --save-dev babel-plugin-transform-export-default ``` ## Usage @@ -23,25 +22,24 @@ npm install --save-dev babel-plugin-transform-export-extensions ```json { - "plugins": ["transform-export-extensions"] + "plugins": ["transform-export-default"] } ``` ### Via CLI ```sh -babel --plugins transform-export-extensions script.js +babel --plugins transform-export-default script.js ``` ### Via Node API ```javascript require("babel-core").transform("code", { - plugins: ["transform-export-extensions"] + plugins: ["transform-export-default"] }); ``` ## References * ~~[Proposal: Additional export-from statements in ES7](https://github.com/leebyron/ecmascript-more-export-from)~~ (Withdrawn) -* [ECMAScript Proposal: export ns from](https://github.com/leebyron/ecmascript-export-ns-from) * [ECMAScript Proposal: export default from](https://github.com/leebyron/ecmascript-export-default-from) diff --git a/packages/babel-plugin-transform-export-extensions/package.json b/packages/babel-plugin-transform-export-default/package.json similarity index 69% rename from packages/babel-plugin-transform-export-extensions/package.json rename to packages/babel-plugin-transform-export-default/package.json index aa2b9a8b43..3df314f912 100644 --- a/packages/babel-plugin-transform-export-extensions/package.json +++ b/packages/babel-plugin-transform-export-default/package.json @@ -1,8 +1,8 @@ { - "name": "babel-plugin-transform-export-extensions", + "name": "babel-plugin-transform-export-default", "version": "7.0.0-alpha.19", - "description": "Compile export extensions to ES2015", - "repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-export-extensions", + "description": "Compile export default to ES2015", + "repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-export-default", "license": "MIT", "main": "lib/index.js", "keywords": [ diff --git a/packages/babel-plugin-transform-export-extensions/src/index.js b/packages/babel-plugin-transform-export-default/src/index.js similarity index 86% rename from packages/babel-plugin-transform-export-extensions/src/index.js rename to packages/babel-plugin-transform-export-default/src/index.js index ada6db115f..87b1320b47 100644 --- a/packages/babel-plugin-transform-export-extensions/src/index.js +++ b/packages/babel-plugin-transform-export-default/src/index.js @@ -2,13 +2,10 @@ import syntaxExportExtensions from "babel-plugin-syntax-export-extensions"; export default function({ types: t }) { function build(node, nodes, scope) { - const first = node.specifiers[0]; - if ( - !t.isExportNamespaceSpecifier(first) && - !t.isExportDefaultSpecifier(first) - ) { - return; - } + const hasNoExportDefault = node.specifiers.every( + specifier => !t.isExportDefaultSpecifier(specifier), + ); + if (hasNoExportDefault) return; const specifier = node.specifiers.shift(); const uid = scope.generateUidIdentifier(specifier.exported.name); @@ -19,7 +16,6 @@ export default function({ types: t }) { } else { newSpecifier = t.importDefaultSpecifier(uid); } - nodes.push(t.importDeclaration([newSpecifier], node.source)); nodes.push( t.exportNamedDeclaration(null, [ diff --git a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/default-compound-es6/actual.js b/packages/babel-plugin-transform-export-default/test/fixtures/export-default/default-compound-es6/actual.js similarity index 100% rename from packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/default-compound-es6/actual.js rename to packages/babel-plugin-transform-export-default/test/fixtures/export-default/default-compound-es6/actual.js diff --git a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/default-compound-es6/expected.js b/packages/babel-plugin-transform-export-default/test/fixtures/export-default/default-compound-es6/expected.js similarity index 100% rename from packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/default-compound-es6/expected.js rename to packages/babel-plugin-transform-export-default/test/fixtures/export-default/default-compound-es6/expected.js diff --git a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/default-es6/actual.js b/packages/babel-plugin-transform-export-default/test/fixtures/export-default/default-es6/actual.js similarity index 100% rename from packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/default-es6/actual.js rename to packages/babel-plugin-transform-export-default/test/fixtures/export-default/default-es6/actual.js diff --git a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/default-es6/expected.js b/packages/babel-plugin-transform-export-default/test/fixtures/export-default/default-es6/expected.js similarity index 100% rename from packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/default-es6/expected.js rename to packages/babel-plugin-transform-export-default/test/fixtures/export-default/default-es6/expected.js diff --git a/packages/babel-plugin-transform-export-default/test/fixtures/export-default/options.json b/packages/babel-plugin-transform-export-default/test/fixtures/export-default/options.json new file mode 100644 index 0000000000..080fa9860d --- /dev/null +++ b/packages/babel-plugin-transform-export-default/test/fixtures/export-default/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["external-helpers", "transform-export-default"] +} diff --git a/packages/babel-plugin-transform-export-extensions/test/index.js b/packages/babel-plugin-transform-export-default/test/index.js similarity index 100% rename from packages/babel-plugin-transform-export-extensions/test/index.js rename to packages/babel-plugin-transform-export-default/test/index.js diff --git a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-default/options.json b/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-default/options.json deleted file mode 100644 index 26dfe134f4..0000000000 --- a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-default/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "plugins": ["external-helpers", "transform-export-extensions"] -} diff --git a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/options.json b/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/options.json deleted file mode 100644 index 26dfe134f4..0000000000 --- a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "plugins": ["external-helpers", "transform-export-extensions"] -} diff --git a/packages/babel-plugin-transform-export-namespace/.npmignore b/packages/babel-plugin-transform-export-namespace/.npmignore new file mode 100644 index 0000000000..f980694583 --- /dev/null +++ b/packages/babel-plugin-transform-export-namespace/.npmignore @@ -0,0 +1,3 @@ +src +test +*.log diff --git a/packages/babel-plugin-transform-export-namespace/README.md b/packages/babel-plugin-transform-export-namespace/README.md new file mode 100644 index 0000000000..1ba261942b --- /dev/null +++ b/packages/babel-plugin-transform-export-namespace/README.md @@ -0,0 +1,45 @@ +# babel-plugin-transform-export-namespace + +> Compile export-ns-from statements to ES2015 + +## Example + +```js +export * as ns from 'mod'; +``` + +## Installation + +```sh +npm install --save-dev babel-plugin-transform-export-namespace +``` + +## Usage + +### Via `.babelrc` (Recommended) + +**.babelrc** + +```json +{ + "plugins": ["transform-export-namespace"] +} +``` + +### Via CLI + +```sh +babel --plugins transform-export-namespace script.js +``` + +### Via Node API + +```javascript +require("babel-core").transform("code", { + plugins: ["transform-export-namespace"] +}); +``` +## References + +* ~~[Proposal: Additional export-from statements in ES7](https://github.com/leebyron/ecmascript-more-export-from)~~ (Withdrawn) +* [ECMAScript Proposal: export ns from](https://github.com/leebyron/ecmascript-export-ns-from) diff --git a/packages/babel-plugin-transform-export-namespace/package.json b/packages/babel-plugin-transform-export-namespace/package.json new file mode 100644 index 0000000000..de064ff140 --- /dev/null +++ b/packages/babel-plugin-transform-export-namespace/package.json @@ -0,0 +1,17 @@ +{ + "name": "babel-plugin-transform-export-namespace", + "version": "7.0.0-alpha.19", + "description": "Compile export namespace to ES2015", + "repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-export-namespace", + "license": "MIT", + "main": "lib/index.js", + "keywords": [ + "babel-plugin" + ], + "dependencies": { + "babel-plugin-syntax-export-extensions": "7.0.0-alpha.19" + }, + "devDependencies": { + "babel-helper-plugin-test-runner": "7.0.0-alpha.19" + } +} diff --git a/packages/babel-plugin-transform-export-namespace/src/index.js b/packages/babel-plugin-transform-export-namespace/src/index.js new file mode 100644 index 0000000000..c9306c00f6 --- /dev/null +++ b/packages/babel-plugin-transform-export-namespace/src/index.js @@ -0,0 +1,46 @@ +import syntaxExportExtensions from "babel-plugin-syntax-export-extensions"; + +export default function({ types: t }) { + function build(node, nodes, scope) { + const hasNoExportNs = node.specifiers.every( + specifier => !t.isExportNamespaceSpecifier(specifier), + ); + if (hasNoExportNs) return; + + const specifier = node.specifiers.shift(); + const uid = scope.generateUidIdentifier(specifier.exported.name); + + let newSpecifier; + if (t.isExportNamespaceSpecifier(specifier)) { + newSpecifier = t.importNamespaceSpecifier(uid); + } else { + newSpecifier = t.importDefaultSpecifier(uid); + } + nodes.push(t.importDeclaration([newSpecifier], node.source)); + nodes.push( + t.exportNamedDeclaration(null, [ + t.exportSpecifier(uid, specifier.exported), + ]), + ); + + build(node, nodes, scope); + } + + return { + inherits: syntaxExportExtensions, + + visitor: { + ExportNamedDeclaration(path) { + const { node, scope } = path; + const nodes = []; + build(node, nodes, scope); + if (!nodes.length) return; + + if (node.specifiers.length >= 1) { + nodes.push(node); + } + path.replaceWithMultiple(nodes); + }, + }, + }; +} diff --git a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-compound-es6/actual.js b/packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/namespace-compound-es6/actual.js similarity index 100% rename from packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-compound-es6/actual.js rename to packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/namespace-compound-es6/actual.js diff --git a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-compound-es6/expected.js b/packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/namespace-compound-es6/expected.js similarity index 100% rename from packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-compound-es6/expected.js rename to packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/namespace-compound-es6/expected.js diff --git a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-default/actual.js b/packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/namespace-default/actual.js similarity index 100% rename from packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-default/actual.js rename to packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/namespace-default/actual.js diff --git a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-default/expected.js b/packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/namespace-default/expected.js similarity index 100% rename from packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-default/expected.js rename to packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/namespace-default/expected.js diff --git a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-es6/actual.js b/packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/namespace-es6/actual.js similarity index 100% rename from packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-es6/actual.js rename to packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/namespace-es6/actual.js diff --git a/packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-es6/expected.js b/packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/namespace-es6/expected.js similarity index 100% rename from packages/babel-plugin-transform-export-extensions/test/fixtures/export-extensions/namespace-es6/expected.js rename to packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/namespace-es6/expected.js diff --git a/packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/options.json b/packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/options.json new file mode 100644 index 0000000000..f38979ed16 --- /dev/null +++ b/packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["external-helpers", "transform-export-namespace"] +} diff --git a/packages/babel-plugin-transform-export-namespace/test/index.js b/packages/babel-plugin-transform-export-namespace/test/index.js new file mode 100644 index 0000000000..09cfbc31f5 --- /dev/null +++ b/packages/babel-plugin-transform-export-namespace/test/index.js @@ -0,0 +1,3 @@ +import runner from "babel-helper-plugin-test-runner"; + +runner(__dirname); diff --git a/packages/babel-preset-stage-1/package.json b/packages/babel-preset-stage-1/package.json index 46545d43ac..6a3533c95b 100644 --- a/packages/babel-preset-stage-1/package.json +++ b/packages/babel-preset-stage-1/package.json @@ -9,7 +9,7 @@ "main": "lib/index.js", "dependencies": { "babel-plugin-transform-decorators": "7.0.0-alpha.19", - "babel-plugin-transform-export-extensions": "7.0.0-alpha.19", + "babel-plugin-transform-export-default": "7.0.0-alpha.19", "babel-plugin-transform-optional-chaining": "7.0.0-alpha.19", "babel-preset-stage-2": "7.0.0-alpha.19" } diff --git a/packages/babel-preset-stage-1/src/index.js b/packages/babel-preset-stage-1/src/index.js index 8471fc958b..fafec46d0f 100644 --- a/packages/babel-preset-stage-1/src/index.js +++ b/packages/babel-preset-stage-1/src/index.js @@ -1,7 +1,7 @@ import presetStage2 from "babel-preset-stage-2"; import transformDecorators from "babel-plugin-transform-decorators"; -import transformExportExtensions from "babel-plugin-transform-export-extensions"; +import transformExportDefault from "babel-plugin-transform-export-default"; import transformOptionalChaining from "babel-plugin-transform-optional-chaining"; export default function() { @@ -9,7 +9,7 @@ export default function() { presets: [presetStage2], plugins: [ transformDecorators, - transformExportExtensions, + transformExportDefault, transformOptionalChaining, ], }; diff --git a/packages/babel-preset-stage-2/package.json b/packages/babel-preset-stage-2/package.json index 307bff08e4..7d0f8b5963 100644 --- a/packages/babel-preset-stage-2/package.json +++ b/packages/babel-preset-stage-2/package.json @@ -9,6 +9,7 @@ "main": "lib/index.js", "dependencies": { "babel-plugin-transform-function-sent": "7.0.0-alpha.19", + "babel-plugin-transform-export-namespace": "7.0.0-alpha.19", "babel-plugin-transform-numeric-separator": "7.0.0-alpha.19", "babel-preset-stage-3": "7.0.0-alpha.19" } diff --git a/packages/babel-preset-stage-2/src/index.js b/packages/babel-preset-stage-2/src/index.js index 6bab2fdb3b..165bad24cc 100644 --- a/packages/babel-preset-stage-2/src/index.js +++ b/packages/babel-preset-stage-2/src/index.js @@ -1,11 +1,16 @@ import presetStage3 from "babel-preset-stage-3"; import transformFunctionSent from "babel-plugin-transform-function-sent"; +import transformExportNamespace from "babel-plugin-transform-export-namespace"; import transformNumericSeparator from "babel-plugin-transform-numeric-separator"; export default function() { return { presets: [presetStage3], - plugins: [transformFunctionSent, transformNumericSeparator], + plugins: [ + transformFunctionSent, + transformExportNamespace, + transformNumericSeparator, + ], }; } diff --git a/yarn.lock b/yarn.lock index 7f28248b3c..ed50496391 100644 --- a/yarn.lock +++ b/yarn.lock @@ -853,6 +853,12 @@ babel-plugin-transform-export-extensions@7.0.0-alpha.18: dependencies: babel-plugin-syntax-export-extensions "7.0.0-alpha.18" +babel-plugin-transform-export-extensions@7.0.0-alpha.19: + version "7.0.0-alpha.19" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-7.0.0-alpha.19.tgz#664ed4cd942838bee1287ff81588905614b644aa" + dependencies: + babel-plugin-syntax-export-extensions "7.0.0-alpha.19" + babel-plugin-transform-flow-strip-types@7.0.0-alpha.18: version "7.0.0-alpha.18" resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-7.0.0-alpha.18.tgz#1a15c0b0496ea4c7991b43d50b8009412a5f7364"