Split export extensions into 2 different plugins, update stage presets (#6080)
This commit is contained in:
parent
6ab3b4c0e3
commit
c6a094a9d2
@ -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
|
## Example
|
||||||
|
|
||||||
```js
|
```js
|
||||||
export * as ns from 'mod';
|
|
||||||
export v from 'mod';
|
export v from 'mod';
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
npm install --save-dev babel-plugin-transform-export-extensions
|
npm install --save-dev babel-plugin-transform-export-default
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
@ -23,25 +22,24 @@ npm install --save-dev babel-plugin-transform-export-extensions
|
|||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"plugins": ["transform-export-extensions"]
|
"plugins": ["transform-export-default"]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Via CLI
|
### Via CLI
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
babel --plugins transform-export-extensions script.js
|
babel --plugins transform-export-default script.js
|
||||||
```
|
```
|
||||||
|
|
||||||
### Via Node API
|
### Via Node API
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
require("babel-core").transform("code", {
|
require("babel-core").transform("code", {
|
||||||
plugins: ["transform-export-extensions"]
|
plugins: ["transform-export-default"]
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
## References
|
## References
|
||||||
|
|
||||||
* ~~[Proposal: Additional export-from statements in ES7](https://github.com/leebyron/ecmascript-more-export-from)~~ (Withdrawn)
|
* ~~[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)
|
* [ECMAScript Proposal: export default from](https://github.com/leebyron/ecmascript-export-default-from)
|
||||||
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "babel-plugin-transform-export-extensions",
|
"name": "babel-plugin-transform-export-default",
|
||||||
"version": "7.0.0-alpha.19",
|
"version": "7.0.0-alpha.19",
|
||||||
"description": "Compile export extensions to ES2015",
|
"description": "Compile export default to ES2015",
|
||||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-export-extensions",
|
"repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-export-default",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
@ -2,13 +2,10 @@ import syntaxExportExtensions from "babel-plugin-syntax-export-extensions";
|
|||||||
|
|
||||||
export default function({ types: t }) {
|
export default function({ types: t }) {
|
||||||
function build(node, nodes, scope) {
|
function build(node, nodes, scope) {
|
||||||
const first = node.specifiers[0];
|
const hasNoExportDefault = node.specifiers.every(
|
||||||
if (
|
specifier => !t.isExportDefaultSpecifier(specifier),
|
||||||
!t.isExportNamespaceSpecifier(first) &&
|
);
|
||||||
!t.isExportDefaultSpecifier(first)
|
if (hasNoExportDefault) return;
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const specifier = node.specifiers.shift();
|
const specifier = node.specifiers.shift();
|
||||||
const uid = scope.generateUidIdentifier(specifier.exported.name);
|
const uid = scope.generateUidIdentifier(specifier.exported.name);
|
||||||
@ -19,7 +16,6 @@ export default function({ types: t }) {
|
|||||||
} else {
|
} else {
|
||||||
newSpecifier = t.importDefaultSpecifier(uid);
|
newSpecifier = t.importDefaultSpecifier(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
nodes.push(t.importDeclaration([newSpecifier], node.source));
|
nodes.push(t.importDeclaration([newSpecifier], node.source));
|
||||||
nodes.push(
|
nodes.push(
|
||||||
t.exportNamedDeclaration(null, [
|
t.exportNamedDeclaration(null, [
|
||||||
3
packages/babel-plugin-transform-export-default/test/fixtures/export-default/options.json
vendored
Normal file
3
packages/babel-plugin-transform-export-default/test/fixtures/export-default/options.json
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["external-helpers", "transform-export-default"]
|
||||||
|
}
|
||||||
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"plugins": ["external-helpers", "transform-export-extensions"]
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"plugins": ["external-helpers", "transform-export-extensions"]
|
|
||||||
}
|
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
src
|
||||||
|
test
|
||||||
|
*.log
|
||||||
45
packages/babel-plugin-transform-export-namespace/README.md
Normal file
45
packages/babel-plugin-transform-export-namespace/README.md
Normal file
@ -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)
|
||||||
@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
3
packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/options.json
vendored
Normal file
3
packages/babel-plugin-transform-export-namespace/test/fixtures/export-namespace/options.json
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["external-helpers", "transform-export-namespace"]
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
import runner from "babel-helper-plugin-test-runner";
|
||||||
|
|
||||||
|
runner(__dirname);
|
||||||
@ -9,7 +9,7 @@
|
|||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"babel-plugin-transform-decorators": "7.0.0-alpha.19",
|
"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-plugin-transform-optional-chaining": "7.0.0-alpha.19",
|
||||||
"babel-preset-stage-2": "7.0.0-alpha.19"
|
"babel-preset-stage-2": "7.0.0-alpha.19"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import presetStage2 from "babel-preset-stage-2";
|
import presetStage2 from "babel-preset-stage-2";
|
||||||
|
|
||||||
import transformDecorators from "babel-plugin-transform-decorators";
|
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";
|
import transformOptionalChaining from "babel-plugin-transform-optional-chaining";
|
||||||
|
|
||||||
export default function() {
|
export default function() {
|
||||||
@ -9,7 +9,7 @@ export default function() {
|
|||||||
presets: [presetStage2],
|
presets: [presetStage2],
|
||||||
plugins: [
|
plugins: [
|
||||||
transformDecorators,
|
transformDecorators,
|
||||||
transformExportExtensions,
|
transformExportDefault,
|
||||||
transformOptionalChaining,
|
transformOptionalChaining,
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|||||||
@ -9,6 +9,7 @@
|
|||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"babel-plugin-transform-function-sent": "7.0.0-alpha.19",
|
"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-plugin-transform-numeric-separator": "7.0.0-alpha.19",
|
||||||
"babel-preset-stage-3": "7.0.0-alpha.19"
|
"babel-preset-stage-3": "7.0.0-alpha.19"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,16 @@
|
|||||||
import presetStage3 from "babel-preset-stage-3";
|
import presetStage3 from "babel-preset-stage-3";
|
||||||
|
|
||||||
import transformFunctionSent from "babel-plugin-transform-function-sent";
|
import transformFunctionSent from "babel-plugin-transform-function-sent";
|
||||||
|
import transformExportNamespace from "babel-plugin-transform-export-namespace";
|
||||||
import transformNumericSeparator from "babel-plugin-transform-numeric-separator";
|
import transformNumericSeparator from "babel-plugin-transform-numeric-separator";
|
||||||
|
|
||||||
export default function() {
|
export default function() {
|
||||||
return {
|
return {
|
||||||
presets: [presetStage3],
|
presets: [presetStage3],
|
||||||
plugins: [transformFunctionSent, transformNumericSeparator],
|
plugins: [
|
||||||
|
transformFunctionSent,
|
||||||
|
transformExportNamespace,
|
||||||
|
transformNumericSeparator,
|
||||||
|
],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -853,6 +853,12 @@ babel-plugin-transform-export-extensions@7.0.0-alpha.18:
|
|||||||
dependencies:
|
dependencies:
|
||||||
babel-plugin-syntax-export-extensions "7.0.0-alpha.18"
|
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:
|
babel-plugin-transform-flow-strip-types@7.0.0-alpha.18:
|
||||||
version "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"
|
resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-7.0.0-alpha.18.tgz#1a15c0b0496ea4c7991b43d50b8009412a5f7364"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user