Skip to content

Commit

Permalink
Split export extensions into 2 different plugins, update stage presets (
Browse files Browse the repository at this point in the history
  • Loading branch information
echo304 authored and hzoo committed Aug 19, 2017
1 parent 6ab3b4c commit c6a094a
Show file tree
Hide file tree
Showing 29 changed files with 149 additions and 29 deletions.
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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)
Original file line number Diff line number Diff line change
@@ -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": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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, [
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"plugins": ["external-helpers", "transform-export-default"]
}

This file was deleted.

This file was deleted.

3 changes: 3 additions & 0 deletions packages/babel-plugin-transform-export-namespace/.npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
src
test
*.log
45 changes: 45 additions & 0 deletions packages/babel-plugin-transform-export-namespace/README.md
Original file line number Diff line number Diff line change
@@ -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)
17 changes: 17 additions & 0 deletions packages/babel-plugin-transform-export-namespace/package.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
46 changes: 46 additions & 0 deletions packages/babel-plugin-transform-export-namespace/src/index.js
Original file line number Diff line number Diff line change
@@ -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);
},
},
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"plugins": ["external-helpers", "transform-export-namespace"]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import runner from "babel-helper-plugin-test-runner";

runner(__dirname);
2 changes: 1 addition & 1 deletion packages/babel-preset-stage-1/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
Expand Down
4 changes: 2 additions & 2 deletions packages/babel-preset-stage-1/src/index.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
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() {
return {
presets: [presetStage2],
plugins: [
transformDecorators,
transformExportExtensions,
transformExportDefault,
transformOptionalChaining,
],
};
Expand Down
1 change: 1 addition & 0 deletions packages/babel-preset-stage-2/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
Expand Down
7 changes: 6 additions & 1 deletion packages/babel-preset-stage-2/src/index.js
Original file line number Diff line number Diff line change
@@ -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,
],
};
}
6 changes: 6 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down

0 comments on commit c6a094a

Please sign in to comment.